TOP
EN EL
Εγκατάσταση του Nginx Proxy Manager
31 Αυγούστου 2024 Published by Aristotelis Pitaridis
Tools used for this tutorial
Ubuntu Server 24.04
Docker 27.1.1
SHARE

Εισαγωγή

Το Nginx Proxy Manager είναι ένα ισχυρό εργαλείο που απλοποιεί τη διαδικασία διαχείρισης proxy hosts με SSL termination. Αυτός ο οδηγός θα σας καθοδηγήσει στα βήματα για την εγκατάσταση και διαμόρφωση του Nginx Proxy Manager χρησιμοποιώντας Docker Compose.

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

Πριν ξεκινήσουμε, βεβαιωθείτε ότι έχετε εγκαταστήσει τα εξής στο σύστημά σας:

  • Ubuntu Server
  • Docker
  • Docker Compose

Θα χρειαστείτε επίσης ένα domain name το οποίο οδηγείτε στη δημόσια διεύθυνση IP του αποκλειστικού διακομιστή σας. Για να το κάνετε αυτό, πρέπει να δημιουργήσετε μια εγγραφή διεύθυνσης για τον τομέα - μια εγγραφή A. Για αυτό το άρθρο θα υποθέσουμε ότι το domain name είναι npm.domain.com.

Step 1: Configure Firewall

Πρέπει να ανοίξουμε τη θύρα 81 που χρησιμοποιείται από το Admin Site.

ufw allow 81

Φορτώστε ξανά το τείχος προστασίας για να εφαρμόσετε τις αλλαγές.

sudo ufw reload

Βήμα 2: Δημιουργία δικτύου

Δημιουργήστε το δίκτυο Nginx Proxy Manager

docker network create NginxProxyManagerNet

Αυτό το δίκτυο θα μας βοηθήσει αργότερα να επιτρέψουμε σε άλλα Docker Containers να επικοινωνούν με το Nginx Proxy Manager. Με αυτόν τον τρόπο θα είμαστε σε θέση να διαθέσουμε τα Docker Containers στον Nginx Proxy Manager για την προβολή του περιεχομένου τους μέσω ενός domain.

Βήμα 3: Δημιουργία Αρχείου Docker Compose

Πρώτα, δημιουργήστε ένα αρχείο docker-compose.yml στον επιθυμητό κατάλογο. Αυτό το αρχείο θα ορίσει τις υπηρεσίες που απαιτούνται για το Nginx Proxy Manager.

Δημιουργήστε ένα φάκελο που ονομάζεται docker όπου θα αποθηκεύουμε όλες τις εφαρμογές μας.

mkdir Docker
cd Docker

Δημιουργήστε έναν φάκελο για την εφαρμογή Nginx Proxy Manager.

mkdir NginxProxyManager
cd NginxProxyManager

Δημιουργούμε ένα αρχείο με το όνομα docker-compose.yml για να αποθηκεύσετε τις ρυθμίσεις διαμόρφωσης για την εφαρμογή Nginx Proxy Manager.

nano docker-compose.yml
services:

  NginxProxyManager:
    container_name: NginxProxyManager
    image: jc21/nginx-proxy-manager:latest
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    ports:
      # Public HTTP Port
      - "80:80"
      # Public HTTPS Port
      - "443:443"
      # Admin Web Port
      - "81:81"
    networks: ["NginxProxyManagerNet"]
    restart: unless-stopped

networks:
    NginxProxyManagerNet:
        external: true
