مشاكل Dockerfile متعددة المواقع

لقد حاولت تطبيق ذلك عن طريق قراءة الأدلة. هكذا أصبح ملف app.yml. قد تكون هناك أخطاء. أنا أستخدم Docker فقط. هدفي هو: القدرة على فتح موقعين على الخادم الافتراضي. 1. اسم الموقع: dursuncan.com، 2. اسم الموقع: forum.tekno-byte.com
كيف يجب أن أقوم بتعديل ملف app.yml؟

   # ./launcher rebuild app

    WARNING: We are about to start downloading the Discourse base image
    This process may take anywhere between a few minutes to an hour, depending on your network speed

    Please be patient

    2.0.20210415-1332: Pulling from discourse/base
    Digest: sha256:b3b1eb6d859d683f26ad2a02e0efabcd502a63ab07b8211e4c425aa7ba7dd3a4
    Status: Downloaded newer image for discourse/base:2.0.20210415-1332
    docker.io/discourse/base:2.0.20210415-1332
    Ensuring launcher is up to date
    Fetching origin
    Launcher is up-to-date
    Stopping old container
    + /usr/bin/docker stop -t 60 app
    app
    cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
    docker: Error response from daemon: could not get container for postgres: No such container: postgres.
    See 'docker run --help'.
    cat: cids/app_bootstrap.cid: No such file or directory
    "docker rm" requires at least 1 argument.
    See 'docker rm --help'.

    Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

    Remove one or more containers
    rm: cannot remove 'cids/app_bootstrap.cid': No such file or directory
    ** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
    ./discourse-doctor may help diagnose the problem.
    ## هذا قالب حاوية 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"
      - "templates/cron.template.yml"
    ## قم بإلغاء التعليق عن هذين السطرين إذا كنت ترغب في إضافة Lets Encrypt (https)
      - "templates/sshd.template.yml"  
      - "templates/web.ssl.template.yml"
      - "templates/web.letsencrypt.ssl.template.yml"

    ## ما هي منافذ TCP/IP التي يجب أن تعرضها هذه الحاوية؟
    ## إذا كنت ترغب في مشاركة Discourse لمنفذ مع خادم ويب آخر مثل Apache أو nginx،
    ## راجع https://meta.discourse.org/t/17247 للحصول على التفاصيل
    expose:
    #  - "80"
       - "80:80"
       - "2222:22"
       - "443:443"
    #  - "80:80"   # http
    #  - "443:443" # https

    links:
       - link:
           name: postgres
           alias: postgres

    #docker_args:
    #   - "--net chain"

    params:
      db_default_text_search_config: "pg_catalog.english"

      ## قم بتعيين db_shared_buffers إلى حد أقصى 25% من إجمالي الذاكرة.
      ## سيتم تعيينها تلقائيًا بواسطة عملية التمهيد بناءً على ذاكرة الوصول العشوائي المكتشفة، أو يمكنك تجاوزها
      #db_shared_buffers: "256MB"

      ## يمكن أن يحسن أداء الفرز، لكنه يزيد من استخدام الذاكرة لكل اتصال
      #db_work_mem: "40MB"

      ## أي إصدار Git يجب أن تستخدمه هذه الحاوية؟ (الافتراضي: tests-passed)
      #version: tests-passed

    env:
      LC_ALL: en_US.UTF-8
      LANG: en_US.UTF-8
      LANGUAGE: en_US.UTF-8
      # DISCOURSE_DEFAULT_LOCALE: en

      ## عدد الطلبات الويب المتزامنة المدعومة؟ يعتمد على الذاكرة وأنوية المعالج.
      ## سيتم تعيينها تلقائيًا بواسطة عملية التمهيد بناءً على وحدات المعالجة المركزية المكتشفة، أو يمكنك تجاوزها
      #UNICORN_WORKERS: 3

      ## TODO: اسم النطاق الذي ستستجيب له هذه النسخة من Discourse
      ## مطلوب. لن يعمل Discourse مع عنوان IP مجرد.
      DISCOURSE_HOSTNAME: 'dursuncan.com'
      # VIRTUAL_HOST: 'dursuncan.com,www.dursuncan.com'
      # LETSENCRYPT_HOST: 'dursuncan.com,www.dursuncan.com'
      # LETSENCRYPT_EMAIL: 'merhaba@dursuncan.com'

      ## قم بإلغاء التعليق إذا كنت تريد بدء الحاوية بنفس اسم النطاق (-h option) المحدد أعلاه (الافتراضي "$hostname-$config")
      # DOCKER_USE_HOSTNAME: true

      ## TODO: قائمة عناوين البريد الإلكتروني المفصولة بفواصل سيتم تعيينها كمسؤول ومطور
      ## عند التسجيل الأولي، مثال 'user1@example.com,user2@example.com'
      DISCOURSE_DEVELOPER_EMAILS: 'poyrazdursuncan@gmail.com'

      ## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
      ## عنوان SMTP واسم المستخدم وكلمة المرور مطلوبة
      ## تحذير: قد يتسبب الحرف '#' في كلمة مرور SMTP في حدوث مشاكل!
      DISCOURSE_SMTP_ADDRESS: smtp.eu.mailgun.org
      DISCOURSE_SMTP_PORT: 587
      DISCOURSE_SMTP_USER_NAME: postmaster@mg.dursuncan.com
      DISCOURSE_SMTP_PASSWORD: '***'
      DISCOURSE_SMTP_ENABLE_START_TLS: true
      DISCOURSE_SMTP_DOMAIN: dursuncan.com
      #DISCOURSE_NOTIFICATION_EMAIL: noreply@discourse.example.com    # (العنوان المرسل منه الإشعارات)

      ## إذا أضفت قالب Lets Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
      LETSENCRYPT_ACCOUNT_EMAIL: 'merhaba@dursuncan.com'

      ## عنوان CDN http أو https لهذه النسخة من Discourse (مُعد لجلب)
      ## راجع https://meta.discourse.org/t/14857 للحصول على التفاصيل
      #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
      
      ## مفتاح عنوان IP لموقع Maxmind الجغرافي للبحث عن عناوين IP
      ## راجع https://meta.discourse.org/t/-/137387/23 للحصول على التفاصيل
      #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

      DISCOURSE_DB_HOST: some-host
      DISCOURSE_DB_NAME: "{{config}}_discourse"

    labels:
      monitor: "true"
      app_name: "{{config}}_discourse"

    ## حاوية 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_postgres:
         - exec: sudo -u postgres createdb b_discourse || exit 0
         - exec:
              stdin: |
                grant all privileges on database b_discourse to discourse;
              cmd: sudo -u postgres psql b_discourse
              raise_on_fail: false

         - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "alter schema public owner to discourse;"'
         - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "create extension if not exists hstore;"'
         - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "create extension if not exists pg_trgm;"'

      after_code:
        - exec:
            cd: $home/plugins
            cmd:
              - mkdir -p plugins
              - git clone https://github.com/discourse/docker_manager.git
      before_bundle_exec:
        - file:
            path: $home/config/multisite.yml
            contents: |
             secondsite:
               adapter: postgresql
               database: b_discourse
               pool: 25
               timeout: 5000
               db_id: 2
               host_names:
                 - b.discourse.example.com

      after_bundle_exec:
        - exec: cd /var/discourse && sudo -E -u discourse bundle exec rake multisite:migrate

    ## أي أوامر مخصصة للتشغيل بعد البناء
    run:
      - exec:
            cd: var/discourse
            hook: my_hook
            cmd:
              - echo 1
      ## إذا كنت ترغب في تعيين عنوان البريد الإلكتروني 'من' لتسجيلك الأول، قم بإلغاء التعليق وتغييره:
      ## بعد الحصول على أول بريد إلكتروني للتسجيل، أعد التعليق على السطر. يجب تشغيله مرة واحدة فقط.
      #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
      - exec: echo "نهاية الأوامر المخصصة"
