ssh root@94.25.50.91 # mirkwood
cd /Users/v.tatarnikov/Projects/WhiteBox
./dev/bin/deploy.sh # rsync только файлы
./dev/bin/deploy.sh -r # + рестарт wb-* сервисов
./dev/bin/deploy.sh -f # + рестарт + apply firewall AWG
./dev/bin/test.sh # все тесты (~151)
./dev/bin/test.sh --quick # быстрые
./dev/bin/test.sh --bot # только TG-бот
./dev/bin/test.sh --admin # только админка
./dev/bin/test.sh --cabinet # только кабинет
./dev/bin/test.sh --labs # только labs
./dev/bin/deploy-test.sh # smoke на проде (29 проверок)
ssh root@94.25.50.91
cd /opt/WhiteBox
# Материалы по лабораториям (50 шт)
python3 dev/bin/seed_lab_materials.py
python3 dev/bin/seed_lab_materials_extra.py
# Расстановка labs_access по тарифам
python3 dev/bin/seed_tariff_labs.py
systemctl restart wb-landing wb-tgbot wb-cabinet wb-admin wb-labs-agent
systemctl status wb-landing wb-tgbot wb-cabinet wb-admin wb-labs-agent
cd /Users/v.tatarnikov/Projects/AmneziaWGStatistic
# Деплой через scp/rsync (пока без deploy.sh)
scp Interfaces/AmneziaWGStatistic.py root@94.25.50.91:/opt/AmneziaWGStatistic/Interfaces/
scp config.yml root@94.25.50.91:/opt/AmneziaWGStatistic/
ssh root@94.25.50.91 systemctl restart awg-web
python3 -m pytest tests/ -q # все 957+ тестов
python3 -m pytest tests/ -k 'not slow' -q # быстрые
python3 -m pytest tests/test_billing_simulator_parity.py -v
# Web/API
systemctl restart awg-web
# Daemons
systemctl restart awg-pinger awg-netflow awg-dns-parser awg-telegram-bot
# Применить firewall немедленно (форс)
cd /opt/AmneziaWGStatistic
python3 contrib/bin/apply-firewall.py --force
# Безопасная ротация без regenerate_config (DEPRECATED) — через API
curl -X POST 'http://10.9.0.1/api/v1/users/<sid>/regenerate-keys' \
-H 'X-API-Key: whitebox-internal-key'
/opt/WhiteBox/ — основной проект/opt/wb-labs/ — lab-агент (отдельная инсталляция)/opt/AmneziaWGStatistic/ — VPN управление/etc/nginx/sites-enabled/wb-* — nginx конфиги WhiteBox/etc/nginx/sites-enabled/awg — nginx конфиг AWG-stats/etc/amnezia/amneziawg/awgX.conf — конфиги интерфейсов/etc/letsencrypt/live/dep816.ru/ — SSL/var/lib/awg/flask-secret.key — Flask SECRET_KEY (персистентный)/var/lib/awg-support/<id>.pdf — PDF support-тикетов/var/log/awg-support-diag.log — лог диагностики (исторический; теперь journald через awg-support-diag@.service)Роль: contrib/ansible/roles/central-server/. Основные task-файлы:
app.yml — деплой awg-web.service, awg-pinger.servicesystemd-timers.yml — все таймеры + drop-ins (qos.conf, route.conf) + awg-support-diag@.servicebilling.yml — awg-billing.service + timercoredns.yml — CoreDNS + awg-dns-parser.servicetelegram.yml — awg-telegram-bot.service# AWG critical units
systemctl list-units 'amneziawg-*' 'awg-*' --no-pager
# Зависимости (MySQL/Memcached) — статус-карточки на /admin/servers
curl -s http://10.9.0.1/api/v1/system/services -H 'X-API-Key: whitebox-internal-key' | jq
# WhiteBox
systemctl list-units 'wb-*' --no-pager
/var/lib/awg/flask-secret.key (с ProtectSystem=strict у awg-web.service нужен ReadWritePaths=/var/lib/awg). Если права/директория слетит — сессии инвалидируются.api_keys в config.yml — без них WhiteBox не сможет ходить в AWG API. Проверять при первом запуске нового сервера.systemctl restart amneziawg-awgX — безопасен только при наличии drop-in'ов qos.conf и route.conf. См. routing-recovery, QoS.venv: используем /Users/v.tatarnikov/Projects/_env/WhiteBox локально. На сервере /usr/bin/python3 напрямую (system venv не нужен).Changelog