name: Deploy # 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 — публичные образы, не наши). on: push: branches: [main] workflow_dispatch: jobs: deploy: name: Deploy to Data VPS runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - 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,postgres/pg_hba.conf,postgres/init-backend-db.sh,scripts/backup.sh" target: "/root/netrunner-data" strip_components: 0 - name: Write .env and deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${{ vars.DATA_VPS_IP }} username: root key: ${{ secrets.DATA_SSH_PRIVATE_KEY }} 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 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 <