ci: enable deploy stage with SSH-based blue/green deployment

Writes .env to web/, runs deploy.sh from web/. Pushes env vars
from GitLab CI/CD variables to the server on every master push.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Deeman
2026-02-22 23:09:32 +01:00
parent c3c8333407
commit 817d9c16b7

View File

@@ -3,7 +3,7 @@ image: python:3.13
stages: stages:
# - lint # - lint
- test - test
# - deploy - deploy
variables: variables:
UV_CACHE_DIR: "$CI_PROJECT_DIR/.uv-cache" UV_CACHE_DIR: "$CI_PROJECT_DIR/.uv-cache"
@@ -71,41 +71,44 @@ test:web:
- changes: - changes:
- web/**/* - web/**/*
#deploy:web: deploy:web:
# stage: deploy stage: deploy
# image: alpine:latest image: alpine:latest
# needs: [test:web] needs: [test:web]
# rules: rules:
# - if: $CI_COMMIT_BRANCH == "master" - if: $CI_COMMIT_BRANCH == "master"
# changes: before_script:
# - web/**/* - apk add --no-cache openssh-client
# before_script: - eval $(ssh-agent -s)
# - apk add --no-cache openssh-client - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
# - eval $(ssh-agent -s) - mkdir -p ~/.ssh
# - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - chmod 700 ~/.ssh
# - mkdir -p ~/.ssh - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
# - chmod 700 ~/.ssh script:
# - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts - |
# script: ssh "$DEPLOY_USER@$DEPLOY_HOST" "cat > /opt/beanflows/web/.env" << ENVEOF
# - | APP_NAME=$APP_NAME
# ssh "$DEPLOY_USER@$DEPLOY_HOST" "cat > /opt/beanflows/beanflows/.env" << ENVEOF SECRET_KEY=$SECRET_KEY
# APP_NAME=$APP_NAME BASE_URL=$BASE_URL
# SECRET_KEY=$SECRET_KEY DEBUG=false
# BASE_URL=$BASE_URL DATABASE_PATH=data/app.db
# DEBUG=false MAGIC_LINK_EXPIRY_MINUTES=$MAGIC_LINK_EXPIRY_MINUTES
# ADMIN_PASSWORD=$ADMIN_PASSWORD SESSION_LIFETIME_DAYS=$SESSION_LIFETIME_DAYS
# DATABASE_PATH=data/app.db RESEND_API_KEY=$RESEND_API_KEY
# MAGIC_LINK_EXPIRY_MINUTES=${MAGIC_LINK_EXPIRY_MINUTES:-15} EMAIL_FROM=$EMAIL_FROM
# SESSION_LIFETIME_DAYS=${SESSION_LIFETIME_DAYS:-30} RESEND_AUDIENCE_WAITLIST=$RESEND_AUDIENCE_WAITLIST
# RESEND_API_KEY=$RESEND_API_KEY ADMIN_EMAILS=$ADMIN_EMAILS
# EMAIL_FROM=${EMAIL_FROM:-hello@example.com} WAITLIST_MODE=$WAITLIST_MODE
# ADMIN_EMAILS=${ADMIN_EMAILS:-} RATE_LIMIT_REQUESTS=$RATE_LIMIT_REQUESTS
# RATE_LIMIT_REQUESTS=${RATE_LIMIT_REQUESTS:-100} RATE_LIMIT_WINDOW=$RATE_LIMIT_WINDOW
# RATE_LIMIT_WINDOW=${RATE_LIMIT_WINDOW:-60} PADDLE_API_KEY=$PADDLE_API_KEY
# PADDLE_API_KEY=$PADDLE_API_KEY PADDLE_WEBHOOK_SECRET=$PADDLE_WEBHOOK_SECRET
# PADDLE_WEBHOOK_SECRET=$PADDLE_WEBHOOK_SECRET PADDLE_ENVIRONMENT=$PADDLE_ENVIRONMENT
# PADDLE_PRICE_STARTER=$PADDLE_PRICE_STARTER PADDLE_PRICE_STARTER=$PADDLE_PRICE_STARTER
# PADDLE_PRICE_PRO=$PADDLE_PRICE_PRO PADDLE_PRICE_PRO=$PADDLE_PRICE_PRO
# ENVEOF UMAMI_SCRIPT_URL=$UMAMI_SCRIPT_URL
# - ssh "$DEPLOY_USER@$DEPLOY_HOST" "chmod 600 /opt/beanflows/beanflows/.env" UMAMI_WEBSITE_ID=$UMAMI_WEBSITE_ID
# - ssh "$DEPLOY_USER@$DEPLOY_HOST" "cd /opt/beanflows && git pull origin master && ./deploy.sh" SERVING_DUCKDB_PATH=$SERVING_DUCKDB_PATH
ENVEOF
- ssh "$DEPLOY_USER@$DEPLOY_HOST" "chmod 600 /opt/beanflows/web/.env"
- ssh "$DEPLOY_USER@$DEPLOY_HOST" "cd /opt/beanflows && git pull origin master && cd web && bash deploy.sh"