Files
backend/.gitea/workflows/deploy.yml
lafay 2f584c1f2c
All checks were successful
Build Backend / build (push) Successful in 5m10s
Build Backend / build-docker (push) Successful in 2m22s
This is a breaking change that renames the entire project from "Carrot BBS" to "WithYou".
The Go module name has been changed from `carrot_bbs` to `with_you`, which requires
all import paths to be updated throughout the codebase and by external consumers.

BREAKING CHANGE: Module name changed from carrot_bbs to with_you. All imports
and dependencies must be updated from carrot_bbs/* to with_you/*.
2026-04-22 16:01:59 +08:00

132 lines
4.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Deploy
on:
pull_request:
types:
- closed
branches:
- master
- main
workflow_dispatch:
inputs:
tag:
description: 'Image tag to deploy'
required: false
default: 'latest'
environment:
description: 'Deployment environment'
required: true
default: 'production'
type: choice
options:
- production
- staging
env:
REGISTRY: code.littlelan.cn
IMAGE_NAME: carrot_bbs/backend
SERVER_HOST: 124.222.83.58
SERVER_USER: root
CONTAINER_NAME: with_you
CONTAINER_NETWORK: 1panel-network
jobs:
deploy:
runs-on: ubuntu-latest
if: ${{ (github.event.pull_request.merged == true) || (github.event_name == 'workflow_dispatch') }}
# workflow_dispatch 可选 staging合并进主分支默认 production
environment: ${{ github.event.inputs.environment || 'production' }}
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ env.SERVER_HOST }}
username: ${{ env.SERVER_USER }}
password: ${{ secrets.SERVER_PASSWORD }}
script: |
set -e
IMAGE="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.tag || 'latest' }}"
CONTAINER="${{ env.CONTAINER_NAME }}"
NETWORK="${{ env.CONTAINER_NETWORK }}"
echo "=== Pulling image: ${IMAGE} ==="
docker pull ${IMAGE}
echo "=== Stopping old container ==="
docker stop ${CONTAINER} 2>/dev/null || true
docker rm ${CONTAINER} 2>/dev/null || true
echo "=== Starting new container ==="
docker run -d \
--name ${CONTAINER} \
--network ${NETWORK} \
--restart unless-stopped \
-p 8080:8080 \
-p 50051:50051 \
-e APP_DATABASE_TYPE=postgres \
-e APP_DATABASE_POSTGRES_HOST=1Panel-postgresql-Mjd1 \
-e APP_DATABASE_POSTGRES_PORT=5432 \
-e APP_DATABASE_POSTGRES_USER=with_you \
-e "APP_DATABASE_POSTGRES_PASSWORD=${{ secrets.DB_PASSWORD }}" \
-e APP_DATABASE_POSTGRES_DBNAME=with_you \
-e APP_REDIS_TYPE=redis \
-e APP_REDIS_REDIS_HOST=1Panel-redis-fq2g \
-e APP_REDIS_REDIS_PORT=6379 \
-e "APP_REDIS_REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}" \
-e APP_REDIS_REDIS_DB=0 \
-e APP_S3_ENDPOINT=storage.littlelan.cn \
-e "APP_S3_ACCESS_KEY=${{ secrets.S3_ACCESS_KEY }}" \
-e "APP_S3_SECRET_KEY=${{ secrets.S3_SECRET_KEY }}" \
-e APP_S3_BUCKET=withyou \
-e APP_S3_DOMAIN=storage.littlelan.cn \
-e APP_S3_USE_SSL=true \
-e "APP_JWT_SECRET=${{ secrets.JWT_SECRET }}" \
-e APP_ENCRYPTION_ENABLED=true \
-e "APP_ENCRYPTION_KEY=${{ secrets.ENCRYPTION_KEY }}" \
-e APP_ENCRYPTION_KEY_VERSION=1 \
-e APP_HOT_RANK_ENABLED=true \
-e APP_HOT_RANK_REFRESH_INTERVAL_SECONDS=300 \
-e APP_HOT_RANK_TOP_N=100 \
-e APP_HOT_RANK_RECENT_WINDOW_HOURS=168 \
-e APP_HOT_RANK_RECENT_FETCH_LIMIT=500 \
-e APP_HOT_RANK_CANDIDATE_CAP=800 \
-e APP_OPENAI_ENABLED=true \
-e APP_OPENAI_BASE_URL=https://api.littlelan.cn/ \
-e "APP_OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" \
-e APP_OPENAI_MODERATION_MODEL=qwen3.6-plus \
-e APP_OPENAI_MODERATION_MAX_IMAGES_PER_REQUEST=3 \
-e APP_OPENAI_REQUEST_TIMEOUT=30 \
-e APP_OPENAI_STRICT_MODERATION=false \
-e APP_EMAIL_ENABLED=true \
-e APP_EMAIL_HOST=smtp.exmail.qq.com \
-e APP_EMAIL_PORT=465 \
-e APP_EMAIL_USERNAME=no-reply@qczlit.cn \
-e "APP_EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }}" \
-e APP_EMAIL_FROM_ADDRESS=no-reply@qczlit.cn \
-e APP_EMAIL_FROM_NAME=WithYou \
-e APP_EMAIL_USE_TLS=true \
-e APP_EMAIL_TIMEOUT=15 \
-e APP_GRPC_ENABLED=true \
-e APP_GRPC_PORT=50051 \
-e APP_SERVER_MODE=release \
${IMAGE}
echo "=== Waiting for startup ==="
sleep 5
echo "=== Health check ==="
for i in 1 2 3; do
if curl -sf http://localhost:8080/health; then
echo "Health check passed!"
break
fi
echo "Attempt $i failed, retrying..."
sleep 3
done
echo "=== Container logs ==="
docker logs ${CONTAINER} --tail 20
echo "=== Deployment completed ==="