From a7ace0d02127868216f3f9e351c57f31532ad732 Mon Sep 17 00:00:00 2001 From: Richard Kranendonk Date: Sat, 6 Jun 2026 20:38:07 +0200 Subject: [PATCH] Minor changes --- business-server/Easy-Appointments.md | 67 +++ business-server/Hostinger How-to's.md | 5 + business-server/Only-Office.md | 34 ++ business-server/VPS administration.md | 228 +++++++++ .../VPS install playbook for Umami.md | 449 ++++++++++++++++++ business-server/VPS security.md | 24 + business-server/VPS specs.md | 28 ++ business-server/VPS stack.md | 18 + 8 files changed, 853 insertions(+) create mode 100644 business-server/Easy-Appointments.md create mode 100644 business-server/Hostinger How-to's.md create mode 100644 business-server/Only-Office.md create mode 100644 business-server/VPS administration.md create mode 100644 business-server/VPS install playbook for Umami.md create mode 100644 business-server/VPS security.md create mode 100644 business-server/VPS specs.md create mode 100644 business-server/VPS stack.md diff --git a/business-server/Easy-Appointments.md b/business-server/Easy-Appointments.md new file mode 100644 index 0000000..fcd3762 --- /dev/null +++ b/business-server/Easy-Appointments.md @@ -0,0 +1,67 @@ +# Easy!Appointments docker-compose.yaml example + +https://github.com/alextselegidis/easyappointments + +``` +services: + easyappointments: + image: alextselegidis/easyappointments:${APP_VERSION} + restart: always + ports: + - ${APP_PORT}:80 + environment: + - BASE_URL=${SITE_URL} + - DEBUG_MODE=FALSE + - DB_HOST=mysql + - DB_NAME=easyappointments + - DB_USERNAME=${DB_USER} + - DB_PASSWORD=${DB_PASS} + - MAIL_PROTOCOL=mail + - MAIL_SMTP_DEBUG=0 + - MAIL_SMTP_AUTH=0 + - MAIL_SMTP_HOST=${EMAIL_SMTP_HOST} + - MAIL_SMTP_USER=${EMAIL_SMTP_USER} + - MAIL_SMTP_PASS=${EMAIL_SMTP_PASS} + - MAIL_SMTP_CRYPTO=tls + - MAIL_SMTP_PORT=${EMAIL_SMTP_PORT} + - MAIL_FROM_ADDRESS=${EMAIL_SMTP_FROM} + - MAIL_FROM_NAME=${EMAIL_SMTP_FROM} + - MAIL_REPLY_TO_ADDRESS=${EMAIL_SMTP_FROM} + + mysql: + image: mysql:8.4 + restart: always + command: [ + '--mysql-native-password=ON', + ] + environment: + - MYSQL_ROOT_PASSWORD=${DB_PASS} + - MYSQL_DATABASE=easyappointments + - MYSQL_USER=${DB_USER} + - MYSQL_PASSWORD=${DB_PASS} + volumes: + - mysql:/var/lib/mysql + + db-backup: + image: tiredofit/db-backup + volumes: + - db_backup:/backup + environment: + - CONTAINER_ENABLE_MONITORING=false + - DB_HOST=mysql + - DB_TYPE=mariadb + - DB_NAME=easyappointments + - DB_USER=${DB_USER} + - DB_PASS=${DB_PASS} + - DEFAULT_DB_DUMP_FREQ=1440 + - DEFAULT_DB_DUMP_BEGIN=0000 + - DEFAULT_COMPRESSION=BZ + - DB_CLEANUP_TIME=8640 + - MD5=TRUE + - DEFAULT_BACKUP_BEGIN=+1 + restart: always + +volumes: + mysql: + db_backup: +``` \ No newline at end of file diff --git a/business-server/Hostinger How-to's.md b/business-server/Hostinger How-to's.md new file mode 100644 index 0000000..d45dab0 --- /dev/null +++ b/business-server/Hostinger How-to's.md @@ -0,0 +1,5 @@ +[VPS Setup Guide](https://www.hostinger.com/support/5723772-how-to-connect-to-your-vps-via-ssh-at-hostinger/) +[Setting up the Firewall](https://www.hostinger.com/support/8172641-how-to-use-a-managed-vps-firewall-at-hostinger/) +[Best practices](https://www.hostinger.com/tutorials/vps-security) +[VPS monitoring with Kodee](https://www.youtube.com/watch?v=LpmOMzQDxFk) +[VPS support articles](https://www.hostinger.com/support/vps/) diff --git a/business-server/Only-Office.md b/business-server/Only-Office.md new file mode 100644 index 0000000..b6017fe --- /dev/null +++ b/business-server/Only-Office.md @@ -0,0 +1,34 @@ +Here’s a **Docker Compose** file for ONLYOFFICE Workspace Community Edition, configured to work with your existing nginx setup and avoiding ports 3000/3001. This setup uses ports **3002** (for the Community Server) and **3003** (for the Document Server), which you can proxy via nginx to `docs.iso27diy.com`. + +```yaml +version: '3.8' + +services: + onlyoffice-community-server: + image: onlyoffice/communityserver:latest + container_name: onlyoffice-community-server + restart: always + environment: + - DOCUMENT_SERVER_PORT_3003=3003 + volumes: + - ./community-data:/var/www/onlyoffice/Data + - ./community-logs:/var/log/onlyoffice + ports: + - "3002:80" + depends_on: + - onlyoffice-document-server + + onlyoffice-document-server: + image: onlyoffice/documentserver:latest + container_name: onlyoffice-document-server + restart: always + environment: + - JWT_SECRET=your_jwt_secret_here # Change this to a secure random string + volumes: + - ./document-data:/var/www/onlyoffice/Data + - ./document-logs:/var/log/onlyoffice + ports: + - "3003:80" + cap_add: + - SYS_ADMIN +``` diff --git a/business-server/VPS administration.md b/business-server/VPS administration.md new file mode 100644 index 0000000..2e262b7 --- /dev/null +++ b/business-server/VPS administration.md @@ -0,0 +1,228 @@ +# 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@:~/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 +``` + +### 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 +``` + +--- + +## 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 deblokkeren (fail2ban) | `sudo fail2ban-client set sshd unbanip ` | diff --git a/business-server/VPS install playbook for Umami.md b/business-server/VPS install playbook for Umami.md new file mode 100644 index 0000000..1c9d7b0 --- /dev/null +++ b/business-server/VPS install playbook for Umami.md @@ -0,0 +1,449 @@ +# Stappenplan: Umami op Hostinger VPS + +**Omgeving:** Ubuntu 24.04 LTS · 8 GB RAM · 2 vCPU · 100 GB SSD +**Doel:** Umami analytics bereikbaar op `analytics.iso27diy.com` + +--- + +## Overzicht + +1. Server beveiligen (gebruiker, firewall, SSH) +2. Docker installeren +3. Subdomein aanmaken in Netlify DNS +4. Umami deployen met Docker Compose +5. Nginx instellen als reverse proxy +6. SSL certificaat installeren (Let's Encrypt) +7. Tracking script toevoegen aan Netlify site +8. UTM-tracking testen + +Geschatte tijd: **45–60 minuten** + +--- + +## Stap 1 — Server beveiligen + +### 1.1 Inloggen als root + +```bash +ssh root@ +``` + +### 1.2 Systeem updaten + +```bash +apt update && apt upgrade -y +``` + +### 1.3 Nieuwe gebruiker aanmaken + +Werken als root is risicovol. Maak een aparte gebruiker aan: + +```bash +adduser deploy +usermod -aG sudo deploy +``` + +Kies een sterk wachtwoord wanneer daarom gevraagd wordt. + +### 1.4 SSH-toegang instellen voor nieuwe gebruiker + +```bash +rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy +``` + +Test in een **nieuw terminalvenster** (sluit de huidige sessie nog niet): + +```bash +ssh deploy@ +``` + +Als dat werkt: goed. Sluit nu de root-sessie. + +### 1.5 Root-login via SSH uitschakelen + +```bash +sudo nano /etc/ssh/sshd_config +``` + +Zoek de regel `PermitRootLogin yes` en verander die naar: + +``` +PermitRootLogin no +``` + +Sla op met `Ctrl+O`, sluit met `Ctrl+X`. Herstart SSH: + +```bash +sudo systemctl restart ssh +``` + +### 1.6 Firewall instellen + +```bash +sudo ufw allow OpenSSH +sudo ufw allow 80/tcp +sudo ufw allow 443/tcp +sudo ufw enable +``` + +Controleer de status: + +```bash +sudo ufw status +``` + +Je zou dit moeten zien: + +``` +Status: active +To Action From +-- ------ ---- +OpenSSH ALLOW Anywhere +80/tcp ALLOW Anywhere +443/tcp ALLOW Anywhere +``` + + +### 1.7 fail2ban installeren + +```bash +sudo apt install -y fail2ban +``` + +Maak een configuratiebestand aan: + +```bash +sudo nano /etc/fail2ban/jail.local +``` + +Plak: + +```ini +[DEFAULT] +bantime = 1h +findtime = 10m +maxretry = 5 + +[sshd] +enabled = true +port = ssh +logpath = %(sshd_log)s +backend = %(sshd_backend)s +``` + +Activeer en start: + +```bash +sudo systemctl enable fail2ban +sudo systemctl start fail2ban +``` + +Status controleren: + +```bash +sudo fail2ban-client status sshd +``` + +Een gebanned IP handmatig deblokkeren: + +```bash +sudo fail2ban-client set sshd unbanip +``` + +--- + +## Stap 2 — Docker installeren + +```bash +sudo apt install -y ca-certificates curl gnupg +sudo install -m 0755 -d /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ + sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt update +sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin +``` + +Voeg je gebruiker toe aan de docker-groep (zodat je geen `sudo` nodig hebt): + +```bash +sudo usermod -aG docker deploy +newgrp docker +``` + +Test of het werkt: + +```bash +docker run hello-world +``` + +--- +## Stap 3 — Subdomein aanmaken in Netlify DNS + +Je domein `iso27diy.com` gebruikt Netlify als DNS. Zo voeg je het subdomein toe: + +1. Log in op [app.netlify.com](https://app.netlify.com) +2. Ga naar **Domains** (linksboven in het menu) +3. Klik op `iso27diy.com` +4. Klik op **Add new record** +5. Vul in: + - **Type:** `A` + - **Name:** `analytics` + - **Value:** `` (het IP-adres van je Hostinger VPS) + - **TTL:** laat op standaard staan +1. Klik **Save** + +Het DNS-record propageert doorgaans binnen 5–15 minuten. Je kunt het controleren via: + +```bash +dig analytics.iso27diy.com +``` + +Wacht met de volgende stap tot het IP-adres correct terugkomt. + +--- + +## Stap 4 — Umami deployen met Docker Compose + +### 4.1 Map aanmaken + +```bash +mkdir -p ~/umami && cd ~/umami +``` + +### 4.2 docker-compose.yml aanmaken + +```bash +nano docker-compose.yml +``` + +Plak de volgende inhoud: + +```yaml +version: '3' + +services: + umami: + image: ghcr.io/umami-software/umami:postgresql-latest + ports: + - "127.0.0.1:3000:3000" + environment: + DATABASE_URL: postgresql://umami:umami_password@db:5432/umami + DATABASE_TYPE: postgresql + APP_SECRET: vervang_dit_door_een_willekeurige_lange_string + depends_on: + db: + condition: service_healthy + restart: always + + db: + image: postgres:15-alpine + environment: + POSTGRES_DB: umami + POSTGRES_USER: umami + POSTGRES_PASSWORD: umami_password + volumes: + - umami-db:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U umami"] + interval: 5s + timeout: 5s + retries: 5 + restart: always + +volumes: + umami-db: +``` + +**Belangrijk:** vervang `umami_password` door een sterk wachtwoord, en `vervang_dit_door_een_willekeurige_lange_string` door een willekeurige string (bijv. via `openssl rand -base64 32`). + +Genereer een willekeurige APP_SECRET: + +```bash +openssl rand -base64 32 +``` + +Kopieer de output en plak die als waarde voor `APP_SECRET`. + +Sla op met `Ctrl+O`, sluit met `Ctrl+X`. + +### 4.3 Umami starten + +```bash +docker compose up -d +``` + +Controleer of de containers draaien: + +```bash +docker compose ps +``` + +Beide services (`umami` en `db`) moeten de status `running` hebben. Dit kan 1–2 minuten duren bij de eerste start. + +Controleer de logs als iets niet klopt: + +```bash +docker compose logs -f +``` + +--- + +## Stap 5 — Nginx instellen als reverse proxy + +Nginx ontvangt het verkeer op poort 80/443 en stuurt het door naar Umami op poort 3000. + +### 5.1 Nginx installeren + +```bash +sudo apt install -y nginx +``` + +### 5.2 Configuratie aanmaken + +```bash +sudo nano /etc/nginx/sites-available/analytics.iso27diy.com +``` + +Plak: + +```nginx +server { + listen 80; + server_name analytics.iso27diy.com; + + location / { + proxy_pass http://127.0.0.1:3000; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_cache_bypass $http_upgrade; + } +} +``` + +Sla op en sluit. + +### 5.3 Configuratie activeren + +```bash +sudo ln -s /etc/nginx/sites-available/analytics.iso27diy.com \ + /etc/nginx/sites-enabled/ +sudo nginx -t +sudo systemctl reload nginx +``` + +`nginx -t` moet `syntax is ok` teruggeven. + +--- + +## Stap 6 — SSL certificaat installeren + +```bash +sudo apt install -y certbot python3-certbot-nginx +sudo certbot --nginx -d analytics.iso27diy.com +``` + +Certbot vraagt om een e-mailadres en of je akkoord gaat met de voorwaarden. Na afloop past het de Nginx-configuratie automatisch aan voor HTTPS en regelt het automatische verlenging. + +Controleer automatische verlenging: + +```bash +sudo certbot renew --dry-run +``` + +--- +## Stap 7 — Eerste login en wachtwoord wijzigen + +Ga naar `https://analytics.iso27diy.com` in je browser. + +- **Gebruikersnaam:** `admin` +- **Wachtwoord:** `umami` + +Ga direct naar **Settings → Profile** en stel een sterk wachtwoord in. + + +### Website toevoegen + +1. Ga naar **Settings → Websites → Add website** +2. Vul in: + - **Name:** iso27diy.com + - **Domain:** iso27diy.com +3. Klik **Save** +4. Klik op het **tracking code** icoontje naast de website om je `data-website-id` te kopiëren + +--- +## Stap 8 — Tracking script toevoegen aan Netlify site + +Voeg dit toe aan de `` van je site. Hoe je dat doet hangt af van hoe je site gebouwd is, maar in de meeste gevallen is er een hoofd-HTML-template. + +```html + +``` + +Het `data-domains` attribuut zorgt dat bezoeken vanaf andere domeinen (zoals localhost tijdens ontwikkeling) niet meegeteld worden. + +Na een Netlify deploy: ga naar je site, wacht een paar seconden, en controleer of er een bezoek verschijnt in het Umami dashboard onder **Realtime**. + +--- + +## Stap 9 — UTM-tracking testen + +Maak een test-URL met UTM-parameters: + +``` +https://iso27diy.com/?utm_source=linkedin&utm_medium=post&utm_campaign=test&utm_content=cta-hero +``` + +Bezoek die URL in een browser. Ga dan in Umami naar: + +**Reports → UTM** (of in het hoofddashboard onder **Sources**) + +Je ziet daar de uitsplitsing per `source`, `medium`, `campaign` en `content`. + +--- + +## Updates uitvoeren + +Umami brengt regelmatig updates uit. Updaten gaat zo: + +```bash +cd ~/umami +docker compose pull +docker compose up -d +``` + +--- + +## Database backup + +Railway maakte geen automatische backups — op je eigen VPS ook niet, tenzij je dat instelt. Maak periodiek een handmatige backup: + +```bash +docker compose exec db pg_dump -U umami umami > \ + ~/umami/backup-$(date +%Y%m%d).sql +``` + +Bewaar backups op een andere locatie (bijv. je lokale machine of een cloud opslag). + +--- + +## Samenvatting gebruikte poorten en services + +| Service | Poort | Bereikbaar vanaf | +| --------------- | ------- | -------------------- | +| Nginx | 80, 443 | Internet | +| Umami (Node.js) | 3000 | Alleen localhost | +| PostgreSQL | 5432 | Alleen Docker intern | diff --git a/business-server/VPS security.md b/business-server/VPS security.md new file mode 100644 index 0000000..f977a2e --- /dev/null +++ b/business-server/VPS security.md @@ -0,0 +1,24 @@ +# VPS Beveiligingsmaatregelen + +### Server hardening +- Root SSH-login uitgeschakeld +- Dedicated non-root gebruiker (`deploy`) met sudo-rechten +- SSH key authenticatie +- UFW firewall — alleen poorten 22, 80 en 443 open +- fail2ban actief — IP-adressen worden 1 uur geblokkeerd na 5 mislukte SSH-pogingen binnen 10 minuten + +### Netwerk & encryptie +- HTTPS afgedwongen via Nginx + Let's Encrypt +- Umami gebonden aan `127.0.0.1` — niet publiek bereikbaar +- PostgreSQL alleen op intern Docker-netwerk +- SSL automatisch vernieuwd via Certbot + +### Applicatiebeveiliging +- Umami standaardwachtwoord direct wijzigen bij eerste login +- `APP_SECRET` gerandomiseerd met `openssl rand -base64 32` +- Cookieloze tracking — geen persoonsgegevens opgeslagen +- `data-domains` attribuut beperkt tracking tot productiedomein + +### Nog te doen +- [ ] Periodieke database backups instellen (cronjob) — een cronjob op de VPS die dagelijks een dump maakt en bijv. naar je lokale machine of een object storage stuurt. Nu verlies je bij een VPS-crash alles wat na je laatste handmatige backup binnenkomt. +- [ ] fail2ban installeren voor SSH brute-force bescherming — blokkeert automatisch IP-adressen die te vaak fout inloggen via SSH. Eén commando om te installeren, vrijwel geen configuratie nodig. diff --git a/business-server/VPS specs.md b/business-server/VPS specs.md new file mode 100644 index 0000000..49b1c7b --- /dev/null +++ b/business-server/VPS specs.md @@ -0,0 +1,28 @@ +# VPS specificaties + +- srv1119777.hstgr.cloud +- ssh root@72.61.188.15 +- IPv4: 72.61.188.15 +- IPv6: 2a02:4780:41:a7e5::1 + +* Plan: KVM 2 VPS, datacenter Frankfurt (DE), Verloopt op 2027-12-04 +* OS: Ubuntu 24.04 LTS +* Resources: 8 GB RAM, 2 vCPU, 100 GB SSD (≈ 2.8 GB used), bandwidth 8 TB/maand (≈ 0.01% used) +* Back-ups: Automatische dagelijkse back-up: **uitgeschakeld** + +## Samenvatting gebruikte poorten en services +per 10 April 2026 + +| Service | Poort | Bereikbaar vanaf | +| --------------- | ------- | -------------------- | +| Nginx | 80, 443 | Internet | +| Umami (Node.js) | 3000 | Alleen localhost | +| PostgreSQL | 5432 | Alleen Docker intern | +Docker draait ook, natuurlijk + +- [ ] regelmatig updates en backups draaien +- [ ] logs draaien voor afwijkingen + + + + diff --git a/business-server/VPS stack.md b/business-server/VPS stack.md new file mode 100644 index 0000000..bf762a9 --- /dev/null +++ b/business-server/VPS stack.md @@ -0,0 +1,18 @@ +# VPS Infrastructure stack +per 11 April 2026 + +| Component | Details | Platform | +|-----------|---------|----------| +| Website hosting | iso27diy.com — statische site | Netlify | +| DNS | iso27diy.com + analytics.iso27diy.com | Netlify DNS | +| Domeinregistrar | iso27diy.com gekocht hier | Hover | +| VPS | Ubuntu 24.04 · 8 GB RAM · 2 vCPU · 100 GB SSD | Hostinger | +| Analytics app | analytics.iso27diy.com · poort 3000 (intern) | Umami | +| Database | PostgreSQL 15 · alleen Docker intern netwerk | Docker | +| Reverse proxy | Handelt HTTPS af, stuurt door naar Umami op :3000 | Nginx | +| SSL | Automatisch vernieuwd · analytics.iso27diy.com | Let's Encrypt | +| fail2ban | SSH brute-force bescherming | Hostinger VPS | + +--- + +[VPS security](VPS%20security.md) \ No newline at end of file