Files
mypointvpn/src/serverus
2026-09-24 17:05:42 +04:00
..
2026-09-24 17:05:42 +04:00
2026-09-24 17:05:42 +04:00
2026-09-24 17:05:42 +04:00
2026-09-24 17:05:42 +04:00
2026-09-24 17:05:42 +04:00
2026-09-24 17:05:42 +04:00
2026-09-24 17:05:42 +04:00
2026-09-24 17:05:42 +04:00

Serverus

Библиотека реализующая интерфейс управления серверами и докер сервисами на серверах.

Функционал

Настройка нового сервера после установки:

Базово все сервера имеют общую настройку. Им всегда нужно тюнить ssh, таблицу маршрутизации и выполнять обновление.

Специализации серверов:

  • Платформа для докер-сервисов: Поднятие, мониторинг и остановка сервисов
    • требуется один сервер, на котором будет установлен докер
    • доменные имена задаются конкретным сервисам
    • нужно мониторить нагрузку и потребление ресурсов
  • Система для маскировки трафика и обхода блокировок
    • требуется 2 сервера:
      1. для настройки 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/.