Το Discourse είναι από τις καλύτερες πλατφόρμες για forum και κοινότητες. Η επίσημη εγκατάσταση όμως θέλει ολόκληρο τον server για τον εαυτό της. Δείτε πώς το τρέχουμε δίπλα σε WordPress, πίσω από το Plesk, σε ξεχωριστό και απομονωμένο container.
Η επίσημη ομάδα του Discourse δεν υποστηρίζει την εγκατάσταση σε servers με Plesk, cPanel ή άλλα hosting panels. Το Discourse απαιτεί δικό του περιβάλλον Docker και συνήθως δεσμεύει τις θύρες 80 και 443, οι οποίες χρησιμοποιούνται ήδη από τον web server του Plesk (Apache/Nginx ή IIS)
Το Discourse εγκαθίσταται με Docker και κανονικά “πιάνει” τις θύρες 80 και 443. Σε έναν server με Plesk αυτές τις θύρες τις χρησιμοποιεί ήδη ο nginx του Plesk για όλα σας τα sites. Η λύση είναι απλή: το Discourse τρέχει μέσα στο container του και ακούει μόνο εσωτερικά (στη θύρα 8080), ενώ το Plesk παραμένει μπροστά, αναλαμβάνει το πιστοποιητικό SSL και προωθεί τις επισκέψεις στο forum.
Δες περισσότερα άρθρα του iGuRu.gr όταν αναζητάς ειδήσεις στην Google.
Ένα σημαντικό πλεονέκτημα αυτής της αρχιτεκτονικής είναι η ασφάλεια: το forum έχει δική του βάση δεδομένων (PostgreSQL) και δικά του αρχεία μέσα στο container. Αν κάποτε παραβιαστεί, ο επιτιθέμενος δεν θα έχει πρόσβαση στο WordPress, στη βάση του ή στους κωδικούς των διαχειριστών του.
Σημείωση: η ομάδα του Discourse υποστηρίζει επίσημα μόνο την τυπική εγκατάσταση. Η μέθοδος με reverse proxy είναι “unsupported”, αλλά δουλεύει άψογα για εμάς.
Τι χρειάζεστε
Μνήμη RAM: τουλάχιστον 2 GB μόνο για το Discourse. Αν στον ίδιο server τρέχουν WordPress, MySQL και Plesk, υπολογίστε 4 GB και πάνω, μαζί με swap.
Χώρο στον δίσκο: περίπου 20 GB ελεύθερα για αρχή.
Ένα subdomain, για παράδειγμα forum.example.gr, και πρόσβαση στο DNS του.
Λογαριασμό SMTP για την αποστολή email. Το Discourse δεν λειτουργεί χωρίς email (ενεργοποίηση λογαριασμών, ειδοποιήσεις).
Πρόσβαση root μέσω SSH στον server.
Βήμα 1: DNS, subdomain και πιστοποιητικό
Στο DNS (π.χ. στο Cloudflare που χρησιμοποιούμε) προσθέστε μια εγγραφή A με όνομα forum που δείχνει στην IP του server. Αν χρησιμοποιείτε Cloudflare, ρυθμίστε την αρχικά ως DNS only (γκρι σύννεφο), ώστε να εκδοθεί το πιστοποιητικό.
Στο Plesk: Websites & Domains → Add Subdomain και δημιουργήστε το forum.example.gr.
Στο subdomain, ανοίξτε SSL/TLS Certificates και εκδώστε δωρεάν πιστοποιητικό Let’s Encrypt.
Βήμα 2: Docker και Discourse
Εγκαταστήστε το Docker, είτε από το Plesk → Extensions → Docker είτε από το SSH (στην δική μας περίπτωση το εγκαταστήσαμε με SSH):
Bash
curl -fsSL https://get.docker.com | sh
Κατεβάστε το Discourse και δημιουργήστε το αρχείο ρυθμίσεων:
Οι δύο απαραίτητες αλλαγές στο app.yml γίνονται με εντολές, για να αποφύγετε λάθη στο YAML. Η πρώτη απενεργοποιεί το SSL του Discourse (το αναλαμβάνει το Plesk) και η δεύτερη το κάνει να ακούει μόνο εσωτερικά στη θύρα 8080:
Bash
cp containers/app.yml containers/app.yml.bak
Bash
sed -i 's|^\(\s*\)- "templates/web.ssl.template.yml"|\1#- "templates/web.ssl.template.yml"|' containers/app.yml
Bash
sed -i 's|^\(\s*\)- "templates/web.letsencrypt.ssl.template.yml"|\1#- "templates/web.letsencrypt.ssl.template.yml"|' containers/app.yml
Bash
sed -i 's|- "80:80".*|- "127.0.0.1:8080:80"|' containers/app.yml
Bash
sed -i '/- "443:443"/d' containers/app.yml
Η ρύθμιση 127.0.0.1:8080 είναι σημαντική για την ασφάλεια: το Discourse δεν είναι προσβάσιμο απευθείας από το internet και το Docker δεν μπορεί να ανοίξει θύρα “πάνω” από το firewall σας.
Μετά ανοίξτε το αρχείο με nano containers/app.yml και συμπληρώστε τις δικές σας τιμές (κρατήστε ακριβώς τα δύο κενά στην αρχή κάθε γραμμής):
Αν η τελευταία εντολή δείξει HTTP/1.1 200 OK, το Discourse τρέχει.
Βήμα 3: Το Plesk ως reverse proxy
Στο Plesk, στο subdomain του forum, ανοίξτε Apache & nginx Settings. Ξετσεκάρετε το «Proxy mode» (αλλιώς τα αιτήματα πηγαίνουν στον Apache, που δεν ξέρει τίποτα για το Discourse, και βλέπετε σφάλμα 502). Στο πεδίο Additional nginx directives προσθέστε:
Η μορφή με regex αποφεύγει το σφάλμα “duplicate location” με τις ρυθμίσεις του Plesk και αφήνει τη διαδρομή του Let’s Encrypt στο Plesk, ώστε το πιστοποιητικό να ανανεώνεται κανονικά. Οι επικεφαλίδες με cf_connecting_ip περνούν στο Discourse την πραγματική IP του επισκέπτη όταν χρησιμοποιείτε Cloudflare.
Βήμα 4: Cloudflare
Γυρίστε την εγγραφή forum σε Proxied (πορτοκαλί σύννεφο) και κρατήστε το SSL σε Full (strict).
Απενεργοποιήστε το Rocket Loader για το forum: Rules → Configuration Rules, hostname forum.example.gr → Rocket Loader Off. Χαλάει το JavaScript του Discourse.
Βήμα 5: Πρώτη εκκίνηση και διαχειριστής
Ανοίξτε το forum και κάντε εγγραφή με το email που δώσατε στο DISCOURSE_DEVELOPER_EMAILS. Αν το email ενεργοποίησης δεν έρθει ακόμα, μπορείτε να ενεργοποιήσετε τον λογαριασμό σας απευθείας από τον server. Προσέξτε τα μονά εισαγωγικά έξω από την εντολή: με διπλά, το bash ερμηνεύει το ! και βγάζει “event not found”.
Στο Admin → Settings ενεργοποιήστε το force https και το enforce second factor: staff, ώστε όλοι οι διαχειριστές να έχουν υποχρεωτικά έλεγχο δύο βημάτων.
Το email: η συνηθέστερη παγίδα
Από το Admin → Emails → Send test email βλέπετε αμέσως την απάντηση του mail server. Τα συχνότερα σφάλματα:
Σφάλμα
Αιτία και λύση
enable_starttls_auto: false
Το DISCOURSE_SMTP_ENABLE_START_TLS λείπει ή είναι σχολιασμένο με #. Για τη θύρα 587 πρέπει να είναι true.
Αποτυχία σύνδεσης με STARTTLS και FORCE_TLS
Το DISCOURSE_SMTP_FORCE_TLS αφορά τη θύρα 465. Με τη θύρα 587 αφαιρέστε το.
535-5.7.8 Username and Password not accepted
Το Gmail δεν δέχεται τον κανονικό κωδικό: χρειάζεται App Password, που απαιτεί έλεγχο δύο βημάτων. Σε Google Workspace μπορεί να το μπλοκάρει ο διαχειριστής.
Μπορείτε να ελέγξετε τα στοιχεία SMTP απευθείας από τον server, χωρίς το Discourse: αν η απάντηση περιέχει 235, ο κωδικός είναι σωστός.
Μετά από κάθε αλλαγή στο app.yml χρειάζεται ξανά ./launcher rebuild app. Για forum με κίνηση, μια υπηρεσία συναλλακτικών email (Brevo, Mailgun, Amazon SES) είναι πιο αξιόπιστη από το Gmail, που έχει όρια αποστολής. Μην ξεχάσετε τις εγγραφές SPF, DKIM και DMARC στο DNS, αλλιώς τα email καταλήγουν στα spam.
Άλλα προβλήματα που θα συναντήσετε
Σύμπτωμα
Τι σημαίνει
502 Bad Gateway
Το Plesk δεν βρίσκει το Discourse: το container δεν τρέχει (./launcher start app), το «Proxy mode» είναι ενεργό ή οι ρυθμίσεις nginx δεν αποθηκεύτηκαν.
SSL certificate problem: self-signed
Το Plesk σερβίρει ακόμα το προεπιλεγμένο πιστοποιητικό: εκδώστε Let’s Encrypt για το subdomain.
expose:: command not found
Γράψατε γραμμές του YAML στο τερματικό. Ανήκουν μέσα στο αρχείο app.yml.
Η προεπισκόπηση στο Plesk δείχνει σφάλμα
Συχνά είναι παλιό στιγμιότυπο. Ελέγξτε με curl -sI https://forum.example.gr.
Συντήρηση και αντίγραφα ασφαλείας
Ενημερώσεις: από το Admin → Upgrade ή με ./launcher rebuild app. Μετά τα rebuild, το ./launcher cleanup ελευθερώνει χώρο.
Backups: το Discourse κρατά ημερήσια αντίγραφα στο /var/discourse/shared/standalone/backups/. Τα backups του Plesk δεν περιλαμβάνουν αυτόν τον φάκελο, οπότε στείλτε τα και εκτός server (S3 ή rsync).
Ένα firewall, όχι δύο: αν έχετε και ufw και το Firewall του Plesk, κρατήστε μόνο το ένα, για να μην αλλοιώνει το ένα τους κανόνες του άλλου.
Aυτό ήταν: ένα πλήρες, γρήγορο forum στον ίδιο server με το WordPress, αλλά σε απόλυτα ξεχωριστό χώρο. Στο επόμενο άρθρο θα δούμε πώς το συνδέουμε με το WordPress, ώστε τα άρθρα να γίνονται συζητήσεις και οι απαντήσεις να εμφανίζονται κάτω από κάθε άρθρο.
0 σχόλια
iGuRu.gr