diff --git a/docs/04-network.md b/docs/04-network.md index 67e743a..acbe6bc 100644 --- a/docs/04-network.md +++ b/docs/04-network.md @@ -179,28 +179,126 @@ environment: --- -## Бэкапы конфигурации +## 🔄 Бэкапы и восстановление -### OlimpVPN (3X-UI) +### Автоматические бэкапы -Автоматические еженедельные бэкапы на Nextcloud: -- **Скрипт**: `/opt/3x-ui/backup.sh` -- **Cron**: `0 3 * * 0` (воскресенье, 03:00) -- **Хранилище**: `nc.zailon.ru/VPN_Backups/3x-ui/` -- **Состав**: база данных, сертификаты, docker-compose.yml +| Параметр | Значение | +|----------|----------| +| **Скрипт** | `/opt/3x-ui/backup.sh` | +| **Расписание** | `0 3 * * 0` (воскресенье, 03:00 +05) | +| **Локальное хранилище** | `/opt/3x-ui/backups/` | +| **Nextcloud** | `nc.zailon.ru/Admin/Домашний Сервер/OlimpBackup/OlimpVPN/` | +| **Состав бэкапа** | `db/`, `cert/`, `docker-compose.yml` | +| **Хранение локально** | 30 дней | +| **Таймзона** | `Asia/Yekaterinburg (+05)` | -```bash -# Ручной бэкап -cd /opt/3x-ui -tar -czf backup_$(date +%Y%m%d).tar.gz db/ cert/ docker-compose.yml +### Ручной запуск бэкапа -# Восстановление -docker compose down -tar -xzf backup_*.tar.gz -C /opt/3x-ui/ +&&&bash +/opt/3x-ui/backup.sh +&&& + +### Восстановление из бэкапа + +&&&bash +# 1. Скачать последний бэкап с Nextcloud +LATEST=$(curl -s -u "Zailon:TOKEN" \ + "https://nc.zailon.ru/remote.php/dav/files/Zailon/Admin/Домашний%20Сервер/OlimpBackup/OlimpVPN/" \ + -X PROPFIND -H "Depth: 1" | \ + grep -oP '3x-ui_backup_\d+_\d+\.tar\.gz' | tail -1) + +curl -s -u "Zailon:TOKEN" \ + "https://nc.zailon.ru/remote.php/dav/files/Zailon/Admin/Домашний%20Сервер/OlimpBackup/OlimpVPN/${LATEST}" \ + -o /tmp/restore.tar.gz + +# 2. Остановить сервис +cd /opt/3x-ui && docker compose down + +# 3. (Опционально) Создать резервную копию текущей конфигурации +tar -czf /opt/3x-ui/pre_restore_$(date +%Y%m%d).tar.gz -C /opt/3x-ui db cert docker-compose.yml + +# 4. Восстановить файлы +tar -xzf /tmp/restore.tar.gz -C /opt/3x-ui/ +chown -R root:root /opt/3x-ui/ +chmod 600 /opt/3x-ui/cert/private.key + +# 5. Запустить сервис docker compose up -d -``` -> **Важно**: токены и пароли хранятся отдельно, не включаются в бэкап. +# 6. Проверить статус +docker ps | grep 3xui +docker logs 3xui_app --tail 20 +&&& + +### Мониторинг бэкапов + +&&&bash +# Логи бэкапа +tail -f /var/log/3x-ui-backup.log + +# Локальные бэкапы +ls -lh /opt/3x-ui/backups/ + +# Проверка на Nextcloud (WebDAV) +curl -u "Zailon:TOKEN" \ + "https://nc.zailon.ru/remote.php/dav/files/Zailon/Admin/Домашний%20Сервер/OlimpBackup/OlimpVPN/" \ + -X PROPFIND -H "Depth: 1" | grep -oP '\K[^<]+' | tail -5 + +# Проверка crontab +crontab -l + +# Проверка таймзоны +timedatectl | grep "Time zone" +&&& + +### Решение проблем + +#### Ошибка 401 Unauthorized +&&&bash +# Пересоздать токен приложения в Nextcloud: +# Настройки → Безопасность → Приложения паролей → Создать новый +# Обновить NEXTCLOUD_PASS в /opt/3x-ui/backup.sh +&&& + +#### Ошибка 404 Not Found +&&&bash +# Проверить путь к папке (регистр и пробелы важны!) +# Правильный формат: /Admin/Домашний%20Сервер/OlimpBackup/OlimpVPN/ +&&& + +#### Бэкап не создаётся +&&&bash +# Проверить права на запись +ls -la /opt/3x-ui/backups/ + +# Проверить место на диске +df -h /opt/3x-ui + +# Проверить логи cron +journalctl -u cron -n 20 +&&& + +#### Время в логах неверное +&&&bash +# Установить таймзону +timedatectl set-timezone Asia/Yekaterinburg + +# Перезапустить cron +systemctl restart cron +&&& + +### Чеклист обслуживания + +- [ ] **Еженедельно**: Проверять `/var/log/3x-ui-backup.log` после воскресенья +- [ ] **Ежемесячно**: Убедиться что бэкапы есть на Nextcloud +- [ ] **Ежеквартально**: Протестировать восстановление на тестовом окружении +- [ ] **При смене пароля Nextcloud**: Обновить `NEXTCLOUD_PASS` в скрипте +- [ ] **Перед обновлением 3X-UI**: Сделать ручной бэкап + +--- + +> ⚠️ **Важно**: Токен приложения `2Fpz6-ocGSz-rRbaZ-efoa3-EDATz` имеет доступ только к WebDAV. Никогда не используйте основной пароль аккаунта в скриптах! ---