No description
Find a file
jack 472c2b944b
Some checks failed
CI/CD / syntax-check (push) Successful in 1m0s
CI/CD / deploy (push) Failing after 5m1s
feat: replace Outline with Docmost
- Replace outline/outline-db/outline-redis with docmost/docmost-db/docmost-redis
- Update Traefik route: wiki → http://docmost:3000
- Update S3 bucket: walava-outline → walava-docmost (new bucket created: 481385)
- Remove env.outline.j2 deploy task (Docmost config is inline in compose)
- Update backup script: outline.sql.gz → docmost.sql.gz
- Update CORS task for walava-docmost bucket
- Add vault_docmost_app_secret + vault_docmost_db_password secrets
- Remove outline_mcp_image (no longer needed)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 09:31:51 +07:00
.claude feat: replace Outline with Docmost 2026-03-27 09:31:51 +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 feat: replace Outline with Docmost 2026-03-27 09:31:51 +07:00
playbooks feat: add n8n, outline routes, remove syncthing, fix backup awscli 2026-03-22 06:19:39 +07:00
roles feat: replace Outline with Docmost 2026-03-27 09:31:51 +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

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