6.5 KiB
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), LAN172.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 Drivegdrive:vaultwarden-backups/— обязательная, 90 дн; (3) домашний SMBhomesmb: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@wg0enabled, VPS10.0.0.5, Keenetic10.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.
Открытые задачи
- Уведомления: поднять ntfy (self-hosted,
ntfy.nao-kvn.ruчерез Caddy) или email в Uptime Kuma. - Мониторы по трём площадкам: ping шлюзов + TCP/HTTP ключевых сервисов; группы «Арктика / Архангельскстат / Дом»; повесить уведомления.
- Перенести пароли из бумажного блокнота в Vaultwarden (бэкап проверен — безопасно), затем уничтожить блокнот.
Известные риски
RAM в обрез (апгрейд до 2 ГБ при расширении); мониторинг не введён в строй (нет оповещений при сбое); ADMIN_TOKEN открытым текстом в compose; SMB-копия зависит от доступности дома; один VPS — единая точка отказа по аптайму.
Принципы работы
Продакшен-аккуратность: для рискованных изменений сначала проверка, потом применение, с путём отката; по одному шагу за раз с подтверждением; в multi-step процедурах шаги не объединять.