إعجاب واحد (1)

تحتاج إلى حاويتين من هذا القبيل ووكيل عكسي أمامهما. انسخ ملف app.yml إلى app2.yml وقم بتعديله. تشغيل مواقع ويب أخرى على نفس الجهاز الذي يعمل عليه Discourse أو ربما إعداد متعدد المواقع مع Let’s Encrypt وبدون وكيل عكسي إذا كان بإمكانها استخدام نفس الإضافات وخادم البريد.

4 إعجابات

لقد استخدمت الطريقة الأولى على خوادم LEMP. هل من الممكن تنفيذ هذه الطريقة عبر Docker؟ وهل يؤثر تثبيت خادم Nginخ خارج Docker على الأداء؟

إعجاب واحد (1)

نعم. ستكون لديك صورة Docker لكل منتدى.

يمكن أن يكون وكيل العكسي الخارجي حاوية Docker أيضًا.

ليس بشكل كبير.

إعجاب واحد (1)

لقد قمت بتثبيت Nginx. قمت بإعداداتي. عدّلت ملف app.yml. عملية إعادة البناء فشلت. ما الذي قد يكون المشكلة؟

./launcher rebuild app
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
docker: invalid reference format: repository name must be lowercase.
See 'docker run --help'.
cat: cids/app_bootstrap.cid: No such file or directory
"docker rm" requires at least 1 argument.
See 'docker rm --help'.

Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

