No description
Find a file
jack d6015b76a3 fix: add proxy network to Outline and n8n for outbound internet access
Outline needs proxy network for SMTP (Resend) and S3 (Timeweb).
n8n needs proxy network for external API calls in workflows.
Both were only on backend (internal:true) so DNS/TCP to internet was blocked.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 03:54:19 +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 fix: add proxy network to Outline and n8n for outbound internet access 2026-03-27 03:54:19 +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

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