services:

  NginxProxyManager:
    container_name: NginxProxyManager
    image: jc21/nginx-proxy-manager:latest
    environment:
      - DB_MYSQL_HOST=NginxProxyManagerDB
      - DB_MYSQL_PORT=3306
      - DB_MYSQL_USER=NginxProxyManager
      - DB_MYSQL_PASSWORD=DatabasePassword
      - DB_MYSQL_NAME=NginxProxyManager
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    ports:
      # Public HTTP Port
      - "80:80"
      # Public HTTPS Port
      - "443:443"
      # Admin Web Port
      - "81:81"
    depends_on:
      - NginxProxyManagerDB
    networks: ["NginxProxyManagerNet"]
    restart: unless-stopped

  NginxProxyManagerDB:
    container_name: NginxProxyManagerDB
    image: jc21/mariadb-aria:latest
    environment:
      - MYSQL_ROOT_PASSWORD=DatabaseRootPassword
      - MYSQL_DATABASE=NginxProxyManager
      - MYSQL_USER=NginxProxyManager
      - MYSQL_PASSWORD=DatabasePassword
    volumes:
      - ./mysql:/var/lib/mysql
    networks: ["NginxProxyManagerNet"]
    restart: unless-stopped

networks:
    NginxProxyManagerNet:
        external: true

Αποθηκεύουμε και κλείνουμε το αρχείο docker-compose.yml.

Βήμα 4: Εκτέλεση Docker Compose

Εκτελέστε την ακόλουθη εντολή για να ξεκινήσετε τις υπηρεσίες:

docker compose up -d

Μπορούμε να προβάλουμε τα αρχεία καταγραφής υπηρεσιών χρησιμοποιώντας την ακόλουθη εντολή:

docker compose logs -f

Μπορούμε να συνδυάσουμε τις παραπάνω εντολές με τον ακόλουθο τρόπο:

docker compose up -d && docker compose logs -f

Μπορούμε να δημιουργήσουμε μια ένα session bash στο container χρησιμοποιώντας τις ακόλουθες εντολές:

docker exec -ti NginxProxyManager bash
exit
docker exec -ti NginxProxyManagerDB bash
exit

Βήμα 5: Πρόσβαση στο περιβάλλον Διαχείρισης

Μόλις τα κοντέινερ είναι ενεργά και λειτουργούν, μπορείτε να αποκτήσετε πρόσβαση στο περιβάλλον διαχείρισης του Nginx Proxy Manager μεταβαίνοντας στη διεύθυνση http://<your-server-ip>:81. 

Τα προκαθορισμένα στοιχεία σύνδεσης είναι:

Μετά την πρώτη σας σύνδεση στο περιβάλλον διαχειριστής, θα σας ζητηθεί αμέσως να αλλάξετε αυτές τις ρυθμίσεις.

Βήμα 6: Ρύθμιση ονόματος τομέα και SSL για το Nginx Proxy Manager

Σε αυτό το βήμα θα δημιουργήσουμε ένα host στο οποίο θα ορίσουμε το domain μας και το SSL για το Admin Panel.

  1. Μεταβείτε στην ενότητα Proxy Hosts:
    • Κάντε κλικ στην καρτέλα “Hosts”.
    • Επιλέξτε “Hosts Proxy”.
  2. Προσθέστε έναν νέο Proxy Host:
    • Κάντε κλικ στο κουμπί “Add Proxy Host”.
    • Εισαγάγετε το όνομα τομέα που θέλετε να συσχετίσετε με αυτήν την υπηρεσία.
    • Επιλέξτε το scheme http.
    • Εισαγάγετε την τιμή "NginxProxyManager" για το "Forward Hostname / IP".
    • Εισαγάγετε την τιμή "81" για τον αριθμό θύρας.
    • Ενεργοποιούμε τον διακόπτη “Block Common Exploits”.
  3. Διαμορφώστε το πιστοποιητικό SSL
    • Κάντε κλικ στο σύνδεσμο "SSL" στο επάνω μέρος του modal.
    • Επιλέξτε την τιμή "Request a new SSL Certificate" από το αναπτυσσόμενο μενού "SSL Certificate".
    • Ενεργοποιήστε τους διακόπτες «Force SSL», «HTTP/2 Support» και «HSTS Enabled». Αφού δημιουργήσουμε τον host, θα πρέπει να επιλέξουμε ξανά αυτούς τους διακόπτες γιατί λόγω σφάλματος αυτές οι ρυθμίσεις δεν εφαρμόζονται.
    • Εισαγάγετε το email σας στο πεδίο “Email Address for Let’s Encrypt”.
    • Ενεργοποιήστε το διακόπτη “I Agree to the Let’s Encrypt Terms and Service”.
    • Κάντε κλικ στην Save για να δημιουργήσετε το host και να ζητήσετε το Πιστοποιητικό SSL για τον τομέα σας.

