Skip to main content

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

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


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

  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 -fLogs σε πραγματικό χρόνο
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