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
+91
View File
@@ -0,0 +1,91 @@
# Часть 2/2 — деплой (deploy-nginx.yml) включает этот файл ТОЛЬКО когда на
# сервере уже есть сертификат /etc/letsencrypt/live/grafana.netrunner-vpn.com/
# (иначе nginx -t упадёт: ssl_certificate на несуществующий файл). До первого
# `certbot certonly` этот файл лежит на диске, но не подключён — только
# netrunner-http.conf, обслуживающий ACME-challenge.
#
# Обе площадки закрыты HTTP Basic Auth (доп. пароль ДО того, как запрос
# вообще дойдёт до Grafana/Vaultwarden) — см. deploy-nginx.yml про
# .htpasswd. Для Vaultwarden basic auth намеренно НЕ накрывает /api,
# /identity, /notifications — мобильные и десктоп-клиенты Bitwarden, а
# также браузерное расширение, не умеют проходить Basic Auth на этих
# путях (только сама веб-морда на "/" людьми открывается руками),
# закрыть их означало бы сломать синхронизацию всем клиентам.
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name grafana.netrunner-vpn.com;
# Сертификат лежит в папке ПЕРВОГО домена из -d при выпуске (grafana...),
# даже несмотря на то что SAN-сертификат покрывает оба домена — так у
# certbot всегда, это не опечатка.
ssl_certificate /etc/letsencrypt/live/grafana.netrunner-vpn.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/grafana.netrunner-vpn.com/privkey.pem;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
proxy_pass http://127.0.0.1:3030;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Grafana Live (websocket) — используется для live-обновления панелей.
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name vault.netrunner-vpn.com;
ssl_certificate /etc/letsencrypt/live/grafana.netrunner-vpn.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/grafana.netrunner-vpn.com/privkey.pem;
client_max_body_size 525M; # вложения Vaultwarden
# Веб-морда ("/") — единственное место, которое реально открывают руками
# в браузере, поэтому единственное место с доп. паролем.
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# API/логин/синхронизация — сюда ходят мобильные приложения, десктоп-клиент
# и браузерное расширение напрямую, без Basic Auth (клиенты Bitwarden его
# на этих путях не поддерживают — добавить сюда auth_basic значило бы
# сломать синхронизацию всем, кроме веб-морды).
location ~ ^/(api|identity)/ {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Websocket-уведомления о синхронизации между устройствами — тоже без
# Basic Auth (по той же причине) и с апгрейдом соединения.
location /notifications/hub {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}