Ο τομέας σας θα πρέπει να είναι ενεργός και να λειτουργεί. Δοκιμάστε να ανοίξετε το https://npm.domain.com στο πρόγραμμα περιήγησής σας και θα πρέπει να λάβετε την οθόνη σύνδεσης του Nginx Proxy Manager.

Αποκλεισμός της θύρας 81 με το τείχος προστασίας

Τώρα που διαμορφώσαμε τον τομέα μας για να χειρίζεται την κίνηση της θύρας 81, θα αποκλείσουμε αυτήν τη θύρα ώστε να μην είναι προσβάσιμη από το διαδίκτυο. Για να το φτιάξουμε πρέπει να ακολουθήσουμε τα παρακάτω βήματα:

Πρώτα πρέπει να εμφανίσουμε μια λίστα με όλους τους κανόνες του τείχους προστασίας πληκτρολογώντας την ακόλουθη εντολή:

ufw status numbered

Αυτό θα έχει το ακόλουθο αποτέλεσμα:

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 80                         ALLOW IN    Anywhere
[ 2] 443                        ALLOW IN    Anywhere
[ 3] OpenSSH                    ALLOW IN    Anywhere
[ 4] 81                         ALLOW IN    Anywhere
[ 5] 80 (v6)                    ALLOW IN    Anywhere (v6)
[ 6] 443 (v6)                   ALLOW IN    Anywhere (v6)
[ 7] OpenSSH (v6)               ALLOW IN    Anywhere (v6)
[ 8] 81 (v6)                    ALLOW IN    Anywhere (v6)

Ο αριθμός μπροστά από κάθε κανόνα θα χρησιμοποιηθεί για να οριστεί ποιος κανόνας θα διαγραφεί. Θέλουμε να διαγράψουμε τη θύρα 81 που για το παράδειγμά μας έχει τον αριθμό 4 οπότε πληκτρολογούμε την παρακάτω εντολή.

ufw delete 4

Ένα μήνυμα που μας ζητά να επιβεβαιώσουμε θα εμφανιστεί στην οθόνη.

Deleting:
 allow 80
Proceed with operation (y|n)?

Πληκτρολογούμε y και πατάμε enter.

Επαναλαμβάνουμε αυτή τη διαδικασία χρησιμοποιώντας ξανά το διακόπτη status για να βρούμε και τον αριθμό για το 81 (v6) για να το διαγράψουμε.

Φορτώστε ξανά το τείχος προστασίας για να εφαρμόσετε τις αλλαγές.

sudo ufw reload

Τέλος, πρέπει να επεξεργαστούμε το αρχείο docker-compose.yml έτσι ώστε να μην εκθέτουμε τη θύρα 81.

nano docker-compose.yml

Αλλάζουμε τη γραμμή με τις θύρες έτσι ώστε να σχολιάσουμε τη γραμμή για τη θύρα 81.

      #- "81:81"

Εφαρμόζουμε τις αλλαγές στο αρχείο docker.compose.yml πληκτρολογώντας την ακόλουθη εντολή:

docker compose up -d

Βήμα 8: Access Lists

Οι λίστες πρόσβασης παρέχουν μια μαύρη ή λευκή λίστα συγκεκριμένων διευθύνσεων IP πελάτη μαζί με έλεγχο ταυτότητας για τους κεντρικούς υπολογιστές διακομιστή μεσολάβησης μέσω Βασικού ελέγχου ταυτότητας HTTP.

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

