Skip to content

11 β€” Quick Reference

← Previous: 10 β€” GitHub Actions CI/CD Pipeline

Deploy manually (same steps as GitHub Actions)

IMAGE="southamerica-east1-docker.pkg.dev/mycoolproject-prod/mycoolproject-repo/app"

docker build -t $IMAGE:latest .    # Build image from Dockerfile at repo root
docker push $IMAGE:latest          # Upload image to Artifact Registry

gcloud run jobs update migrate --image=$IMAGE:latest --region=southamerica-east1  # Point migrate job at new image
gcloud run jobs execute migrate --region=southamerica-east1 --wait                # Run migrations, wait for completion

gcloud run deploy mycoolproject --image=$IMAGE:latest --region=southamerica-east1  # Deploy new image to Cloud Run

Run migrations without rebuilding

gcloud run jobs execute migrate --region=southamerica-east1 --wait

View live logs

# Streams live logs to terminal β€” useful right after a deploy (Ctrl+C to stop)
gcloud run services logs tail mycoolproject --region=southamerica-east1

# Fetches the last 50 error-level log entries from Cloud Logging
gcloud logging read \
  'resource.type="cloud_run_revision" AND severity>=ERROR' \
  --project=mycoolproject-prod --limit=50

Secrets

# Add a new secret
echo -n "value" | gcloud secrets create SECRET_NAME --data-file=-

# Update an existing secret
echo -n "new-value" | gcloud secrets versions add SECRET_NAME --data-file=-

# Read a secret (careful β€” prints to terminal)
gcloud secrets versions access latest --secret=SECRET_NAME

# List all secrets
gcloud secrets list

Cloud Run

# Shows service details, URL, current revision, and traffic split
gcloud run services describe mycoolproject --region=southamerica-east1

# Lists revisions (most recent first) β€” use to find revision name for rollback
gcloud run revisions list --service=mycoolproject --region=southamerica-east1

# Instantly shifts 100% of traffic to a previous revision (instant rollback)
gcloud run services update-traffic mycoolproject \
  --region=southamerica-east1 \
  --to-revisions=mycoolproject-<revision-name>=100

# Updates an env var on the live service without rebuilding the image
gcloud run services update mycoolproject \
  --region=southamerica-east1 \
  --update-env-vars=ALLOWED_HOSTS="mycoolproject.cl,www.mycoolproject.cl"

Cloud SQL

# Prints the instance state (RUNNABLE = healthy, SUSPENDED = paused to save cost)
gcloud sql instances describe mycoolproject-db --format="value(state)"

# Opens an interactive psql session to the production database via the Cloud SQL proxy
# Use with care β€” this is direct access to prod data
gcloud sql connect mycoolproject-db --user=djangouser --database=mycoolproject

Django management commands via Cloud Run Job

For any one-off manage.py command in production, create or reuse a Cloud Run Job:

# Example: run a custom management command
gcloud run jobs create my-command \
  --image=southamerica-east1-docker.pkg.dev/mycoolproject-prod/mycoolproject-repo/app:latest \
  --region=southamerica-east1 \
  --service-account=mycoolproject-run-sa@mycoolproject-prod.iam.gserviceaccount.com \
  --add-cloudsql-instances=mycoolproject-prod:southamerica-east1:mycoolproject-db \
  --set-secrets=DATABASE_URL=DATABASE_URL:latest,SECRET_KEY=DJANGO_SECRET_KEY:latest \
  --command="uv,run,manage.py,your_command"

gcloud run jobs execute my-command --region=southamerica-east1 --wait

Static files

# Re-upload static files to GCS after CSS/JS/icon changes
cd web
DJANGO_SETTINGS_MODULE=core.settings.prod uv run manage.py collectstatic --noinput

Health check

curl https://mycoolproject.cl/health/
# Expected: {"status": "ok"}