5 min read

Q1, hoofdstuk 1: Een VPS configureren met Docker en een reverse proxy

Dit is niet de ultieme handleiding over 'hoe stel je een VPS in', maar een logboek van iemand die een VPS probeert in te richten en onderweg aantekeningen maakt.
Q1, hoofdstuk 1: Een VPS configureren met Docker en een reverse proxy
Photo by Ian Taylor / Unsplash

Een VPS en besturingssysteem kiezen

Voor mijn eerste VPS koos ik de Starter VPS van OVHcloud voor €0,81 per maand. Deze heeft 1 vCore, 2 GB RAM, 20 GB SSD SATA en 100 Mbps onbeperkte bandbreedte. Spotgoedkoop en perfect om mee te experimenteren. (Kleine kanttekening: je kunt altijd upgraden naar een andere VPS, maar niet naar de nieuwere VLE-reeks van OVH.)

Zijn er verborgen kosten? Bij de meeste VPS-providers kun je een besturingssysteem en extra beheersoftware kiezen. Niet alles is gratis. Ook snapshots en geautomatiseerde back-ups zijn vaak betaalde opties. Voor nu heb ik niets extra’s nodig.

Ik kies voor Ubuntu 24.04, een van de populairste Linux-distributies. Misschien niet de allerbeste keuze, maar juist door de populariteit is het makkelijk om oplossingen te vinden als ik ergens tegenaan loop. Ik heb niet gekozen voor de kant-en-klare Ubuntu-versie met Docker, want als ik al niet zelf Docker kan installeren, kan ik dit hele project net zo goed opgeven.


Toegang tot de VPS en een paar beveiligingsstappen

Zodra je de inloggegevens van je provider hebt ontvangen, begint het echte werk.

Hoe beheer je een VPS?

We gaan terug naar de basis: de command-line interface. Een zwart scherm met witte tekst. Sommigen herinneren zich MS-DOS misschien nog. (Ik hoop dat mijn R&D-collega’s dit niet lezen.) Hoewel ik later een UI toevoeg, blijft een deel van het beheer text based via de commandline.

Ik gebruik PuTTY, maar je kunt ook OpenSSH of Windows PowerShell gebruiken.

How to get started with SSH connections
Find out how you can use SSH to access your OVHcloud server from most desktop clients

Een nieuwe gebruiker aanmaken

Je VPS heeft waarschijnlijk een standaardgebruikersnaam en hopelijk een willekeurig gegenereerd wachtwoord. In mijn geval was de gebruiker ubuntu, een naam die makkelijk te raden is voor kwaadwillenden. Daarom maken we eerst een nieuwe gebruiker aan en verwijderen we later de standaardgebruiker.

💡
OVH is slim genoeg om niet alle gebruikers root-toegang tot de hele server te geven. Dit betekent dat je sudo moet toevoegen aan de meeste commando's en je wachtwoord moet invoeren. Sudo staat voor superuser do. Het is mogelijk dat jouw VPS je wél root-rechten geeft.

Een nieuwe gebruiker aanmaken:

sudo adduser USERNAME

Voer een wachtwoord in (en bewaar het veilig). Vervolgens geven we de nieuwe gebruiker dezelfde rechten als de standaardgebruiker:

sudo usermod -aG sudo USERNAME

De poort wijzigen

Je VPS gebruikt standaard poort 22 voor SSH. Dit is een bekend doelwit voor aanvallen. We wijzigen deze poort naar een willekeurig 5-cijferig getal (onder de 65535).

Open het configuratiebestand met:

sudo nano /lib/systemd/system/ssh.socket

Zoek de regel:

[Socket]
ListenStream=22
Accept=no

En wijzig 22 naar een ander getal, dit kan zelfs 5 cijfers zijn, maar niet hoger dan 65535.

50 Common Ports You Should Know - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

Sla het bestand op en herstart de VPS:

sudo reboot

De standaardgebruiker verwijderen

Log opnieuw in met de nieuwe gebruiker en de nieuwe poort, en verwijder de oude gebruiker:

sudo userdel -r -f USERNAME

De server updaten

Tijd voor een korte pauze, en een update van de server met het volgende commando:

sudo apt update && sudo apt upgrade -y

Is de server nu superveilig?

Veilig genoeg voor nu, maar het kan inderdaad nog veel beter, daarover zijn genoeg andere blogs.

How to secure a VPS
Find out how to apply basic security measures to protect your VPS against attacks and unauthorised access

Install Docker

In de laatste stap van dit proces installeer ik Docker Engine op deze VPS. Met Docker kun je meerdere services op dezelfde VPS draaien, maar in een kleine, toegewijde en geïsoleerde omgeving: een container. Ja, je kunt het vergelijken met een enorm vrachtschip vol containers.

Ik volgde de officiële installatiegids van Docker. De 'convenience script'-methode werkte niet goed vanwege een detectiefout in de Ubuntu-versie. De beste optie bleek installatie via de officiële apt-repository, 'Set up and install Docker Engine from Docker's apt repository'.

Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

Interface voor Docker toevoegen: Dockge

Je kunt Docker volledig via de command-line beheren, maar een interface maakt het makkelijker. In plaats van Portainer koos ik voor Dockge, een lichte maar effectieve beheeromgeving.

De installatie is werkelijk supersimpel volg de stappen op:

Dockge
Self-hosted - Docker compose.yaml - Stack-oriented Manager

Na installatie is Dockge bereikbaar op: http://IP-ADRES:5001


Tijd voor de eerste container: Nginx Proxy Manager

Met Nginx Proxy Manager kun je domeinen toewijzen aan containers en SSL-certificaten beheren.

  1. Ga naar Dockge
  2. Klik op de blauwe knop "+Compose"
  3. Geef de stack een naam
  4. Kopieer de docker-compose.yml van nginxproxymanager.com/setup
version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    # environment:
      # Uncomment this if you want to change the location of
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  1. Plak de configuratie in Dockge in de rechter texteditor over alle informatie die begint met version: '3.8'
  2. Klik op Save en Deploy. De interface laat nu zien dat er gegevens opgehaald worden voor de container image.
  3. Log in op http://IP-ADRES:81/login met:
  4. Er wordt nu gevraagd om deze inloggegevens te wijzigen.

Yes! Finished!

De VPS is nu geconfigureerd en klaar om een Ghost-website te hosten in de volgende stappen.