Το 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.
Ένα σημαντικό πλεονέκτημα αυτής της αρχιτεκτονικής είναι η ασφάλεια: το 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):
curl -fsSL https://get.docker.com | shΚατεβάστε το Discourse και δημιουργήστε το αρχείο ρυθμίσεων:
git clone https://github.com/discourse/discourse_docker.git /var/discoursecd /var/discoursecp samples/standalone.yml containers/app.ymlΟι δύο απαραίτητες αλλαγές στο app.yml γίνονται με εντολές, για να αποφύγετε λάθη στο YAML. Η πρώτη απενεργοποιεί το SSL του Discourse (το αναλαμβάνει το Plesk) και η δεύτερη το κάνει να ακούει μόνο εσωτερικά στη θύρα 8080:
cp containers/app.yml containers/app.yml.baksed -i 's|^\(\s*\)- "templates/web.ssl.template.yml"|\1#- "templates/web.ssl.template.yml"|' containers/app.ymlsed -i 's|^\(\s*\)- "templates/web.letsencrypt.ssl.template.yml"|\1#- "templates/web.letsencrypt.ssl.template.yml"|' containers/app.ymlsed -i 's|- "80:80".*|- "127.0.0.1:8080:80"|' containers/app.ymlsed -i '/- "443:443"/d' containers/app.ymlΗ ρύθμιση 127.0.0.1:8080 είναι σημαντική για την ασφάλεια: το Discourse δεν είναι προσβάσιμο απευθείας από το internet και το Docker δεν μπορεί να ανοίξει θύρα “πάνω” από το firewall σας.
Μετά ανοίξτε το αρχείο με nano containers/app.yml και συμπληρώστε τις δικές σας τιμές (κρατήστε ακριβώς τα δύο κενά στην αρχή κάθε γραμμής):
DISCOURSE_HOSTNAME: 'forum.example.gr'
DISCOURSE_DEVELOPER_EMAILS: 'admin@example.gr'
DISCOURSE_SMTP_ADDRESS: smtp.example.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: user@example.gr
DISCOURSE_SMTP_PASSWORD: "ο-κωδικός-σας"
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_SMTP_DOMAIN: example.gr
DISCOURSE_NOTIFICATION_EMAIL: noreply@example.grΤο αρχείο περιέχει τον κωδικό SMTP, οπότε κλειδώστε το ώστε να το διαβάζει μόνο ο root, και ξεκινήστε την εγκατάσταση (10–15 λεπτά):
chmod 600 containers/app.yml containers/app.yml.bak./launcher rebuild appcurl -sI http://127.0.0.1:8080 | head -1Αν η τελευταία εντολή δείξει HTTP/1.1 200 OK, το Discourse τρέχει.
Βήμα 3: Το Plesk ως reverse proxy
Στο Plesk, στο subdomain του forum, ανοίξτε Apache & nginx Settings. Ξετσεκάρετε το «Proxy mode» (αλλιώς τα αιτήματα πηγαίνουν στον Apache, που δεν ξέρει τίποτα για το Discourse, και βλέπετε σφάλμα 502). Στο πεδίο Additional nginx directives προσθέστε:
location ~ ^/(?!\.well-known/acme-challenge/) {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Connection "";
proxy_set_header X-Real-IP $http_cf_connecting_ip;
proxy_set_header X-Forwarded-For $http_cf_connecting_ip;
proxy_set_header X-Forwarded-Proto https;
client_max_body_size 20m;
proxy_read_timeout 300;
}Η μορφή με 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”.
cd /var/discourse./launcher enter apprails runner 'u = User.find_by_email("admin@example.gr"); u.activate; u.grant_admin!; puts u.username'exitΣτο 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, ο κωδικός είναι σωστός.
curl -v --url 'smtp://smtp.gmail.com:587' --ssl-reqd \
--mail-from 'user@example.gr' --mail-rcpt 'user@example.gr' \
--user 'user@example.gr:APPPASSWORD' \
-T <(printf 'Subject: test\n\nok\n') 2>&1 | grep -E '235|535'Μετά από κάθε αλλαγή στο 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