# OPERATIONS RUNBOOK — операционные процедуры ## Вход `ssh root@45.91.8.169` (ed25519-ключ с passphrase; локальный ключ — Manjaro `~/.ssh/id_ed25519`). ## Управление стеком ```bash cd /opt/docker/core docker compose ps # статус docker compose logs -f caddy # логи docker compose up -d # применить правки compose/Caddyfile docker compose restart <сервис> docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile # горячая перезагрузка Caddy ``` ## Бэкап ```bash sudo /usr/local/bin/vw-backup.sh # ручной запуск journalctl -u vw-backup.service -n 20 # логи systemctl list-timers vw-backup.timer # когда следующий rclone lsf gdrive:vaultwarden-backups/ # проверить копии rclone lsf "homesmb:TOSHIBA EXT/vaultwarden-backups/" ls -1t /opt/backups/vaultwarden/ ``` ## Восстановление Vaultwarden 1. `mkdir -p /opt/restore && tar -xzf <архив> -C /opt/restore` 2. Боевой способ: смонтировать `/opt/restore` как `/data` в новый Vaultwarden **за Caddy (по HTTPS)** и войти мастер-паролем. Веб-вход по голому http не работает. 3. Быстрая проверка целостности без UI: ```bash sqlite3 /opt/restore/db.sqlite3 "PRAGMA integrity_check;" sqlite3 /opt/restore/db.sqlite3 "SELECT email FROM users;" sqlite3 /opt/restore/db.sqlite3 "SELECT count(*) FROM ciphers;" ``` ## WireGuard (туннель к дому для SMB) ```bash sudo wg show # статус, latest handshake sudo systemctl status wg-quick@wg0 sudo systemctl restart wg-quick@wg0 ping -c3 10.0.0.1 # Keenetic в туннеле ``` ## TLS Caddy продлевает сертификаты сам. Проверка: `docker compose logs caddy | grep -i certificate`. ## Сброс пароля Portainer (если потерян) ```bash docker stop core-portainer-1 docker run --rm -v core_portainer_data:/data portainer/helper-reset-password docker start core-portainer-1 # войти временным паролем (basic-auth -> логин Portainer), сразу сменить, записать в Vaultwarden ``` ## Сменить пароль basic-auth (Caddy) ```bash read -rsp 'новый пароль: ' P; echo docker compose exec caddy caddy hash-password --plaintext "$P" # получить bcrypt-хеш # заменить хеш в /opt/docker/core/caddy/Caddyfile (сниппет protected), затем: docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile ``` ## Файрвол / fail2ban ```bash sudo ufw status verbose sudo fail2ban-client status sshd ``` ## Обновления ```bash sudo apt update && apt list --upgradable sudo apt upgrade -y # обновление docker-* перезапустит демон; контейнеры поднимутся сами (restart: unless-stopped) ```