# Verify tools installed
terraform version # >= 1.5.0
aws --version # >= 2.0
kubectl version # >= 1.27
node --version # >= 18.0
python3 --version # >= 3.11
docker --version # >= 24.0
# Configure AWS
aws configure
# Option A: Automated
chmod +x deploy.sh
./deploy.sh staging v1.0.0
# Select option 2 (Infrastructure only)
# Option B: Manual
cd terraform/environments/staging
terraform init
terraform plan -out=tfplan
terraform apply tfplan
cd ../../../cdk
npm install
cdk deploy --all --require-approval never
# Update these with real values!
aws secretsmanager create-secret \
--name forge/staging/database \
--secret-string '{"username":"forge","password":"YOUR_STRONG_PASSWORD"}'
aws secretsmanager create-secret \
--name forge/staging/anthropic \
--secret-string '{"api_key":"YOUR_ANTHROPIC_KEY"}'
aws secretsmanager create-secret \
--name forge/staging/okta \
--secret-string '{"client_id":"YOUR_OKTA_ID","client_secret":"YOUR_OKTA_SECRET","domain":"YOUR_OKTA_DOMAIN"}'
aws secretsmanager create-secret \
--name forge/staging/jwt \
--secret-string '{"secret":"YOUR_RANDOM_32_CHAR_STRING"}'
# Database
cd api
pip install -r requirements.txt
export DATABASE_URL="postgresql://forge:PASSWORD@RDS_ENDPOINT:5432/forge"
alembic upgrade head
python scripts/create_admin_user.py
# API
docker build -t forge-api:v1.0.0 .
# Push to ECR and deploy (see DEPLOYMENT_GUIDE.md)
# CLI
cd ../cli
npm install && npm run build && npm pack
# Portal
cd ../portal
npm install
cat > .env.production << EOF
NEXT_PUBLIC_API_URL=https://api.forge.staging.example.com
NEXT_PUBLIC_WS_URL=wss://api.forge.staging.example.com/ws
EOF
npm run build
vercel --prod # Or your preferred deployment method
# Test API
curl https://api.forge.staging.example.com/health
# Test CLI
npm install -g ./cli/forge-cli-1.0.0.tgz
forge config set api-url https://api.forge.staging.example.com
forge login
# Test Portal
# Open https://portal.forge.staging.example.com
# Login with SSO
# Provision a test workspace
After deployment, bookmark these:
Before deploying, have these ready:
# Infrastructure
terraform output -json
# Kubernetes
kubectl get pods -A
kubectl get ingress -A
# API
kubectl logs -n forge-api -l app=forge-api --tail=50
# Database
kubectl exec -it -n forge-api <pod-name> -- python -c "from src.database import engine; engine.connect()"
# View logs
kubectl logs -n forge-api -l app=forge-api --tail=100 -f
# Restart pods
kubectl rollout restart deployment/forge-api -n forge-api
# Check secrets
kubectl get secrets -n forge-api
# Port forward Grafana
kubectl port-forward -n forge-system svc/grafana 3000:3000
# API
kubectl rollout undo deployment/forge-api -n forge-api
# Portal (Vercel)
vercel rollback
# Database
cd api && alembic downgrade -1
# Infrastructure
cd terraform/environments/staging
terraform destroy
Everything is built and documented. Choose your path:
Quick Start: ./deploy.sh staging v1.0.0
Manual: Follow DEPLOYMENT_CHECKLIST.md
Phased: Deploy staging first, then production
Good luck! π