nginx
Deploy Observability / Deploy Observability Stack (push) Successful in 36s
Deploy / Deploy to Data VPS (push) Successful in 42s

This commit is contained in:
2026-07-10 17:06:05 +07:00
parent 414667062c
commit 6e47498dc5
8 changed files with 285 additions and 51 deletions
+80
View File
@@ -0,0 +1,80 @@
name: Deploy Nginx
# Единственный публичный вход (443/80) на VPS с данными — system nginx
# (НЕ Docker, чтобы просто использовать certbot и его автопродление, без
# возни с сертификатами внутри контейнера). Только ручной запуск: nginx
# на этом сервере меняется редко, а сертификат/.htpasswd — одноразовые
# secrets-на-сервере, трогать их каждым push'ом смысла нет (тот же принцип,
# что и генерация сертификата Postgres в deploy.yml — один раз, не на
# каждый прогон).
#
# Порядок первого запуска:
# 1. Запустить эту джобу (поднимет http-конфиг + certbot + сам nginx).
# 2. Один раз руками на сервере:
# sudo apt-get install -y certbot
# sudo certbot certonly --webroot -w /var/www/certbot \
# -d grafana.netrunner-vpn.com -d vault.netrunner-vpn.com
# sudo htpasswd -c /etc/nginx/.htpasswd <username> # спросит пароль
# (htpasswd — из пакета apache2-utils, если его нет: apt-get install -y apache2-utils)
# 3. Запустить эту джобу ещё раз — увидит, что сертификат появился,
# включит netrunner-ssl.conf и перезагрузит nginx.
#
# Обновление одного из паролей позже — та же команда htpasswd без -c
# (создать) добавит/перезапишет юзера, не трогая остальных; -D <user> удаляет.
on:
workflow_dispatch:
jobs:
deploy:
name: Deploy nginx config to Data VPS
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Sync nginx configs to VPS
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ vars.DATA_VPS_IP }}
username: root
key: ${{ secrets.DATA_SSH_PRIVATE_KEY }}
source: "nginx/netrunner-http.conf,nginx/netrunner-ssl.conf"
target: "/root/netrunner-data"
strip_components: 0
- name: Install/enable nginx via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ vars.DATA_VPS_IP }}
username: root
key: ${{ secrets.DATA_SSH_PRIVATE_KEY }}
script: |
set -e
if ! command -v nginx >/dev/null 2>&1; then
echo "📦 Устанавливаю nginx..."
apt-get update
apt-get install -y nginx
fi
mkdir -p /var/www/certbot
rm -f /etc/nginx/sites-enabled/default
cp /root/netrunner-data/nginx/netrunner-http.conf /etc/nginx/sites-available/netrunner-http.conf
cp /root/netrunner-data/nginx/netrunner-ssl.conf /etc/nginx/sites-available/netrunner-ssl.conf
ln -sf /etc/nginx/sites-available/netrunner-http.conf /etc/nginx/sites-enabled/netrunner-http.conf
CERT=/etc/letsencrypt/live/grafana.netrunner-vpn.com/fullchain.pem
if [ -f "$CERT" ]; then
ln -sf /etc/nginx/sites-available/netrunner-ssl.conf /etc/nginx/sites-enabled/netrunner-ssl.conf
echo "🔒 Сертификат найден — HTTPS-конфиг включён."
else
rm -f /etc/nginx/sites-enabled/netrunner-ssl.conf
echo "⚠️ Сертификата ещё нет ($CERT) — HTTPS-конфиг НЕ включён."
echo " Выпустите его руками (см. заголовок deploy-nginx.yml) и перезапустите эту джобу."
fi
nginx -t
systemctl enable --now nginx
systemctl reload nginx
echo "✅ nginx synchronized."
+6
View File
@@ -54,6 +54,12 @@ jobs:
echo "🔑 Генерирую самоподписанный TLS-сертификат для Postgres (первый деплой)..."
openssl req -new -x509 -days 3650 -nodes -subj "/CN=netrunner-db" \
-out postgres/certs/server.crt -keyout postgres/certs/server.key
# postgres:16-alpine работает под UID/GID 70 (не root) — файл,
# созданный openssl от root с правами 600, контейнеру не прочитать
# ("Permission denied" при старте). Владельца нужно менять именно
# на 70:70 (проверено: `docker run --rm postgres:16-alpine id postgres`),
# не 999 — это UID из Debian-образов, у alpine он другой.
chown 70:70 postgres/certs/server.key
chmod 600 postgres/certs/server.key
fi