--- name: project-vps-state description: "Полное состояние VPS nao-kvn.ru — архитектура, сервисы, безопасность, бэкап, доступ" metadata: node_type: memory type: project originSessionId: 2f046c73-11b0-4c4c-b2ed-132762fcae8c --- # VPS nao-kvn.ru — текущее состояние ## Доступ - SSH: `ssh root@45.91.8.169` — только ed25519-ключ (Manjaro `~/.ssh/id_ed25519`, с 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 ## Сервер - IP `45.91.8.169`, хост `box-938039`, Ubuntu 24.04 LTS, KVM - 1 vCPU, 961 MiB RAM, 20 ГБ диск, swap 2 ГБ, тариф 400₽/мес - RAM в обрез: ~0.5 ГБ занято из 0.96 ГБ ## Архитектура - Один Compose-стек в `/opt/docker/core`, сеть `core_proxy` - **Caddy — единственная публичная точка входа (80/443)**, авто-HTTPS Let's Encrypt - Остальные контейнеры на хост портов не публикуют — только через Caddy по имени контейнера - WireGuard-туннель VPS→Keenetic для домашнего SMB (445 в интернет не выставлен) ## Сервисы | Сервис | Образ | Доступ | |---|---|---| | caddy | caddy:2 | proxy + TLS, 80/443 на хост | | portainer | portainer/portainer-ce:lts | portainer.nao-kvn.ru, basic-auth | | uptime-kuma | louislam/uptime-kuma:1 | status.nao-kvn.ru, basic-auth | | vaultwarden | vaultwarden/server:latest | vault.nao-kvn.ru, публичный | Volumes: `core_{caddy_data,caddy_config,portainer_data,uptime_data,vaultwarden_data}` ## Безопасность - HTTPS везде; UFW: только SSH разрешён; 80/443 управляет Docker через iptables - Caddy basic-auth (логин `admin`, bcrypt) перед Portainer и Uptime Kuma — сниппет `(protected)` - Vaultwarden: `SIGNUPS_ALLOWED=false`, `ADMIN_TOKEN` задан (открытым текстом в compose — известный компромисс) - SSH: `PasswordAuthentication no`, `PermitRootLogin prohibit-password`, конфиг `/etc/ssh/sshd_config.d/00-hardening.conf` - fail2ban на SSH (banaction = ufw); docker-логи лимитированы 10МБ×3 ## Домашний роутер Keenetic Hopper KN-3811 - Белый IP `91.122.209.x` (реальный endpoint в `/etc/wireguard/wg0.conf` на VPS) - WireGuard-сервер; SMB-шара `TOSHIBA EXT`, юзер `only_vps`, LAN `172.16.0.0/24` - WG: VPS `10.0.0.5`, Keenetic `10.0.0.1`, маршрут `172.16.0.0/24`, `PersistentKeepalive=25` ## Бэкап Vaultwarden - Скрипт `/usr/local/bin/vw-backup.sh`: sqlite3 `.backup` + rsa_key*/config.json/attachments/sends → tar.gz - 3 копии: (1) локально `/opt/backups/vaultwarden/` 14 шт.; (2) `gdrive:vaultwarden-backups/` 90 дн.; (3) `homesmb:TOSHIBA EXT/vaultwarden-backups/` best-effort 90 дн. - Расписание: `vw-backup.timer`, ежедневно 03:30 MSK, Persistent=true - rclone-remotes: `gdrive` (scope drive.file), `homesmb` (smb, 172.16.0.1, only_vps) - **Восстановление проверено фактически**: integrity_check ok, аккаунт + записи + rsa_key на месте ## DNS - Домен `nao-kvn.ru`. A → `45.91.8.169`: portainer, status, vault - TLS-ALPN-01 валидация, сертификаты в `core_caddy_data` ## Пакеты Docker CE 29.6.0 / containerd 2.2.5; sqlite3; rclone (SMB-бэкенд); wireguard-tools; smbclient; fail2ban; ufw ## Репозиторий проекта `/mnt/Dick_E/Projects/vps-server-01/` - [VPS/configs/](VPS/configs/) — все конфиги (Caddyfile, docker-compose.yml, wg0.conf, sshd, daemon.json, fail2ban) - [VPS/scripts/vw-backup.sh](VPS/scripts/vw-backup.sh) — скрипт бэкапа - [VPS/OPERATIONS_RUNBOOK.md](VPS/OPERATIONS_RUNBOOK.md) — операционные процедуры - [VPS/TODO.md](VPS/TODO.md) — открытые задачи - [vps-nao-kvn-state.md](vps-nao-kvn-state.md) — детальный state-документ **Why:** Личный VPS для управления контейнерами (Portainer), мониторинга доступности трёх площадок с белыми IP (ДК «Арктика», Архангельскстат Нарьян-Мар, дом) и хранения паролей (Vaultwarden). **How to apply:** При работе с VPS — читать этот файл для контекста. Проверять актуальность подключившись по SSH.