# 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://: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//` - **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//.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//.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/ +-- / # Zalohy (tar.zst) +-- -.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