Загрузить файлы в «/»

This commit is contained in:
2026-06-21 20:26:41 +03:00
parent 9a34083e2e
commit 74265a4bf5
4 changed files with 391 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
# VPS nao-kvn.ru — состояние проекта (компактно)
Стартовый контекст для нового чата. Только текущее состояние. Секреты — в файлах на VPS, не здесь.
## Доступ
- VPS: `ssh root@45.91.8.169` — только ed25519-ключ (на Manjaro, с passphrase), пароль отключён.
- Стек: `/opt/docker/core/` (`docker-compose.yml`, `caddy/Caddyfile`).
- Сервисы: https://vault.nao-kvn.ru, https://portainer.nao-kvn.ru, https://status.nao-kvn.ru. ТЗ VPS: MSK.
## Цель
Личный VPS: Portainer (управление Docker), Uptime Kuma (мониторинг доступности сервисов по трём площадкам с белыми IP — ДК «Арктика», Архангельскстат Нарьян-Мар, дом), Vaultwarden (пароли). Всё защищено и с проверенным многокопийным бэкапом.
## Серверы и роли
- **VPS** `45.91.8.169` (`box-938039`): Ubuntu 24.04 LTS, KVM, 1 vCPU / 961 MiB RAM / 20 ГБ, swap 2 ГБ, MSK, тариф 400₽. Несёт Docker-стек, WireGuard-клиент, бэкапы. RAM в обрез (~0.5/0.96 ГБ занято).
- **Дом — Keenetic Hopper KN-3811**: белый IP `91.122.209.x`, WireGuard-сервер, SMB-сервер (USB-диск, шара `TOSHIBA EXT`, юзер `only_vps`), LAN `172.16.0.0/24` (SMB-хост `172.16.0.1`).
## Архитектура
Один Compose-стек. **Caddy — единственный публичный вход (80/443)**, авто-HTTPS Let's Encrypt. Остальные контейнеры портов на хост не публикуют — только в сети `core_proxy`, Caddy проксирует по имени контейнера. Portainer и Uptime Kuma — за Caddy basic-auth; Vaultwarden публичен (своя авторизация). SMB-офсайт — через WG-туннель VPS→Keenetic (порт 445 в интернет не выставлен).
## Сервисы (стек /opt/docker/core, сеть core_proxy, restart: unless-stopped)
| Сервис | Образ | Порт | Доступ |
|---|---|---|---|
| caddy | caddy:2 | 80/443 | proxy + TLS |
| portainer | portainer/portainer-ce:lts | 9000 | portainer.nao-kvn.ru, basic-auth |
| uptime-kuma | louislam/uptime-kuma:1 | 3001 | status.nao-kvn.ru, basic-auth |
| vaultwarden | vaultwarden/server:latest | 80 | vault.nao-kvn.ru, публичный |
Vaultwarden: `DOMAIN=https://vault.nao-kvn.ru`, `SIGNUPS_ALLOWED=false`, `ADMIN_TOKEN` задан. Portainer-админ: `administrator`. Volumes: `core_{caddy_data,caddy_config,portainer_data,uptime_data,vaultwarden_data}`.
## Безопасность
- HTTPS везде; наружу только 80/443 (Caddy).
- Caddy basic-auth (логин `admin`, bcrypt) перед Portainer и Uptime Kuma (сниппет `(protected)`).
- Vaultwarden: регистрация закрыта.
- UFW: входящие закрыты, разрешён только SSH (22, v4+v6); 80/443 ведёт Docker. fail2ban на SSH (бан через UFW).
- SSH: только ключ, пароль отключён, root `prohibit-password` (`/etc/ssh/sshd_config.d/00-hardening.conf`).
- Docker-логи лимитированы (10 МБ × 3). SMB доступен только через приватный WG.
## DNS / TLS
- Домен `nao-kvn.ru`. A-записи → `45.91.8.169`: `portainer`, `status`, `vault`.
- Caddy авто-выпускает/продлевает Let's Encrypt (TLS-ALPN-01) для трёх поддоменов; сертификаты в `core_caddy_data`.
## Бэкап (Vaultwarden)
- Скрипт `/usr/local/bin/vw-backup.sh`: консистентный снимок БД `sqlite3 .backup` + `rsa_key*`/`config`/`attachments`/`sends``tar.gz`.
- Три копии: (1) локально `/opt/backups/vaultwarden` (14 шт.); (2) Google Drive `gdrive:vaultwarden-backups/` — обязательная, 90 дн; (3) домашний SMB `homesmb:TOSHIBA EXT/vaultwarden-backups/` — best-effort (не валит бэкап при недоступности дома), 90 дн.
- **Восстановление проверено фактически** (integrity ok, аккаунт + записи + `rsa_key` на месте).
- Расписание: systemd `vw-backup.timer`, ежедневно 03:30 MSK, Persistent.
- rclone-remotes: `gdrive` (scope drive.file), `homesmb` (smb, 172.16.0.1, only_vps).
- WG: `wg-quick@wg0` enabled, VPS `10.0.0.5`, Keenetic `10.0.0.1`, маршрут на `172.16.0.0/24`.
## Мониторинг
Uptime Kuma развёрнут (`status.nao-kvn.ru`, basic-auth + свой логин, админ создан). **Мониторы и уведомления ещё НЕ настроены** — главная функциональная недоделка. Telegram отвергнут (массовые блокировки в РФ с весны 2026); планируется ntfy (self-hosted) или email.
## Пакеты
Docker CE 29.6.0 / containerd 2.2.5 / compose; sqlite3; rclone (с SMB-бэкендом); wireguard-tools; smbclient; fail2ban; ufw.
## Открытые задачи
1. **Уведомления**: поднять ntfy (self-hosted, `ntfy.nao-kvn.ru` через Caddy) или email в Uptime Kuma.
2. **Мониторы** по трём площадкам: ping шлюзов + TCP/HTTP ключевых сервисов; группы «Арктика / Архангельскстат / Дом»; повесить уведомления.
3. **Перенести пароли** из бумажного блокнота в Vaultwarden (бэкап проверен — безопасно), затем уничтожить блокнот.
## Известные риски
RAM в обрез (апгрейд до 2 ГБ при расширении); мониторинг не введён в строй (нет оповещений при сбое); `ADMIN_TOKEN` открытым текстом в compose; SMB-копия зависит от доступности дома; один VPS — единая точка отказа по аптайму.
## Принципы работы
Продакшен-аккуратность: для рискованных изменений сначала проверка, потом применение, с путём отката; по одному шагу за раз с подтверждением; в multi-step процедурах шаги не объединять.