Files
mates-server-maintenance/README.md
T
mates fba29e5171 feat: systemd timery + skripty pro udrzbu serveru
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
2026-08-01 22:26:40 +02:00

224 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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