تحتاج إلى التأكد من أن كلا الحاويتين على نفس شبكة Docker. إذا لم يكن لديك NPM يعمل، فأنت لا تواجه مشكلة في تكوين Discourse (حتى الآن).
لقد نسيت عن طريق الخطأ شبكة ماريا دي بي دوكر؛ ولكن بعد إضافة
network_mode: bridge
لا يزال لدي خطأ npm في الاتصال بقاعدة بيانات ديسكورس؛
environment:
DB_MYSQL_HOST: "172.17.0.2" # حاوية البيانات - ولكنني أتلقى خطأ (خطأ connect ECONNREFUSED 172.17.0.2:3306) عند تمكينها.
# DB_MYSQL_HOST: "db" قاعدة بيانات npm الافتراضية (خارج ديسكورس).
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "h4xb0xr1z__0k"
DB_MYSQL_NAME: "npm"
عندما تعمل npm وماريا؛ سجلات ماريا جيدة… ولكن npm
error connect ECONNREFUSED 172.17.0.2:3306
هل هناك أي شيء مفقود؟
ملف docker-compose الخاص بي
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
network_mode: bridge
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
environment:
DB_MYSQL_HOST: "172.17.0.2" #data container - but i receive error ( connect ECONNREFUSED 172.17.0.2:3306 ) when enabled.
# DB_MYSQL_HOST: "db" default npm databse (outside discourse).
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "mypassword"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
# depends_on:
# - db
db:
image: 'mariadb:latest'
restart: unless-stopped
network_mode: bridge
environment:
MYSQL_ROOT_PASSWORD: 'mypassword'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'mypassword'
volumes:
- ./data/mysql:/var/lib/mysql
لدي discourse يعمل مع data + web-only؛ خريطة عناوين IP بعد npm و maria تبدو كالتالي:
data container IP: 172.17.0.2
web_only container IP: 172.17.0.3
npm container IP: 172.17.0.5
maria data (npm) IP: 172.17.0.4
مرحباً @tophee
هل يمكنك تقديم توصيتك بشأن استخدام SQLite مع NPM، نظرًا لأنه أسهل وأكثر موثوقية للعمل معه مقارنة بمشاكل mariadb؛
لقد قمت بإعداد NPM مع SQLite وكل شيء يعمل بشكل جيد، بما في ذلك مضيف nginx الافتراضي، وشهادة SSL، وما إلى ذلك… ولكني أريد التأكد من كيفية ربط قاعدة بيانات discourse بـ NPM؟ نظرًا لأنني أحصل على خطأ 502 لإعداد NPM مع موقع discourse.
ملف docker-compose الخاص بي
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
network_mode: bridge #-- تم إضافة هذه الشبكة للسماح لـ NPM بأن يكون في نفس شبكة discourse، والآن يرى كل منهما الآخر.
ports:
# منفذ HTTP العام:
- '80:80'
# منفذ HTTPS العام:
- '443:443'
# منفذ الويب الإداري:
- '81:81'
environment:
DB_SQLITE_FILE: "/data/database.sqlite"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
لا، توصيتي هي استخدام الإعداد القياسي لـ NPM ما لم تكن تعرف ما تفعله. هذا هو السبب في أنني أستخدم الإعداد القياسي.
لا تحتاج إلى الخطوة 3 إذا قمت بتوصيل حاوية discourse عبر websocket.
هذا بسبب
هل أنت متأكد من أن 172.17.0.2 هي حاوية قاعدة البيانات الخاصة بك؟ - على أي حال: يمكنك تخطي هذه المشكلة عن طريق ترك NPM على شبكته الخاصة وتوصيل discourse عبر web socket.
شكراً @tophee على التوضيح، لقد قمت بتصحيح كل شيء، ولكن يبدو أنني لم أستخدم websocket وركزت على المنفذ مع إعداد npm وحاويات discourse؛
مشكلتي التي واجهتها مع NPM كانت مع نفق CloudFlared Argo، بعد الانتهاء من إعداد NPM، SSL، كل شيء.. تمكنت من تشغيل نفق CloudFlared argo ولكن المشكلة كانت أن CloudFlared لا يمكن تشغيله كوكيل ثانوي، حيث نحتاج إلى تعطيل NPM ليكون أمام الويب الأصلي؛ الخطأ الذي حصلت عليه من CloudFlare هو هذا:
Error 1000: DNS points to prohibited IP
بعد البحث عن هذا الخطأ مع cloudflare؛ أعطاني هذا:
There is a reverse-proxy at your origin that sends the request back through the Cloudflare proxy. Instead of using a reverse-proxy, contact your hosting provider or site administrator to configure an HTTP redirect at your origin.
كيف يمكننا تعطيل NPM كوكيل عكسي؟
هدفي هو جعل عنوان IP الأصلي يعمل بدون NPM “أثناء” تثبيت وعمل NPM؛ حتى نتمكن من جعل cloudflared يتواصل مع خادمنا؟
قم بإلغاء تثبيت NPM. الهدف الكامل من NPM هو العمل كوكيل عكسي. إذا كنت لا تريد وكيلًا عكسيًا، فقم بإيقافه.
لا أفهم النقطة تمامًا وهذا بالتأكيد ليس شيئًا لدي أي معرفة به. يجب عليك على الأرجح التحقق من منتدى NPM أو شيء من هذا القبيل. هذا لا علاقة له بـ discourse.
لقد قمت بالفعل بفتح هناك؛ وأنا أناقش هنا أيضًا، ونعم، لقد قمت بتعطيله بعد يومين من التجربة؛ لكنني سأضيف كيفية إضافة دعم منفذ مخصص مع Discourse و NPM هنا، نظرًا لأن هذا الموضوع يدعم فقط nginx المقبس مع npm؛
شكرا.
لا. لا يدعم المقابس فقط إلا إذا اتبعت تعليمات المقابس. يقول إنه ليس عليك استخدام المقابس:
عندما اختبرت هذا آخر مرة، عمل بشكل جيد باستخدام منفذ كما هو مقترح.
لقد ساعدتني هذه التعليمات في إعداد Discourse باستخدام Nginx Proxy Manager.
ومع ذلك، يعرض المتصفح أخطاء “محتوى مختلط” عند محاولة تحميل الخطوط والصور من http.
يمكنك “فرض https” في الروابط باستخدام الخيار هنا:
واو، هذا موضوع معقد للغاية مع الكثير من الشروط والاستثناءات.
اليوم حاولت أيضًا إعداد الأمر وفشلت فشلاً ذريعًا. التعليمات لديها نوايا حسنة، ولكن في رأيي ليست سهلة الفهم / الإدراك.
عندما أعمل مع Docker، أريد عادةً أن تعمل الحاويات بشكل منفصل / معزول عن بعضها البعض. لا الكثير من التبعيات والمتطلبات المسبقة و"نقاط الفشل الوحيدة". ولكن هذه هي بالضبط المشاكل التي يسببها النهج: NPM أداة رائعة. لا أفهم لماذا يجب علي إجراء تعديلات خاصة على تكوين Docker الخاص بها من Proxy Manager لجعل Discourse سعيدًا وتزويده بالشهادات. في المنزل، أستخدم أيضًا NPM لنطاق DynDNS الخاص بي حتى أتمكن من تعيين الخدمات والمضيفين بمرونة في أي وقت. ولدي بعض منها عامة (Home Assistant، Grafana، …).
أردت دمج مثيلي Discourse الخاصين بي اليوم. لقد استأجرت خادمًا سحابيًا خصيصًا من Hetzner/ألمانيا. لهذا السبب لم يتم تثبيت Discourse مسبقًا، كما تفترض التعليمات.
أتمنى أن تقدم Discourse رسميًا التثبيت مع NPM افتراضيًا. أو على الأقل لا تسبب الكثير من المتاعب مع البرنامج النصي ./discourse-setup.
دليل صغير لتثبيت نسخ متعددة 
في هذه الحالة، سنبدأ بتثبيت خادم جديد ونرغب في استعادة نسخة قديمة لاحقًا.
الخطوة 0: النسخ الاحتياطي!!!
قم بتنزيل النسخة الاحتياطية. ستحتاجها لاحقًا.
الخطوة 1: NGINX Proxy Manager
mkdir -p /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager
nano docker-compose.yml
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
ports:
- '80:80' # http / reserved!
- '81:81' # web-admin port
- '443:443' # https / reserved!
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
وأخيرًا: docker-compose up -d
(للمزيد من الأشخاص الكسالى، مثلي أحيانًا، فقط استخدم casaOS (على أي منفذ آخر غير ≠ 80/81/443). فقط تأكد من أنك تستخدم بيانات اعتماد تسجيل دخول آمنة ومضيف وكيل إضافي مع شهادة SSL الخاصة بك لطبقة إضافية من الأمان. يمكنك حتى إعداد بعض قواعد جدار الحماية إذا كنت تعرف ما تفعله.)
الخطوة 2: تثبيت Docker على خادم Ubuntu
sudo apt update && apt upgrade -y
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io
الخطوة 3: إعداد تثبيت Discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app1.yml
nano /var/discourse/containers/app1.yml
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app2.yml
nano /var/discourse/containers/app2.yml
قم بإجراء أي تغييرات ضرورية على ملفات app.yml الخاصة بك. يتضمن ذلك منافذ مختلفة مكشوفة لكل نسخة (نعم، يمكنك حتى استخدامها للصيانة)، وإعدادات البريد، وما إلى ذلك.
على سبيل المثال، تحصل app1 على المنفذ 8080/1443 و app2 تحصل على المنفذ 8081/2443 لـ http/https.
/var/discourse/launcher rebuild app1
/var/discourse/launcher rebuild app2
الخطوة 4: أخيرًا وليس آخرًا، تكوين NGINX Proxy Manager
شاهد هذا لفهم أساسي لاستخدام NGINX Proxy Manager.
كل ما عليك فعله هو توجيه إدخالات مضيف الوكيل الخاص بك إلى كل نسخة (منفذ http، على سبيل المثال 8080 و 8081 مع عنوان IP المحلي أو العام الخاص بك، هذا قرارك) وستتمكن من الحصول على شهادات Let’s Encrypt مجانية لكل نسخة ونطاق. فقط تأكد من تمكين Force SSL وما إلى ذلك.
الخطوة 5: تم. اشرب كوبًا من القهوة.
في حالتي، يعمل بشكل مثالي.
قد تكون هناك بعض المشكلات البسيطة مع تبعيات البرامج المثبتة مسبقًا، لكنني متأكد من أنك ستجد حلاً. لا تغضب مني بسبب نصيحتي حول casaOS. ولكن بالنسبة للأشخاص الذين يحبون اللعب بخوادمهم، واستخدام جميع الموارد المتاحة بطريقة سهلة الاستخدام وآمنة، أنا متأكد من أنك ستجد إدارة Docker هذه مثيرة للاهتمام.
الخطوة 6: أخيرًا، استعادة النسخ الاحتياطية السابقة الخاصة بك.
هل يمكنني دمج هذا باستخدام نفق Cloudflare للنطاق؟
بالتأكيد، لم لا؟
فقط تأكد من أنك ستكشف المنفذ الصحيح وتضبط هذا المنفذ لمجالك في أنفاق Cloudflare.
شخصيًا، لا أفضل هذا الحل لأنه يجعلني معتمدًا على Cloudflare وكل وكيل نفق يفتح ثقبًا
في جدار الحماية الخاص بي، مما يجعلني أشعر وكأنني أقوم بتثبيت حصان طروادة.
تعد إدارة جدار الحماية أمرًا ضروريًا لمسؤولي الخوادم. سيكون لديك بعض الواجبات المنزلية للقيام بها قبل كشف المواقع لـ DMZ.
