Μετάβαση στο περιεχόμενο

Ρυθμίσεις cookies

Επιλέξτε ανά κατηγορία ποια cookies επιτρέπετε. Μπορείτε να αλλάξετε την επιλογή σας οποιαδήποτε στιγμή μέσω των Ρυθμίσεων cookies στο κάτω μέρος κάθε σελίδας. Δήλωση απορρήτου

Απαραίτητα

Πάντα ενεργά

Χρειάζονται για τη σύνδεση, για να διατηρείται το καλάθι σας και για να θυμόμαστε τις επιλογές σας. Είναι πάντα ενεργά.

Ποια cookies;
  • weboke_sessie, weboke_klant, weboke_remember: η συνεδρία σας και η παραμονή σε σύνδεση
  • weboke_basket: το καλάθι σας
  • wkBtwIncl: εμφάνιση τιμών με ή χωρίς ΦΠΑ
  • wok_cookies: η επιλογή σας για τα cookies, 12 μήνες

Μετρούν ποια διαφήμιση οδηγεί σε επίσκεψη ή παραγγελία, ώστε να μην πληρώνουμε για διαφημίσεις που δεν αποδίδουν.

Ποια cookies;
  • Google Ads μέσω Google Tag Manager (_gcl_au, _gcl_aw), έως 90 ημέρες
  • OpenAI Ads, διαφημίσεις στο ChatGPT
  • wok_aff: μέσω ποιου συνεργάτη ήρθατε σε εμάς (πρόγραμμα συνεργατών), 60 ημέρες

4,6

Χώρα και γλώσσα

Κάθε χώρα έχει τη δική της ιστοσελίδα, με τιμές και ΦΠΑ της χώρας αυτής.

Προβολή

Συνταγές: Uptime Kuma και Vaultwarden

Ενότητα 9: Docker και docker compose · Χρόνος ανάγνωσης: 13 λεπτά

Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να εκτελείτε το Uptime Kuma και το Vaultwarden με docker compose πίσω από το Caddy, με https, κλειστή εγγραφή, αντίγραφα ασφαλείας των volumes και έναν σταθερό τρόπο ενημέρωσης.

Βασικές έννοιες: container reverse proxy, Caddyfile, αυτόματο https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websockets, αντίγραφα ασφαλείας των volumes, docker compose pull, δική σας κεφαλίδα (header)

Τι θα δημιουργήσουμε

Δύο χρήσιμες υπηρεσίες στον δικό σας server, η καθεμία σε δικό της subdomain:

  • Uptime Kuma στο status.example.com: ένα πρόγραμμα παρακολούθησης με διεπαφή web, που παρακολουθεί τους ιστότοπους, τις θύρες και τα πιστοποιητικά σας και σας στέλνει ειδοποίηση όταν κάτι πέσει (μάθημα 8.3). Προσοχή: μια παρακολούθηση που εκτελείται στον ίδιο server με αυτό που παρακολουθεί δεν βλέπει πότε πέφτει ολόκληρος ο server. Χρησιμοποιήστε την λοιπόν για τους άλλους ιστότοπους και τις άλλες υπηρεσίες σας ή εγκαταστήστε την σε δεύτερο server.
  • Vaultwarden στο kluis.example.com: μια ελαφριά, ανεξάρτητη έκδοση server που λειτουργεί με τις εφαρμογές και τις επεκτάσεις browser του Bitwarden. Ένα θησαυροφυλάκιο κωδικών πρόσβασης είναι ευαίσθητο λογισμικό: εγκαταστήστε το μόνο αν είστε διατεθειμένοι να το συντηρείτε σωστά και να κρατάτε αντίγραφα ασφαλείας. Είναι επίσης απολύτως εντάξει να χρησιμοποιείτε απλώς έναν διαχειριστή κωδικών πρόσβασης από κάποιον πάροχο.

