This commit is contained in:
2026-01-06 22:12:07 +05:00
commit 12f57baa26
13 changed files with 3110 additions and 0 deletions

143
BACKUP_README.md Normal file
View File

@@ -0,0 +1,143 @@
# Бэкап и восстановление Gitea
Скрипты для бэкапа и восстановления Gitea в LXC контейнере на Proxmox.
## Файлы
| Скрипт | Где запускать | Описание |
|--------|---------------|----------|
| `backup-gitea-lxc.sh` | Внутри LXC | Бэкап на уровне приложения |
| `backup-proxmox.sh` | На Proxmox хосте | Оркестрация бэкапа + vzdump |
| `setup-backup-cron.sh` | На Proxmox хосте | Настройка автоматического бэкапа |
| `restore-gitea.sh` | Внутри LXC | Восстановление из бэкапа |
## backup-gitea-lxc.sh
Запускается внутри LXC контейнера. Создаёт:
- `database.sql` — pg_dump базы PostgreSQL
- `gitea-dump.zip` — репозитории, LFS, attachments, avatars
- `app.ini` — конфигурация Gitea
Настройки:
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `BACKUP_BASE` | `/var/backups/gitea` | Директория для бэкапов |
| `DB_USER` | `gitea` | Пользователь PostgreSQL |
| `DB_NAME` | `gitea` | Имя базы данных |
| `KEEP_BACKUPS` | `7` | Сколько бэкапов хранить |
| `REMOTE_BACKUP` | — | scp путь для копирования |
Пример:
```bash
sudo ./backup-gitea-lxc.sh
KEEP_BACKUPS=14 REMOTE_BACKUP=user@nas:/backups ./backup-gitea-lxc.sh
```
## backup-proxmox.sh
Запускается на Proxmox хосте. Выполняет:
1. Запуск `backup-gitea-lxc.sh` внутри контейнера
2. Копирование архива из LXC на Proxmox хост
3. Создание vzdump контейнера (если `DO_VZDUMP=true`)
4. Ротация старых бэкапов
Настройки:
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `LXC_ID` | `300` | ID контейнера Gitea |
| `BACKUP_STORAGE` | `/var/lib/vz/dump` | Где хранить бэкапы |
| `DO_VZDUMP` | `false` | Делать полный бэкап контейнера |
| `VZDUMP_COMPRESS` | `zstd` | Сжатие vzdump |
| `KEEP_BACKUPS` | `7` | Сколько gitea бэкапов хранить |
| `KEEP_VZDUMP` | `3` | Сколько vzdump хранить |
| `REMOTE_BACKUP` | — | scp путь для копирования |
Пример:
```bash
LXC_ID=300 ./backup-proxmox.sh
LXC_ID=300 DO_VZDUMP=true ./backup-proxmox.sh
```
## setup-backup-cron.sh
Настраивает автоматический бэкап через cron.
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `LXC_ID` | `300` | ID контейнера |
| `BACKUP_TIME` | `12:00` | Время ежедневного бэкапа |
Расписание:
- Ежедневно в указанное время: gitea dump + pg_dump
- Воскресенье в 13:00: + полный vzdump контейнера
Пример:
```bash
LXC_ID=300 BACKUP_TIME=03:00 ./setup-backup-cron.sh
```
После установки:
```bash
gitea-backup # ручной запуск
DO_VZDUMP=true gitea-backup # с полным бэкапом
tail -f /var/log/gitea-backup.log
```
## restore-gitea.sh
Восстановление Gitea из бэкапа. Запускается внутри LXC после установки Gitea.
Поддерживает:
- Архивы созданные через `gitea dump`
- Нативные дампы PostgreSQL
- Ручные бэкапы директорий
Настройки:
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `NEW_DOMAIN` | auto | Новый домен/IP |
| `NEW_PORT` | `3000` | HTTP порт |
| `DB_USER` | `gitea` | Пользователь PostgreSQL |
| `DB_NAME` | `gitea` | Имя базы данных |
| `DB_PASSWORD` | `gitea` | Пароль PostgreSQL |
Пример:
```bash
sudo ./restore-gitea.sh /tmp/gitea-backup-20240115-120000.tar.gz
NEW_DOMAIN=git.example.com DB_PASSWORD=secret ./restore-gitea.sh /tmp/backup.tar.gz
```
Выполняет:
1. Распаковка архива
2. Восстановление PostgreSQL
3. Восстановление репозиториев и данных
4. Обновление app.ini для нового сервера
5. Регенерация SSH ключей и Git hooks
6. Запуск Gitea
После восстановления проверьте:
- Авторизация пользователей
- Список репозиториев
- Git clone/push операции
## Структура бэкапа
```
gitea-backup-YYYYMMDD-HHMMSS.tar.gz
├── database.sql # PostgreSQL дамп
├── gitea-dump.zip # Данные Gitea
├── app.ini # Конфигурация
├── gitea-version.txt # Версия Gitea
└── dump.log # Лог gitea dump
```