Deployment Guide¶
Deployment methods for Orbital services: orbital-wiki (Cloudflare Pages), orbital-manager-backend (Azure Container Apps), orbital (Azure via GitHub Actions).
orbital-wiki¶
Deployed to Cloudflare Pages via GitHub Actions.
Workflow: .github/workflows/cloudflare-pages.yml
Trigger: Push to main branch
Process:
1. Builds MkDocs site (mkdocs build)
2. Deploys site/ directory to Cloudflare Pages
3. Uses Cloudflare Pages action with API token
Manual deployment:
cd orbital-wiki
pip install -r requirements.txt
mkdocs build
# Then deploy site/ directory to Cloudflare Pages
Required secrets:
- CLOUDFLARE_API_TOKEN
- CLOUDFLARE_ACCOUNT_ID
orbital-manager-backend¶
Deployed to Azure Container Apps via GitHub Actions.
Workflow: .github/workflows/deploy.yml
Trigger: Push to main branch
Process:
1. Builds Docker image using deploy/Dockerfile (unified container with nginx)
2. Pushes to Azure Container Registry (orbitalmanagerregistry.azurecr.io)
3. Updates Azure Container App (orbital-manager-app)
Architecture:
- Uses unified Dockerfile that runs all services (kitchen-batch, order-management, kitchen-prep) with nginx reverse proxy
- Services accessible via nginx on port 80:
- /batch-service → Kitchen Batch Tool (8000)
- /order-service → Order Management (8001)
- /prep-service → Kitchen Prep Tool (8002)
Required secrets:
- AZURE_CLIENT_ID
- AZURE_TENANT_ID
- AZURE_SUBSCRIPTION_ID
- ACR_USERNAME
- ACR_PASSWORD
Azure resources:
- Resource Group: orbital-manager-rg
- Container App: orbital-manager-app
- Container Registry: orbitalmanagerregistry
Local Docker (for testing):
orbital¶
Deployed to Azure via GitHub Actions using Azure Developer CLI (azd).
Workflow: .github/workflows/azure-dev.yml
Trigger: Push to aspire or azure-deployment branches
Process:
1. Installs .NET 8 SDK and Aspire workload
2. Authenticates with Azure using federated credentials
3. Provisions infrastructure (azd provision)
4. Deploys application (azd deploy)
Architecture: - Uses .NET Aspire for orchestration - Frontend: React app (Orbital.Web) - Backend: .NET API services - Workers: Background processing services
Required variables:
- AZURE_CLIENT_ID
- AZURE_TENANT_ID
- AZURE_SUBSCRIPTION_ID
- AZURE_ENV_NAME
- AZURE_LOCATION
Required secrets:
- AZURE_GRUBHUB_PERIMETERX
- AZURE_UBER_ADMIN_COOKIE
Manual deployment:
# Install Azure CLI and azd
az login
azd up # First time (interactive)
azd deploy # Subsequent deployments
Other workflows:
- main-orbital-op.yml: Deploys to Azure Web App orbitalop (RELEASE branch)
- orbital-worker.yml: Deploys workers to Azure Web App orbital-worker (WORKER_API_RELEASE branch)
Summary¶
| Service | Platform | Trigger | Workflow File |
|---|---|---|---|
| orbital-wiki | Cloudflare Pages | Push to main |
cloudflare-pages.yml |
| orbital-manager-backend | Azure Container Apps | Push to main |
deploy.yml |
| orbital | Azure (Aspire) | Push to aspire/azure-deployment |
azure-dev.yml |
Troubleshooting¶
orbital-wiki: - Check Cloudflare Pages dashboard for build logs - Verify secrets are configured in GitHub repository settings
orbital-manager-backend:
- Check Azure Container Apps logs
- Verify ACR credentials and permissions
- Check container app health: az containerapp show -n orbital-manager-app -g orbital-manager-rg
orbital:
- Check Azure portal for deployment status
- Review azd logs in GitHub Actions
- Verify Azure federated credentials are configured
- Check environment variables in Azure portal
Best Practices¶
- Use feature branches and pull requests before merging to deployment branches
- Monitor deployment status in GitHub Actions
- Set up alerts for failed deployments
- Review logs after each deployment
- Test locally with Docker before pushing to main branches
- Keep secrets and credentials secure (never commit to repository)