Μπροστά τους τοποθετούμε το Caddy σε ένα container: αυτό δέχεται τις θύρες 80 και 443, φροντίζει μόνο του για τα πιστοποιητικά του Let's Encrypt (μαθήματα 7.3 και 7.4) και προωθεί την κίνηση στο σωστό container. Το Uptime Kuma και το Vaultwarden δεν δημοσιεύουν τα ίδια καμία θύρα (μάθημα 9.3).

internet ──443──> caddy ──> uptime-kuma:3001
                        └─> vaultwarden:80

Προαπαιτούμενα

  1. Docker Engine με το πρόσθετο compose (μάθημα 9.2).
  2. Δύο εγγραφές DNS που δείχνουν στον server σας, A και AAAA (μάθημα 7.1): status.example.com και kluis.example.com.
  3. Οι θύρες 80 και 443 ελεύθερες στον server. Αν σε αυτές τις θύρες εκτελείται ήδη ένα nginx ή Caddy του συστήματος, το container του Caddy δεν μπορεί να τις χρησιμοποιήσει. Σε αυτή την περίπτωση επιλέξτε: είτε σταματάτε τον web server του συστήματος είτε τον αφήνετε να κάνει τη δουλειά του proxy και δημοσιεύετε τα containers στο 127.0.0.1 (μάθημα 9.3). Σε αυτή τη συνταγή τη δουλειά την κάνει το container του Caddy.
  4. Στο ufw ανοιχτές οι 80/tcp, 443/tcp και για το HTTP/3 και η 443/udp (μάθημα 5.2). Αυστηρά μιλώντας, το Docker παρακάμπτει το ufw, αλλά έτσι η επισκόπηση του firewall σας συμφωνεί με την πραγματικότητα.

Τα αρχεία

Όλα μπαίνουν σε έναν φάκελο, /srv/diensten/:

/srv/diensten/
├── compose.yaml
├── Caddyfile
└── .env

compose.yaml

services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config

  uptime-kuma:
    image: louislam/uptime-kuma:2
    restart: unless-stopped
    volumes:
      - uptime-kuma:/app/data

  vaultwarden:
    image: vaultwarden/server:1.37.5
    restart: unless-stopped
    environment:
      DOMAIN: "https://kluis.example.com"
      SIGNUPS_ALLOWED: "true"
      ADMIN_TOKEN: ${VW_ADMIN_TOKEN}
    volumes:
      - ./vw-data:/data

volumes:
  caddy-data:
  caddy-config:
  uptime-kuma:

Πριν ξεκινήσετε, ελέγξτε ποια είναι η νεότερη έκδοση του Vaultwarden (τα releases στο GitHub) και βάλτε την στο tag. Μόνο το Caddy δημοσιεύει θύρες, και αυτές πρέπει να είναι δημόσιες. Τα volumes caddy-data (πιστοποιητικά), uptime-kuma και ο φάκελος vw-data περιέχουν όλα όσα πρέπει να διατηρήσετε.

Caddyfile

{
	email beheer@example.com
}

status.example.com {
	reverse_proxy uptime-kuma:3001
	header {
		X-Weboke-Cursus "jouw-code-uit-de-opdracht"
		defer
	}
}

kluis.example.com {
	reverse_proxy vaultwarden:80
}

Το Caddy αποκτά αυτόματα πιστοποιητικό και για τα δύο ονόματα και ανακατευθύνει το http σε https. Τα uptime-kuma και vaultwarden είναι τα ονόματα υπηρεσιών από το αρχείο compose: το Caddy τα βρίσκει στο εσωτερικό δίκτυο. Το μπλοκ header προσθέτει μια επιπλέον κεφαλίδα σε κάθε απάντηση του status.example.com· αυτήν τη χρησιμοποιείτε στην άσκηση ως απόδειξη ότι το δικό σας container proxy εκτελείται. Με το defer η κεφαλίδα ορίζεται αφού η υπηρεσία που βρίσκεται πίσω έχει δώσει την απάντησή της. Αν θέλετε επίσης HSTS και τις άλλες κεφαλίδες ασφαλείας από το μάθημα 7.4, προσθέστε τες στο ίδιο μπλοκ.

