diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index ab0eaf1..f363b88 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -1,17 +1,19 @@ name: Deploy -# ВАЖНО: DATA_VPS_IP/DATA_SSH_PRIVATE_KEY должны указывать на ТОТ ЖЕ VPS, что -# и прод netrunner-backend (тот же процесс Postgres, сеть netrunner_grid — -# см. docker-compose.yml). Деплой backend'а должен быть выполнен на этом VPS -# РАНЬШЕ первого запуска этого workflow — иначе `docker compose up` здесь -# упадёт с "network netrunner_grid not found". +# Postgres здесь принимает подключения по сети от netrunner-backend, который +# живёт на ОТДЕЛЬНОМ VPS (см. docker-compose.yml, сервис `db`, и +# postgres/pg_hba.conf) — самоподписанный TLS-сертификат генерируется прямо +# этим workflow при первом деплое (если ещё не существует на диске), при +# последующих деплоях не трогается (важно: перегенерация на каждом деплое +# рвала бы уже открытые TLS-сессии на рестарте контейнера без необходимости). +# +# Несекретные значения (DATA_VPS_IP, имена/юзеры БД, домен/лог-левел/SMTP- +# хост-порт Vaultwarden) — repo Variables (vars.*), не Actions secrets: видны +# так же, как сам код, просто не маскируются в логах. Настоящие секреты +# (пароли/токены/приватный ключ) — только secrets.*. .env на сервере +# пересобирается с нуля на каждом деплое (ничего не хранится в репозитории). # # Без сборки образов (postgres/vaultwarden — публичные образы, не наши). -# Несекретные значения (DATA_VPS_IP, имя/юзер БД, домен/лог-левел/SMTP-хост-порт -# Vaultwarden) — repo Variables (vars.*), не Actions secrets: видны так же, как -# сам код, просто не маскируются в логах. Настоящие секреты (пароли/токены/ -# приватный ключ) — только secrets.*. .env на сервере пересобирается с нуля на -# каждом деплое (ничего не хранится в репозитории). on: push: branches: [main] @@ -24,13 +26,13 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Sync compose file to VPS + - name: Sync compose file + postgres config + backup script to VPS uses: appleboy/scp-action@v0.1.7 with: host: ${{ vars.DATA_VPS_IP }} username: root key: ${{ secrets.DATA_SSH_PRIVATE_KEY }} - source: "docker-compose.yml" + source: "docker-compose.yml,postgres/pg_hba.conf,postgres/init-backend-db.sh,scripts/backup.sh" target: "/root/netrunner-data" strip_components: 0 @@ -40,16 +42,28 @@ jobs: host: ${{ vars.DATA_VPS_IP }} username: root key: ${{ secrets.DATA_SSH_PRIVATE_KEY }} - envs: "VW_DB_USER,VW_DB_PASSWORD,VW_DB_NAME,VAULTWARDEN_DOMAIN,VAULTWARDEN_SIGNUPS_ALLOWED,VAULTWARDEN_ADMIN_TOKEN,VAULTWARDEN_LOG_LEVEL,SMTP_HOST,SMTP_FROM,SMTP_PORT,SMTP_SECURITY,SMTP_USERNAME,SMTP_PASSWORD" + envs: "VW_DB_USER,VW_DB_PASSWORD,VW_DB_NAME,BACKEND_DB_USER,BACKEND_DB_PASSWORD,BACKEND_DB_NAME,VAULTWARDEN_DOMAIN,VAULTWARDEN_SIGNUPS_ALLOWED,VAULTWARDEN_ADMIN_TOKEN,VAULTWARDEN_LOG_LEVEL,SMTP_HOST,SMTP_FROM,SMTP_PORT,SMTP_SECURITY,SMTP_USERNAME,SMTP_PASSWORD" script: | set -e cd /root/netrunner-data - mkdir -p data + mkdir -p data postgres/certs + + # Самоподписанный сертификат Postgres — генерируется один раз, + # последующие деплои его не трогают (см. заголовок workflow). + if [ ! -f postgres/certs/server.crt ]; then + echo "🔑 Генерирую самоподписанный TLS-сертификат для Postgres (первый деплой)..." + openssl req -new -x509 -days 3650 -nodes -subj "/CN=netrunner-db" \ + -out postgres/certs/server.crt -keyout postgres/certs/server.key + chmod 600 postgres/certs/server.key + fi cat > .env < .env <