دمج Discourse، Caddy، وWordPress مع منافذ Docker للوكيل العكسي

هذه أول مشاركة لي وأردت تقديم دليل قمت بإنشائه مع صديقنا ChatGPT بعد معاناتي لأيام لمعرفة كيفية تشغيل Caddy كوكيل عكسي لـ Discourse المثبت باتباع تعليمات المكتب. لقد استخدمت معلومات وجدتها في منتدى Caddy هنا. إعداد Caddy Discourse. قد يكون هذا مباشرًا ولكن بالنسبة لأولئك منا الذين بدأوا للتو مع Discourse، يتطلب الأمر بعض الجهد لتشغيله.

شكرًا لمجتمع رائع بشكل واضح.

دمج Discourse و Caddy و WordPress مع منافذ Docker للوكيل العكسي


نظرة عامة

يقدم هذا الدليل عملية خطوة بخطوة لإعداد Discourse مع Caddy كوكيل عكسي، جنبًا إلى جنب مع تثبيت WordPress، باستخدام Docker Compose. تم تصميم هذه التعليمات لخادم Ubuntu 22 LTS نموذجي وتوضح كيفية دمج خدمات متعددة مع ضمان إعداد نظيف وقابل للتكرار.


المتطلبات المسبقة

تأكد من استيفاء المتطلبات المسبقة التالية قبل المتابعة:

  1. Docker و Docker Compose:

    apt update && apt install docker docker-compose -y
    
  2. تثبيت Discourse:

  3. أسماء النطاقات:

    • نطاق أساسي لـ WordPress (على سبيل المثال، website.com).
    • نطاق فرعي لـ Discourse (على سبيل المثال، forum.website.com).

الخطوة 1: تكوين docker-compose.yml

يحدد ملف docker-compose.yml الخدمات لـ Caddy (الوكيل العكسي) و WordPress و MySQL.

موقع الملف

احفظ الملف باسم /etc/docker-services/docker-compose.yml.

التكوين

version: '3.8'

services:
  caddy:
    image: caddy:latest
    container_name: caddy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - caddy_net

  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: unless-stopped
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: example_user
      WORDPRESS_DB_PASSWORD: example_password
      WORDPRESS_DB_NAME: example_db
    volumes:
      - ./wordpress:/var/www/html
    networks:
      - caddy_net

  db:
    image: mysql:5.7
    container_name: wordpress_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: example_password
      MYSQL_DATABASE: example_db
      MYSQL_USER: example_user
      MYSQL_PASSWORD: example_password
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - caddy_net

volumes:
  caddy_data:
  caddy_config:
  db_data:

networks:
  caddy_net:
    external: true

الخطوة 2: إعداد وكيل Caddy العكسي

يقوم Caddy بتوجيه الطلبات إلى كل من Discourse و WordPress ويدير شهادات HTTPS.

موقع الملف

احفظ التكوين باسم /etc/docker-services/Caddyfile.

التكوين

website.com {
    reverse_proxy wordpress:80
}

forum.website.com {
    reverse_proxy app:80
}

يضمن هذا التكوين:

  • يتم توجيه الطلبات إلى website.com إلى حاوية WordPress.
  • يتم توجيه الطلبات إلى forum.website.com إلى حاوية Discourse.

الخطوة 3: تكوين Discourse

قم بتحديث app.yml لدمج Discourse مع Caddy وشبكة Docker.

موقع الملف

يقع في /var/discourse/containers/app.yml.

تغييرات التكوين

  1. كشف المنافذ غير القياسية لـ HTTP:

    expose:
      - "8880:80"   # http
    
  2. إزالة قوالب SSL:

    # - "templates/web.ssl.template.yml"
    # - "templates/web.letsencrypt.ssl.template.yml"
    
  3. تعيين شبكة Docker:

    docker_args:
      - '--network caddy_net'
    
    networks:
      caddy_net:
        external: true
    
  4. إعادة بناء Discourse: قم بتطبيق التغييرات عن طريق إعادة بناء حاوية Discourse:

    cd /var/discourse
    ./launcher rebuild app
    

الخطوة 4: نشر الخدمات

ابدأ خدمات Docker لـ Caddy و WordPress:

  1. انتقل إلى دليل Docker Compose:

    cd /etc/docker-services
    
  2. قم بتشغيل الحاويات:

    docker compose up -d
    

الخطوة 5: الاختبار والتحقق

  1. التحقق من الحاويات قيد التشغيل:

    docker ps
    
  2. الوصول إلى WordPress: انتقل إلى:

    https://website.com
    
  3. الوصول إلى Discourse: انتقل إلى:

    https://forum.website.com
    
  4. التحقق من السجلات:

    • Caddy:

      docker logs caddy
      
    • Discourse:

      tail -f /var/discourse/shared/standalone/log/rails/production.log
      

استكشاف الأخطاء وإصلاحها

  1. Discourse لا يستجيب:
    • تأكد من ربط Discourse بالمنفذ 8880.

    • تحقق من اتصال الحاوية بـ caddy_net:

      docker network inspect caddy_net
      
  2. أخطاء SSL في Caddy:
    • تحقق من سجلات شهادات Caddy في /data.
  3. مشاكل إعادة البناء:
    • تأكد من أن شبكة caddy_net نشطة عند إعادة بناء Discourse:

      docker network ls
      

الخلاصة

يوضح هذا الدليل كيفية دمج Discourse و Caddy و WordPress باستخدام Docker Compose وتكوين وكيل عكسي. باتباع هذه الخطوات، يمكنك تحقيق إعداد معياري وآمن للبنية التحتية لموقعك الخاص.

هل استخدمت أردوينو لهذا؟