Backend API Issue: Special Characters in MongoDB URI

Every DevOps journey has its hiccups—here’s one I ran into while deploying my backend API.
The Problem
My FastAPI backend needed to connect to MongoDB using a URI like this:
mongodb+srv://username:password@cluster.mongodb.net/mydb?retryWrites=true&w=majority
But this URI has special characters like &, which caused issues during deployment via CircleCI. When injecting the URI into the systemd service file using awk or sed, the special characters were getting misinterpreted—so the backend failed to connect.
What Was Happening
Originally, I tried writing the MongoDB URI directly into the service file during deployment. This looked something like:
ExecStart=/usr/bin/env MONGODB_URI=mongodb+srv://...&w=majority uvicorn main:app
But shell tools like awk and sed didn’t play nice with the &, breaking or corrupting the string.
The Fix
Environment File to the Rescue.
Instead of embedding the URI directly, I created a separate file for environment variables:
Step 1: Create an environment file
# /opt/resume-api/api.env
MONGODB_URI="mongodb+srv://...&w=majority"
Step 2: Reference it in the systemd service file
EnvironmentFile=/opt/resume-api/api.env
ExecStart=/usr/bin/env uvicorn main:app --host 0.0.0.0 --port 8000
This way, systemd loads the environment variables safely from the file.
💡 Why This Works
It avoids shell parsing issues—no more fighting with escaping special characters.
It’s cleaner and more secure—you can
.gitignorethe file and even manage it via secrets.
Result
The backend now connects to MongoDB without a hitch, and deployments via CircleCI run smoothly every time.




