Files
vps-server-01/VPS/PROJECT_STATE.md
T
administrator e7667fe801 First
2026-06-21 20:30:44 +03:00

66 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 процедурах шаги не объединять.