Skip to main content

Deployment matrix

AppDev targetDev triggerProd targetProd triggerWho / access
Backend (emaw-django-app)development-django-vm, Docker Compose at /opt/emaw/emaw-django-app → dev.emaw-app.comManual: SSH, git pull origin develop, docker compose up -d --buildDockerApp VM via Portainer → app.emaw-app.comManual: Portainer redeploy from mainTailscale + SSH key (dev); IP whitelist + Portainer (prod)
Website (emaw-website)Cloudflare Pages emaw-website branch develop → develop-website.everymanawarrior.ccGitHub Action on push to developPages production branch → everymanawarrior.com at launchManual wrangler pages deploy dist --branch mainGitHub env develop secrets; Cloudflare API token for manual
Web app (emaw-web-app)Pages emaw-react-web-app branch develop → develop-web-app.everymanawarrior.ccGitHub Action on push to developPages branch main → app.everymanawarrior.ccGitHub Action on push to mainGitHub envs develop / production
Admin CRM (emaw-crm-app)Worker emaw-admin-dev → admin-dev.everymanawarrior.ccGitHub Action on push to developWorker emaw-admin → admin.everymanawarrior.ccManual npm run deploy:productionGitHub env develop; Cloudflare API token for manual
Mobile app (emaw-mobile-app)EAS development / preview builds; channel development / previeweas build, eas update by a developerApp Store and Google Play; channel productioneas build --profile production, eas submit, store review; JS-only changes via eas updateEAS project access; Apple / Google console roles
Docs (emaw-documentation)Pages emaw-documentation branch develop → docs-dev.everymanawarrior.ccGitHub Action on push to developPages branch main → docs.everymanawarrior.ccGitHub Action on push to mainGitHub envs develop / production

Legacy and gaps​

  • Backend: .github/workflows/main_emawweb.yml and azure-pipelines.yml still deploy to the Azure Web App EMAWWeb on push to main. That is not the live backend. See Backend deployment.
  • Website and Admin CRM have no production workflow yet; the web app's deploy-production.yml is the template.
  • No pipeline runs tests before deploying. The CRM has a Vitest suite and the backend has pytest; both are run by hand.

Shared secrets​

Every frontend workflow needs CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID on the relevant GitHub environment. The backend has no deploy secrets in GitHub; its .env lives on the VM (dev) and in Portainer (prod).