feat(staging): add Traefik-based staging with automatic subdomains

This commit is contained in:
2026-03-01 00:14:22 +01:00
committed by Clawd Agent
parent da8bbbc01d
commit 4c48a177a1
2 changed files with 84 additions and 22 deletions
+23 -22
View File
@@ -1,28 +1,29 @@
# Staging Docker Compose - Traefik version
version: "3.8" version: "3.8"
services: services:
frontend: gravl-frontend:
container_name: staging-gravl-PLACEHOLDER-frontend container_name: staging-gravl-frontend-BRANCH_NAME
networks: labels:
- staging-network - traefik.enable=true
- traefik.http.routers.staging-gravl-BRANCH_NAME.rule=Host(`BRANCH_NAME.gravl.homelab.local`)
- traefik.http.routers.staging-gravl-BRANCH_NAME.entrypoints=websecure
- traefik.http.routers.staging-gravl-BRANCH_NAME.tls=true
- traefik.http.services.staging-gravl-BRANCH_NAME.loadbalancer.server.port=80
environment: environment:
- VITE_API_URL=http://localhost:3001 - VITE_API_URL=https://BRANCH_NAME.api.gravl.homelab.local
backend: gravl-backend:
container_name: staging-gravl-PLACEHOLDER-backend container_name: staging-gravl-backend-BRANCH_NAME
networks: labels:
- staging-network - traefik.enable=true
environment: - traefik.http.routers.staging-gravl-BRANCH_NAME-api.rule=Host(`BRANCH_NAME.api.gravl.homelab.local`)
- NODE_ENV=staging - traefik.http.routers.staging-gravl-BRANCH_NAME-api.entrypoints=websecure
- PORT=3001 - traefik.http.routers.staging-gravl-BRANCH_NAME-api.tls=true
- CORS_ORIGIN=http://localhost:5173 - traefik.http.services.staging-gravl-BRANCH_NAME-api.loadbalancer.server.port=3001
db:
container_name: staging-gravl-PLACEHOLDER-db
image: postgres:15-alpine
networks:
- staging-network
networks: networks:
staging-network: proxy:
driver: bridge external: true
homelab:
external: true
+61
View File
@@ -0,0 +1,61 @@
#!/bin/bash
# Create staging environment for a branch
BRANCH_NAME=${1:-}
if [ -z "$BRANCH_NAME" ]; then
echo "Usage: $0 <branch-name>"
echo "Example: $0 03-design-polish"
exit 1
fi
echo "Creating staging for branch: $BRANCH_NAME"
# Create temp directory
STAGING_DIR=/tmp/staging-$BRANCH_NAME-$(date +%s)
mkdir -p $STAGING_DIR
# Clone repo
git clone --branch feature/$BRANCH_NAME /workspace/gravl "$STAGING_DIR" 2>/dev/null || {
echo "Failed to clone branch feature/$BRANCH_NAME"
exit 1
}
cd "$STAGING_DIR"
# Replace placeholder with actual branch name
sed -i "s/BRANCH_NAME/$BRANCH_NAME/g" docker-compose.yml
cat docker-compose.staging.yml | sed "s/BRANCH_NAME/$BRANCH_NAME/g" > docker-compose.staging-override.yml
# Create staging DB volume
mkdir -p .staging
# Start services
echo "Starting staging containers..."
docker compose -f docker-compose.yml -f docker-compose.staging-override.yml up -d
# Register metadata
cat > ".staging/$BRANCH_NAME.json" << EOF
{
"branch": "$BRANCH_NAME",
"featureBranch": "feature/$BRANCH_NAME",
"stagingUrl": "https://$BRANCH_NAME.gravl.homelab.local",
"apiUrl": "https://$BRANCH_NAME.api.gravl.homelab.local",
"created": "$(date -Iseconds)",
"status": "active",
"containers": {
"frontend": "staging-gravl-frontend-$BRANCH_NAME",
"backend": "staging-gravl-backend-$BRANCH_NAME",
"db": "staging-gravl-db-$BRANCH_NAME"
}
}
EOF
echo ""
echo "✅ Staging environment ready!"
echo ""
echo "🌐 URL: https://$BRANCH_NAME.gravl.homelab.local"
echo "📡 API: https://$BRANCH_NAME.api.gravl.homelab.local"
echo ""
echo "Make sure to add to your /etc/hosts:"
echo " 192.168.1.XXX $BRANCH_NAME.gravl.homelab.local $BRANCH_NAME.api.gravl.homelab.local"
echo ""