DevOps Quickstart¶
Руководство для нового DevOps-инженера ShivaVPN. Рассчитано на 3 дня.
День 1 — Доступы и репозитории¶
1.1 Получить доступы¶
| Сервис | URL | Как получить |
|---|---|---|
| GitLab | https://git.karmann.tech | Написать zardes — email для регистрации |
| Vaultwarden | https://vault.shivavpn.io | Зарегистрироваться, написать zardes для подтверждения |
| Grafana | https://monitor.karmann.tech | Логин/пароль: Vaultwarden → Monitoring → Grafana |
| Admin Panel | http://10.99.87.64 | Логин/пароль: Vaultwarden → Infrastructure → Admin Panel |
| Telegram | — | Попросить добавить в рабочие чаты (Max или zardes) |
1.2 SSH-ключи¶
# Создать ключ для инфраструктуры (если нет)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_shivavpn -C "shivavpn-devops"
# Добавить в SSH agent
ssh-add ~/.ssh/id_ed25519_shivavpn
# Показать публичный ключ (добавить в GitLab + сообщить zardes для доступа к серверам)
cat ~/.ssh/id_ed25519_shivavpn.pub
Добавить публичный ключ в GitLab: Settings → SSH Keys.
Список всех SSH-ключей: Доступ и SSH.
1.3 Клонировать репозитории¶
# Основная документация (этот wiki)
git clone git@git.karmann.tech:devops/documentation.git shivavpn-docs
# Monorepo (основной рабочий репозиторий — документация, скрипты, планы)
git clone git@git.karmann.tech:vpn/docs.git shivavpn
# Ansible (управление инфраструктурой)
git clone git@git.karmann.tech:devops/shiva-ansible.git
# VPN Config Service (Python FastAPI + worker)
git clone git@git.karmann.tech:vpn/vpn-config-service.git
1.4 Настроить Ansible vault¶
cd shiva-ansible/
# Получить vault password от zardes и сохранить:
echo "VAULT_PASSWORD_HERE" > .vault_pass
chmod 600 .vault_pass
# Проверить — должно расшифроваться без ошибок
ansible-vault view inventory/group_vars/vault.yml
1.5 Проверить SSH-доступ к внутренней сети¶
cd shivavpn/ # monorepo
# Проверить подключение
./scripts/ssh-internal.sh 10.99.87.249 "docker ps --format '{{.Names}}'"
./scripts/ssh-internal.sh 10.99.87.62 "docker exec vpn-db mysql -uvpn -p'$(см. Vaultwarden → Databases)' vpn -e 'SELECT 1'"
Пароль MySQL: Vaultwarden → Databases → MySQL PROD.
День 2 — Понять архитектуру¶
2.1 Прочитать обязательные документы¶
В таком порядке:
- Обзор инфраструктуры — общая схема, серверы, провайдеры
- IP-адреса — все внутренние и публичные IP
- Конфигурация сервисов — контейнеры, порты
- Доступ и SSH — ключи, скрипты, ~/.ssh/config
2.2 Изучить мониторинг¶
Открыть Grafana:
- Дашборд vpn-fleet-overview — общее состояние парка серверов
- Дашборд vpn-operations — ошибки sync, состояние worker
- Дашборд business-executive — метрики бизнеса
- Раздел Alerting — текущие и исторические алерты
Подробнее: Мониторинг.
2.3 Понять Config Delivery Flow¶
Пользователь запрашивает VPN-конфиг
→ Backend (Spring Boot) проверяет аккаунт в MySQL
→ Запрашивает конфиг у VPN Config Service (HTTP)
→ VCS отдаёт из PostgreSQL кэша (данные собранные с XUI через SSH)
→ Backend формирует VLESS URL и отдаёт клиенту
Детальнее: Config Delivery Flow.
2.4 Посмотреть живое состояние¶
# Что сейчас запущено на backend сервере
./scripts/ssh-internal.sh 10.99.87.249 "docker ps"
# Последние логи VCS worker
./scripts/ssh-internal.sh 10.99.87.249 "docker logs vpn-config-worker --tail 30"
# Backend health
curl -s http://10.99.87.249:8080/actuator/health
# Количество активных серверов
curl -s http://10.99.87.249:8000/api/v1/stats -H "X-API-Key: KEY" | python3 -m json.tool
День 3 — Практика¶
3.1 Запустить Ansible с --check¶
cd shiva-ansible/
# Проверить доступность всех серверов
ansible -i inventory/servers.ini all -m ping
# Запустить playbook в dry-run режиме (не меняет ничего)
ansible-playbook -i inventory/servers.ini playbooks/vpn.yml --check
3.2 Выполнить ежедневную проверку¶
Выполнить процедуры из Основных задач.
3.3 Изучить скрипты¶
В monorepo: DevOps скрипты — полный каталог с описанием и примерами.
Ключевые скрипты (monorepo: scripts/):
| Скрипт | Назначение |
|---|---|
ssh-internal.sh |
SSH к внутренним серверам через jump host |
audit_account.py |
Полная диагностика аккаунта пользователя |
check_vpn_server.py |
Проверка состояния VPN сервера (10 проверок) |
inventory_reconcile.py |
Аудит инвентаря Ansible ↔ MySQL ↔ VCS |
3.4 Изучить runbooks¶
Прочитать Runbooks — аварийные процедуры на все случаи (API упал, Redis, диск, DDoS, деплой, откат).
Команда¶
| Человек | Роль | Контакт |
|---|---|---|
| zardes (Konstantin) | DevOps Lead — инфраструктура, деплой, backend | Telegram @zardes |
| Max | Product Owner — бизнес-решения, приоритеты | Telegram |
| Nikita | Ops — доступ к инфраструктуре, провайдеры | Telegram |
Правила работы¶
- Все изменения в production — через CI/CD (не вручную)
- Перед любым изменением — читать существующие доки
- Коммиты — короткие, человеческие (без AI-стиля)
- Новые скрипты — проверить каталог скриптов (и
scripts/README.mdв monorepo) - Пароли — только Vaultwarden, никогда в git
Инструменты¶
| Инструмент | Назначение | URL / команда |
|---|---|---|
| Grafana | Мониторинг, алерты | https://monitor.karmann.tech |
| GitLab | Репозитории, CI/CD | https://git.karmann.tech |
| Vaultwarden | Пароли и секреты | https://vault.shivavpn.io |
| Ansible | IaC, деплой серверов | cd shiva-ansible && ansible-playbook ... |
| ssh-internal.sh | SSH к внутренним серверам | ./scripts/ssh-internal.sh 10.99.87.249 |
| Серверный инвентарь | servers.ini в shiva-ansible | ansible -i inventory/servers.ini vpn -m ping |
Следующие шаги¶
- Изучить Whitelist серверы — особая категория
- Прочитать VPN Config Service — как работает синхронизация
- Изучить ADR 001: Ansible как IaC — почему Ansible
- Поучаствовать в ротации серверов (zardes введёт)