Αυτό είναι πιο χρήσιμο για προωθημένες υπηρεσίες ιστού που δεν έχουν ενσωματωμένους μηχανισμούς ελέγχου ταυτότητας ή που θέλετε να προστατεύσετε από την πρόσβαση άγνωστων πελατών.

Εξουσιοδότηση (όνομα χρήστη και κωδικός πρόσβασης)

Μας επιτρέπει να ορίσουμε ένα ή περισσότερα ονόματα χρήστη και κωδικό πρόσβασης για την προστασία ενός ιστότοπου. Για να το ορίσουμε θα πρέπει να ακολουθήσουμε τα παρακάτω βήματα:

  1. Μεταβείτε στην ενότητα Access Lists κάνοντας κλικ στον υπερσύνδεσμο “Access Lists”.
  2. Κάνουμε κλικ στο κουμπί “Add Access List”.
  3. Πληκτρολογούμε το όνομα για την Access List.
  4. Κάνουμε κλικ στην καρτέλα Authorization.
  5. Πληκτρολογούμε όνομα χρήστη και κωδικό πρόσβασης που θα χρησιμοποιηθούν για την πρόσβαση στον ιστότοπο 
  6. Μπορούμε να προσθέσουμε περισσότερα πεδία κάνοντας κλικ στο κουμπί Add.
  7. Όταν τελειώσουμε, κάνουμε κλικ στο κουμπί Save.

Πρόσβαση (IP)

Μας επιτρέπει να ορίσουμε μία ή περισσότερες IP ή IP ranges που θα έχουν πρόσβαση σε έναν ιστότοπο.

  1. Μεταβείτε στην ενότητα Access Lists κάνοντας κλικ στον υπερσύνδεσμο “Access Lists”.
  2. Κάνουμε κλικ στο κουμπί “Add Access List”.
  3. Πληκτρολογούμε το όνομα για την Access List.
  4. Κάνουμε κλικ στην καρτέλα Access.
  5. Πληκτρολογούμε μία IP ή ένα IP range στο allow πλαίσιο κειμένου.
    • 161.97.85.219 - Ορίζει μία IP.
    • 161.97.85.0/24 - Ορίζει ένα σετ από IPs το οποίο περιέχει όλες τις 161.97.85.* IPs.
  6. Μπορούμε να προσθέσουμε περισσότερα πεδία κάνοντας κλικ στο κουμπί Add.
  7. Όταν τελειώσουμε, κάνουμε κλικ στο κουμπί Save.

Συνδυασμός Authorization και Access

Σε περίπτωση που χρησιμοποιούμε Authorization και Access, μπορούμε να ορίσουμε εάν και οι δύο επιλογές θα πρέπει να ισχύουν για την πρόσβαση στον ιστότοπο. Αυτή η επιλογή μπορεί να οριστεί από τον διακόπτη “Satisfy Any” στην καρτέλα Λεπτομέρειες.

Εάν ο διακόπτης είναι απενεργοποιημένος, αυτό θα έχει ως αποτέλεσμα τόσο ο κωδικός πρόσβασης όσο και η IP θα πρέπει να είναι έγκυρες για να επιτρέπεται η πρόσβαση στον ιστότοπο. Διαφορετικά, μία από αυτές τις επιλογές πρέπει να είναι έγκυρη για να επιτρέπεται η πρόσβαση.

Εφαρμογή ενός Access List σε ένα host

Για να μπορέσουμε να εφαρμόσουμε ένα Access List σε ένα Host, θα πρέπει να μεταβούμε στην οθόνη επεξεργασίας του Host και να επιλέξουμε την Access List από το ομώνυμο πτυσσόμενο πλαίσιο λίστας.

Συμπέρασμα

Ακολουθώντας αυτά τα βήματα, μπορείτε εύκολα να εγκαταστήσετε το Nginx Proxy Manager χρησιμοποιώντας το Docker Compose. Αυτή η εγκατάσταση σας επιτρέπει να διαχειρίζεστε αποτελεσματικά τους proxy hosts σας, με το πρόσθετο όφελος του SSL termination.