Serverus
Библиотека реализующая интерфейс управления серверами и докер сервисами на серверах.
Функционал
Настройка нового сервера после установки:
Базово все сервера имеют общую настройку. Им всегда нужно тюнить ssh, таблицу маршрутизации и выполнять обновление.
Специализации серверов:
- Платформа для докер-сервисов: Поднятие, мониторинг и остановка сервисов
- требуется один сервер, на котором будет установлен докер
- доменные имена задаются конкретным сервисам
- нужно мониторить нагрузку и потребление ресурсов
- Система для маскировки трафика и обхода блокировок
- требуется 2 сервера:
- для настройки vpn панели
- для настройки прокси
- доменное имя
- желательно прокси
- требуется 2 сервера:
Минимальные характеристики:
- 2Gb ОЗУ
- 2 ядра процессора
- 20Gb диска
Делается под Debian 13.
Использование
Зависимости: ansible-core, ansible-runner (и cryptography, которая приходит с ansible-core). Django не нужен.
На машине, откуда идет управление, должен быть ssh. sshpass не нужен: вход по паролю идет через ssh_askpass.
from serverus import Host, Server, generate_keypair, generate_password, generate_ssh_port
keys = generate_keypair()
root_password = generate_password()
ssh_port = generate_ssh_port()
# свежий сервер: вход по паролю на 22 порт
server = Server(Host('1.2.3.4', private_key=keys.private_key))
result = server.bootstrap('пароль от провайдера', keys.public_key, root_password, ssh_port)
# дальше только по ключу на новом порту
server = Server(Host('1.2.3.4', port=ssh_port, private_key=keys.private_key))
server.facts().data # {'uname': ..., 'distribution': 'Debian', 'version': '13'}
server.release(generate_password())
Каждая операция возвращает Result(ok, status, data, error). Ключи, пароли и артефакты ansible живут во временной папке только на время запуска. Хранить ключи и пароли - задача вызывающей стороны.
bootstrap- проверяет Debian 13, прописывает ключ, меняет пароль root, обновляет систему, включает nftables и переносит ssh на новый порт с входом только по ключу. Порт меняется в два шага с проверкой входа по ключу, чтобы не потерять доступ.release- ставит новый пароль root, сбрасывает nftables, удаляет drop-in sshd (возвращаются настройки провайдера) и authorized_keys.facts-uname -aи версия ОС.
Настройки ssh пишутся в /etc/ssh/sshd_config.d/00-serverus.conf, основной конфиг не трогаем.
Плейбуки лежат в playbooks/, общие шаги в playbooks/tasks/. Новая операция - это плейбук и метод в Server или его наследнике.
Тесты: python -m unittest serverus.tests из src/.