Ασφαλής ρύθμιση του Vaultwarden

Τέσσερα πράγματα κάνουν τη διαφορά ανάμεσα σε ένα ασφαλές και ένα επικίνδυνο θησαυροφυλάκιο.

Πρώτον: μόνο μέσω https. Το web vault του Bitwarden χρησιμοποιεί την κρυπτογραφία του browser, και οι browsers τη διαθέτουν μόνο σε σελίδες https. Χωρίς https λοιπόν δεν λειτουργεί σωστά, και καλά κάνει. Η τεκμηρίωση του Vaultwarden συνιστά ένα reverse proxy για το https, όπως εδώ το Caddy. Ορίστε το DOMAIN στην πλήρη διεύθυνση https.

Δεύτερον: κλειστή εγγραφή. Με SIGNUPS_ALLOWED: "true" οποιοσδήποτε βρει τη σελίδα μπορεί να δημιουργήσει λογαριασμό στον server σας. Ξεκινήστε λοιπόν, δημιουργήστε αμέσως τον δικό σας λογαριασμό (ή λογαριασμούς), ορίστε την τιμή σε "false" και εκτελέστε ξανά το docker compose up -d. Αν αργότερα θέλετε να προσθέσετε κάποιον, χρησιμοποιήστε τη λειτουργία πρόσκλησης στη σελίδα διαχείρισης.

Τρίτον: ένα κατακερματισμένο (hashed) token διαχείρισης. Η σελίδα διαχείρισης (/admin) προστατεύεται με το ADMIN_TOKEN. Μη βάλετε εκεί έναν αναγνώσιμο κωδικό πρόσβασης, αλλά ένα hash Argon2. Το δημιουργείτε με το ίδιο το Vaultwarden:

anna@web1:/srv/diensten$ sudo docker compose exec vaultwarden /vaultwarden hash
Password:
Confirm Password:

ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$...'

Βάλτε αυτή τη γραμμή στο .env (δηλαδή VW_ADMIN_TOKEN='$argon2id$...', με μονά εισαγωγικά) και κάντε το αρχείο αναγνώσιμο μόνο από τον root: sudo chmod 600 .env. Σε ένα αρχείο .env δεν χρειάζεται να διπλασιάσετε τους χαρακτήρες $· αν όμως βάλετε το hash απευθείας κάτω από το environment: στο αρχείο compose, τότε χρειάζεται (κάθε $ γίνεται $$), αλλιώς το Compose προσπαθεί να τους συμπληρώσει ως μεταβλητές. Στο /admin συνδέεστε με τον κωδικό πρόσβασης που πληκτρολογήσατε, όχι με το hash. Προσοχή: οι ρυθμίσεις που αποθηκεύετε στη σελίδα διαχείρισης καταλήγουν στο vw-data/config.json και τότε υπερισχύουν των μεταβλητών περιβάλλοντος.

Τέταρτον: αντίγραφα ασφαλείας και επαναφορά. Όλα βρίσκονται στο vw-data: η βάση δεδομένων, τα συνημμένα και τα κλειδιά. Συμπεριλάβετε αυτόν τον φάκελο στο αντίγραφο ασφαλείας σας με restic (μάθημα 8.2) και, για τη βάση δεδομένων, ακολουθήστε τις οδηγίες αντιγράφων ασφαλείας στο wiki του Vaultwarden, ώστε να μην αντιγράψετε ένα μισογραμμένο αρχείο. Δοκιμάστε την επαναφορά (άσκηση O8.2): ένα θησαυροφυλάκιο χωρίς λειτουργικό αντίγραφο ασφαλείας αποτελεί κίνδυνο για όλους τους κωδικούς πρόσβασής σας.

Οι ειδοποιήσεις μεταξύ συσκευών (websockets) λειτουργούν στις πρόσφατες εκδόσεις του Vaultwarden μέσω της ίδιας θύρας· το Caddy τις προωθεί χωρίς επιπλέον ρύθμιση.

