# SeriousLetter Deployment Procedure ## Environments - **Dev**: `/opt/data/seriousletter/dev/code` — runs on develop branch - **Int**: `/opt/data/seriousletter/int/code` — merge point: develop → main - **Prod**: `/opt/data/seriousletter/prod/code` — runs on main branch ## Deployment Steps (in order) ```bash # 1. Push develop from local cd /Users/i052341/Daten/Cloud/Development/apps/seriousletter git push origin develop # 2. Pull develop on dev ssh seriousletter.com "cd /opt/data/seriousletter/dev/code && git pull origin develop" # 3. Pull develop on int ssh seriousletter.com "cd /opt/data/seriousletter/int/code && git checkout develop && git pull origin develop" # 4. Merge develop into main ON INT (this is the canonical merge point) ssh seriousletter.com "cd /opt/data/seriousletter/int/code && git checkout main && git merge develop -m '' && git push origin main" # 5. Pull both branches on all environments ssh seriousletter.com "for env in dev int prod; do cd /opt/data/seriousletter/\$env/code && git fetch origin && git checkout develop && git pull origin develop && git checkout main && git pull origin main; done" # 6. Restart all ssh seriousletter.com "for env in dev int prod; do cd /opt/data/seriousletter/\$env/code && bash restart.sh; done" ``` ## Key Rules - **NEVER merge develop into main directly on prod** — always merge on int, push main, then pull on prod - The "No such container" error in restart.sh logs is cosmetic (container name mismatch in the log-tail step) - Dev runs on develop branch, prod runs on main branch - SSH: `ssh seriousletter.com` (root, port 99) - Git remote: `http://git.mnsoft.org/git/APPS/Seriousletter.git`