لذا استخدمت وثيقة التثبيت القياسية ويبدو أن كل شيء سار على ما يرام. ثم قمت بتعديل ملف app.yml لتغيير المنافذ المستخدمة، وقمت بإلغاء تفعيل Let’s Encrypt بإضافة تعليق، وأعدت البناء. يبدو أن كل شيء سار على ما يرام.
ولكن عندما أحاول الاتصال عبر الطريقة الأكثر مباشرة:
حسنًا، لقد قمت بالدخول إلى التطبيق وتثبيت lynx داخل حاوية discord، ويمكنني الوصول إلى صفحة الترحيب هناك! إذن التثبيت يعمل، والمشكلة تكمن في تعيين الشبكة من داخل الحاوية إلى الخادم.
إليك مخرجات docker ps:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6d0209e4e72 local_discourse/app "/sbin/boot" 51 minutes ago Up 51 minutes 127.0.0.1:8880->80/tcp, 127.0.0.1:4443->443/tcp app
…وهنا معلومات ملف app.yml:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
expose:
- "127.0.0.1:8880:80" # http
- "127.0.0.1:4443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
db_shared_buffers: "2048MB"
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
UNICORN_WORKERS: 8
DISCOURSE_HOSTNAME: [redacted]
DISCOURSE_SMTP_ADDRESS: [redacted]
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: [redacted]
DISCOURSE_SMTP_PASSWORD: "[redacted]"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, default true)
DISCOURSE_SMTP_DOMAIN: [redacted]
DISCOURSE_NOTIFICATION_EMAIL: [redacted]
## حاوية 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"
- exec: echo "End of custom commands"
آه، أدرك الآن ما فعلته. يعمل 8880:80 بشكل جيد، لقد كنت أختبر جانب 4443:443 فقط. لم يعمل بسبب وجود خطأ في الشهادة. أنا نوي تثبيت وإدارة الشهادة على مستوى خادم الويب في المضيف الافتراضي. سأشارك الحل النهائي لأولئك المهتمين بمجرد أن أتمكن من جعل كل شيء يعمل.
تثبيت البيئة
لوحة تحكم Hestia (لإدارة الخوادم)
Apache2 (خادم الويب)
Discourse في Docker مع عكس proxy إلى Apache2
Let’sEncrypt غير معكوس proxy، بل تتم إدارته بواسطة Hestia في www_root
إعداد سockets يونكس في ملف app.yml (وإعادة البناء):
- "templates/web.socketed.template.yml"
إزالة تعيين المنافذ و Let’sEncrypt من ملف app.yml (وإعادة البناء)
إنشاء قوالب بديلة لملف apache2.conf لـ HestiaCP على النحو التالي (بالنسبة لأولئك الذين لا يستخدمون HestiaCP، فقط اعلموا أن وسوم الاستبدال %{…}% معيارية وواضحة إذا نظرت إلى أي ملف apache2.conf آخر. الأجزاء الأهم لا تستخدم سوى عدد قليل من وسوم الاستبدال %{…}%. لاحظ أيضًا أن النص standalone قد يكون socket-only اعتمادًا على إعدادك. تحقق من محتويات المجلد /var/discourse/shared/ إذا لم تتذكر.
{قالب مخصص}.stpl
<VirtualHost %ip%:%web_ssl_port%>
ServerName %domain_idn%
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ServerAdmin %email%
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
<Directory %sdocroot%>
AllowOverride All
SSLRequireSSL
Options +Includes -Indexes +ExecCGI
</Directory>
SSLEngine on
SSLVerifyClient none
SSLCertificateFile %ssl_crt%
SSLCertificateKeyFile %ssl_key%
%ssl_ca_str%SSLCertificateChainFile %ssl_ca%
IncludeOptional %home%/%user%/conf/web/%domain%/%web_system%.ssl.conf_*
</VirtualHost>
{قالب مخصص}.tpl
<VirtualHost %ip%:%web_port%>
ServerName %domain_idn%
%alias_string%
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
RewriteEngine On
RewriteCond %{REQUEST_URI} !^.well-known/acme-challenge
RewriteRule ^(.*) https://%domain_idn%/$1 [R=301,L]
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
<Directory %sdocroot%>
AllowOverride All
Options +Includes -Indexes +ExecCGI
</Directory>
IncludeOptional %home%/%user%/conf/web/%domain%/%web_system%.conf_*
</VirtualHost>