Consider minced oaths.
I concur with other answers that recommend making up setting-specific curses. Doing so will achieve your objective (i.e., in-world vulgarity without real-world profanity) while also making the world feel lived-in. I routinely do this as both player and DM. It takes a bit of forethought to decide what the people of your setting would consider obscene or blasphemous, but once you've laid that groundwork, the act of spitting your made-up curses should require minimal effort in real-time.
To that end, there is an additional measure you might consider: minced oaths.
The history of English includes numerous real-world made-up curses. If you've read or watched historical British fiction, you might have encountered some of them: Zounds! Strewth! Gadzooks! These are words that real-world people made up to fig-leaf their exclamations of what were, for the time, blasphemies under Christian doctrine. For example, "Gadzooks" was a chopped-up (hence minced) contraction of "By God's Hooks" -- an act of swearing an oath upon the nails in the Christian cross. If you lived in a time when blaspheming in front of a priest could get you subjected to corporal punishment, you'd have a strong incentive to make sure the worst words don't slip out in a heated moment.
Those old-fashioned-sounding minced oaths are hardly the only ones English has retained. Modern English is full of them. We've long used "gosh" or "golly" instead of "god," and "heck" instead of "hell." British English developed the slang "bloody" in place of "By Our Lady" (another Christian reference). Even the modern social-media use of "af" for "as f---" is a kind of minced oath.
The point being, not everyone inclined to curse reaches for the worst paint-stripping words available every time. Some will try to exercise restraint. If you pepper your setting with less vulgar versions of curses, it'll give the full-fat versions of those curses much greater dramatic impact when someone finally drops your in-world equivalent of an "f-bomb."
Commenters have requested examples. I didn't think to provide any because the context necessary to understand any particular example is somewhat involved. It's sort of a "you had to be there" thing. Plus, it
might be beyond the scope of the question, which, after all, does not specify a setting. But here goes.
In a Forgotten Realms Descent into Avernus campaign a couple years ago, I played a paladin of Torm, a real Captain America type. Torm is a Faerûnian deity of duty, loyalty, and sacrifice. I imagined that Torm's most devout might be so committed to their service that romantic relationships and marriage, while not forbidden, would be a practical impossibility. From there I imagined that "wedded to Torm" might be delicate way of saying so, along the lines of "married to the job." Conversely, exclaiming "Torm's wife!" could be deeply sacrilegious -- it's heresy to say Torm ever took a spouse when dogma doesn't say so, and it implies Torm himself might shirk his divine duties for the sake of personal love. Unthinkable!
Naturally, my uptight paladin wouldn't condone blasphemy, so whenever he felt the urge to curse in disbelief, he'd start with "Torm..." and then bite it back, turning it into "torment and strife!" Until, that is, he found out that the campaign would be taking him literally into the mouth of hell, and the full "Torm's wife!" finally tumbled out.
I've also used the curses naeth and naed from Ed Greenwood Presents Elminster's Forgotten Realms (p. 16) this way in Realms games. Naed is "a stronger form of 'naeth'" -- so it's easy to treat them as English speakers might use "crud" and "shit," one being more acceptable in polite company.