لقد قضيت الأيام القليلة الماضية في محاولة إيجاد طريقة لربط Discourse مع Apache على نفس خادم DigitalOcean، لكن الدروس المتاحة هنا على Discourse إما قديمة أو لا تنطبق عليّ. يستخدم أحد الدروس CentOS وHAProxy (أنا أستخدم Ubuntu)، بينما يستخدم الآخر Nginx (أنا أستخدم Apache).
صادفت تعليقًا في موضوع على DigitalOcean واتبعت التعليمات المذكورة هناك على خادم تجريبي: Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean
يبدو أن كل شيء سار بسلاسة، بما في ذلك شهادة SSL من Let’s Encrypt. تعمل صفحتي الرئيسية وبعض مستندات HTML الثابتة بشكل ممتاز. أما Discourse، رغم تثبيته دون أخطاء، فلا يظهر. عند التصفح إلى community.mysite.com، أرى فقط صفحتي الرئيسية مع HTTPS غير مؤمن في عنوان URL. نعم، إعدادات DNS دقيقة وتوجه إلى الخادم الصحيح.
هذا هو ملف mysite.com.conf الخاص بي:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /var/www/mysite.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.mysite.com [OR]
RewriteCond %{SERVER_NAME} =mysite.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
وهذا هو ملف mysite.com-le-ssl.conf:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /var/www/mysite.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
</VirtualHost>
</IfModule>
وهذا هو ملف community.mysite.com.conf:
<VirtualHost *:80>
ServerName community.mysite.com
ServerAlias www.community.mysite.com
<IfModule proxy_module>
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</IfModule>
</VirtualHost>
وأخيرًا، إليك ملف app.yml الخاص بي (بعد تعديله بالطبع):
## هذا قالب حاوية Docker متكامل ومستقل لـ Discourse
##
## بعد إجراء أي تغييرات على هذا الملف، يجب عليك إعادة البناء
## /var/discourse/launcher rebuild app
##
## كن حذرًا للغاية عند التعديل!
## ملفات YAML حساسة للغاية للأخطاء في المسافات البادئة أو المحاذاة!
## قم بزيارة http://www.yamllint.com/ للتحقق من صحة هذا الملف حسب الحاجة
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## قم بإلغاء التعليق عن هذين السطرين إذا كنت ترغب في إضافة Let's Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## ما هي منافذ TCP/IP التي يجب أن تعرضها هذه الحاوية؟
## إذا كنت تريد لـ Discourse مشاركة منفذ مع خادم ويب آخر مثل Apache أو nginx،
## راجع https://meta.discourse.org/t/17247 للحصول على التفاصيل
expose:
- "8080:80" # توجيه منفذ المضيف 8080 إلى منفذ الحاوية 80 (http)
- "8443:443" # توجيه منفذ المضيف 8443 إلى منفذ الحاوية 443 (http)
params:
db_default_text_search_config: "pg_catalog.english"
## قم بتعيين db_shared_buffers إلى أقصى 25% من إجمالي الذاكرة.
## سيتم تعيينها تلقائيًا بواسطة bootstrap بناءً على ذاكرة الوصول العشوائي المكتشفة، أو يمكنك تجاوزها
db_shared_buffers: "128MB"
## يمكن أن يحسن أداء الفرز، لكنه يزيد من استخدام الذاكرة لكل اتصال
#db_work_mem: "40MB"
## أي إصدار Git يجب أن تستخدم هذه الحاوية؟ (الافتراضي: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## كم عدد طلبات الويب المتزامنة المدعومة؟ يعتمد على الذاكرة وأنوية المعالج.
## سيتم تعيينها تلقائيًا بواسطة bootstrap بناءً على المعالجات المكتشفة، أو يمكنك تجاوزها
UNICORN_WORKERS: 2
## TODO: اسم النطاق الذي ستستجيب له هذه النسخة من Discourse
## مطلوب. لن يعمل Discourse مع عنوان IP مجرد.
DISCOURSE_HOSTNAME: community.mysite.com
## قم بإلغاء التعليق إذا كنت تريد تشغيل الحاوية بنفس اسم النطاق (-h option) المحدد أعلاه (الافتراضي "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: قائمة عناوين البريد الإلكتروني المفصولة بفواصل سيتم تعيينها كمسؤول ومطور
## مثال عند التسجيل الأولي 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'myemail'
## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
## مطلوب عنوان SMTP واسم مستخدم وكلمة مرور
## تحذير: قد يتسبب الحرف '#' في كلمة مرور SMTP في حدوث مشاكل!
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: my-smtp-username
DISCOURSE_SMTP_PASSWORD: "my-smtp-password"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (اختياري، الافتراضي true)
## إذا أضفت قالب Let's Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
LETSENCRYPT_ACCOUNT_EMAIL: myemail
## عنوان CDN http أو https لهذه النسخة من Discourse (مُعد للاستخراج)
## راجع https://meta.discourse.org/t/14857 للحصول على التفاصيل
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## حاوية Docker عديمة الحالة؛ يتم تخزين جميع البيانات في /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## تذهب الإضافات هنا
## راجع https://meta.discourse.org/t/19157 للحصول على التفاصيل
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## أي أوامر مخصصة للتشغيل بعد البناء
run:
- exec: echo "Beginning of custom commands"
## إذا كنت ترغب في تعيين عنوان البريد الإلكتروني 'From' لأول تسجيل، قم بإلغاء التعليق وتغيير:
## بعد الحصول على أول بريد إلكتروني للتسجيل، أعد التعليق على السطر. لا يحتاج إلى التشغيل إلا مرة واحدة.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "End of custom commands"
هل يمكن لأي شخص إخباري أين أخطأت في هذا أو ما الذي قد يكون مفقودًا؟ شكرًا!