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
5.9 KiB
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
git clone http://<server-ip>:3000/mates/mates-server-maintenance.git ~/server-maintenance
2. Vytvoř Telegram konfiguraci
Získej BOT_TOKEN z @BotFather a CHAT_ID z @userinfobot:
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
# 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ěř
# 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.shnebo přes timerupdate-rpi.timer - Restartuje server pokud
/var/run/reboot-requiredexistuje (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
AKTUALIZOVATpole 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:
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:
[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:
AKTUALIZOVAT=(
audiobookshelf
calibre-web
vaultwarden
# pridej dalsi...
)
🔐 Bezpečnost
- ✅
/home/<user>/.telegram.confschmod 600– nikdy necommitovat reálný token - ✅ Service běží jako
User=mates– ne root (omezení škod v případě chyby) - ✅
set -euo pipefailve 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:
[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
Poslední update: 2026-08-01