Production infrastructure for deploying Ghost CMS, API services, and monitoring on Azure.
- Cloud Provider: Azure
- VM Size: Standard_B2s (2 vCPUs, 4GB RAM)
- Operating System: Ubuntu 24.04 LTS
- Container Platform: Docker & Docker Compose
- Web Server: Nginx (reverse proxy)
- Storage: 64GB Premium SSD
- SSL/TLS: Automatic Let's Encrypt certificates
- DNS: External provider (GoDaddy)
This infrastructure is deployed exclusively through GitHub Actions. Manual deployment is not supported.
- GitHub repository with Actions enabled
- Required GitHub Secrets configured (see GITHUB_SECRETS.md)
- Azure subscription with appropriate permissions
-
Fork or clone this repository to your GitHub account
-
Configure GitHub Secrets:
- Follow the instructions in GITHUB_SECRETS.md
- Set up all required secrets in your repository settings
-
Configure the
.envexample:cp docker/.env.example docker/.env # Commit the .env file with your configuration -
Push changes to trigger deployment:
git add . git commit -m "Configure infrastructure" git push origin main
-
Monitor deployment in the GitHub Actions tab
-
Configure DNS in GoDaddy:
- Add A record for @ pointing to VM public IP
- Add A record for www pointing to VM public IP
- Add A record for grafana pointing to VM public IP
- Add A record for webadmin pointing to VM public IP
- Add A record for future pointing to VM public IP
-
Wait for DNS propagation (5-30 minutes)
- SSL certificates will be automatically configured once DNS propagates
- All services will have HTTPS enabled
- Certificate renewal is automated via cron
- Ghost CMS: Main website and content management at
www.goplasmatic.io - Reframe API: SWIFT message transformation at
reframeapi.goplasmatic.io - Sandbox: Testing environment at
sandbox.goplasmatic.io - Grafana: Monitoring dashboard at
grafana.goplasmatic.io - Admin: Ghost admin interface at
webadmin.goplasmatic.io
- VM: ~$30/month
- Storage: ~$10/month
- IP: ~$5/month
- Total: ~$45/month
- Configure GitHub Secrets (see below)
- Push to main branch to trigger deployment
- Configure DNS A records pointing to VM public IP
- SSL certificates auto-configure after DNS propagation
Add these A records in GoDaddy pointing to VM public IP:
@(root domain)www- Ghost CMS websitegrafana- Monitoring dashboardwebadmin- Ghost admin panelreframeapi- Reframe API servicesandbox- Sandbox environment
AZURE_CREDENTIALS- Azure service principalSSH_PUBLIC_KEY- VM accessSSH_PRIVATE_KEY- DeploymentVM_ADMIN_USERNAME- Default: azureuserEMAIL_ADDRESS- Let's Encrypt SSLACR_URL- Azure Container RegistryACR_USERNAME- ACR usernameACR_PASSWORD- ACR passwordDOMAIN_NAME- Your domain (e.g., goplasmatic.io)
./scripts/backup.sh <public-ip> <storage-account> [container]ssh azureuser@<public-ip> "docker stats"ssh azureuser@<public-ip> "sudo docker compose -f /opt/docker/docker-compose.yml logs <service>"