Production окружение¶
Продакшн инфраструктура ShivaVPN. Все изменения — через CI/CD, не вручную.
Серверы Production¶
| IP | Hostname | Сервисы | Контейнеры |
|---|---|---|---|
212.70.189.60 |
shiva-proxy | Nginx (reverse proxy, jump host) | nginx |
10.99.87.249 |
vpn-app02 | Backend, VCS, Redis, Remnawave | vpn-back-blue, vpn-back-green, vpn-config-service, vpn-config-worker, redis |
10.99.87.62 |
vpn-db | MySQL PROD | vpn-db |
10.99.87.64 |
vpn-admin | Admin Panel | vpn-admin |
10.99.87.63 |
vpn-app01 | Frontend, LK, партнёрские лендинги | vpn-front, vpn-lk, vpn-front-ru, и др. |
10.99.87.5 |
km-monitor | Grafana, Prometheus, Loki | grafana-*, audit-bot |
10.99.87.76 |
km-tools01a | Vaultwarden | vaultwarden |
212.70.189.61 |
dev-api | GitLab Runner, Nginx dev | — |
Подключение к Production¶
Только через jump host
Серверы 10.99.87.* закрыты от интернета. Доступ только через 212.70.189.60:2255.
SSH¶
# Рекомендуемый способ (скрипт в monorepo)
./scripts/ssh-internal.sh 10.99.87.249 # Backend
./scripts/ssh-internal.sh 10.99.87.62 # MySQL
./scripts/ssh-internal.sh 10.99.87.5 # Grafana
./scripts/ssh-internal.sh 10.99.87.64 # Admin Panel
# Вручную
ssh root@10.99.87.249 -J root@212.70.189.60:2255 -i ~/.ssh/id_ed25519_shivavpn
MySQL PROD¶
# Через ssh-internal.sh
./scripts/ssh-internal.sh 10.99.87.62 \
"docker exec vpn-db mysql -uvpn -p'$(см. Vaultwarden → Databases)' vpn -e 'SELECT COUNT(*) FROM account'"
Пароль: Vaultwarden → Databases → MySQL PROD
DBeaver / TablePlus (GUI)¶
| Параметр | Значение |
|---|---|
| Host | 10.99.87.62 |
| Port | 3306 |
| Database | vpn |
| User | vpn |
| Password | см. Vaultwarden → Databases → MySQL PROD |
| SSH host (jump) | 212.70.189.60 |
| SSH port | 2255 |
| SSH user | root |
| SSH key | ~/.ssh/id_ed25519_shivavpn |
Сервисы и URL¶
| Сервис | URL | Auth |
|---|---|---|
| API | https://api.shivavpn.io | JWT / Keycloak |
| Личный кабинет | https://shiva-app.io/account | Keycloak |
| Grafana | https://monitor.karmann.tech | см. Vaultwarden → Monitoring |
| Admin Panel | http://10.99.87.64 (внутренний) | см. Vaultwarden → Infrastructure |
| Vaultwarden | https://vault.shivavpn.io | master password |
| VCS API (внутренний) | http://10.99.87.249:8000 | X-API-Key |
| VCS Swagger | http://10.99.87.249:8000/docs | нет |
| Backend Health | http://10.99.87.249:8080/actuator/health | нет |
Учётные данные¶
Все пароли: Vaultwarden → [соответствующая коллекция]
| Что | Коллекция в Vaultwarden |
|---|---|
| MySQL PROD root/vpn | Databases |
| Redis | Databases |
| Admin Panel | Infrastructure |
| Grafana admin | Monitoring |
| GitLab tokens | GitLab & CI/CD |
| Keycloak admin | Keycloak & Auth |
| VPN Provider accounts | VPN Providers |
| VCS API key | Infrastructure |
| 3x-ui panels | Infrastructure |
Никогда не коммитить учётные данные
Файл [Vaultwarden](https://vault.shivavpn.io) в monorepo git-ignored. Всё в Vaultwarden.
Деплой в Production¶
| Сервис | Способ деплоя |
|---|---|
| Backend (Java) | Автоматически: push в main → CI → blue-green deploy |
| VPN Config Service | Push → CI test+build → ручной deploy_prod в GitLab |
| Admin Frontend | Push → CI build → ручной update_service_prod |
| User Frontend | Свой CI/CD (отдельный git) |
Детали: Backend Deploy и Runbooks: Деплой.
Мониторинг Production¶
- Grafana: https://monitor.karmann.tech — 44 дашборда, 26 алертов
- Алерты приходят в Telegram (zardes) при проблемах с VPN/инфраструктурой
- Локи: централизованные логи (Loki + Promtail)
Подробнее: Мониторинг.
Критические особенности Production¶
Redis = auth сессии
Redis на 10.99.87.249:6379 хранит все пользовательские сессии. Рестарт Redis = разлогин всех пользователей.
docker restart xray — запрещено
На VPN серверах НИКОГДА не делать docker restart xray — это отключит всех пользователей сервера. Конфиги меняются через X-UI API (hot-reload).
Нет автобэкапов MySQL
Автоматические бэкапы MySQL PROD настроены (ежедневно 00:00 UTC, /backup/mysql/).
Перед изменениями схемы — делать дополнительный ручной дамп. Инструкция.