My production deploy protocol
Published on August 20, 2026
Deploying without a protocol is playing Russian roulette with production 🔥
Without a fixed order, every deploy is a gamble. And production is no place to improvise. 😅
In my early deployments of 𝗟𝘂𝗺𝗶𝗻𝗛𝗲𝗮𝗹𝘁𝗵 on the VPS I learned this the hard way: one skipped step, one variable that didn't update, and the service down on a Friday night. 💻
Today I have a fixed 𝗽𝗿𝗼𝘁𝗼𝗰𝗼𝗹 with three phases:
🟡 𝗣𝗿𝗲-𝗱𝗲𝗽𝗹𝗼𝘆
✅ Review and compare environment variables (.env)
✅ Validate the build locally
✅ Run the tests
✅ Review 𝗗𝗕 𝗺𝗶𝗴𝗿𝗮𝘁𝗶𝗼𝗻 𝘀𝗰𝗿𝗶𝗽𝘁𝘀 before running them
✅ Create a backup of the current server and database state
🔵 𝗗𝗲𝗽𝗹𝗼𝘆
✅ Pull the correct branch on the server
✅ Install dependencies
✅ Run 𝗗𝗕 𝗺𝗶𝗴𝗿𝗮𝘁𝗶𝗼𝗻 𝘀𝗰𝗿𝗶𝗽𝘁𝘀 (if applicable)
✅ Run the build — or the 𝘀𝗲𝗺𝗶-𝗮𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗰 𝗱𝗲𝗽𝗹𝗼𝘆 𝘀𝗰𝗿𝗶𝗽𝘁
✅ Restart the service (PM2 / systemd / nginx)
🟢 𝗣𝗼𝘀𝘁-𝗱𝗲𝗽𝗹𝗼𝘆
✅ Smoke test on critical routes
✅ Verify that DB migrations applied correctly
✅ Functional test from the client (app, web system, user's full flow)
✅ Review logs in real time for the first 5 minutes
✅ Confirm that monitoring is active
And two 𝗺𝗮𝘅𝗶𝗺𝘀 I always apply 👇
🚫 𝗔𝘃𝗼𝗶𝗱 𝗱𝗲𝗽𝗹𝗼𝘆𝗶𝗻𝗴 𝗼𝗻 𝗙𝗿𝗶𝗱𝗮𝘆𝘀. If something breaks, you have the whole weekend ahead. Not worth it.
🕐 𝗗𝗲𝗽𝗹𝗼𝘆 𝗱𝘂𝗿𝗶𝗻𝗴 𝗹𝗼𝘄 𝗰𝗼𝗻𝗰𝘂𝗿𝗿𝗲𝗻𝗰𝘆. Fewer active users = less impact if something fails while the system stabilizes.
A checklist is not bureaucracy. It's the difference between a smooth deploy 🚀 and an emergency night.
Do you have your own deploy protocol? What maxim would you add? 👇
Keep flying, Champions! ✈️