chore: full project cleanup + documentation
Syncthing removal (was already decided, now fully removed): - roles/base/tasks/firewall.yml: remove 3 UFW rules (ports 22000/21027) - inventory/group_vars/all/main.yml: remove domain_sync, domain_mon, syncthing_basic_auth_htpasswd - roles/services/templates/env.j2: remove DOMAIN_SYNC - roles/services/templates/authelia/configuration.yml.j2: remove Syncthing 2FA rule - roles/services/tasks/directories.yml: remove syncthing/config and syncthing/data dirs - roles/services/defaults/main.yml: remove syncthing_image - roles/services/tasks/main.yml: remove syncthing image pull Security hardening: - inventory/group_vars/all/main.yml: move cloudflare_zone_id to vault - inventory/group_vars/all/vault.yml: add vault_cloudflare_zone_id .gitignore improvements: - add *.env, acme.json, *.log, editor dirs, venv, temp files Documentation (new): - docs/STATUS.md: all services, servers, known issues - docs/BACKLOG.md: prioritized task list, done/todo - docs/DECISIONS.md: architecture decisions and rationale - CLAUDE.md: rewritten with read-first docs, rules, full arch reference Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
cd562da4d2
commit
66b70827df
13 changed files with 542 additions and 191 deletions
35
.gitignore
vendored
35
.gitignore
vendored
|
|
@ -1,6 +1,39 @@
|
|||
# Ansible
|
||||
.vault-password-file
|
||||
*.vault-password
|
||||
*.retry
|
||||
.ansible_cache/
|
||||
*.fact
|
||||
|
||||
# Python
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.pyo
|
||||
.venv/
|
||||
venv/
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
.ansible_cache/
|
||||
Thumbs.db
|
||||
|
||||
# Editor
|
||||
.idea/
|
||||
.vscode/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# Secrets (never commit these even by accident)
|
||||
*.env
|
||||
.env.*
|
||||
acme.json
|
||||
secrets.yml
|
||||
credentials.yml
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
|
||||
# Temp
|
||||
/tmp/
|
||||
*.tmp
|
||||
*.bak
|
||||
|
|
|
|||
100
CLAUDE.md
100
CLAUDE.md
|
|
@ -2,60 +2,110 @@
|
|||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Commands
|
||||
## ⚠️ ЧИТАЙ СНАЧАЛА
|
||||
|
||||
Перед любой работой прочитай эти файлы:
|
||||
|
||||
- **`docs/STATUS.md`** — текущее состояние всех сервисов, известные проблемы
|
||||
- **`docs/BACKLOG.md`** — что нужно сделать (приоритеты), что уже сделано
|
||||
- **`docs/DECISIONS.md`** — почему всё устроено именно так
|
||||
|
||||
После завершения работы **обнови** соответствующий документ.
|
||||
|
||||
---
|
||||
|
||||
## Правила работы
|
||||
|
||||
1. **Только через CI/CD** — никогда не фикси что-либо вручную на сервере. Внеси изменение, закоммить, запуши → CI/CD сам задеплоит. Потом проверь результат.
|
||||
2. **Syncthing удалён** — не предлагай его вернуть, не упоминай как отсутствующий сервис.
|
||||
3. **Секреты** — все в `inventory/group_vars/all/vault.yml` с префиксом `vault_`. В `main.yml` только алиасы `"{{ vault_* }}"`. Никаких plaintext секретов.
|
||||
4. **Синтаксис-чек перед коммитом** — `ansible-playbook playbooks/deploy.yml --syntax-check`.
|
||||
|
||||
---
|
||||
|
||||
## Команды
|
||||
|
||||
```bash
|
||||
# Prerequisites (once, on operator machine)
|
||||
# Prerequisites (один раз, на машине оператора)
|
||||
ansible-galaxy collection install community.general community.docker ansible.posix
|
||||
echo "yourpassword" > ~/.vault-password-file && chmod 600 ~/.vault-password-file
|
||||
|
||||
# First-time server setup (run as root)
|
||||
# Первичная настройка сервера (от root)
|
||||
ansible-playbook playbooks/bootstrap.yml -u root
|
||||
|
||||
# Idempotent deploy (all subsequent runs)
|
||||
# Деплой основного сервера
|
||||
ansible-playbook playbooks/deploy.yml
|
||||
|
||||
# Edit secrets
|
||||
ansible-vault edit inventory/group_vars/all.vault.yml
|
||||
# Деплой tools-сервера
|
||||
ansible-playbook playbooks/tools.yml
|
||||
|
||||
# Check syntax without connecting
|
||||
# Деплой всего сразу
|
||||
ansible-playbook playbooks/site.yml
|
||||
|
||||
# Редактировать секреты
|
||||
ansible-vault edit inventory/group_vars/all/vault.yml
|
||||
|
||||
# Проверка синтаксиса (без подключения к серверу)
|
||||
ansible-playbook playbooks/deploy.yml --syntax-check
|
||||
ansible-playbook playbooks/tools.yml --syntax-check
|
||||
|
||||
# Dry run
|
||||
ansible-playbook playbooks/deploy.yml --check
|
||||
|
||||
# Run only specific role
|
||||
# Только конкретная роль
|
||||
ansible-playbook playbooks/deploy.yml --tags base
|
||||
ansible-playbook playbooks/deploy.yml --tags docker
|
||||
ansible-playbook playbooks/deploy.yml --tags services
|
||||
ansible-playbook playbooks/deploy.yml --tags backup
|
||||
```
|
||||
|
||||
## Architecture
|
||||
---
|
||||
|
||||
**Traffic flow:** Internet → Traefik (ports 80/443, TLS via Let's Encrypt ACME) → services. Ports 80 and 443 are open on the server.
|
||||
## Архитектура
|
||||
|
||||
**Secrets:** All secrets live in `inventory/group_vars/all.vault.yml` (Ansible Vault, AES-256). The file `all.yml` references them via `"{{ vault_* }}"` aliases. The vault password must exist at `~/.vault-password-file` on the operator machine — this path is in `.gitignore` and never committed.
|
||||
**Серверы:**
|
||||
- `main` (87.249.49.32) — Traefik, Forgejo, Plane, Vaultwarden, Мониторинг, CI/CD runner
|
||||
- `tools` (85.193.83.9) — Outline wiki, n8n, docker-mailserver, SnappyMail
|
||||
|
||||
**Roles:**
|
||||
- `base` — OS hardening: UFW (allow SSH + 80 + 443), fail2ban, sshd config, deploy user
|
||||
- `docker` — Docker CE + Compose plugin via official apt repo
|
||||
- `services` — renders Jinja2 templates → `/opt/services/`, then runs `docker compose up`
|
||||
**Трафик:** Internet → Cloudflare proxy → Traefik (80/443) → сервисы.
|
||||
Порты 80/443 открыты только для IP-адресов Cloudflare (UFW whitelist).
|
||||
|
||||
**Templates → server files:**
|
||||
**Секреты:** `inventory/group_vars/all/vault.yml` (Ansible Vault AES-256).
|
||||
Пароль vault: `~/.vault-password-file` (в `.gitignore`, никогда не коммитить).
|
||||
|
||||
**TLS:** Wildcard сертификат `*.csrx.ru` через Cloudflare DNS-01 (Traefik certresolver).
|
||||
|
||||
**Роли:**
|
||||
- `base` — UFW, fail2ban, sshd, deploy user
|
||||
- `docker` — Docker CE + Compose plugin
|
||||
- `services` — основной стек (templates → `/opt/services/`, docker compose up)
|
||||
- `tools` — tools-стек (templates → `/opt/tools/`, docker compose up)
|
||||
- `backup` — hourly backup script → S3 cold (`visual-backup/data/`)
|
||||
|
||||
**Шаблоны → файлы на сервере:**
|
||||
- `roles/services/templates/docker-compose.yml.j2` → `/opt/services/docker-compose.yml`
|
||||
- `roles/services/templates/env.j2` → `/opt/services/.env` (mode 0600)
|
||||
- `roles/services/templates/traefik/traefik.yml.j2` → `/opt/services/traefik/traefik.yml`
|
||||
- `acme.json` created at `/opt/services/traefik/acme.json` (mode 0600, mounted into Traefik)
|
||||
- `roles/services/templates/traefik/dynamic/routes.yml.j2` → `/opt/services/traefik/dynamic/routes.yml`
|
||||
|
||||
**Docker networks:**
|
||||
- `backend` (internal) — traefik ↔ user-facing services
|
||||
- `forgejo-db` (internal) — forgejo ↔ its postgres
|
||||
- `plane-internal` (internal) — all plane components (api, worker, beat, db, redis, minio)
|
||||
**Добавление нового сервиса на main:**
|
||||
1. Добавить контейнер в `docker-compose.yml.j2` в сеть `backend`
|
||||
2. Добавить роутер в `routes.yml.j2` (НЕ docker labels — используется file provider)
|
||||
3. Добавить домен в `inventory/group_vars/all/main.yml`
|
||||
4. Добавить DNS A-запись в Cloudflare
|
||||
|
||||
**Adding a new service:** add container to `docker-compose.yml.j2` on the `backend` network with `traefik.enable=true` and `traefik.http.routers.X.tls.certresolver=letsencrypt` labels, add its domain variable to `all.yml`.
|
||||
**Добавление сервиса на tools:**
|
||||
1. Добавить контейнер в `roles/tools/templates/docker-compose.yml.j2`
|
||||
2. Добавить роутер в `routes.yml.j2` с `url: "http://{{ ip_tools }}:PORT"`
|
||||
3. Открыть порт в UFW (задача в `roles/tools/tasks/main.yml`)
|
||||
|
||||
## Deployment
|
||||
---
|
||||
|
||||
DNS: add A-records for each subdomain → server IP (or wildcard `*` → IP).
|
||||
## CI/CD
|
||||
|
||||
Fill `all.vault.yml` → set `domain_base` in `all.yml` → run bootstrap + deploy. Traefik obtains TLS certificates automatically on first request to each domain.
|
||||
Push в `master` → Forgejo Actions запускает:
|
||||
```
|
||||
ansible-playbook playbooks/deploy.yml
|
||||
ansible-playbook playbooks/tools.yml
|
||||
```
|
||||
Workflow: `.forgejo/workflows/deploy.yml`
|
||||
|
|
|
|||
94
docs/BACKLOG.md
Normal file
94
docs/BACKLOG.md
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
# Бэклог задач
|
||||
|
||||
> Задачи по приоритету. Обновляй этот файл при добавлении/завершении задач.
|
||||
> Последнее обновление: 2026-03-22
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Критично (сделать как можно скорее)
|
||||
|
||||
- [ ] **Добавить DNS-запись `dash.csrx.ru`** в Cloudflare
|
||||
A `dash` → `87.249.49.32` (proxied). Grafana сейчас недоступна по домену.
|
||||
|
||||
- [ ] **Бэкап tools-сервера**
|
||||
Добавить в `roles/backup/` или создать отдельный скрипт для tools-сервера:
|
||||
- outline-db (PostgreSQL dump)
|
||||
- n8n_data (Docker volume)
|
||||
- mailserver/config (DKIM ключи, аккаунты)
|
||||
- snappymail/data
|
||||
|
||||
- [ ] **plane-minio не бэкапится**
|
||||
Вложения и файлы из Plane не входят в текущий бэкап. Нужен dump MinIO bucket `uploads`.
|
||||
|
||||
---
|
||||
|
||||
## 🟡 Высокий приоритет
|
||||
|
||||
- [ ] **Мониторинг tools-сервера**
|
||||
Добавить node-exporter на tools-сервер и scrape-конфиг в Prometheus.
|
||||
|
||||
- [ ] **mem_limit для plane-worker и plane-beat**
|
||||
Сейчас без ограничений памяти, риск OOM. Добавить `mem_limit: 256m`.
|
||||
|
||||
- [ ] **Проверить работу swap**
|
||||
`roles/base/tasks/swap.yml` должен создавать 2GB swap. Проверить что он реально создан на сервере.
|
||||
|
||||
- [ ] **Верификация бэкапов**
|
||||
Добавить еженедельную проверку: скачать последний бэкап из S3, сделать test restore в Docker.
|
||||
|
||||
---
|
||||
|
||||
## 🟢 Обычный приоритет
|
||||
|
||||
- [ ] **Алерты на сбой бэкапа**
|
||||
Если `backup-services` завершился с ошибкой — отправить алерт в Telegram.
|
||||
|
||||
- [ ] **Алерты на истечение TLS-сертификатов**
|
||||
Добавить Prometheus правило: предупреждение за 7 дней до истечения сертификата.
|
||||
|
||||
- [ ] **Prometheus → tools-сервер**
|
||||
Настроить federated scraping или remote_write для получения метрик tools-сервера.
|
||||
|
||||
- [ ] **Бакет S3 `visual-backup`**
|
||||
Убедиться что бакет создан в Timeweb как "холодное хранилище" (тип: COLD).
|
||||
|
||||
---
|
||||
|
||||
## 📋 Бэклог (без срока)
|
||||
|
||||
- [ ] **Обновление образов**
|
||||
Регулярно проверять новые версии (образы запинены в `defaults/main.yml`):
|
||||
- Forgejo (сейчас `:9`)
|
||||
- Traefik (сейчас `v3.3`)
|
||||
- Plane (сейчас `:stable`)
|
||||
- Authelia (сейчас `4.38`)
|
||||
|
||||
- [ ] **Автоматическое обновление Cloudflare IP-списков**
|
||||
UFW разрешает только Cloudflare IPs. Список захардкожен — нужен cron для обновления.
|
||||
|
||||
- [ ] **Логи mail-сервера в Loki**
|
||||
Добавить promtail pipeline для сбора логов mailserver с tools-сервера.
|
||||
|
||||
- [ ] **Двухфакторная аутентификация для n8n**
|
||||
n8n сейчас доступен только с rate-limit middleware, без 2FA через Authelia.
|
||||
|
||||
---
|
||||
|
||||
## ✅ Сделано
|
||||
|
||||
- [x] Traefik с wildcard TLS через Cloudflare DNS-01
|
||||
- [x] Vaultwarden (менеджер паролей)
|
||||
- [x] Forgejo + CI/CD через Forgejo Actions
|
||||
- [x] Plane (управление проектами)
|
||||
- [x] Outline wiki с email magic link авторизацией
|
||||
- [x] n8n автоматизация
|
||||
- [x] docker-mailserver (Postfix + Dovecot), аккаунты: noreply, admin, jack
|
||||
- [x] SnappyMail вебмейл на webmail.csrx.ru
|
||||
- [x] DKIM/SPF/DMARC DNS-записи для почты
|
||||
- [x] Мониторинг (Prometheus + Grafana + Loki + AlertManager)
|
||||
- [x] CrowdSec IDS + fail2ban
|
||||
- [x] Authelia 2FA SSO
|
||||
- [x] Uptime Kuma статус-страница
|
||||
- [x] Бэкап каждый час → S3 cold `data/`, 7 дней хранения
|
||||
- [x] Удаление Syncthing (домен, firewall правила, образ, переменные)
|
||||
- [x] cloudflare_zone_id перенесён из main.yml в vault
|
||||
106
docs/DECISIONS.md
Normal file
106
docs/DECISIONS.md
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
# Журнал архитектурных решений
|
||||
|
||||
> Фиксируй здесь: что решили, почему, какие альтернативы отвергли.
|
||||
> Формат: дата | решение | причина | альтернативы
|
||||
|
||||
---
|
||||
|
||||
## Инфраструктура
|
||||
|
||||
### Два сервера (main + tools)
|
||||
**Дата:** начало проекта
|
||||
**Решение:** Разделить сервисы на два VPS: main для ядра, tools для вспомогательных.
|
||||
**Причина:** main (1 vCPU / 2 GB RAM) перегружен — Plane + Forgejo + мониторинг занимают почти всю память. tools позволяет разгрузить.
|
||||
**Итог:** Outline, n8n, mail работают на tools. Traefik на main проксирует к tools через IP:PORT.
|
||||
|
||||
### Traefik вместо nginx/caddy
|
||||
**Дата:** начало проекта
|
||||
**Решение:** Traefik v3 как единственный точка входа.
|
||||
**Причина:** Автоматический TLS через Let's Encrypt, file provider для маршрутов, удобная интеграция с Docker.
|
||||
**Альтернативы:** nginx + certbot (ручной renewal), Caddy (проще но меньше гибкости).
|
||||
|
||||
### Cloudflare proxy + UFW whitelist
|
||||
**Дата:** начало проекта
|
||||
**Решение:** Порты 80/443 открыты только для IP Cloudflare.
|
||||
**Причина:** Скрывает реальный IP сервера, защита от DDoS на уровне Cloudflare, бесплатный WAF.
|
||||
**Важно:** Некоторые сервисы (wiki, vault, webmail) должны быть DNS-only (оранжевое облако off) — когда Cloudflare не поддерживает нужные порты или протоколы.
|
||||
|
||||
### Wildcard TLS через DNS-01
|
||||
**Дата:** начало проекта
|
||||
**Решение:** Один сертификат `*.csrx.ru` вместо отдельных на каждый поддомен.
|
||||
**Причина:** Новый сервис — ноль ожидания сертификата. Cloudflare DNS-01 работает без HTTP-challenge.
|
||||
**Конфиг:** `roles/services/templates/traefik/traefik.yml.j2` — certresolver `letsencrypt`.
|
||||
|
||||
---
|
||||
|
||||
## Безопасность
|
||||
|
||||
### Authelia для 2FA
|
||||
**Дата:** начало проекта
|
||||
**Решение:** Authelia + TOTP защищает admin-панели (Traefik dashboard, Plane god-mode).
|
||||
**Причина:** Одна точка SSO, не нужно настраивать auth в каждом сервисе.
|
||||
**Альтернативы:** Keycloak (тяжелее, требует больше ресурсов), Authentik (сложнее).
|
||||
|
||||
### CrowdSec community edition
|
||||
**Дата:** начало проекта
|
||||
**Решение:** CrowdSec без платного API ключа.
|
||||
**Причина:** Бесплатная tier достаточна. Анализирует логи Traefik + auth.log.
|
||||
**Ограничение:** Нет расширенных threat feeds — только community reputation.
|
||||
|
||||
### Syncthing — удалён
|
||||
**Дата:** 2026-03
|
||||
**Решение:** Удалить Syncthing полностью из инфраструктуры.
|
||||
**Причина:** Не используется. Открытые порты (22000, 21027) без сервиса — лишняя attack surface.
|
||||
**Что убрали:** UFW rules, docker image, domain_sync, переменную vault, Authelia правило.
|
||||
|
||||
---
|
||||
|
||||
## Сервисы
|
||||
|
||||
### Outline wiki — email magic link
|
||||
**Дата:** 2026-02
|
||||
**Решение:** Авторизация через email magic link (SMTP → docker-mailserver).
|
||||
**Причина:** Outline не поддерживает простую login/password аутентификацию без SSO.
|
||||
**Проблемы решённые:**
|
||||
- `guestSignin=true` в БД обязателен для email auth
|
||||
- `jwtSecret` в БД хранится в зашифрованном виде — при смене `SECRET_KEY` нужно пересоздать
|
||||
|
||||
### docker-mailserver вместо внешнего SMTP
|
||||
**Дата:** 2026-03
|
||||
**Решение:** Self-hosted Postfix + Dovecot на tools-сервере.
|
||||
**Причина:** Полный контроль, аккаунты @csrx.ru для приёма и отправки, нет зависимости от внешних SMTP.
|
||||
**Конфиг:** SSL_TYPE=letsencrypt через certbot с Cloudflare DNS-01. DKIM через opendkim.
|
||||
**Альтернативы:** Mailgun/SendGrid (только отправка, без приёма), Maddy (менее зрелый).
|
||||
|
||||
### Бэкап в Timeweb S3 cold
|
||||
**Дата:** 2026-03
|
||||
**Решение:** Hourly backup → S3 cold storage `visual-backup/data/`, 7 дней хранения.
|
||||
**Причина:** Дешевле горячего хранилища, бэкапы не нужны быстро — приемлемая задержка восстановления.
|
||||
**Команда:** `aws s3 cp ... --storage-class COLD`
|
||||
|
||||
### SnappyMail вместо Roundcube
|
||||
**Дата:** 2026-03
|
||||
**Решение:** djmaze/snappymail как веб-клиент почты.
|
||||
**Причина:** Лёгкий, современный UI, простой Docker образ.
|
||||
**Альтернативы:** Roundcube (тяжелее, требует MySQL), Rainloop (заброшен).
|
||||
|
||||
---
|
||||
|
||||
## CI/CD
|
||||
|
||||
### Forgejo Actions
|
||||
**Дата:** начало проекта
|
||||
**Решение:** Forgejo Actions + act_runner для CI/CD деплоя.
|
||||
**Причина:** Self-hosted, интегрировано с Forgejo, совместимо с GitHub Actions синтаксисом.
|
||||
**Принцип:** Push в master → `ansible-playbook deploy.yml` + `tools.yml`. Никаких ручных правок на сервере.
|
||||
|
||||
---
|
||||
|
||||
## Известные компромиссы
|
||||
|
||||
| Компромисс | Почему так | Что улучшить |
|
||||
|-----------|-----------|-------------|
|
||||
| act_runner монтирует `/var/run/docker.sock` | Нужен для запуска job-контейнеров | Rootless Docker или ограниченный API |
|
||||
| Plane использует `:stable` тег | Plane не публикует версионные теги | Мониторить GitHub releases |
|
||||
| Мониторинг на main (не на отдельном сервере) | mon-сервер пока не задеплоен | Создать `playbooks/mon.yml` |
|
||||
| Нет бэкапа tools-сервера | Бэкап роль подключена только к main | Добавить в `tools.yml` |
|
||||
99
docs/STATUS.md
Normal file
99
docs/STATUS.md
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
# Статус инфраструктуры
|
||||
|
||||
> Обновляй этот файл при каждом значимом изменении.
|
||||
> Последнее обновление: 2026-03-22
|
||||
|
||||
---
|
||||
|
||||
## Серверы
|
||||
|
||||
| Сервер | IP | Роль | Состояние |
|
||||
|--------|----|------|-----------|
|
||||
| **main** | 87.249.49.32 | Основные сервисы + мониторинг | ✅ Работает |
|
||||
| **tools** | 85.193.83.9 | Wiki + автоматизация + почта | ✅ Работает |
|
||||
|
||||
---
|
||||
|
||||
## Сервисы
|
||||
|
||||
### Основной сервер (main, 87.249.49.32)
|
||||
|
||||
| Сервис | Домен | Статус | Заметки |
|
||||
|--------|-------|--------|---------|
|
||||
| Traefik | — | ✅ | Реверс-прокси, TLS wildcard `*.csrx.ru` через Cloudflare DNS-01 |
|
||||
| Vaultwarden | vault.csrx.ru | ✅ | Менеджер паролей |
|
||||
| Forgejo | git.csrx.ru | ✅ | Git-сервер, SSH на порту 2222 |
|
||||
| Forgejo Actions | — | ✅ | CI/CD runner, деплой через push в master |
|
||||
| Plane | plane.csrx.ru | ✅ | Управление проектами |
|
||||
| Grafana | dash.csrx.ru | ✅ | Дашборды мониторинга (нет DNS-записи — нужно добавить A→87.249.49.32) |
|
||||
| Prometheus | — | ✅ | Сбор метрик, 30 дней хранения |
|
||||
| Loki + Promtail | — | ✅ | Сбор логов |
|
||||
| AlertManager | — | ✅ | Алерты в Telegram |
|
||||
| CrowdSec | — | ✅ | IDS, банит злоумышленников |
|
||||
| Authelia | auth.csrx.ru | ✅ | 2FA SSO, защищает traefik dashboard и plane/god-mode |
|
||||
| Uptime Kuma | status.csrx.ru | ✅ | Публичная страница статуса |
|
||||
| Бэкап | — | ✅ | Каждый час → S3 cold `visual-backup/data/` |
|
||||
|
||||
### Tools-сервер (tools, 85.193.83.9)
|
||||
|
||||
| Сервис | Домен | Статус | Заметки |
|
||||
|--------|-------|--------|---------|
|
||||
| Outline | wiki.csrx.ru | ✅ | Wiki, аутентификация через email magic link |
|
||||
| n8n | n8n.csrx.ru | ✅ | Автоматизация workflow |
|
||||
| docker-mailserver | mail.csrx.ru | ✅ | Postfix + Dovecot, порты 25/465/587/993 |
|
||||
| SnappyMail | webmail.csrx.ru | ✅ | Веб-клиент почты |
|
||||
|
||||
### Почта (@csrx.ru)
|
||||
|
||||
| Аккаунт | Назначение |
|
||||
|---------|-----------|
|
||||
| noreply@csrx.ru | Системные письма (Outline magic link) |
|
||||
| admin@csrx.ru | Администратор |
|
||||
| jack@csrx.ru | Личный |
|
||||
|
||||
**DNS-записи для почты:**
|
||||
- A `mail.csrx.ru` → 85.193.83.9
|
||||
- MX `csrx.ru` → `mail.csrx.ru` (priority 10)
|
||||
- TXT `csrx.ru` → `v=spf1 mx ~all`
|
||||
- TXT `_dmarc.csrx.ru` → `v=DMARC1; p=quarantine; rua=mailto:admin@csrx.ru`
|
||||
- TXT `mail._domainkey.csrx.ru` → DKIM-ключ (генерируется автоматически при первом деплое)
|
||||
|
||||
---
|
||||
|
||||
## CI/CD
|
||||
|
||||
- Репозиторий: `git.csrx.ru/jack/infra`
|
||||
- Триггер: push в `master` запускает `ansible-playbook playbooks/deploy.yml` + `playbooks/tools.yml`
|
||||
- Runner: `act_runner` на основном сервере
|
||||
- **Правило**: все изменения только через git, никаких ручных правок на сервере
|
||||
|
||||
---
|
||||
|
||||
## Известные проблемы
|
||||
|
||||
| Проблема | Статус |
|
||||
|----------|--------|
|
||||
| Нет DNS-записи для `dash.csrx.ru` | ⚠️ Нужно добавить в Cloudflare вручную: A `dash` → 87.249.49.32 |
|
||||
| Tools-сервер не бэкапится | ⚠️ outline-db и n8n не входят в скрипт бэкапа |
|
||||
| Tools-сервер вне мониторинга | ⚠️ Prometheus не скрейпит tools-сервер |
|
||||
|
||||
---
|
||||
|
||||
## Сети Docker
|
||||
|
||||
### Основной сервер
|
||||
- `proxy` — публичная, только для Traefik (нужна для ACME)
|
||||
- `backend` — internal, Traefik ↔ сервисы
|
||||
- `forgejo-db` — internal, Forgejo ↔ PostgreSQL
|
||||
- `forgejo-ssh` — публичная, для SSH-клиентов
|
||||
- `plane-internal` — internal, все компоненты Plane
|
||||
- `runner-jobs` — публичная, для job-контейнеров CI/CD
|
||||
- `monitoring` — internal, стек мониторинга
|
||||
- `authelia-internal` — internal, Authelia ↔ Redis
|
||||
|
||||
### Tools-сервер
|
||||
- `front` — публичная, для port binding хоста
|
||||
- `outline-internal` — internal, Outline ↔ DB ↔ Redis
|
||||
- `n8n-internal` — internal, n8n изоляция
|
||||
- `mail-internal` — internal, Outline → mailserver (SMTP без auth)
|
||||
- `webmail-internal` — internal, SnappyMail изоляция
|
||||
|
|
@ -3,10 +3,9 @@
|
|||
domain_base: "csrx.ru"
|
||||
|
||||
# Derived domains
|
||||
domain_vault: "vault.{{ domain_base }}"
|
||||
domain_git: "git.{{ domain_base }}"
|
||||
domain_plane: "plane.{{ domain_base }}"
|
||||
domain_sync: "sync.{{ domain_base }}"
|
||||
domain_vault: "vault.{{ domain_base }}"
|
||||
domain_git: "git.{{ domain_base }}"
|
||||
domain_plane: "plane.{{ domain_base }}"
|
||||
domain_traefik: "traefik.{{ domain_base }}"
|
||||
domain_dashboard: "dash.{{ domain_base }}"
|
||||
domain_auth: "auth.{{ domain_base }}"
|
||||
|
|
@ -14,7 +13,6 @@ domain_status: "status.{{ domain_base }}"
|
|||
domain_wiki: "wiki.{{ domain_base }}"
|
||||
domain_n8n: "n8n.{{ domain_base }}"
|
||||
domain_webmail: "webmail.{{ domain_base }}"
|
||||
domain_mon: "mon.{{ domain_base }}"
|
||||
|
||||
# Service paths
|
||||
services_root: /opt/services
|
||||
|
|
@ -22,15 +20,14 @@ deploy_user: deploy
|
|||
deploy_group: deploy
|
||||
|
||||
# Secrets (from vault)
|
||||
acme_email: "{{ vault_acme_email }}"
|
||||
vaultwarden_admin_token: "{{ vault_vaultwarden_admin_token }}"
|
||||
forgejo_db_password: "{{ vault_forgejo_db_password }}"
|
||||
plane_db_password: "{{ vault_plane_db_password }}"
|
||||
plane_secret_key: "{{ vault_plane_secret_key }}"
|
||||
plane_minio_password: "{{ vault_plane_minio_password }}"
|
||||
traefik_dashboard_htpasswd: "{{ vault_traefik_dashboard_htpasswd }}"
|
||||
syncthing_basic_auth_htpasswd: "{{ vault_syncthing_basic_auth_htpasswd }}"
|
||||
forgejo_runner_token: "{{ vault_forgejo_runner_token }}"
|
||||
acme_email: "{{ vault_acme_email }}"
|
||||
vaultwarden_admin_token: "{{ vault_vaultwarden_admin_token }}"
|
||||
forgejo_db_password: "{{ vault_forgejo_db_password }}"
|
||||
plane_db_password: "{{ vault_plane_db_password }}"
|
||||
plane_secret_key: "{{ vault_plane_secret_key }}"
|
||||
plane_minio_password: "{{ vault_plane_minio_password }}"
|
||||
traefik_dashboard_htpasswd: "{{ vault_traefik_dashboard_htpasswd }}"
|
||||
forgejo_runner_token: "{{ vault_forgejo_runner_token }}"
|
||||
grafana_admin_password: "{{ vault_grafana_admin_password }}"
|
||||
alertmanager_telegram_token: "{{ vault_alertmanager_telegram_token }}"
|
||||
alertmanager_telegram_chat_id: "{{ vault_alertmanager_telegram_chat_id }}"
|
||||
|
|
@ -42,7 +39,7 @@ crowdsec_bouncer_key: "{{ vault_crowdsec_bouncer_key }}"
|
|||
s3_access_key: "{{ vault_s3_access_key }}"
|
||||
s3_secret_key: "{{ vault_s3_secret_key }}"
|
||||
cloudflare_dns_api_token: "{{ vault_cloudflare_dns_api_token }}"
|
||||
cloudflare_zone_id: "0935215d596a24a10866a81409ed8332"
|
||||
cloudflare_zone_id: "{{ vault_cloudflare_zone_id }}"
|
||||
outline_secret_key: "{{ vault_outline_secret_key }}"
|
||||
outline_utils_secret: "{{ vault_outline_utils_secret }}"
|
||||
outline_db_password: "{{ vault_outline_db_password }}"
|
||||
|
|
@ -52,10 +49,10 @@ mailserver_noreply_password: "{{ vault_mailserver_noreply_password }}"
|
|||
snappymail_admin_password: "{{ vault_snappymail_admin_password }}"
|
||||
mailserver_admin_password: "{{ vault_mailserver_admin_password }}"
|
||||
mailserver_jack_password: "{{ vault_mailserver_jack_password }}"
|
||||
|
||||
# Server IPs (used for cross-server Traefik routing)
|
||||
ip_main: "87.249.49.32"
|
||||
ip_tools: "85.193.83.9"
|
||||
ip_mon: "188.225.79.34"
|
||||
|
||||
# CI/CD deploy key (public key — not a secret)
|
||||
ci_deploy_pubkey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHdr9mRSSUqt7Ym4wA5RpVyz76wEXSOtVfh2/yCSMIbg ci-deploy@forgejo-runner"
|
||||
|
|
|
|||
|
|
@ -1,119 +1,122 @@
|
|||
$ANSIBLE_VAULT;1.1;AES256
|
||||
30623734613733353435313365666533643366646439316363646561363135393030346536643133
|
||||
6265366262313032653361653330303038353738316135350a353735313436613034393962326233
|
||||
34373638656233386161373333656338386332306332616464316632653533343635666239363033
|
||||
3663653663316331610a326231316561333637356163343238616363383439613333333635633039
|
||||
30376463343366373431383162656139393362363763353438636662396439623836316561313663
|
||||
61363665623839656662663435306435656137666632353866393431636532656234653838343562
|
||||
62646634343430363939323632386332303465616361636438396231383130653531653839626364
|
||||
34663836656237613134366436323566383133613664356164633631343436336339346330636234
|
||||
66616536363163633365336438326464363839343033643063306430396366303564306332346338
|
||||
65396163343561626466303634626137323139666531393463346338646462393535356433643262
|
||||
32343265626339346631376662313432356535396539616361393233626365653431343134663539
|
||||
36313138653534323634313133353136663539653435313733636230396166343762306435633166
|
||||
33303130363161306538636331356266353036373139373163336265333037656433653464356262
|
||||
35646432646539333136643565323038303565643436363231386264373537613865636232393930
|
||||
38636261373364613962323431363037623636373932376439633136376437326432626562333135
|
||||
61373831626134353638666338396532626262343263653737616565366630323664636664366634
|
||||
61633064386463633631393263626166383335333463613563343031633363363735333839633562
|
||||
38386330383035393463313832323761613831666333383831316530663564373234393964643333
|
||||
32613938313365656331353537643038313138663461333639373062336531613465366431306430
|
||||
35386262393331396564646334643135623561396562666465666432396466636431343132313733
|
||||
38333236623163643536653233643839373238383061623339343935393139386164663736633137
|
||||
65386331303339656631376238333361666532346266316362353636653235646361663731393933
|
||||
66393133613337623965333763336230386232363434326438383462393933336133616333353863
|
||||
34636634393738373963353034616464656338633232303266353065636130636232396235376432
|
||||
62333530626331646638373339663831333866613463646332386630656535393836656163643763
|
||||
37303231643665323234383834393634343637383661636262653339636562616139343238653361
|
||||
39393430663436653433636434336561663632353539383437346531633836366237626331653966
|
||||
37306638333737653131303133343231373561323432386162326537353232613236396338303731
|
||||
33373635646131393832386435343463356331356537366437356666633136653164386133316462
|
||||
38636566636539666332393334613064323739353234393364663836343661636330336162363633
|
||||
63336135613536653662333839613736373833303464326637623561633561313561303731636437
|
||||
33626562626132323339363565306436656438383564333033633533363635663339363635393763
|
||||
61643231323065346533333538316161343563653062396165313463383633646366666563376539
|
||||
65333634623238326536393964303365383438666530326438353863616664366438373861666662
|
||||
64396635663631383339313939643032353336373834646566306337666239313761663938313337
|
||||
64633834386138356462343664323833333734666634343730356461383833656430336233636439
|
||||
36393030373438656161656362323764663432383139383661303630633461393135633861663664
|
||||
37393933613834303563303937633364646434643233656462333438623337363062663938653331
|
||||
34373035393263393730353332383836333438653566333561623362303962613337386537366662
|
||||
36393963353966303232323038386131303937383932663331313134323632613732313165363765
|
||||
64366666666538626261326132666365336634323661323436633336383032383662633565663437
|
||||
39373235393230626236346466363436616333363334636330356531393736623266636665396235
|
||||
30386265373031646638393032353233353936626637303436366633643164613064373436633463
|
||||
33386566363337663332323235633139326263633131323362633637383838613830313439373633
|
||||
33346532626163633333623539653438623866363262623932386631336336666138303764643232
|
||||
30396261383336306330656635626136383061376138666339383030653165336434383939313731
|
||||
63613463616166303761326537613835353063393762653365373939623639653531663638646264
|
||||
61643633656531346438376439636262646137643365333136353231333065393231633761373835
|
||||
38383638373439393334366665616532303730646266383331306463633132613563306330313731
|
||||
66303330623231653430333334346463313134373965366463366266636333343461356337366161
|
||||
37353733616562393262353935336666376530323464313635626336386238626564383561336536
|
||||
62356135316437643462326461383032613633623038636638393861396639373165396633613465
|
||||
64646631616437656631393030343637613035343734623633333964626334313763636536623762
|
||||
30393733636632363031613263653732383066663539396230386261653864356132333164666238
|
||||
38313531316532323934656239663634383938313763373038623062323765363431383635636666
|
||||
31343236333461663135313639643433663061396531313262626637343130613534646438616436
|
||||
64346163616439336239363862616139353635333036646530376137616333376130353962373732
|
||||
37356336326136326536376265383839633063626137313137313736343961346239646339303337
|
||||
39313730613434363764636561656435623961646536623334326561383230383037383364653739
|
||||
30313065393734623039663138663664653465393532386361346130366532623233343833303062
|
||||
37633164316136633535663665363731623638633462346434363930383661656561646531326464
|
||||
31653830393837353737626431303562386465353036653934353831613333373932663163653235
|
||||
63656466376565643431643463623139343664383763336464393431366463356163633734653435
|
||||
32303463363335633739313535383761666131663432313963633834663231386365623736356430
|
||||
61666638633137333231316431356466623738643339383262323939636334303865633739623661
|
||||
35376666353934633963623961323137613264373166363339653830383538633565363239626133
|
||||
64393533323835346665613933643638346233326330663761616130303631663238313730353661
|
||||
36323931333062663466333431333338303337656562373036616565663338643234643536383161
|
||||
37363739303162643561646237646134316538633465303936646231636235373163306534633963
|
||||
34393130666232383865326162303935663638616136333465646230663131373930363339353233
|
||||
37656636366339616333333730313837303137386539333162386238326337656433353236303935
|
||||
65623233626561333962333362356430336131303936643462633938393661623466363830393366
|
||||
32343264396537636663313834373664383137646438326434636366376536626332333036373134
|
||||
38353432383765326162663632383662363361643362656562333537633932653963646634383139
|
||||
36306634373632356566383232386566396163656664333431383032303236346362393033363264
|
||||
34653139366663356530356265346466643138303030363536653339303664613661383735373330
|
||||
37373363663863376139313835643434643966656366626139386433303764646663623261663461
|
||||
31386531616663653739656334616663353861646439636665383837363161656535323932396239
|
||||
38663163396661626161346539356561636666626238303936303932303638616666616430613039
|
||||
32326139383138666237623961626633353337643431313966653038373933393132363563613834
|
||||
62393839326661366533626535356261353033333933376532386234626364366566333736613063
|
||||
61336638363938303830353937353161303037303861356664643235653561343864376366393561
|
||||
31313562643936613631303365653031616131336161663037376438666233373830303265643534
|
||||
32373936396238366333343763376633303639626237313438323237353635396366343963346539
|
||||
30623566636561303632643334333937343732626430616562356133356338393561663061633966
|
||||
31373033316564373864623438323165383435623430343032663033313334393239353732373935
|
||||
33646664643337643335613438396632333638663864363034663639343137643565303863383464
|
||||
32383365396465376130613063626664343962343035363239636638373361653730656437323432
|
||||
39326131306538396338353461653938336235343937343866313863376337313761363633626161
|
||||
62316437333631616564653835336435303663626136383761663330366637323062643338313234
|
||||
65633730343739323636333332383730626537633966613965663032626130663562663134306239
|
||||
38313861626231313836356662623033633066626137643033323065383938616166633232623733
|
||||
63343632653131623366393066623162626234643131663163366564333165326165653039613963
|
||||
62373565323661356261643563353561343037323531373562626561656232373933393537333333
|
||||
31343034653464653263306264313038316266363834353365636664316164636631353266613362
|
||||
36363738633034386462653431363261323631666132643333656265643334663861326632373232
|
||||
62633337316263336231326534663462623332653236353938623239633862636236383538313732
|
||||
32613837653066663936313164326634356265613063623466316161336439663633306166616263
|
||||
66353061353863663339396632383262366562643366633233363036653738376461616233376266
|
||||
64306163626361616365326561336465303664663031363134313433623834396266653034303964
|
||||
33336536316166653731313363396462613566313434326566346535386237343262316662376130
|
||||
33383763643934623839326639353663316635306134356163383635313566643162633365613231
|
||||
64356533313061666565376165303739353531666336633761393064376531383064393934323638
|
||||
33623533653931636138373335373561313638656338613935333366643834646130373137663262
|
||||
36353436363532346364333134346339653539343662316632336163616238336635326133323735
|
||||
65643063303139616166313362323932343037643862656133663163616131613533653263613363
|
||||
39373664363164643865656165643936616432396334396561646362666333633962353432636635
|
||||
36643138613738643134343635353334306564393836636537303334383764666533646466626231
|
||||
32623866333461613535336132323964623266636635323363333065343532613862383430366562
|
||||
30613734316630623939366461316262343766383138633461363437383563616233616661373066
|
||||
63396462306266306638303463376431653561363563633463333763343434646639613539383736
|
||||
35363465323862333930306636376565623333323064333464393932653665343136363036646461
|
||||
65633963343732613237393066356634666238633233613264623936616434353934626664623630
|
||||
37666262343231313764333262616237623337663764323737336431326438386339386235313934
|
||||
36626330643931303534343433333231373230343363356337613663336561373034333834393031
|
||||
30363233303862633663356561303763626164356165623961363339326664633566653966323434
|
||||
61383833343465646361303035383465666131393933663164343935363639623435363334303339
|
||||
3736373365623164383034663836653165356564353563656265
|
||||
38623734633034386664333334383830336637343861383134323961363536333136346436363838
|
||||
3836343032363036633735316362646165623030613161320a663961653037633132376166303635
|
||||
30653738383130393738383931323535633631303434343233663463346635376561313662336664
|
||||
6434633432643536330a336635616262306632616332616361313738383239316135393735643063
|
||||
39336634306164363632373066313866366462653536313537396539363235626339303334353031
|
||||
65663866626361383663343834333466376339383463366235343166323361366131643534383665
|
||||
64663038316634376161633161366663376232636535356239333733303933396561373235363863
|
||||
35366335313066343835663362313434363438313137643766323835393531306536346163313933
|
||||
31343930316637623830623666633164343765663434396365366134306439336164333466316133
|
||||
33346364613731623633346136313033333461623762313930323565313633346633396330646565
|
||||
33386264663561666330356662366430383532316639373536356166383365343035623564623832
|
||||
37353565303732316665363862363266343836393839663836666434333237326530613936376231
|
||||
33613439633265626166383162646530653339313530353136643338666633393036663665663539
|
||||
30333932343464636231323231353235623264316536386233353563623235373932316236356563
|
||||
65653533383064646130366236303064396662623664326662353737623437653730363463646139
|
||||
32333861663339343361383234383332623737626233323666343730626663363738333932643334
|
||||
64353365643334323735623937396664393561333434663139363739613532386265656366316136
|
||||
33303232663939353566376163366131393066646233333035396135653861643566633032656264
|
||||
65353338373661663466613263343866643664353063656333346363373065303263373863326163
|
||||
31386565396364353634636231306166393862326364373463393930373036373531323830346163
|
||||
34333262333734356436313032356337356336343138643463343635643234653639346337336138
|
||||
30333764333466356230626462353463316636636330383333646530623039316330313336656266
|
||||
38366338346562613864663961633439656234313662663661303665303466393863623164346464
|
||||
36333136303430313034653365343437343166643263356635636433613361663462396233336163
|
||||
64316530633063666465396331393030313666333265626634313635613335383037363366353638
|
||||
36366132356661316362643533336366326437326561393464366533656134633366643433653061
|
||||
38343839643935376430323563373733623334323562653666356333613130336537643864393737
|
||||
33353839313438306164666238313131353166316632623633326261393961613333336331643831
|
||||
33356636626161613263366261653262633661613766323835366562333062343462623439663462
|
||||
64306238386264626364303963376164626531356436353731383965306365386431356166336238
|
||||
61323235373033323433306161663832366330646339303235386133323630363064383930336233
|
||||
30636338656439376138363238323965653734336538363761633033626464313535653262363638
|
||||
39663763623637636635396430623539666162373439643832303766323061383133343865366466
|
||||
61653133343061366334343933623330313764666639313931636662383161613432366239613238
|
||||
30373034343864383630316233616434646131643337303132313362323935313333323534343032
|
||||
32666633616237353161363265376232346663343937393965343665396338613932363864303366
|
||||
33613062383531666437306436636364636535323631626163636437396165313663366432343938
|
||||
36306332353739636439343130353464646432313761326231643962616166366536656139643963
|
||||
36623134663364376237323639643930393664313866393338316135306666653733663930333266
|
||||
33396662396339623839643936626465666665396137623731333265363931343137643237623435
|
||||
39623132613435346231373632333135303666336533303363393530306533666566633565326466
|
||||
35356362646335323861343634386531633035393730646463623337333435663365616163333863
|
||||
37666132356463613064326438316132613564383234363134313739356134323236633636633237
|
||||
39343236663039383230336463316663363564383638343736613665343238613736646234663366
|
||||
35613364643164626364643034323766666266313561386539336437646337353730343363383434
|
||||
61346361613637656336346131363830366539653264376330356661363464316139303963663833
|
||||
63613632623934313366333965356630646237376636383138393731363564356131333838336538
|
||||
36666362336239633665613734323536393630653433643337666166306230623161666366356336
|
||||
32326161313432646465393365396265363634633633343065623762653438353139313839396163
|
||||
30633764656636303965616434373235643231633336626133356363386333623339373234646664
|
||||
66663066333063303465336338623165666164303531303332663964366461643931303863643061
|
||||
30336461643662393036356536663335643536613335323664326234623834383932653263633733
|
||||
36303864316361643766353439366230363532616562333062653632623737313931343064366433
|
||||
36626634323135333764343339313634323734613765343264386632373733326430363137303030
|
||||
66356637353930353539303062386564346166343237633239653037333561306365316635356131
|
||||
38613331383131303233646331623035626661313233346561383938323164356536306332623136
|
||||
38333765323836366535396464616332313665663166663161653330613764306630643665643739
|
||||
31663866653666333130316136393861666236343935396133636538323938376330346339366162
|
||||
62663137326339376136343230396462333966396235383331313566386664396137303663353437
|
||||
35363139666263666232346661643766656362343339396539346631393330346236633163393633
|
||||
36396165646231343364333662633639353437303634343065656461386563373531343234356131
|
||||
63653865623039626130633731306439613435353265306262386564373765306539623939666361
|
||||
38383131323061613362386438633866653131666261333838363134336138613462303939373062
|
||||
34396532316535666331336330306463643662346339646565303532653364383730383239616237
|
||||
62333832643038613837316538303931303537326663616564343531326461363536663033303133
|
||||
31353238656537396234636133616666333364383730653733396631373038313966663631356238
|
||||
33363636616336636166306234393538633133343535303166343766623136356162333163616135
|
||||
64386635656438643132623430616435353636313739373634653530386461643136333533396633
|
||||
34633561333963653036623632326131323664323938343735666138623534303136333165313763
|
||||
34633565383935643738666335633633353534386166306631613536373830663733363063306138
|
||||
34373637303438633330393037306665386131633964393137373963623438336232643439333261
|
||||
35633831376533376333336235326234633231643036363430646364653330313461333534623065
|
||||
31666131656366663962353230643839646661623165653530653533306563633166653839316633
|
||||
35356138636134323333323961393961366231353736383463626132643031613165623630346334
|
||||
32663464613230343839643166663538303734373263663061383031643538633634636632346531
|
||||
39663464373439663264376162613464346666326137386163306132383763343337653062366162
|
||||
33333431333133633438636633663133613138633732623833313264313766643131366634303234
|
||||
65323831643661396330393439306437333438646130326462303964376632306139363661636336
|
||||
36323738303436386431643332303862356634643464326130386662643833613835633335313635
|
||||
33643365326138326638343539303437643933643733383930633236663839306636333332316132
|
||||
65346531663265663439616332663964363639353061666531616164613139303265323137343062
|
||||
36653332326338633661323463303637393338613534343835323638376231656334333530323034
|
||||
34663036383261303463353232313431383837313162313061363265343431396337633731343365
|
||||
64333661333637343564343432353031303538303165383566656537383863643564333336646535
|
||||
34376533383766363131363664646635386133636263613532383137376233373130303264653231
|
||||
61326363313365396631346565306166366164653530636434346132666537653637363133313866
|
||||
34643130346539353736353936656139616230646637396264333839626339653638623839323361
|
||||
39303639373732616338383930663236333464386638646664306430656333366531623466353866
|
||||
36306333643336373330333661376333663964363964633364633731363831333536393064313566
|
||||
37313439386664623832656230376334643535343336663261363230323662306134663961323131
|
||||
37373630343164323839656237343861363633323865363532666438373936386531313532623938
|
||||
36326631373635323664353463396438643264613135626463653037303739633762636537653661
|
||||
64336236383631353766623536383063336636333566643434333237363635656634643437383838
|
||||
34653166646332336135303732373365636366343236393633326430326339646239656561336136
|
||||
38626162626236346162373335643964333136386438636234333238306264373663643963613339
|
||||
33333831353263393739653964313837636161373231663830383538363163393833623837633832
|
||||
35303061336632373630653634393633623533313561326639343934306231363265316163313137
|
||||
34633962613165616239333061613332613531326564613963346634356561626639643735623836
|
||||
63636333356536373239623034613331666230626638373233663937353036633936313333666164
|
||||
66343933373164653937326635356436306165363761393330353334633765333633383639303133
|
||||
32646534633762303232383332373932653866663035323666363039386632643062346562373035
|
||||
31353737383538313036656333623630363234356136343533333539356533623566336430373961
|
||||
65323738393466633930623334386365656163313836316165656138313936303364623763666266
|
||||
32383130346139623966303061303765363537303664383433633638643032333031326232633538
|
||||
34636636643031366335623362323062356534356163326663656530663835636165366430616564
|
||||
37343462663230653830613862373732636636346262353436323037656535343436356133663464
|
||||
62316635353064646564626366396565326233376465343264356165323664623834373562323664
|
||||
33333636373834346635386331383037623933643036653364383932373637383766393738353762
|
||||
36356233383139366431363637376265383639323738643133653764663734666638363537303763
|
||||
65356535323365326337626464316138386464373566383866356639613961353130356233306630
|
||||
32306633393961336363346561376636346466613161643236353038313665626161383830313839
|
||||
35336632646462366235656236303362326262373130623166303833666430653563623764323230
|
||||
34616134386339373339386264626435666239363264356631653438323666613765626134353830
|
||||
37363930353833336337633861623264653163616565393962323839613063363537653634666439
|
||||
32663736333131663166303563376263353333303537346635383361306665653634653631626262
|
||||
65663165313036393437343332353937633538363533363165396136383261363234386236393962
|
||||
63333664656562623466366134373263366165623739326334386332653861353964343363386163
|
||||
33656365363131313535316262366666393936303366636439623032636131343537333438336562
|
||||
33336663373331643037306439363533643933313937346432636236633663393166386234333931
|
||||
32393166306461323631626561383630363561643830646239656330643837326635663438353665
|
||||
66363534356265386664376633363739373231663037643930653766373931333633
|
||||
|
|
|
|||
|
|
@ -83,27 +83,6 @@
|
|||
- "172.64.0.0/13"
|
||||
- "131.0.72.0/22"
|
||||
|
||||
- name: Allow Syncthing sync TCP
|
||||
community.general.ufw:
|
||||
rule: allow
|
||||
port: "22000"
|
||||
proto: tcp
|
||||
comment: "Syncthing sync"
|
||||
|
||||
- name: Allow Syncthing sync UDP
|
||||
community.general.ufw:
|
||||
rule: allow
|
||||
port: "22000"
|
||||
proto: udp
|
||||
comment: "Syncthing sync"
|
||||
|
||||
- name: Allow Syncthing discovery UDP
|
||||
community.general.ufw:
|
||||
rule: allow
|
||||
port: "21027"
|
||||
proto: udp
|
||||
comment: "Syncthing discovery"
|
||||
|
||||
- name: Set UFW default deny incoming
|
||||
community.general.ufw:
|
||||
direction: incoming
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ plane_redis_image: "redis:7-alpine"
|
|||
# Последний стабильный тег на Docker Hub: RELEASE.2025-04-22T22-12-26Z
|
||||
# Рекомендуется перейти на alpine/minio или собирать из исходников.
|
||||
plane_minio_image: "minio/minio:RELEASE.2025-04-22T22-12-26Z" # https://hub.docker.com/r/minio/minio/tags
|
||||
syncthing_image: "syncthing/syncthing:1.27" # https://hub.docker.com/r/syncthing/syncthing/tags
|
||||
act_runner_image: "gitea/act_runner:0.3.0" # https://hub.docker.com/r/gitea/act_runner/tags
|
||||
prometheus_image: "prom/prometheus:v3.4.0" # https://hub.docker.com/r/prom/prometheus/tags
|
||||
node_exporter_image: "prom/node-exporter:v1.9.1" # https://hub.docker.com/r/prom/node-exporter/tags
|
||||
|
|
|
|||
|
|
@ -22,8 +22,6 @@
|
|||
- forgejo/db
|
||||
- plane/pgdata
|
||||
- plane/media
|
||||
- syncthing/config
|
||||
- syncthing/data
|
||||
- act_runner
|
||||
- prometheus
|
||||
- grafana/provisioning/datasources
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
- "{{ plane_db_image }}"
|
||||
- "{{ plane_redis_image }}"
|
||||
- "{{ plane_minio_image }}"
|
||||
- "{{ syncthing_image }}"
|
||||
- "{{ act_runner_image }}"
|
||||
- "{{ prometheus_image }}"
|
||||
- "{{ node_exporter_image }}"
|
||||
|
|
|
|||
|
|
@ -64,11 +64,6 @@ access_control:
|
|||
policy: two_factor
|
||||
subject: "group:admins"
|
||||
|
||||
# Syncthing — только admin, требует 2FA
|
||||
- domain: "{{ domain_sync }}"
|
||||
policy: two_factor
|
||||
subject: "group:admins"
|
||||
|
||||
# Plane god-mode — только admin, требует 2FA
|
||||
- domain: "{{ domain_plane }}"
|
||||
resources:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ DOMAIN_BASE={{ domain_base }}
|
|||
DOMAIN_VAULT={{ domain_vault }}
|
||||
DOMAIN_GIT={{ domain_git }}
|
||||
DOMAIN_PLANE={{ domain_plane }}
|
||||
DOMAIN_SYNC={{ domain_sync }}
|
||||
DOMAIN_TRAEFIK={{ domain_traefik }}
|
||||
FORGEJO_RUNNER_TOKEN={{ forgejo_runner_token }}
|
||||
GRAFANA_ADMIN_PASSWORD={{ grafana_admin_password }}
|
||||
|
|
|
|||
Loading…
Reference in a new issue