From f373601025f4ee5f652654787ba45203c267a19b Mon Sep 17 00:00:00 2001 From: nineap Date: Thu, 9 Jul 2026 17:17:20 +0700 Subject: [PATCH] =?UTF-8?q?CI:=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B8?= =?UTF-8?q?=D1=80=D1=83=D0=B5=D1=82=20TLS-=D1=81=D0=B5=D1=80=D1=82=D0=B8?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D0=B0=D1=82=20Postgres=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=BC=20=D0=B4=D0=B5=D0=BF?= =?UTF-8?q?=D0=BB=D0=BE=D0=B5,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20BACKEND=5FDB=5F*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Синкает postgres/pg_hba.conf, postgres/init-backend-db.sh и scripts/backup.sh на VPS (раньше копировался только docker-compose.yml). Самоподписанный сертификат создаётся один раз, если ещё не существует — повторные деплои его не трогают, чтобы не рвать открытые TLS-сессии рестартом контейнера. Co-Authored-By: Claude Sonnet 5 --- .gitea/workflows/deploy.yml | 46 +++++++++++++++++++++++++----------- .github/workflows/deploy.yml | 46 +++++++++++++++++++++++++----------- 2 files changed, 64 insertions(+), 28 deletions(-) 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 <