Skip to main content

Εγκατάσταση του Caddy reverse proxy σε LXC container στο Proxmox.

Παρακάτω θα σου δείξω αναλυτικά βήμα προς βήμα πώς να εγκαταστήσεις το Caddy reverse proxy σε LXC container στο Proxmox, καθώς και πώς να προσθέτεις domains με παραδείγματα.

🚀 Λήψη και εκτέλεση σε μία γραμμή

apt update && apt install -y curl && clear && curl -s https://docs.greenhome.stream/attachments/39 | bash

OR

apt update && apt install -y wget && clear && wget -q https://docs.greenhome.stream/attachments/39 && bash caddy-install.sh && rm -f caddy-install.sh


✅ ΠΡΟΫΠΟΘΕΣΕΙΣ

  1. Έχεις ένα Proxmox server σε λειτουργία.
  2. Έχεις (ή θα δημιουργήσεις) ένα LXC container με Debian 11 ή 12 (ή Ubuntu).
  3. Έχεις κατοχυρωμένο domain name και δυνατότητα να προσθέτεις/αλλάζεις A records.
  4. Έχεις εξωτερική IP ή κάνεις port forwarding σε router.
  5. Ο LXC container έχει δικαιώματα internet και δυνατότητα να κάνει bind σε ports 80/443.

🔧 ΜΕΡΟΣ 1: Δημιουργία LXC Container για Caddy

Βήμα 1: Δημιουργία LXC Container από GUI
  • Άνοιξε το Proxmox GUI.
  • Πήγαινε Create CT.
  • Συμπλήρωσε:

    • Hostname: caddy
    • Template: Debian 12 (ή 11)
    • Disk Size: π.χ. 4GB
    • CPU/RAM: 1 core / 512MB RAM
    • Network: NAT ή bridged, ανάλογα τη ρύθμιση σου.
  • Enable nesting (σημαντικό!):

    • Μετά τη δημιουργία, πήγαινε στο Options > Features > Nesting και ενεργοποίησέ το.

🧰 ΜΕΡΟΣ 2: Εγκατάσταση του Caddy

Μπαίνουμε στο container:

pct enter <CTID>  # π.χ. pct enter 103

Ενημερώνουμε το σύστημα:

apt update && apt upgrade -y
Βήμα 2: Εγκατάσταση του Caddy (από το επίσημο repo)
apt install -y debian-keyring debian-archive-keyring curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-archive-keyring.gpg

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | \
tee /etc/apt/sources.list.d/caddy-stable.list

apt update
apt install caddy -y

Επιβεβαίωση εγκατάστασης:

caddy version

🚀 ΜΕΡΟΣ 3: Παραμετροποίηση Reverse Proxy

Η κύρια ρύθμιση του Caddy γίνεται μέσω του Caddyfile.

Ο Caddyfile βρίσκεται συνήθως εδώ:

/etc/caddy/Caddyfile

🔄 ΠΑΡΑΔΕΙΓΜΑ Reverse Proxy για ένα domain

Έστω ότι έχεις το domain:

example.com → δείχνει στην IP του Proxmox server σου

Και έχεις ένα web service π.χ. ένα container/VM με IP 192.168.100.50 που ακούει στο port 8080.

Βήμα 1: Αλλαγή Caddyfile

Άνοιξε το αρχείο:

nano /etc/caddy/Caddyfile

Προσθέτεις:

example.com {
    reverse_proxy 192.168.100.50:8080
}

Ο Caddy θα:

  • Ακούει στο example.com (στο port 80/443).
  • Θα πάρει αυτόματα SSL certificate μέσω Let's Encrypt.
  • Θα κάνει reverse proxy στο 192.168.100.50:8080.

Βήμα 2: Επανεκκίνηση Caddy
systemctl restart caddy

Έλεγξε αν τρέχει σωστά:

systemctl status caddy

🌐 ΡΥΘΜΙΣΕΙΣ DNS

Για να δουλέψει το παραπάνω:

  • Πήγαινε στον DNS provider σου (Cloudflare, Namecheap, GoDaddy, κ.λπ.).
  • Πρόσθεσε A Record:

    • Name: @
    • Type: A
    • Value: η δημόσια IP του Proxmox server

Αν έχεις το Caddy πίσω από router, σιγουρέψου ότι έχεις κάνει port forwarding για:

  • TCP 80 → στον LXC container (ή στο Proxmox αν bridged)
  • TCP 443 → το ίδιο

➕ ΠΩΣ ΠΡΟΣΘΕΤΩ ΝΕΟ DOMAIN (ή subdomain)

Απλά προσθέτεις νέο block στο Caddyfile.

Παράδειγμα:

example.com {
    reverse_proxy 192.168.100.50:8080
}

blog.example.com {
    reverse_proxy 192.168.100.51:8080
}

nextcloud.mydomain.com {
    reverse_proxy 192.168.100.52:443
    tls your@email.com
    header {
        Strict-Transport-Security "max-age=31536000;"
    }
}

Και πάλι κάνεις:

systemctl reload caddy

ή

caddy reload --config /etc/caddy/Caddyfile

🛠 ΧΡΗΣΙΜΕΣ ΕΝΤΟΛΕΣ

Εντολή Περιγραφή
caddy reload Φορτώνει νέο Caddyfile χωρίς restart
caddy validate --config /etc/caddy/Caddyfile Ελέγχει για λάθη
journalctl -u caddy -f Logs σε πραγματικό χρόνο
caddy list-modules Λίστα ενεργών modules

⚠️ ΣΥΧΝΑ ΠΡΟΒΛΗΜΑΤΑ

Πρόβλημα Λύση
"Caddy failed to obtain certificate" DNS record δεν δείχνει σωστά ή port 80/443 μπλοκάρονται
"permission denied on port 80/443" Ο LXC container δεν έχει capabilities (λύση παρακάτω)

🔓 LXC: Δικαιώματα για ports 80/443

Αν έχεις πρόβλημα με το binding σε port 80/443, κάνε edit το LXC config:

nano /etc/pve/lxc/103.conf

Πρόσθεσε:

lxc.cap.drop:
lxc.apparmor.profile: unconfined
lxc.cgroup2.devices.allow: a

📦 Extra: Dynamic reverse proxy (wildcard domains)

Αν θέλεις να έχεις wildcard υποστήριξη (π.χ. *.example.com), μπορείς:

*.example.com {
    reverse_proxy 192.168.100.100:8080
}

Για wildcard SSL από Let’s Encrypt, χρειάζεται DNS plugin (π.χ. Cloudflare API).


✅ ΤΕΛΙΚΗ ΕΠΙΣΚΟΠΗΣΗ

Στοιχείο Περιγραφή
Caddy εγκατάσταση apt install caddy από επίσημο repo
Reverse Proxy Μέσα από /etc/caddy/Caddyfile
SSL Αυτόματα από Let's Encrypt
Domains Προσθήκη A records και blocks στο Caddyfile
Port Binding Ίσως χρειαστεί unconfined LXC profile

Ins0mniA