Skip to content

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):

cd orbital-manager-backend
docker compose up --build -d


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)