Инвентаризация серверов¶
Источник истины: ansible/shiva-ansible/inventory/servers.ini (Ansible inventory)
Состав¶
| Тип | Кол-во | Описание |
|---|---|---|
| VPN серверы (XUI/XRAY) | 55 | Группа [vpn] в Ansible |
| WL proxy | 14 | Группа [vpn_wl_proxy], VK Cloud nftables DNAT |
| API proxy | 6 | Группа [proxy] |
| Внутренняя инфра | ~69 | Группа [internal_servers] (через jump host) |
Multi-inbound
Один физический сервер может иметь несколько записей в MySQL (одинаковый IP, разные inbound_id). В Ansible inventory — одна строка на физический хост.
Формат записи (servers.ini)¶
vpn-monovm-austria-01 ansible_host=130.195.222.139 ansible_port=22 ansible_user=root external_ip_list=[130.195.222.139,130.195.222.142]
Конвенция имён: vpn-<провайдер>-<страна>-<номер>
Группы Ansible¶
| Группа | Описание |
|---|---|
[vpn] |
VPN серверы с 3x-ui/XUI |
[vpn_remnawave] |
Remnawave-ноды (VLESS+TCP+Reality, mTLS) |
[vpn_wl_proxy] |
Whitelist прокси (nftables DNAT через RU IP) |
[proxy] |
API и subscription proxy |
[internal_servers] |
Внутренняя инфра Karmann (10.99.87.x, через ProxyJump) |
[api-vpn] |
Backend серверы |
[api-db] |
MySQL серверы |
[grafana] |
Мониторинг (Grafana + Prometheus) |
[telegram-proxies] |
MTProto Telegram proxy |
[vpn_inactive] |
Выведенные из эксплуатации серверы |
Полный список групп и переменных: Ansible.
Провайдеры¶
| Провайдер | Локации | Назначение |
|---|---|---|
| MonoVM | NL, AT, SE, GB, JP, и др. | Основной пул VPN-серверов (~60% парка) |
| TheHosting | NL, PL, DE, GB, AT | VPN серверы + API proxy |
| DataPacket | US, UK, DE, CA, PL, FR, BR, JP | Выделенные серверы |
| VDSina | RU, NL | WL proxy, VPN |
| VK Cloud | RU | WL nftables proxy + инфра серверы |
| Yandex Cloud | RU | API proxy (резерв) + инфра |
Учётные данные провайдеров: Vaultwarden → VPN Providers.
Аудит инвентаря¶
Сверка Ansible ↔ MySQL ↔ VPN Config Service:
python3 scripts/inventory_reconcile.py # аудит + рекомендации
python3 scripts/inventory_reconcile.py --stats # статистика
Подробнее: DevOps скрипты.
Добавление нового сервера¶
- Добавить хост в
servers.ini→ группа[vpn] - Запустить Ansible деплой
- Зарегистрировать в MySQL (2 записи: inbound 1 + inbound 2)
- Проверить через скрипт:
python3 scripts/check_vpn_server.py <IP>
Полная процедура: Деплой VPN-сервера.
Вывод сервера из эксплуатации¶
Удалять из inventory, НЕ перемещать в inactive
Группа [vpn_inactive] — антипаттерн. Terminated серверы удаляются из servers.ini.
Git history = достаточный аудит: git log -S "88.218.1.49" найдёт за секунду.
Процедура¶
1. MySQL: is_active = 0
UPDATE server SET is_active = 0 WHERE ip = 'X.X.X.X';
2. Удалить строку из servers.ini
НЕ комментировать, НЕ перемещать — удалить.
3. Проверить ссылки (grep по IP):
grep -r "X.X.X.X" ansible/ docs/ scripts/
├── proxy nginx конфиги → убрать upstream
├── nftables rules на WL серверах → убрать DNAT
├── DNS записи → удалить
└── Hardcoded IP в скриптах → убрать
4. Обновить мониторинг:
ansible-playbook playbooks/update-prometheus.yml # file_sd обновится
python3 scripts/kuma-sync.py sync --remove # Uptime Kuma
5. Коммит:
git commit -m "remove vpn-hostname (X.X.X.X) — terminated, причина"
6. Git push
Чеклист очистки¶
- MySQL:
is_active = 0 -
servers.ini: строка удалена - Prometheus targets: обновлены (ansible playbook)
- Uptime Kuma: монитор удалён
- Proxy nginx: upstream убран (если был)
- Grafana: dashboard «Traffic per Server» удалится автоматически (grafana_sync worker)
- DNS: A-записи удалены (если были)
- Коммит с причиной
См. также: Ansible · Деплой VPN-сервера · DevOps скрипты → inventory_reconcile · Репозитории