Ρύθμιση του Uptime Kuma

Μετά το docker compose up -d ανοίξτε το https://status.example.com. Στην πρώτη επίσκεψη το Uptime Kuma σας ζητά να δημιουργήσετε λογαριασμό διαχειριστή. Κάντε το αμέσως: όσο αυτός ο λογαριασμός δεν υπάρχει, οποιοσδήποτε βρει τη σελίδα μπορεί να τον δημιουργήσει. Αν δεν θέλετε καθόλου αυτόν τον κίνδυνο, αφαιρέστε πρώτα το μπλοκ status από το Caddyfile, δημιουργήστε τον λογαριασμό μέσω ενός SSH tunnel (μάθημα 2.3) και έπειτα επαναφέρετε το μπλοκ.

Στη συνέχεια προσθέστε monitors: ένα HTTP monitor για τον ιστότοπό σας, ένα TCP monitor για μια θύρα, μια προειδοποίηση πιστοποιητικού και ένα κανάλι ειδοποιήσεων (email, ένα πρόγραμμα συνομιλίας ή μια υπηρεσία push). Ενεργοποιήστε επίσης την επαλήθευση δύο βημάτων στις ρυθμίσεις του Uptime Kuma.

Εκκίνηση και έλεγχος

anna@web1:/srv/diensten$ sudo docker compose up -d
anna@web1:/srv/diensten$ sudo docker compose ps
NAME                     SERVICE       STATUS          PORTS
diensten-caddy-1         caddy         Up 2 minutes    0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, ...
diensten-uptime-kuma-1   uptime-kuma   Up 2 minutes (healthy)
diensten-vaultwarden-1   vaultwarden   Up 2 minutes (healthy)
anna@web1:/srv/diensten$ sudo docker compose logs caddy | grep -i "certificate obtained"
anna@web1:~$ curl -sI https://status.example.com | grep -i x-weboke
x-weboke-cursus: jouw-code-uit-de-opdracht

Μόνο το Caddy έχει θύρες. Αν το πιστοποιητικό δεν εκδοθεί, τα logs του Caddy αναφέρουν τον λόγο: συνήθως το DNS δεν δείχνει ακόμη στον server ή η θύρα 80 δεν είναι προσβάσιμη (μάθημα 7.3).

Ενημέρωση

Ένα container δεν ενημερώνεται από το unattended-upgrades (μάθημα 4.2). Ορίστε ένα σταθερό χρονικό σημείο, για παράδειγμα κάθε δύο εβδομάδες:

anna@web1:/srv/diensten$ sudo docker compose pull
anna@web1:/srv/diensten$ sudo docker compose up -d
anna@web1:/srv/diensten$ sudo docker image prune

Το pull κατεβάζει τα νεότερα images εντός του tag που έχετε επιλέξει (δηλαδή το caddy:2 παραμένει στην έκδοση 2). Για το Vaultwarden με αριθμό έκδοσης, προσαρμόστε πρώτα το tag αφού διαβάσετε τα release notes. Σε μια νέα κύρια έκδοση διαβάζετε πάντα τα release notes: μερικές φορές κάτι πρέπει να αλλάξει στις ρυθμίσεις σας. Πριν από μια μεγάλη ενημέρωση, δημιουργήστε αντίγραφο ασφαλείας των volumes.

Παρακολουθείτε επίσης τις ανακοινώσεις ασφαλείας των δημιουργών. Μια ευπάθεια στο Vaultwarden ή στο Caddy διορθώνεται μόνο όταν εσείς κατεβάσετε τη νέα έκδοση.

Στην πράξη

Αυτή η συνταγή λειτουργεί σε κάθε VPS με Docker, στο WebOké ή σε άλλον πάροχο. Πρόκειται για αυτοεξυπηρέτηση: ο πάροχος του VPS σας δεν διαχειρίζεται τίποτα μέσα στα containers σας. Δημιουργήστε ένα snapshot πριν τα στήσετε για πρώτη φορά, ώστε να μπορείτε να πειραματιστείτε με ήσυχο το κεφάλι σας.

