chore: project cleanup and docs update
- Remove Syncthing mention from authelia comment in docker-compose - Fix backup.sh.j2 comment: hourly → every 6 hours - Update CLAUDE.md: add docs update rule, fix backup schedule note - Update STATUS.md: dash.csrx.ru fixed, PTR pending, backup schedule, mail hostnames - Update BACKLOG.md: mark DNS/PTR/backup-schedule done, add SnappyMail domain task - Update DECISIONS.md: fix backup section (no --storage-class COLD, correct schedule) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
634d50c25d
commit
207e1dcff0
6 changed files with 32 additions and 41 deletions
|
|
@ -17,9 +17,10 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||||
## Правила работы
|
## Правила работы
|
||||||
|
|
||||||
1. **Только через CI/CD** — никогда не фикси что-либо вручную на сервере. Внеси изменение, закоммить, запуши → CI/CD сам задеплоит. Потом проверь результат.
|
1. **Только через CI/CD** — никогда не фикси что-либо вручную на сервере. Внеси изменение, закоммить, запуши → CI/CD сам задеплоит. Потом проверь результат.
|
||||||
2. **Syncthing удалён** — не предлагай его вернуть, не упоминай как отсутствующий сервис.
|
2. **Syncthing удалён навсегда** — не упоминать, не предлагать вернуть.
|
||||||
3. **Секреты** — все в `inventory/group_vars/all/vault.yml` с префиксом `vault_`. В `main.yml` только алиасы `"{{ vault_* }}"`. Никаких plaintext секретов.
|
3. **Секреты** — все в `inventory/group_vars/all/vault.yml` с префиксом `vault_`. В `main.yml` только алиасы `"{{ vault_* }}"`. Никаких plaintext секретов.
|
||||||
4. **Синтаксис-чек перед коммитом** — `ansible-playbook playbooks/deploy.yml --syntax-check`.
|
4. **Синтаксис-чек перед коммитом** — `ansible-playbook playbooks/deploy.yml --syntax-check`.
|
||||||
|
5. **Обновляй доки** — после каждого изменения обновляй `docs/STATUS.md`, `docs/BACKLOG.md` или `docs/DECISIONS.md`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -80,7 +81,7 @@ ansible-playbook playbooks/deploy.yml --tags backup
|
||||||
- `docker` — Docker CE + Compose plugin
|
- `docker` — Docker CE + Compose plugin
|
||||||
- `services` — основной стек (templates → `/opt/services/`, docker compose up)
|
- `services` — основной стек (templates → `/opt/services/`, docker compose up)
|
||||||
- `tools` — tools-стек (templates → `/opt/tools/`, docker compose up)
|
- `tools` — tools-стек (templates → `/opt/tools/`, docker compose up)
|
||||||
- `backup` — hourly backup script → S3 cold (`visual-backup/data/`)
|
- `backup` — backup каждые 6 часов → S3 (`visual-backup/data/`), только для main-сервера
|
||||||
|
|
||||||
**Шаблоны → файлы на сервере:**
|
**Шаблоны → файлы на сервере:**
|
||||||
- `roles/services/templates/docker-compose.yml.j2` → `/opt/services/docker-compose.yml`
|
- `roles/services/templates/docker-compose.yml.j2` → `/opt/services/docker-compose.yml`
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,19 @@
|
||||||
# Бэклог задач
|
# Бэклог задач
|
||||||
|
|
||||||
> Задачи по приоритету. Обновляй этот файл при добавлении/завершении задач.
|
> Задачи по приоритету. Обновляй этот файл при добавлении/завершении задач.
|
||||||
> Последнее обновление: 2026-03-22
|
> Последнее обновление: 2026-03-23
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔴 Критично (сделать как можно скорее)
|
## 🔴 Критично (сделать как можно скорее)
|
||||||
|
|
||||||
- [ ] **rDNS (PTR-запись) для 85.193.83.9** в панели Timeweb
|
- [ ] **Настроить домен csrx.ru в SnappyMail** (admin панель → Domains)
|
||||||
Установить: `85.193.83.9 → mx.csrx.ru`
|
IMAP: `mailserver`, порт 993, SSL
|
||||||
Без PTR Gmail/Yandex будут отклонять или помечать наши письма как спам.
|
SMTP: `mailserver`, порт 587, STARTTLS, с авторизацией
|
||||||
Путь: Timeweb → Cloud VPS → tools-сервер → Сеть → Обратная DNS-запись
|
Без этого вход в mail.csrx.ru невозможен.
|
||||||
|
|
||||||
- [ ] **Обновить DNS в Cloudflare** после деплоя:
|
|
||||||
- Удалить старую A `mail` → 85.193.83.9 (DNS-only)
|
|
||||||
- Добавить A `mx` → 85.193.83.9 (DNS-only, orange cloud OFF)
|
|
||||||
- Изменить MX запись: `csrx.ru MX 10 mx.csrx.ru.`
|
|
||||||
- Обновить SPF: `v=spf1 mx -all`
|
|
||||||
- Обновить DMARC: `v=DMARC1; p=quarantine; rua=mailto:admin@csrx.ru; ...`
|
|
||||||
- Добавить CNAME `autoconfig` → `mx.csrx.ru`
|
|
||||||
- Добавить CNAME `autodiscover` → `mx.csrx.ru`
|
|
||||||
- A `mail` → 87.249.49.32 (proxied, уже есть — оставить)
|
|
||||||
A `dash` → `87.249.49.32` (proxied). Grafana сейчас недоступна по домену.
|
|
||||||
|
|
||||||
- [ ] **Бэкап tools-сервера**
|
- [ ] **Бэкап tools-сервера**
|
||||||
Добавить в `roles/backup/` или создать отдельный скрипт для tools-сервера:
|
Добавить скрипт для tools-сервера (роль backup не подключена к tools.yml):
|
||||||
- outline-db (PostgreSQL dump)
|
- outline-db (PostgreSQL dump)
|
||||||
- n8n_data (Docker volume)
|
- n8n_data (Docker volume)
|
||||||
- mailserver/config (DKIM ключи, аккаунты)
|
- mailserver/config (DKIM ключи, аккаунты)
|
||||||
|
|
@ -89,6 +78,9 @@
|
||||||
|
|
||||||
## ✅ Сделано
|
## ✅ Сделано
|
||||||
|
|
||||||
|
- [x] PTR-запись 85.193.83.9 → mx.csrx.ru (настроена в Timeweb, ожидает propagation 3-24ч)
|
||||||
|
- [x] DNS Cloudflare: MX→mx, SPF `-all`, DMARC `p=quarantine`, DKIM, autoconfig/autodiscover, A dash/mail/mx
|
||||||
|
- [x] Бэкап изменён с hourly на каждые 6 часов (00:00, 06:00, 12:00, 18:00)
|
||||||
- [x] Traefik с wildcard TLS через Cloudflare DNS-01
|
- [x] Traefik с wildcard TLS через Cloudflare DNS-01
|
||||||
- [x] Vaultwarden (менеджер паролей)
|
- [x] Vaultwarden (менеджер паролей)
|
||||||
- [x] Forgejo + CI/CD через Forgejo Actions
|
- [x] Forgejo + CI/CD через Forgejo Actions
|
||||||
|
|
@ -96,16 +88,13 @@
|
||||||
- [x] Outline wiki с email magic link авторизацией
|
- [x] Outline wiki с email magic link авторизацией
|
||||||
- [x] n8n автоматизация
|
- [x] n8n автоматизация
|
||||||
- [x] docker-mailserver (Postfix + Dovecot), аккаунты: noreply, admin, jack
|
- [x] docker-mailserver (Postfix + Dovecot), аккаунты: noreply, admin, jack
|
||||||
- [x] SnappyMail вебмейл, переименован на mail.csrx.ru (было webmail.csrx.ru)
|
- [x] SnappyMail вебмейл на mail.csrx.ru
|
||||||
- [x] docker-mailserver переименован на mx.csrx.ru (было mail.csrx.ru)
|
- [x] docker-mailserver на mx.csrx.ru (было mail.csrx.ru)
|
||||||
- [x] Certbot авторотация сертификата (cron 2x/день + deploy-hook для перезагрузки Postfix/Dovecot)
|
- [x] Certbot авторотация сертификата (cron 2x/день + deploy-hook)
|
||||||
- [x] DMARC ужесточён до p=quarantine (было p=none)
|
- [x] DMARC p=quarantine, SPF -all, DKIM
|
||||||
- [x] SPF ужесточён до -all (было ~all)
|
|
||||||
- [x] DKIM/SPF/DMARC DNS-записи для почты
|
|
||||||
- [x] Мониторинг (Prometheus + Grafana + Loki + AlertManager)
|
- [x] Мониторинг (Prometheus + Grafana + Loki + AlertManager)
|
||||||
- [x] CrowdSec IDS + fail2ban
|
- [x] CrowdSec IDS + fail2ban
|
||||||
- [x] Authelia 2FA SSO
|
- [x] Authelia 2FA SSO
|
||||||
- [x] Uptime Kuma статус-страница
|
- [x] Uptime Kuma статус-страница
|
||||||
- [x] Бэкап каждый час → S3 cold `data/`, 7 дней хранения
|
- [x] Удаление Syncthing
|
||||||
- [x] Удаление Syncthing (домен, firewall правила, образ, переменные)
|
- [x] cloudflare_zone_id перенесён в vault
|
||||||
- [x] cloudflare_zone_id перенесён из main.yml в vault
|
|
||||||
|
|
|
||||||
|
|
@ -72,11 +72,11 @@
|
||||||
**Конфиг:** SSL_TYPE=letsencrypt через certbot с Cloudflare DNS-01. DKIM через opendkim.
|
**Конфиг:** SSL_TYPE=letsencrypt через certbot с Cloudflare DNS-01. DKIM через opendkim.
|
||||||
**Альтернативы:** Mailgun/SendGrid (только отправка, без приёма), Maddy (менее зрелый).
|
**Альтернативы:** Mailgun/SendGrid (только отправка, без приёма), Maddy (менее зрелый).
|
||||||
|
|
||||||
### Бэкап в Timeweb S3 cold
|
### Бэкап в Timeweb S3
|
||||||
**Дата:** 2026-03
|
**Дата:** 2026-03
|
||||||
**Решение:** Hourly backup → S3 cold storage `visual-backup/data/`, 7 дней хранения.
|
**Решение:** Backup каждые 6 часов (00/06/12/18) → S3 `visual-backup/data/`, 7 дней хранения.
|
||||||
**Причина:** Дешевле горячего хранилища, бэкапы не нужны быстро — приемлемая задержка восстановления.
|
**Причина:** 6 часов = баланс между частотой и нагрузкой на сервер. Тип хранилища COLD задаётся на уровне бакета в Timeweb, не через параметр `--storage-class` (Timeweb S3 не поддерживает этот параметр).
|
||||||
**Команда:** `aws s3 cp ... --storage-class COLD`
|
**Формат архива:** единый `main_data_YYYY-MM-DD_HH-MM.tar.gz` с `data/databases/` и `data/volumes/`.
|
||||||
|
|
||||||
### SnappyMail вместо Roundcube
|
### SnappyMail вместо Roundcube
|
||||||
**Дата:** 2026-03
|
**Дата:** 2026-03
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# Статус инфраструктуры
|
# Статус инфраструктуры
|
||||||
|
|
||||||
> Обновляй этот файл при каждом значимом изменении.
|
> Обновляй этот файл при каждом значимом изменении.
|
||||||
> Последнее обновление: 2026-03-22
|
> Последнее обновление: 2026-03-23
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -25,14 +25,14 @@
|
||||||
| Forgejo | git.csrx.ru | ✅ | Git-сервер, SSH на порту 2222 |
|
| Forgejo | git.csrx.ru | ✅ | Git-сервер, SSH на порту 2222 |
|
||||||
| Forgejo Actions | — | ✅ | CI/CD runner, деплой через push в master |
|
| Forgejo Actions | — | ✅ | CI/CD runner, деплой через push в master |
|
||||||
| Plane | plane.csrx.ru | ✅ | Управление проектами |
|
| Plane | plane.csrx.ru | ✅ | Управление проектами |
|
||||||
| Grafana | dash.csrx.ru | ✅ | Дашборды мониторинга (нет DNS-записи — нужно добавить A→87.249.49.32) |
|
| Grafana | dash.csrx.ru | ✅ | Дашборды мониторинга |
|
||||||
| Prometheus | — | ✅ | Сбор метрик, 30 дней хранения |
|
| Prometheus | — | ✅ | Сбор метрик, 30 дней хранения |
|
||||||
| Loki + Promtail | — | ✅ | Сбор логов |
|
| Loki + Promtail | — | ✅ | Сбор логов |
|
||||||
| AlertManager | — | ✅ | Алерты в Telegram |
|
| AlertManager | — | ✅ | Алерты в Telegram |
|
||||||
| CrowdSec | — | ✅ | IDS, банит злоумышленников |
|
| CrowdSec | — | ✅ | IDS, банит злоумышленников |
|
||||||
| Authelia | auth.csrx.ru | ✅ | 2FA SSO, защищает traefik dashboard и plane/god-mode |
|
| Authelia | auth.csrx.ru | ✅ | 2FA SSO, защищает traefik dashboard и plane/god-mode |
|
||||||
| Uptime Kuma | status.csrx.ru | ✅ | Публичная страница статуса |
|
| Uptime Kuma | status.csrx.ru | ✅ | Публичная страница статуса |
|
||||||
| Бэкап | — | ✅ | Каждый час → S3 cold `visual-backup/data/` |
|
| Бэкап | — | ✅ | Каждые 6 часов (00/06/12/18) → S3 `visual-backup/data/`, 7 дней |
|
||||||
|
|
||||||
### Tools-сервер (tools, 85.193.83.9)
|
### Tools-сервер (tools, 85.193.83.9)
|
||||||
|
|
||||||
|
|
@ -40,8 +40,8 @@
|
||||||
|--------|-------|--------|---------|
|
|--------|-------|--------|---------|
|
||||||
| Outline | wiki.csrx.ru | ✅ | Wiki, аутентификация через email magic link |
|
| Outline | wiki.csrx.ru | ✅ | Wiki, аутентификация через email magic link |
|
||||||
| n8n | n8n.csrx.ru | ✅ | Автоматизация workflow |
|
| n8n | n8n.csrx.ru | ✅ | Автоматизация workflow |
|
||||||
| docker-mailserver | mail.csrx.ru | ✅ | Postfix + Dovecot, порты 25/465/587/993 |
|
| docker-mailserver | mx.csrx.ru | ✅ | Postfix + Dovecot, порты 25/465/587/993, DKIM+SPF+DMARC |
|
||||||
| SnappyMail | mail.csrx.ru | ✅ | Веб-клиент почты (ранее webmail.csrx.ru) |
|
| SnappyMail | mail.csrx.ru | ✅ | Веб-клиент почты |
|
||||||
|
|
||||||
### Почта (@csrx.ru)
|
### Почта (@csrx.ru)
|
||||||
|
|
||||||
|
|
@ -99,9 +99,10 @@ CNAME autodiscover → mx.csrx.ru. для Outlook autodiscover
|
||||||
|
|
||||||
| Проблема | Статус |
|
| Проблема | Статус |
|
||||||
|----------|--------|
|
|----------|--------|
|
||||||
| Нет DNS-записи для `dash.csrx.ru` | ⚠️ Нужно добавить в Cloudflare вручную: A `dash` → 87.249.49.32 |
|
| PTR-запись 85.193.83.9 → mx.csrx.ru | ⏳ Настроена в Timeweb, обновляется 3–24 ч |
|
||||||
| Tools-сервер не бэкапится | ⚠️ outline-db и n8n не входят в скрипт бэкапа |
|
| Tools-сервер не бэкапится | ⚠️ outline-db, n8n, mailserver/config не входят в бэкап |
|
||||||
| Tools-сервер вне мониторинга | ⚠️ Prometheus не скрейпит tools-сервер |
|
| Tools-сервер вне мониторинга | ⚠️ Prometheus не скрейпит tools-сервер |
|
||||||
|
| SnappyMail домен csrx.ru не настроен | ⚠️ Нужно в админке: IMAP mailserver:993, SMTP mailserver:587 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
# data/
|
# data/
|
||||||
# databases/ — PostgreSQL dumps (restore with psql)
|
# databases/ — PostgreSQL dumps (restore with psql)
|
||||||
# volumes/ — Docker volume contents (restore by copying)
|
# volumes/ — Docker volume contents (restore by copying)
|
||||||
# Runs every hour, keeps {{ backup_retention_days }} days.
|
# Runs every 6 hours (00:00, 06:00, 12:00, 18:00), keeps {{ backup_retention_days }} days.
|
||||||
# Upload to S3: s3://{{ s3_bucket }}/data/
|
# Upload to S3: s3://{{ s3_bucket }}/data/
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -551,7 +551,7 @@ services:
|
||||||
|
|
||||||
|
|
||||||
# ── Authelia: 2FA SSO portal ───────────────────────────────────────────────
|
# ── Authelia: 2FA SSO portal ───────────────────────────────────────────────
|
||||||
# Защищает: Traefik dashboard, Syncthing, Plane /god-mode/
|
# Защищает: Traefik dashboard, Plane /god-mode/
|
||||||
# Вход: логин + пароль + TOTP (Google Authenticator)
|
# Вход: логин + пароль + TOTP (Google Authenticator)
|
||||||
authelia:
|
authelia:
|
||||||
image: {{ authelia_image }}
|
image: {{ authelia_image }}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue