Skripty (4): - update.sh: apt update + upgrade + restart kdyz nutny + Telegram - docker-update.sh: docker compose pull + up -d pro vsechny sluzby - docker-zalohy.sh: tar.zst zaloha data/ adresaru na NAS - server-report.sh: denni Telegram report (uptime, RAM, disk, Docker) Systemd (8 - 4x service + 4x timer): - docker-update: kazdou sobotu 18:00 - docker-zalohy: kazde utery 20:00 - server-report: kazdy den 09:30 - update-rpi: kazdy patek 18:00 Konfigurace: - conf/telegram.conf.example: sablona pro Telegram credentials - vsechny skripty ctou z /home/<user>/.telegram.conf (chmod 600) Poznamka: - vsechny cesty (/home/mates) a hostname jsou pevne v service souborech - pro jineho uzivatele uprav User=, WorkingDirectory=, ExecStart= - zadne IP adresy, tokeny ani PII v gitu
224 lines
5.9 KiB
Markdown
224 lines
5.9 KiB
Markdown
# mates-server-maintenance
|
||
|
||
Systemd timery a skripty pro automatickou údržbu serveru.
|
||
**Docker update, zálohy, denní report na Telegram, systémový update.**
|
||
|
||
> Toto repo je **1:1 kopie** systemd timerů a skriptů, které běží na produkčním serveru.
|
||
|
||
---
|
||
|
||
## 📦 Co tu je
|
||
|
||
```
|
||
mates-server-maintenance/
|
||
├── README.md # Tento soubor
|
||
├── LICENSE # MIT
|
||
├── .gitignore
|
||
├── scripts/
|
||
│ ├── update.sh # Systémový update + Telegram
|
||
│ ├── docker-update.sh # Docker compose pull + up
|
||
│ ├── docker-zalohy.sh # Záloha Docker dat
|
||
│ └── server-report.sh # Denní Telegram report
|
||
├── systemd/
|
||
│ ├── docker-update.{service,timer}
|
||
│ ├── docker-zalohy.{service,timer}
|
||
│ ├── server-report.{service,timer}
|
||
│ └── update-rpi.{service,timer}
|
||
└── conf/
|
||
└── telegram.conf.example # Šablona pro Telegram credentials
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Quickstart
|
||
|
||
### 1. Naklonuj
|
||
|
||
```bash
|
||
git clone http://<server-ip>:3000/mates/mates-server-maintenance.git ~/server-maintenance
|
||
```
|
||
|
||
### 2. Vytvoř Telegram konfiguraci
|
||
|
||
Získej **BOT_TOKEN** z [@BotFather](https://t.me/BotFather) a **CHAT_ID** z [@userinfobot](https://t.me/userinfobot):
|
||
|
||
```bash
|
||
mkdir -p ~/.config/telegram
|
||
cp ~/server-maintenance/conf/telegram.conf.example ~/.telegram.conf
|
||
nano ~/.telegram.conf # doplň reálné hodnoty
|
||
chmod 600 ~/.telegram.conf
|
||
```
|
||
|
||
### 3. Nainstaluj systemd timery
|
||
|
||
```bash
|
||
# Pro kazdy timer: nakopiruj service+timer do /etc/systemd/system
|
||
sudo cp ~/server-maintenance/systemd/*.{service,timer} /etc/systemd/system/
|
||
|
||
# Aktivuj (napr. docker-update)
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable --now docker-update.timer
|
||
sudo systemctl enable --now docker-zalohy.timer
|
||
sudo systemctl enable --now server-report.timer
|
||
sudo systemctl enable --now update-rpi.timer
|
||
|
||
# Over stav
|
||
systemctl list-timers --all | grep -E "docker|server-report|update"
|
||
```
|
||
|
||
### 4. Ověř
|
||
|
||
```bash
|
||
# Rucne spust report (melo by prijit Telegram zprava)
|
||
sudo systemctl start server-report.service
|
||
sudo journalctl -u server-report.service -f
|
||
|
||
# Rucne spust Docker update (melo by aktualizovat kontejnery)
|
||
sudo systemctl start docker-update.service
|
||
sudo journalctl -u docker-update.service -f
|
||
```
|
||
|
||
---
|
||
|
||
## ⏰ Plán úloh (timery)
|
||
|
||
| Timer | Kdy | Co dělá |
|
||
|---|---|---|
|
||
| `update-rpi.timer` | **Pátek 18:00** | `apt update && apt upgrade`, restart když nutný |
|
||
| `docker-update.timer` | **Sobota 18:00** | `docker compose pull && up -d` pro všechny služby |
|
||
| `docker-zalohy.timer` | **Úterý 20:00** | Záloha `data/` adresářů na NAS |
|
||
| `server-report.timer` | **Denně 09:30** | Telegram report (uptime, RAM, disk, Docker, teplota) |
|
||
|
||
---
|
||
|
||
## 📋 Detail skriptů
|
||
|
||
### `update.sh`
|
||
|
||
Aktualizuje systém (`apt update && apt upgrade`).
|
||
|
||
- **Spustí:** `sudo bash update.sh` nebo přes timer `update-rpi.timer`
|
||
- **Restartuje server** pokud `/var/run/reboot-required` existuje (1 minuta grace time)
|
||
- **Telegram notifikace:** start, hotovo / chyba, varování před restartem
|
||
|
||
### `docker-update.sh`
|
||
|
||
Aktualizuje všechny Docker Compose projekty.
|
||
|
||
- **Seznam služeb:** edituj `AKTUALIZOVAT` pole v skriptu
|
||
- **Log:** `/home/mates/skripty/update-docker-script/docker-update.log`
|
||
- **Telegram:** start, souhrn (úspěch/chyby), seznam aktualizovaných
|
||
|
||
### `docker-zalohy.sh`
|
||
|
||
Zálohuje `data/` adresáře Docker projektů.
|
||
|
||
- **Formát:** `tar.zst` (vysoká komprese)
|
||
- **Cíl:** `/home/mates/zalohy/docker/<YYYYMMDD>/`
|
||
- **Log:** `/home/mates/zalohy/docker/docker.log`
|
||
|
||
### `server-report.sh`
|
||
|
||
Denní Telegram report o stavu serveru.
|
||
|
||
- **Co reportuje:** uptime, load, RAM, disk, CPU teplota, Docker kontejnery, poslední update/záloha
|
||
- **Alert prahy:** disk 80% (warn) / 90% (crit), CPU 70°C / 80°C
|
||
- **Kdy:** denně 09:30
|
||
|
||
---
|
||
|
||
## ⚙️ Konfigurace
|
||
|
||
### Telegram credentials
|
||
|
||
Všechny skripty čtou z `/home/<user>/.telegram.conf`:
|
||
|
||
```bash
|
||
BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
|
||
CHAT_ID=123456789
|
||
```
|
||
|
||
`conf/telegram.conf.example` je šablona.
|
||
|
||
### Cesty (v systemd service souborech)
|
||
|
||
Pokud máš **jiného uživatele nebo cesty**, uprav `WorkingDirectory` a `ExecStart` v `systemd/*.service`:
|
||
|
||
```ini
|
||
[Service]
|
||
User=tvy-user
|
||
WorkingDirectory=/home/tvy-user/skripty/update-docker-script
|
||
ExecStart=/home/tvy-user/skripty/update-docker-script/docker-update.sh
|
||
```
|
||
|
||
### Seznam služeb k aktualizaci
|
||
|
||
V `scripts/docker-update.sh`, pole `AKTUALIZOVAT`:
|
||
|
||
```bash
|
||
AKTUALIZOVAT=(
|
||
audiobookshelf
|
||
calibre-web
|
||
vaultwarden
|
||
# pridej dalsi...
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
## 🔐 Bezpečnost
|
||
|
||
- ✅ **`/home/<user>/.telegram.conf` s `chmod 600`** – nikdy necommitovat reálný token
|
||
- ✅ **Service běží jako `User=mates`** – ne root (omezení škod v případě chyby)
|
||
- ✅ **`set -euo pipefail`** ve všech skriptech – fail-fast
|
||
- ✅ **Logy** – vše se loguje, snadné debugování
|
||
|
||
---
|
||
|
||
## 📁 Struktura na serveru
|
||
|
||
```
|
||
/home/mates/
|
||
├── .telegram.conf # Telegram credentials (chmod 600)
|
||
├── update.log # Log ze systemoveho update
|
||
├── docker/ # Docker projekty
|
||
├── skripty/
|
||
│ ├── server-report.sh # Tento skript
|
||
│ └── update-docker-script/
|
||
│ ├── docker-update.sh # Tento skript
|
||
│ └── docker-update.log # Log z Docker update
|
||
└── zalohy/
|
||
├── docker.log # Log ze zaloh
|
||
└── docker/
|
||
└── <YYYYMMDD>/ # Zalohy (tar.zst)
|
||
└── <sluzba>-<HHMMSS>.tar.zst
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 Úprava schedule
|
||
|
||
Edituj `*.timer` soubory:
|
||
|
||
```ini
|
||
[Timer]
|
||
# Kazdou nedeli v 02:00
|
||
OnCalendar=Sun *-*-* 02:00:00
|
||
# Kazdych 15 minut
|
||
OnCalendar=*:0/15
|
||
# Kazdy patek v 18:00 (puvodni)
|
||
OnCalendar=Fri *-*-* 18:00:00
|
||
```
|
||
|
||
Po úpravě: `sudo systemctl daemon-reload`.
|
||
|
||
---
|
||
|
||
## 📜 Licence
|
||
|
||
MIT – viz [LICENSE](LICENSE)
|
||
|
||
---
|
||
|
||
**Poslední update:** 2026-08-01
|