Remove one or more containers
rm: cannot remove 'cids/app_bootstrap.cid': No such file or directory
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
root@dursun:/var/discourse# docker image rm 8e23824acd3c
Error: No such image: 8e23824acd3c

app.yml

## هذا قالب حاوية Discourse Docker المستقلة الشاملة
##
## بعد إجراء تعديلات على هذا الملف، يجب عليك إعادة البناء
## /var/discourse/launcher rebuild app
##
## كن حذرًا للغاية عند التعديل!
## ملفات YAML حساسة للغاية للأخطاء في المسافات البيضاء أو المحاذاة!
## قم بزيارة http://www.yamllint.com/ للتحقق من صحة هذا الملف حسب الحاجة

# القوالب الأساسية المستخدمة؛ يمكن تقليلها لتشمل وظائف أقل حسب قوالب الحاويات:
  #- "templates/sshd.template.yml"
  #- "templates/web.socketed.template.yml"
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"

## أي منافذ TCP/IP يجب أن تعرضها هذه الحاوية؟
## إذا كنت تريد أن يشارك Discourse منفذًا مع خادم ويب آخر مثل Apache أو nginx،
## راجع https://meta.discourse.org/t/17247 للحصول على التفاصيل
# أي منافذ يجب عرضها؟
# expose: قم بإلغاء التعليق عن القسم بالكامل بوضع # في بداية كل سطر
# - "80:80"   # http
# - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## تعيين db_shared_buffers إلى أقصى 25% من إجمالي الذاكرة.
  ## سيتم تعيينه تلقائيًا بواسطة التمهيد بناءً على ذاكرة الوصول العشوائي المكتشفة، أو يمكنك تجاوز ذلك
  #db_shared_buffers: "256MB"

  ## يمكن أن يحسن أداء الفرز، لكنه يزيد من استخدام الذاكرة لكل اتصال
  #db_work_mem: "40MB"

  ## أي إصدار Git يجب أن تستخدمه هذه الحاوية؟ (الافتراضي: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## عدد الطلبات المتزامنة التي تدعمها الويب؟ يعتمد على الذاكرة وأنوية المعالج.
  ## سيتم تعيينه تلقائيًا بواسطة التمهيد بناءً على وحدات المعالجة المركزية المكتشفة، أو يمكنك تجاوز ذلك
  #UNICORN_WORKERS: 3

  ## TODO: اسم النطاق الذي ستستجيب له هذه النسخة من Discourse
  ## مطلوب. لن يعمل Discourse مع عنوان IP مجرد.
  DISCOURSE_HOSTNAME: 'dursuncan.com'

  ## قم بإلغاء التعليق إذا كنت تريد أن تبدأ الحاوية بنفس
  ## اسم المضيف (خيار -h) المحدد أعلاه (الافتراضي "$hostname-$config")
  # DOCKER_USE_HOSTNAME: true

  ## TODO: قائمة عناوين البريد الإلكتروني المفصولة بفواصل سيتم تعيينها كمسؤول ومطور
  ## عند التسجيل الأولي على سبيل المثال 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'poyrazdursuncan@gmail.com'

  ## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
  ## عنوان SMTP واسم المستخدم وكلمة المرور مطلوبة
  ## تحذير: قد يسبب حرف '#' في كلمة مرور SMTP مشاكل!
  DISCOURSE_SMTP_ADDRESS: smtp.eu.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: postmaster@mg.dursuncan.com
  DISCOURSE_SMTP_PASSWORD: '---------'
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_SMTP_DOMAIN: dursuncan.com
  #DISCOURSE_NOTIFICATION_EMAIL: noreply@discourse.example.com    # (العنوان المرسل منه الإشعارات)

  ## إذا أضفت قالب Lets Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
  LETSENCRYPT_ACCOUNT_EMAIL: 'merhaba@dursuncan.com'

  ## عنوان CDN http أو https لهذه النسخة من Discourse (مُهيأ لجلب)
  ## راجع https://meta.discourse.org/t/14857 للحصول على التفاصيل
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## مفتاح عنوان IP للبحث عن الموقع الجغرافي من Maxmind
  ## راجع https://meta.discourse.org/t/-/137387/23 للحصول على التفاصيل
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## حاوية 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"
إعجاب واحد (1)