No description
Find a file
jack 44ccdf4882
Some checks failed
CI/CD / syntax-check (push) Successful in 1m30s
CI/CD / deploy (push) Failing after 6m8s
refactor: remove tools server, Vaultwarden, monitoring stack; rename plane→hub
- Remove tools server entirely (roles/tools, playbooks/tools.yml, CI deploy step)
- Remove Vaultwarden (already absent from compose, clean up vars)
- Remove node-exporter, cadvisor, promtail from main stack
- Remove grafana/uptime-kuma Traefik routes (pointed to tools)
- Remove monitoring network from docker-compose
- Remove tools vault vars (grafana_admin_password, alertmanager telegram)
- Rename domain_plane: plane.walava.io → hub.walava.io
- Update CI workflow to only deploy main server
- Update STATUS.md and BACKLOG.md to reflect current state
2026-03-27 19:05:19 +07:00
.claude refactor: remove tools server, Vaultwarden, monitoring stack; rename plane→hub 2026-03-27 19:05:19 +07:00
.forgejo/workflows refactor: remove tools server, Vaultwarden, monitoring stack; rename plane→hub 2026-03-27 19:05:19 +07:00
docs refactor: remove tools server, Vaultwarden, monitoring stack; rename plane→hub 2026-03-27 19:05:19 +07:00
inventory refactor: remove tools server, Vaultwarden, monitoring stack; rename plane→hub 2026-03-27 19:05:19 +07:00
playbooks refactor: remove tools server, Vaultwarden, monitoring stack; rename plane→hub 2026-03-27 19:05:19 +07:00
roles refactor: remove tools server, Vaultwarden, monitoring stack; rename plane→hub 2026-03-27 19:05:19 +07:00
terraform chore: rename servers to main and tools in Timeweb 2026-03-27 04:27:23 +07:00
.gitignore chore: full project cleanup + documentation 2026-03-22 19:58:12 +07:00
ansible.cfg Initial commit 2026-03-20 19:39:26 +07:00
CLAUDE.md chore: project cleanup and docs update 2026-03-23 17:00:35 +07:00
dns-zone.zone feat(mail): rename mail→mx, webmail→mail.csrx.ru + reliability 2026-03-22 20:07:59 +07:00
README.md Initial commit 2026-03-20 19:39:26 +07:00

Infra

Ansible + Docker инфраструктура для команды. Все сервисы доступны через HTTPS — трафик принимается напрямую на портах 80/443, TLS-сертификаты выдаются автоматически через Let's Encrypt.

Сервисы:

  • vault.csrx.ru — Vaultwarden (менеджер паролей)
  • git.csrx.ru — Forgejo (Git)
  • plane.csrx.ru — Plane (управление проектами)
  • sync.csrx.ru — Syncthing (синхронизация Obsidian)
  • traefik.csrx.ru — Traefik dashboard

Что нужно перед запуском

1. На машине оператора

# Ansible
pip install ansible

# Коллекции
ansible-galaxy collection install community.general community.docker ansible.posix

# SSH-ключ (если нет)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519

Шаг 1 — DNS

Добавить A-записи у DNS-провайдера: каждый субдомен → 87.249.49.32.

Или wildcard (если провайдер поддерживает): *87.249.49.32.

Запись Значение
vault.csrx.ru 87.249.49.32
git.csrx.ru 87.249.49.32
plane.csrx.ru 87.249.49.32
sync.csrx.ru 87.249.49.32
traefik.csrx.ru 87.249.49.32

Шаг 2 — Заполнить секреты

Отредактировать inventory/group_vars/all.vault.yml:

vault_acme_email: "you@example.com"          # email для Let's Encrypt уведомлений

vault_vaultwarden_admin_token: "..."          # придумать длинный пароль

vault_forgejo_db_password: "..."              # придумать пароль для PostgreSQL
vault_plane_db_password: "..."                # придумать пароль для PostgreSQL
vault_plane_secret_key: "..."                 # сгенерировать: openssl rand -hex 32
vault_plane_minio_password: "..."             # придумать пароль для MinIO

# Генерировать командой: htpasswd -nb admin 'yourpassword'
# Знак $ нужно удваивать: $apr1$ → $$apr1$
vault_traefik_dashboard_htpasswd: "admin:$$apr1$$..."
vault_syncthing_basic_auth_htpasswd: "admin:$$apr1$$..."

Сгенерировать нужные значения:

# plane_secret_key
openssl rand -hex 32

# htpasswd (нужен apache2-utils или httpd-tools)
htpasswd -nb admin 'yourpassword'
# macOS без установки:
python3 -c "import crypt; print('admin:' + crypt.crypt('yourpassword', crypt.mksalt(crypt.METHOD_MD5)))"

Затем зашифровать файл:

# Создать файл с паролем vault
echo "придумать-пароль-для-vault" > ~/.vault-password-file
chmod 600 ~/.vault-password-file

# Зашифровать
ansible-vault encrypt inventory/group_vars/all.vault.yml

~/.vault-password-file — только на машине оператора, никогда не коммитить.


Шаг 3 — Указать домен

В inventory/group_vars/all.yml установить:

domain_base: "csrx.ru"   # уже стоит, изменить если нужно

Шаг 4 — Первый запуск (от root)

# Создаёт пользователя deploy, устанавливает sudo
ansible-playbook playbooks/bootstrap.yml -u root

Шаг 5 — Деплой

ansible-playbook playbooks/deploy.yml

Устанавливает Docker, настраивает UFW/fail2ban (открывает 22, 80, 443), поднимает все контейнеры. Traefik автоматически получит TLS-сертификаты при первом обращении к каждому домену.


Проверка

# На сервере
ssh deploy@87.249.49.32
docker compose -f /opt/services/docker-compose.yml ps

Все сервисы должны быть в статусе Up. Затем открыть в браузере:

  • https://vault.csrx.ru — Vaultwarden
  • https://git.csrx.ru — Forgejo (первичная настройка через веб)
  • https://plane.csrx.ru — Plane
  • https://sync.csrx.ru — Syncthing (логин/пароль из syncthing_basic_auth_htpasswd)
  • https://traefik.csrx.ru — Traefik dashboard (логин/пароль из traefik_dashboard_htpasswd)

Первичная настройка сервисов

Vaultwarden

  • Открыть https://vault.csrx.ru/admin → ввести vault_vaultwarden_admin_token
  • Создать пользователей через admin-панель (регистрация отключена)

Forgejo

  • Открыть https://git.csrx.ru → пройти wizard установки
  • Первый зарегистрированный пользователь становится администратором

Plane

  • Открыть https://plane.csrx.ru → создать workspace

Syncthing

  • Открыть https://sync.csrx.ru
  • Скопировать Device ID сервера
  • На каждом устройстве команды: добавить сервер как remote device, расшарить папку Obsidian vault

Обновление

ansible-playbook playbooks/deploy.yml

Идемпотентно — можно запускать сколько угодно раз.