In a medium saucepan over medium-high heat, melt coconut oil. Add shallots, ginger, garlic, lemongrass and serrano chiles and sauté them until you can really smell them, about 5 minutes.
Add sesame seeds, coriander seeds, cumin seeds, star anise and cinnamon stick and toast them, stirring, for 5 minutes. Add coconut milk and bring to a boil. Knock heat down to a simmer and cook for 30 minutes.
Hand-crush lime leaves, then add them, along with lime peels, to broth and cook until they turn drab, 3 minutes. Immediately strain broth through a chinois (or finemesh strainer) into a clean pot, then stir in white soy sauce; cover pot and keep it warm while you grill the fish.
Pat fish dry inside and out. With your knife at a 45-degree angle, make three deep scores down to the rib, on each side of the fish, from top fin to belly. This will ensure it cooks through on the grill. Brush exterior with canola oil and season it all over, inside and out, with salt.
Build a medium-hot fire in your grill or heat a grill pan on stovetop to medium-high. Add fish and grill it, using a fish spatula to flip it and cook it on all sides, including top and bottom of the head, until skin is crispy and meat is white all the way through, 10 to 15 minutes total.
Cut baby bok choy in half and rinse out sand. Add bok choy to strained curry; bring curry back to a simmer over medium heat and cook bok choy until it’s just wilted, about 5 minutes. Place fish in a shallow serving bowl, ladle curry and bok choy all over it and serve with rice on the side.