iso27diy-corp/business-server/VPS administration.md
2026-06-06 20:38:07 +02:00

228 lines
5.3 KiB
Markdown

# Onderhoudsplan — iso27diy.com VPS & analytics stack
## Dagelijks (geautomatiseerd)
Niets te doen — de volgende zaken lopen automatisch:
- fail2ban monitort SSH-pogingen en blokkeert aanvallers
- Docker herstart Umami en PostgreSQL bij crashes (`restart: always`)
- Nginx en fail2ban herstarten automatisch na een server-reboot (`systemctl enable`)
- Let's Encrypt vernieuwt het SSL-certificaat automatisch via Certbot
---
## Wekelijks (~10 minuten)
### Services controleren
```bash
# Nginx en fail2ban
sudo systemctl status nginx fail2ban
# Umami en PostgreSQL
cd ~/umami && docker compose ps
```
Wat je wil zien: `active (running)` voor systemd-services, `running` voor Docker containers.
### fail2ban activiteit bekijken
```bash
sudo fail2ban-client status sshd
```
Veel bans op korte tijd kan wijzen op een gerichte aanval — overweeg dan `bantime` te verhogen in `jail.local`.
### Schijfruimte controleren
```bash
df -h
```
Let op de partitie waar `/` op staat. Bij meer dan 80% gebruik actie ondernemen (logs opruimen, Docker images opschonen).
### Docker logs vluchtig controleren
```bash
cd ~/umami && docker compose logs --since 24h umami
```
Zoek naar foutmeldingen of crashes.
---
## Maandelijks (~30 minuten)
### Systeemupdates installeren
```bash
sudo apt update && apt list --upgradable
sudo apt upgrade -y
```
Herstart daarna de server als de kernel geüpdatet is:
```bash
sudo reboot
```
Controleer na herstart of alle services weer draaien (zie wekelijkse check).
### Umami updaten
```bash
cd ~/umami
docker compose pull
docker compose up -d
```
### Database backup maken
```bash
docker compose exec db pg_dump -U umami umami > \
~/umami/backup-$(date +%Y%m%d).sql
```
Kopieer de backup naar een externe locatie (lokale machine of cloud opslag):
```bash
# Vanaf je lokale machine:
scp deploy@<server-ip>:~/umami/backup-$(date +%Y%m%d).sql ~/backups/
```
Verwijder oude backups op de server (bewaar de laatste 3):
```bash
ls -t ~/umami/backup-*.sql | tail -n +4 | xargs rm -f
```
### SSL-certificaat controleren
```bash
sudo certbot renew --dry-run
```
Dit simuleert vernieuwing zonder het certificaat daadwerkelijk te vervangen. Als het slaagt, is automatische vernieuwing correct ingesteld.
Vervaldatum handmatig inzien:
```bash
sudo certbot certificates
```
### Nginx-logs bekijken op verdacht verkeer
```bash
sudo tail -n 100 /var/log/nginx/access.log
sudo tail -n 50 /var/log/nginx/error.log
```
Veel 404-verzoeken op vreemde paden (bijv. `/wp-admin`, `/.env`) zijn normaal scannerverkeer — fail2ban pakt dit gedeeltelijk af. Bij aanhoudend verkeer van één IP kun je dat handmatig blokkeren:
```bash
sudo ufw deny from <ip-adres>
```
### Docker opschonen
Ongebruikte images en containers stapelen zich op en verbruiken schijfruimte:
```bash
docker system prune -f
```
---
## Kwartaal (~1 uur)
### UTM campagnes updaten
- Voeg nieuwe campagnewaarden toe aan het UTM-scheme (nieuwe kwartaalcodes)
- Archiveer verlopen campagnes in de UTM tracker spreadsheet (status → `archived`)
- Controleer in Umami welke bronnen en campagnes het meest verkeer opleveren
### Wachtwoorden roteren
- Umami admin-wachtwoord wijzigen via **Settings → Profile**
- Overweeg het database-wachtwoord in `docker-compose.yml` te roteren (vereist herstart van de stack)
### Firewall-regels reviewen
```bash
sudo ufw status verbose
```
Verwijder regels die niet meer nodig zijn.
### Serverresources evalueren
```bash
# CPU en geheugen
htop
# Schijfruimte per map
du -sh ~/umami/*
sudo du -sh /var/log/*
```
Bij structureel hoog geheugen- of CPU-gebruik: overweeg een groter Hostinger-pakket.
---
## Bij incidenten
### Service ligt plat
```bash
# Herstart individuele service
sudo systemctl restart nginx
sudo systemctl restart fail2ban
cd ~/umami && docker compose restart
```
### Umami dashboard niet bereikbaar
Controleer in volgorde:
1. Draaien de Docker containers? → `docker compose ps`
2. Luistert Nginx? → `sudo systemctl status nginx`
3. Klopt de DNS? → `dig analytics.iso27diy.com`
4. Is het SSL-certificaat geldig? → `sudo certbot certificates`
### Database herstellen vanuit backup
```bash
cd ~/umami
docker compose stop umami
docker compose exec db psql -U umami -c "DROP DATABASE umami;"
docker compose exec db psql -U umami -c "CREATE DATABASE umami;"
docker compose exec -T db psql -U umami umami < backup-YYYYMMDD.sql
docker compose start umami
```
### Jezelf buitengesloten via fail2ban
Doe dit vanaf een andere internetverbinding (bijv. mobiel):
```bash
sudo fail2ban-client set sshd unbanip <jouw-ip>
```
---
## Handige commando's — spiekbriefje
| Wat | Commando |
|-----|----------|
| Services checken | `sudo systemctl status nginx fail2ban` |
| Docker containers checken | `cd ~/umami && docker compose ps` |
| Schijfruimte | `df -h` |
| fail2ban status | `sudo fail2ban-client status sshd` |
| Umami logs | `cd ~/umami && docker compose logs -f umami` |
| Nginx logs | `sudo tail -n 100 /var/log/nginx/access.log` |
| Database backup | `docker compose exec db pg_dump -U umami umami > backup-$(date +%Y%m%d).sql` |
| Systeem updaten | `sudo apt update && sudo apt upgrade -y` |
| Umami updaten | `cd ~/umami && docker compose pull && docker compose up -d` |
| Docker opschonen | `docker system prune -f` |
| IP blokkeren | `sudo ufw deny from <ip>` |
| IP deblokkeren (fail2ban) | `sudo fail2ban-client set sshd unbanip <ip>` |