Σύνοψη

  • Ένα αρχείο compose με το Caddy ως container reverse proxy· μόνο το Caddy δημοσιεύει τις θύρες 80 και 443, οι υπηρεσίες καμία.
  • Το Caddy φροντίζει αυτόματα για τα πιστοποιητικά και το https και μπορεί με το header να ορίσει δικές σας κεφαλίδες.
  • Vaultwarden: υποχρεωτικό https, DOMAIN στη διεύθυνση https, κλειστή εγγραφή μετά τον δικό σας λογαριασμό, ADMIN_TOKEN ως hash Argon2 σε ένα .env με δικαιώματα 600.
  • Uptime Kuma: δημιουργήστε αμέσως τον λογαριασμό διαχειριστή και ενεργοποιήστε την επαλήθευση δύο βημάτων· παρακολουθείτε με αυτό κυρίως άλλους servers και ιστότοπους.
  • Κρατάτε αντίγραφα ασφαλείας των volumes και του φακέλου vw-data, και ενημερώνετε με docker compose pull και up -d σε σταθερό χρονικό σημείο.

Κουίζ

1. Γιατί το Uptime Kuma και το Vaultwarden δεν δημοσιεύουν τα ίδια θύρες σε αυτή τη συνταγή;



2. Γιατί το web vault του Vaultwarden δεν λειτουργεί σωστά μέσω απλού http;



3. Έχετε δημιουργήσει τον δικό σας λογαριασμό στο Vaultwarden. Ποιο είναι το επόμενο βήμα;



4. Βάζετε το hash Argon2 του token διαχείρισης απευθείας κάτω από το environment: στο compose.yaml και λαμβάνετε προειδοποιήσεις για άγνωστες μεταβλητές. Γιατί;



5. Πώς ενημερώνετε αυτές τις υπηρεσίες;



Άσκηση

Άσκηση Z9.4: Αποδείξτε ότι το container σας εκτελείται. Λάβετε στην άσκηση τον προσωπικό σας κωδικό και βάλτε τον στο Caddyfile του container Caddy σας ως κεφαλίδα X-Weboke-Cursus για ένα δικό σας subdomain (όπως status.<jouwdomein>). Επαναφορτώστε το Caddy και συμπληρώστε το hostname. Το πρόγραμμα ανακτά το https://<hostnaam>/ και ελέγχει ότι το πιστοποιητικό είναι έγκυρο και ότι η κεφαλίδα περιέχει ακριβώς τον κωδικό σας. Επιπλέον, επικολλήστε την έξοδο του docker compose ps και απαντήστε ποια υπηρεσία είναι η μόνη που δημοσιεύει θύρες.

Άσκηση Z9.4: Αποδείξτε ότι το container σας εκτελείται

Κάντε κλικ στο "Εμφάνιση του κωδικού μου" και προσθέστε στο Caddyfile σας την κεφαλίδα X-Weboke-Cursus με αυτόν τον κωδικό, για παράδειγμα: header { X-Weboke-Cursus "<code>" }. Από έξω δεν φαίνεται αν κάτι εκτελείται σε container. Γι' αυτό επικολλάτε επίσης την έξοδο του docker compose ps (δεν την αποθηκεύουμε).




Ό,τι συμπληρώνετε και ό,τι βρίσκουμε δεν το αποθηκεύουμε. Το πρόγραμμα περιήγησής σας θυμάται τις απαντήσεις σας και αν περάσατε την άσκηση. Αν έχετε εγγραφεί, αποθηκεύουμε μόνο ότι η άσκηση ήταν (σχεδόν) σωστή στο Τα μαθήματά μου· εκεί μπορείτε και να το διαγράψετε.

Για περαιτέρω μελέτη

Μια στιγμή…

Ρυθμίστε τα domains σας

Ρυθμίστε για κάθε domain τους nameservers, τη σύνδεση με το hosting σας και ποιος θα είναι ο κάτοχος.

Φόρτωση των domains σας…