From 869aec072de03630a72bc8b6cbf5f2038c279bad Mon Sep 17 00:00:00 2001 From: Baiju Muthukadan Date: Mon, 16 Mar 2026 02:06:29 +0530 Subject: [PATCH] fix: resolve multi-app deployment blockers - Add .env existence guard to fail fast on first deploy if not configured - Auto-create per-app database via platform postgres (e.g., todo_app_db) - Generate Caddyfile with literal domain and project-prefixed container name instead of symlinking (fixes env var and container name ambiguity) - Update env.template with placeholders and comments for multi-app setup Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/deploy.yml | 31 ++++++++++++++++++++++++++++--- deploy/env.template | 11 +++++++---- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9f9004b..ae40a3e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -27,11 +27,36 @@ jobs: username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} script: | - cd /opt/apps/${{ github.event.repository.name }} + APP_NAME="${{ github.event.repository.name }}" + cd /opt/apps/${APP_NAME} git pull origin main + + # Verify app .env exists + if [ ! -f deploy/.env ]; then + echo "ERROR: deploy/.env not found. Create it from deploy/env.template first." + exit 1 + fi + + # Create app-specific database if it doesn't exist + APP_DB=$(echo "${APP_NAME}" | tr '-' '_')_db + docker compose -f /opt/platform/docker-compose.yml exec -T postgres \ + psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = '${APP_DB}'" | grep -q 1 \ + || docker compose -f /opt/platform/docker-compose.yml exec -T postgres \ + psql -U postgres -c "CREATE DATABASE ${APP_DB}" + + # Build and start app containers docker compose -f deploy/docker-compose.yml up -d --build + + # Run database migrations docker compose -f deploy/docker-compose.yml exec -T app alembic -c app/alembic.ini upgrade head + + # Health check bash scripts/health-check.sh https://${{ secrets.APP_DOMAIN }}/health - # Register app with platform Caddy - ln -sf /opt/apps/${{ github.event.repository.name }}/deploy/Caddyfile /opt/platform/caddy-apps/${{ github.event.repository.name }}.caddy + + # Generate rendered Caddyfile for platform Caddy + cat > /opt/platform/caddy-apps/${APP_NAME}.caddy <@postgres:5432/_db REDIS_URL=redis://redis:6379 S3_ENDPOINT=http://minio:9000 -S3_BUCKET=uploads -S3_ACCESS_KEY=minioadmin -S3_SECRET_KEY=minioadmin +S3_BUCKET=-uploads +S3_ACCESS_KEY= +S3_SECRET_KEY=