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

5.9 KiB
Raw Blame History

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.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:

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.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:

[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