414667062c
Отдельный от db+vaultwarden compose-файл (разный жизненный цикл, свой deploy-workflow) — единственное место сбора для backend, лендинга и каждой прокси-ноды, которые физически живут на других серверах. Prometheus скрейпит наружу (сам ходит в /metrics на тех хостах — там нужно только открыть порт метрик для IP этого VPS). Loki, наоборот, принимает пуши логов ИЗВНЕ — порт 3100 публикуется наружу и обязательно фильтруется firewall'ом по IP тех хостов. Grafana не торчит в интернет напрямую (127.0.0.1-only) — единственный вход через Caddy с forward_auth, гейтящим по cookie-сессии netrunner-backend (GET /api/v1/admin/observability/check, Owner/Moderator). 3 provisioned дашборда (backend/landing/прокси-ноды). Список scrape-таргетов для прокси-нод (observability/targets/nodes.json) генерится и заливается автоматически из netrunner-proxy при каждом деплое нод — вручную ничего не поддерживается. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
60 lines
2.6 KiB
YAML
60 lines
2.6 KiB
YAML
name: Deploy Observability
|
||
|
||
# Отдельный от deploy.yml workflow — Prometheus/Loki/Grafana не должны
|
||
# рестартовать вместе с Postgres/Vaultwarden (docker-compose.observability.yml
|
||
# вместо docker-compose.yml, разные жизненные циклы). Деплоится на тот же
|
||
# DATA_VPS_IP/DATA_SSH_PRIVATE_KEY, что и основной стек — тот же VPS.
|
||
#
|
||
# GRAFANA_PASSWORD — единственный настоящий секрет здесь, остальное (список
|
||
# таргетов, конфиги Loki/promtail/Grafana-datasources) — публичный код
|
||
# репозитория, не секреты.
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
workflow_dispatch:
|
||
|
||
jobs:
|
||
deploy:
|
||
name: Deploy Observability Stack
|
||
runs-on: ubuntu-24.04
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Sync compose file + observability 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: "docker-compose.observability.yml,observability"
|
||
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: "GRAFANA_PASSWORD"
|
||
script: |
|
||
set -e
|
||
cd /root/netrunner-data
|
||
|
||
# Свой .env.observability, НЕ общий .env (тот принадлежит
|
||
# deploy.yml/docker-compose.yml и перезаписывается им целиком на
|
||
# каждом своём прогоне — общий файл рассинхронизировал бы стеки).
|
||
cat > .env.observability <<EOF
|
||
GRAFANA_PASSWORD=${GRAFANA_PASSWORD}
|
||
EOF
|
||
chmod 600 .env.observability
|
||
|
||
docker compose --env-file .env.observability -f docker-compose.observability.yml pull
|
||
docker compose --env-file .env.observability -f docker-compose.observability.yml up -d --remove-orphans
|
||
docker image prune -f
|
||
|
||
echo "✅ netrunner-data observability stack synchronized."
|
||
echo "⚠️ Не забудьте: firewall на этом VPS должен пускать 3100 (Loki push) ТОЛЬКО с IP backend/landing/каждой прокси-ноды по мере их появления."
|
||
env:
|
||
GRAFANA_PASSWORD: ${{ secrets.GRAFANA_PASSWORD }}
|