248 lines
8.7 KiB
Markdown
248 lines
8.7 KiB
Markdown
# Backup Project
|
|
|
|
## đ Co je tento projekt
|
|
|
|
ZĂĄlohovacĂ skripty pro domĂĄcĂ serverovĂŠ infrastruktuĹe â dva Unraid servery (Tower, Tower1).
|
|
Skripty bÄŞà jako **Unraid User Scripts** spouĹĄtÄnĂŠ automaticky kaĹždĂ˝ den ve **4:40 rĂĄno**.
|
|
|
|
---
|
|
|
|
## đď¸ Struktura projektu
|
|
|
|
```
|
|
Backup/
|
|
âââ MongoDBBackup/
|
|
â âââ mongodbbackup_with_gzip.sh â zĂĄloha DB (mongodump --archive --gzip)
|
|
â âââ mongodbrestore_from_backup.sh â restore ze zĂĄlohy (mongorestore)
|
|
â âââ verify_backup_integrity.sh â ovÄĹenĂ po restore (mongosh)
|
|
â
|
|
âââ PostGRESQLTower/
|
|
â âââ postgresqlbackup_with_gzip.sh â zĂĄloha PG18 (pg_dumpall â gzip)
|
|
â âââ postgresqlimmichbackup_with_gzip.sh â zĂĄloha PG Immich (pg_dumpall â gzip)
|
|
â âââ postgresqlrestore_from_backup.sh â restore PG18 (gunzip â psql)
|
|
â âââ verify_backup_integrity.sh â ovÄĹenĂ po restore (psql)
|
|
â
|
|
âââ GiteaBackup/
|
|
â âââ gitea_backup.sh â zĂĄloha appdata (docker stop â tar.gz â start)
|
|
â
|
|
âââ KanboardBackup/
|
|
â âââ kanboard_backup.sh â zĂĄloha appdata (docker stop â tar.gz â start)
|
|
â
|
|
âââ MicrobinBackup/
|
|
âââ microbin_backup.sh â zĂĄloha appdata (docker stop â tar.gz â start)
|
|
```
|
|
|
|
---
|
|
|
|
## âď¸ Jak fungujĂ zĂĄlohy â dva vzory
|
|
|
|
### Vzor A â databĂĄzovĂ˝ dump (MongoDB, PostgreSQL)
|
|
ZĂĄloha bÄŞà **za chodu** kontejneru â dump streamuje pĹes stdout pĹĂmo na disk hostitele,
|
|
bez volume mountu a bez doÄasnĂŠ kopie uvnitĹ kontejneru.
|
|
|
|
```
|
|
docker exec kontejner nĂĄstroj-pro-dump â (pipe) â soubor na hostiteli
|
|
```
|
|
|
|
- **MongoDB:** `mongodump --archive --gzip` â `admin.archive.gz`, `edc.archive.gz`
|
|
- **PostgreSQL 18:** `pg_dumpall | gzip` â `all_databases.sql.gz`
|
|
- **PostgreSQL Immich:** `pg_dumpall | gzip` â `immich_all.sql.gz`
|
|
|
|
### Vzor B â appdata archiv (Gitea, Kanboard, Microbin)
|
|
ZĂĄloha probĂhĂĄ **pĹi zastavenĂŠm kontejneru** â soubory nesmĂ bĂ˝t zapisovĂĄny v prĹŻbÄhu `tar`.
|
|
|
|
```
|
|
docker stop â tar -czf appdata/kontejner â docker start
|
|
```
|
|
|
|
Kontejner se nastartuje **vĹždy**, i pĹi chybÄ archivu â minimĂĄlnĂ downtime.
|
|
|
|
---
|
|
|
|
## đ Rotace zĂĄloh
|
|
|
|
| ZĂĄloha | Metoda | ZachovĂĄvĂĄ |
|
|
|--------|--------|-----------|
|
|
| MongoDB | dvoustupĹovĂĄ (stĂĄĹĂ + count) | 3 dny / 3 zĂĄlohy |
|
|
| PostgreSQL 18 | dvoustupĹovĂĄ (stĂĄĹĂ + count) | 7 dnĂ / 7 zĂĄloh |
|
|
| PostgreSQL Immich | dvoustupĹovĂĄ (stĂĄĹĂ + count) | 7 dnĂ / 7 zĂĄloh |
|
|
| Gitea | podle stĂĄĹĂ | 7 dnĂ |
|
|
| Kanboard | podle stĂĄĹĂ | 7 dnĂ |
|
|
| Microbin | podle stĂĄĹĂ | 7 dnĂ |
|
|
|
|
DvoustupĹovĂĄ rotace: nejprve smaĹž dle stĂĄĹĂ, pak oĹĂzni na max. count.
|
|
To garantuje minimum zĂĄloh i pĹi pĹeruĹĄenĂŠm schedule.
|
|
|
|
---
|
|
|
|
## đ¨ Restore â dĹŻleĹžitĂŠ poznĂĄmky
|
|
|
|
- **PostgreSQL Immich**: vyĹžaduje pĹi restore **stejnĂ˝ Docker image** (`tensorchord/pgvecto-rs:pg16-v0.2.0`)
|
|
kvĹŻli pgvecto-rs extension. StandardnĂ postgres:16 nebude fungovat.
|
|
- **Kanboard**: appdata + MySQL zĂĄloha zvlĂĄĹĄĹĽ (MySQL skript zĂĄlohuje DB `kanboard`).
|
|
- **MongoDB restore**: pouĹžĂvĂĄ `--drop` â smaĹže kolekce pĹed obnovenĂm. VÄdomĂĄ akce.
|
|
- **PostgreSQL restore**: chybovĂŠ hlĂĄĹĄky "role already exists" jsou normĂĄlnĂ (dump je idempotentnĂ).
|
|
|
|
---
|
|
|
|
## đ ď¸ NasazenĂ skriptu na Tower
|
|
|
|
```python
|
|
import paramiko
|
|
client = paramiko.SSHClient()
|
|
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
client.connect('192.168.1.76', username='root', password='7309208104',
|
|
look_for_keys=False, allow_agent=False)
|
|
sftp = client.open_sftp()
|
|
sftp.put('lokalnĂ_skript.sh', '/boot/config/plugins/user.scripts/scripts/NĂĄzevSkriptu/script')
|
|
client.exec_command('chmod +x /boot/config/plugins/user.scripts/scripts/NĂĄzevSkriptu/script')
|
|
```
|
|
|
|
Schedule se nastavuje v `/boot/config/plugins/user.scripts/schedule.json`.
|
|
|
|
---
|
|
|
|
# Backup Project - Infrastructure Info
|
|
|
|
## đĽď¸ Servery
|
|
|
|
| Server | Hostname | IP | OS |
|
|
|--------|----------|----|----|
|
|
| Tower | tower / tower.lan | 192.168.1.76 | Unraid |
|
|
| Tower1 | tower1 | 192.168.1.50 | Unraid |
|
|
|
|
---
|
|
|
|
## đ SSH pĹĂstup
|
|
|
|
**Credentials:**
|
|
| Server | User | Password |
|
|
|--------|------|----------|
|
|
| Tower | `root` | `7309208104` |
|
|
| Tower1 | `root` | `Vlado7309208104++` |
|
|
|
|
**PĹipojenĂ:**
|
|
```bash
|
|
ssh root@192.168.1.76 # Tower
|
|
ssh root@192.168.1.50 # Tower1
|
|
```
|
|
|
|
**DĹŻleĹžitĂŠ:** Tower a Tower1 majĂ vzĂĄjemnÄ nahranĂŠ SSH klĂÄe - Tower1 se mĹŻĹže pĹipojit na Tower bez hesla a naopak.
|
|
|
|
**PĹipojenĂ z Pythonu (Windows):** PouĹžĂt `look_for_keys=False, allow_agent=False` â jinak selĹže kvĹŻli "Too many authentication failures":
|
|
```python
|
|
client.connect("192.168.1.76", username="root", password="7309208104",
|
|
look_for_keys=False, allow_agent=False)
|
|
```
|
|
|
|
---
|
|
|
|
## đł Docker kontejnery
|
|
|
|
| Server | Kontejner | Port | Popis |
|
|
|--------|-----------|------|-------|
|
|
| Tower | `MongoDB` | 27017 | MongoDB 8.2.9 |
|
|
| Tower1 | `MongoDB` | 27017 | MongoDB 8.2.9 |
|
|
| Tower | `MySQL` | 3306 | MySQL |
|
|
| Tower | `postgresql18` | 5432 | PostgreSQL 18 (hlavnĂ) |
|
|
| Tower | `PostgreSQL_Immich` | 5433â5432 | PostgreSQL 16 + pgvecto-rs (Immich) |
|
|
| Tower | `immich` | 8888â8080 | Immich (foto server) |
|
|
|
|
---
|
|
|
|
## đ DĹŻleĹžitĂŠ cesty
|
|
|
|
### Tower
|
|
| Co | Cesta |
|
|
|----|-------|
|
|
| MongoDB zĂĄlohy | `/mnt/user/Backup/Critical/MongoDBBackup/` |
|
|
| MySQL zĂĄlohy | `/mnt/user/MySQLBackup/` |
|
|
| PostgreSQL zĂĄlohy | `/mnt/user/Backup/Critical/PostgreSQLBackup/` |
|
|
| PostgreSQL Immich zĂĄlohy | `/mnt/user/Backup/Critical/PostgreSQLImmichBackup/` |
|
|
| PostgreSQL 18 data | `/mnt/user/appdata/postgresql18` |
|
|
| PostgreSQL Immich data | `/mnt/user/appdata/PostgreSQL_Immich` |
|
|
| Kanboard zĂĄlohy | `/mnt/user/Backup/Critical/KanboardBackup/` |
|
|
| Microbin zĂĄlohy | `/mnt/user/Backup/Critical/MicrobinBackup/` |
|
|
| User Scripts | `/boot/config/plugins/user.scripts/scripts/` |
|
|
| Test share | `/mnt/user/#test/` |
|
|
|
|
### Windows (lokĂĄlnĂ)
|
|
| Co | Cesta |
|
|
|----|-------|
|
|
| MongoDB zĂĄlohy | `\\tower\Backup\Critical\MongoDBBackup\` |
|
|
| MySQL zĂĄlohy | `\\tower\MySQLBackup\` |
|
|
| PostgreSQL zĂĄlohy | `\\tower\Backup\Critical\PostgreSQLBackup\` |
|
|
| PostgreSQL Immich zĂĄlohy | `\\tower\Backup\Critical\PostgreSQLImmichBackup\` |
|
|
| Kanboard zĂĄlohy | `\\tower\Backup\Critical\KanboardBackup\` |
|
|
| Microbin zĂĄlohy | `\\tower\Backup\Critical\MicrobinBackup\` |
|
|
| Test share | `\\tower1\#test\` |
|
|
|
|
---
|
|
|
|
## đď¸ MongoDB
|
|
|
|
- **Verze:** 8.2.9
|
|
- **Auth:** ŽådnĂĄ (otevĹenĂŠ)
|
|
- **DatabĂĄze k zĂĄlohovĂĄnĂ:** `admin`, `edc` (+ dalĹĄĂ dle skriptu)
|
|
- **PĹipojenĂ z Pythonu:**
|
|
```python
|
|
from pymongo import MongoClient
|
|
client = MongoClient('mongodb://192.168.1.76:27017') # Tower
|
|
client = MongoClient('mongodb://192.168.1.50:27017') # Tower1
|
|
```
|
|
|
|
---
|
|
|
|
## đď¸ MySQL
|
|
|
|
- **User:** `root`
|
|
- **Password:** `Vlado9674+`
|
|
- **DatabĂĄze:** `fio`, `torrents`, `OrdinaceDropBoxBackup`, `medevio`, `kanboard`, `medicus`, `studie`, `puzzle`
|
|
|
|
---
|
|
|
|
## đ User Scripts na Tower (Unraid)
|
|
|
|
| NĂĄzev | Popis | Schedule |
|
|
|-------|-------|----------|
|
|
| `3_MYSQL_BACKUP_WITH_GZIP` | MySQL backup vĹĄech DB | Daily |
|
|
| `MongoDBBackupWithGzip` | MongoDB backup (`--archive --gzip`) | Daily |
|
|
| `PostgreSQLBackup` | PostgreSQL 18 backup (`pg_dumpall` â gzip) | Daily |
|
|
| `PostgreSQLImmichBackup` | PostgreSQL Immich backup (`pg_dumpall` â gzip) | Daily |
|
|
| `GiteaBackup` | Gitea backup (`docker stop` â `tar.gz` appdata â `docker start`) | Daily |
|
|
| `KanboardBackup` | Kanboard backup (`docker stop` â `tar.gz` appdata â `docker start`) | Daily |
|
|
| `MicrobinBackup` | Microbin backup (`docker stop` â `tar.gz` appdata â `docker start`) | Daily |
|
|
|
|
**Schedule `daily` = spuĹĄtÄnĂ ve 4:40 rĂĄno** (pĹes `/etc/cron.daily`, crontab: `40 4 * * *`)
|
|
|
|
**Schedule config:** `/boot/config/plugins/user.scripts/schedule.json` â zde Unraid uklĂĄdĂĄ frequency pro kaĹždĂ˝ User Script. Kontejner Gitea se na Tower jmenuje `Gitea` (s velkĂ˝m G).
|
|
|
|
## đ User Scripts na Tower1 (Unraid)
|
|
|
|
| NĂĄzev | Popis |
|
|
|-------|-------|
|
|
| `MONGODB_RESTORE` | Restore edc DB z Tower pĹes SSH stream |
|
|
|
|
---
|
|
|
|
## đď¸ PostgreSQL
|
|
|
|
### Instance 1 â postgresql18 (hlavnĂ)
|
|
- **Verze:** 18
|
|
- **Port:** 5432
|
|
- **User:** `vladimir.buzalka`
|
|
- **Password:** `Vlado7309208104++`
|
|
- **Auth:** Heslo (PGPASSWORD env var)
|
|
- **ZĂĄloha:** `pg_dumpall` â `/mnt/user/Backup/Critical/PostgreSQLBackup/tower/`
|
|
- **Dump size:** ~3.3 GB, Äas ~3 min
|
|
|
|
### Instance 2 â PostgreSQL_Immich (Immich foto server)
|
|
- **Verze:** 16 + pgvecto-rs extension (image: `tensorchord/pgvecto-rs:pg16-v0.2.0`)
|
|
- **Port:** 5433 (host) â 5432 (container)
|
|
- **User:** `postgres`
|
|
- **Password:** `postgres`
|
|
- **DB:** `immich`
|
|
- **ZĂĄloha:** `pg_dumpall` â `/mnt/user/Backup/Critical/PostgreSQLImmichBackup/tower/`
|
|
- **Dump size:** ~52 MB, Äas ~18 sec
|
|
- **Restore pozor:** VyĹžaduje stejnĂ˝ image s pgvecto-rs extension!
|