No description
Find a file
jack fde51352d7 feat: migrate monitoring to tools server, fix Outline S3 uploads
Monitoring stack (Prometheus, AlertManager, Grafana, Loki, Uptime Kuma)
moved from main to tools server. Prometheus now scrapes main exporters
over network (ip_main:9100/8080). Promtail pushes logs to ip_tools:3100.
Traefik routes for dash/status.walava.io updated to ip_tools. discord-bot
PROMETHEUS_URL updated to http://ip_tools:9090.

Outline S3 fix: remove AWS_S3_ACL=private (Timeweb doesn't support
per-object ACLs — caused upload failures). Add CORS configuration task
for browser-side presigned uploads.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 04:10:28 +07:00
.claude Add Forgejo Actions CI/CD with act_runner 2026-03-21 21:28:15 +07:00
.forgejo/workflows feat: add Discord bot service + workflow_dispatch trigger 2026-03-26 05:27:42 +07:00
docs docs: update STATUS.md — reflect walava.io migration and service layout 2026-03-27 03:11:54 +07:00
inventory chore: add outline-mcp to tools stack, clean up stale authelia vars 2026-03-26 22:54:14 +07:00
playbooks feat: add n8n, outline routes, remove syncthing, fix backup awscli 2026-03-22 06:19:39 +07:00
roles feat: migrate monitoring to tools server, fix Outline S3 uploads 2026-03-27 04:10:28 +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

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