تثبيت Discourse للتطوير باستخدام Docker

التطوير باستخدام دوكر (Docker)

بما أن ديسكورس (Discourse) يعمل في دوكر، يجب أن تكون قادرًا على تشغيل ديسكورس مباشرةً من دليل المصدر الخاص بك باستخدام حاوية تطوير ديسكورس.

:white_check_mark: الإيجابيات: لا حاجة لتثبيت أي تبعيات نظام، ولا حاجة لأي إعدادات على الإطلاق لإعداد بيئة تطوير سريعة.

:x: السلبيات: ستكون أبطأ قليلاً من بيئة التطوير الأصلية على أوبونتو (Ubuntu)، وأبطأ بكثير من التثبيت الأصلي على ماك أو إس (MacOS).

راجع أيضًا Developing Discourse using a Dev Container

الخطوة 1: تثبيت دوكر (Docker)

أوبونتو (Ubuntu)

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-get update
sudo apt-get install -y docker-ce

19.10

sudo apt-get install docker.io
sudo usermod -a -G docker $USER
sudo reboot

ويندوز نظام فرعي لينكس (Windows WSL): أوبونتو (Ubuntu)

يمكنك تشغيل الأوامر المذكورة أعلاه داخل نظام WSL ولكن يجب أن تكون جميع الملفات داخل نظام ملفات WSL. على سبيل المثال، يعمل بشكل جيد إذا كانت داخل ~/discourse ولكنه يفشل إذا تم وضعها داخل /mnt/c/discourse.

ماك أو إس (MacOS)

:warning: صورة دوكر لتطوير ديسكورس متاحة فقط لمعماريات x86_64. يمكن لأجهزة ماك M1 بدء تشغيل الصورة باستخدام محاكاة المعماريات، ولكن من غير المرجح أن يتم تشغيل ديسكورس بسبب نقص دعم inotify في QEMU.

بدلاً من ذلك، يجب عليك استخدام Install Discourse on macOS for development

الخيار 1: قم بتنزيل حزمة .dmg من متجر دوكر (Docker store)
الخيار 2: brew install docker

الخطوة 2: تشغيل الحاوية

انسخ مستودع ديسكورس إلى جهازك المحلي.

git clone https://github.com/discourse/discourse.git
cd discourse

(من جذر المصدر الخاص بك)

d/boot_dev --init
    # انتظر أثناء:
    #   - تثبيت التبعيات،
    #   - ترحيل قاعدة البيانات، و
    #   - إنشاء مستخدم إداري (ستحتاج إلى التفاعل مع هذا)

# في طرفية واحدة:
d/rails s

# وفي طرفية منفصلة
d/ember-cli

… ثم افتح متصفحًا على http://localhost:4200 و ها أنت ذا!، يجب أن ترى ديسكورس.

روابط رمزية للإضافات (Plugin Symlinks)

يتيح تدفق تطوير دوكر الروابط الرمزية تحت الدليل plugins/، مع التحذير التالي:

كلما تم إنشاء رابط رمزي جديد للإضافة، يجب إعادة تشغيل حاوية دوكر باستخدام:

d/shutdown_dev; d/boot_dev

ملاحظات:

  • لاختبار رسائل البريد الإلكتروني، قم بتشغيل MailHog:

    d/mailhog
    
  • إذا كانت هناك أحجار كريمة (gems) مفقودة، قم بتشغيل:

    d/bundle install
    
  • إذا كانت هناك حاجة لترحيل قاعدة بيانات (db migration):

    d/rake db:migrate RAILS_ENV=development
    
  • عند الانتهاء، يمكنك اختيار إيقاف حاوية دوكر باستخدام:

    d/shutdown_dev
    
  • تتم استدامة البيانات بين استدعاءات الحاوية في دليل tmp/postgres الخاص بجذر المصدر الخاص بك. إذا كنت تريد لأي سبب إعادة تعيين قاعدة البيانات الخاصة بك قم بتشغيل:

    sudo rm -fr data
    
  • إذا رأيت أخطاء مثل “permission denied while trying to connect to Docker” (تم رفض الإذن أثناء محاولة الاتصال بـ Docker)، قم بتشغيل:

    run `sudo usermod -aG docker ${USER}`
    sudo service docker restart
    
  • إذا كنت ترغب في الكشف عن المنافذ من الحاوية للشبكة عالميًا (إيقاف التشغيل افتراضيًا) استخدم:

    d/boot_dev -p
    
  • يأتي ملف Dockerfile من discourse/discourse_docker على GitHub، وتحديداً image/discourse_dev.

تشغيل الاختبارات

d/rake autospec

لتشغيل اختبارات إضافات معينة، يمكنك أيضًا القيام بشيء مثل هذا:

d/rake plugin:spec["discourse-follow"]

أو حتى شيء كهذا ليكون أكثر تحديدًا:

my-machine:~/discourse$ d/shell
discourse@discourse:/src$ RAILS_ENV=test /src/bin/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37

يتم التحكم في إصدار هذه الوثيقة - اقترح التغييرات على GitHub.

72 إعجابًا
Using a launcher built docker image in docker-compose
IDE and comfortable DEV environment for newbies
Docker install on MacOS
How to install Discourse locally?
Installing Discourse for macOS Development Using asdf and docker-compose
Discourse developement environment setup
Discourse on local pc
External database ENV VARs not documented (external PG Port, external Redis ENV VARs)
How to Install Discourse on LocalHost in Windows?
Unicode (Russian) username validation fails randomly
Qunit in Docker
Is it possible to use a local plugin directory with a docker install?
Is it possible to use a local plugin directory with a docker install?
Problem with development on Windows with Docker and mounted volume
[Resolved] Recent change breaks connectivity in Docker (+ non-Docker)
How might we better structure #howto?
Apple M1 for discourse development
How to open via internal IP?
Fast, efficient plugin development with Docker dev install (Windows WSL2)
How do I install a stable version of Discourse on Docker locally?
Backup fails on localhost with docker
How do I install a stable version of Discourse on Docker locally?
Problems with understanding the development of Discourse
Need to create custom static page as home page
Docker new licensing
Install Discourse Docker on Ubuntu 11
Backup restore failing on clean dev docker env: FATAL: Peer authentication failed for user “postgres”
Install Discourse on macOS for development
Can't build Discourse on Ubuntu 20.10
Installing discourse for development is failing
Create, download, and restore a backup of your Discourse database
Set up a local Discourse Development Environment?
How do you install Discourse using Windows 10 Docker Desktop?
NoMethodError: undefined method `min_tags_from_required_group'
Install plugins in your non-Docker development environment
NoMethodError: undefined method `min_tags_from_required_group'
Error installing `bullseye-backports` when trying to install for Development
What I should do for migration from Cusdis to Discourse
Migrate a MyBB forum to Discourse
Local installation internal use only
Maintaining an up-to-date development environment
PG::UndefinedTable: ERROR: relation "pg_range" does not exist
Docker-compose.yml to run discourse locally
Allow subscription of predetermined length
Cannot load any images “Uncaught (in promise) no-response: no-response”
Discovery document is missing
What are the benefits of a dev environment?
Installing Discourse on windows using Docker Desktop
'Arrive at topic' info missing from email when re-sending invites
External database ENV VARs not documented (external PG Port, external Redis ENV VARs)
How to troubleshoot database errors in an outdated plugin?
Error when building: discourse does not support compiling scss/sass files via sprockets
Integration into custom auth system where emails are not unique?
Installer un environnement developpement discourse sur windows
Contributing to Discourse development
Install Discourse on Ubuntu or Debian for Development
There was an error while trying to write to `/src/Gemfile.lock`. It is likely that you need to grant write permissions for that path
Tags rearranged, triggering an extra edit
Ember addons are resolving as incorrect peer dependencies. -- fixed by removing "content-tag@3.1.0": "patches/content-tag@3.1.0.patch",
Trying to install Discourse on portainer but it's not pulling the base container
Developing Discourse using a Dev Container
Subscribe to post an ad
Postgres doesn't seem to be running when running Discourse locally using Docker
Discourse OpenID Connect (OIDC)
How can I install Discourse on Windows? Getting restarting (100) error
Dev environment: recommended way to bootstrap the first admin account without email?
Dev environment: recommended way to bootstrap the first admin account without email?
Total newbie struggling to preview the signup modal with my test theme, what am I missing?
Configure Discourse to use a separate PostgreSQL server
Installing discourse follow plugin in development (boot_dev) setup — no app.yml file
Discourse API developers docker-compose basic image
Which is the better option to self-host?
Using a launcher built docker image in docker-compose
Without any coding knowledge, is it possible to install and maintain Discourse?
I want to install a plugin for development, what should I do?
Can't uninstall on Ubuntu 18.04
Developing Discourse using a Dev Container
Using a launcher built docker image in docker-compose
Bundle install fails after adding gem "mysql2" and gem "reverse_markdown"
Issue in setup discourse on ubuntu server
`script/osx_dev` script is pretty broken
Can't set up dev environment due to cppjieba_rb failing to install
I want to install a plugin for development, what should I do?
Stuck in infinite loop in Mac terminal after source ~/.bashrc
Install on macOS – Failure: Scheduler::Defer can pause and resume
Install on macOS – Failure: Scheduler::Defer can pause and resume
Install Discourse for Development using Docker is Failed
OAuth2 and Microsoft ADFS
Migrate a phpBB3 forum to Discourse
Availability of OpenID Connect in hosted plans
Can't set up dev environment due to cppjieba_rb failing to install
Adding command line tools support for user api keys
Adding command line tools support for user api keys
Discourse redirects to the OAuth server after loading `/?authComplete=true`
Hello from Gitpod! (installing on google cloud + automated dev setup)

إعدادها سهل للغاية! شكرًا لك.

ومع ذلك، فأنا مندهش من بطء التثبيت المحلي. هل هناك طريقة لتعديل مواصفات الحاوية؟ أتوقع حدوث تباطؤ، لكن ربما ليس بهذا الوضوح…

شكرًا مجددًا.

7 إعجابات

أحاول استخدام Docker على نظام Windows 10، ولدي سؤال بخصوص الدليل. لقد قمت بتثبيت Docker وهو قادر على تشغيل حاوية Ubuntu (مع عدم تثبيت أي شيء تقريبًا داخل الحاوية). يذكر دليل Docker هذا فقط أن تقوم باستنساخ المستودع بعد ذلك، لكنني لا أستطيع فعل ذلك لأن الحاوية لا تحتوي على Git مثبتًا.

في هذه المرحلة، هل يجب أن أتبع دليل Ubuntu وأقوم بتثبيت جميع المتطلبات داخل الحاوية؟ أم يجب أن أستخدم صورة discourse_dev المشار إليها على Github؟ يبدو أن هذا الدليل يتخطى العديد من الخطوات، لكنني لم أستخدم Docker من قبل، لذا ربما أكون قد فاتني شيء ما.

4 إعجابات

أعتقد أن ما يُربكك هو أنك تحاول نسخ المستودع داخل الحاوية، بينما يجب تنفيذ أمر git clone على جهازك. لذا، إذا كان Git مثبتًا محليًا بالفعل، فأنت قريب من جعله يعمل.

3 إعجابات

في الواقع، قمت بذلك أولاً، وهو أمر جيد. إذن لدي بالفعل نسخة من المستودع على جهاز الكمبيوتر المحلي الخاص بي.

هل أملك وصولاً تلقائياً إلى نظام الملفات الخاص بالمضيف من داخل حاوية Docker؟ أعتقد أنني كنت مشوشاً جزئياً بسبب أمر d/boot_dev --init لأنني لم أكن أعرف ما المقصود بـ d/ (على سبيل المثال، لا أرى مجلداً يُسمى d في المستودع، رغم أنني أرى boot_dev).

3 إعجابات

موجود d في المستودع (انتقل لأسفل الصفحة) — إنه ليس مجلدًا بل رابطًا رمزيًا إلى bin/docker. يجب أن تحصل عليه عند استنساخ مستودع git.

لم أستخدم هذا الإعداد بشكل مكثف بنفسي، لكن فهمي هو أنك تقوم بتعديل ملفات المصدر مباشرة في نظام الملفات المضيف (الذي قمت بفحصه للتو)، وتقوم حاويات docker بتركيبه والتشغيل منه. ستقوم سكريبتات d/* بمعظم عمل إعداد docker نيابةً عنك.

6 إعجابات

شكراً على ذلك. لم أفكر حتى في النظر أبعد من المجلدات. أعتقد أن لدي معلومات كافية للقيام بمحاولة أخرى في هذا الشأن.

3 إعجابات

ما زلت أرتكب خطأً ما. بين هذا الموضوع، هنا، و هنا، لا يوضح أي منهما أمر docker الذي يجب تشغيله. لقد اعتمدت على docker run -ti -v LocalRepoPath:/src discourse/discourse_dev، الذي قام بتهيئة مجموعة كبيرة من الأشياء وربط المستودع بـ /src. لكن لا يمكنني تشغيل d/boot_dev --init لسبب ما. حتى مجرد تشغيل ls في الدليل الرئيسي للمستودع يعطيني:

ls: لا يمكن الوصول إلى 'adminjs': خطأ في الإدخال/الإخراج
ls: لا يمكن الوصول إلى 'd': خطأ في الإدخال/الإخراج
ls: لا يمكن الوصول إلى 'jsapp': خطأ في الإدخال/الإخراج

هل يعرف أحد ما الذي يحدث هنا؟

3 إعجابات

قد تكون قد بالغت في تعقيد الأمر: فالدليل الموجود في المنشور الأول يحتوي بالفعل على كل ما تحتاجه للبدء.

ستقوم أوامر d/* بكل السحر الخاص بأوامر Docker حتى لا تضطر إلى ذلك. بمجرد استنساخ المستودع، يجب أن يكون الأمران d/boot_dev --init و d/unicorn (الذين تنفذهما على المضيف) كافيين لجعل http://localhost:9292 يعمل. ستقوم هذه السكربتات باستدعاء Docker لتوليد الحاوية وتشغيلها لك. أما أمر d/shutdown_dev فسيوقفها.

إذا كنت تواجه هذه الأخطاء أثناء تصفح ملفات المستودع على المضيف، فقد يكون هناك شيء آخر خاطئ في نظام الملفات لديك. هل نفد مساحة القرص لديك ربما؟

4 إعجابات

تنهد، أفهم. ظننت أنه يجب تشغيلها داخل Docker. ومع ذلك، يبدو أن الأمر d/boot_dev --init لا يعمل على Windows في PowerShell (وهو ما أعتقد أنه السبب في أن دليل Docker هذا يذكر فقط مضيفي Mac و Ubuntu). حاولت تشغيل الأمر في نظام فرعي للينكس (الإصدار 1)، ولكن بالطبع فشل ذلك في خطوة Docker لأنني قمت بتثبيت Docker على Windows وليس على النظام الفرعي للينكس.


في الخطوة التالية، حاولت تشغيل الأمر في Git Bash لنظام Windows. لم أتمكن من تشغيل d/boot_dev --init (خطأ “d/boot_dev: هو مجلد”)، لكنني تمكنت من تشغيل bin/docker/boot_dev --init. تقدمت العملية كثيرًا، حيث تم سحب العديد من الملفات، لكنها فشلت بعد ذلك مع:

C:\Program Files\Docker\Docker\resources\bin\docker.exe: استجابة خطأ من الدائم: رفض التثبيت:
المسار المصدر “PathToRepo/data/postgres;C”
غير موجود وغير معروف لدى Docker.

تمكنت من تجاوز ذلك (أعتقد) عن طريق هروب مسار التثبيت، وفقًا لـ:
https://stackoverflow.com/questions/50608301/docker-mounted-volume-adds-c-to-end-of-windows-path-when-translating-from-linux

بعد ذلك، حصلت على هذه الرسالة:

C:\Program Files\Docker\Docker\resources\bin\docker.exe: استجابة خطأ من الدائم: فشل إنشاء وقت تشغيل OCI: container_linux.go:346: تسبب بدء عملية الحاوية في “exec: "C:/Program Files/Git/sbin/boot": stat C:/Program Files/Git/sbin/boot: لا يوجد ملف أو دليل”: غير معروف.

C:/Program Files/Git/sbin/boot لا يوجد في نظام الملفات الخاص بي، لذا أعتقد أن الخطأ ليس مفاجئًا. الشيء الوحيد الذي يذكر sbin/boot في ملف boot_dev هو هذا الجزء من أمر Docker: discourse/discourse_dev:release /sbin/boot.

وهذا هو تقريبًا ما وصلت إليه الآن… لا أعرف حقًا ما الذي يمكنني تجربته في هذه المرحلة.

3 إعجابات

أخشى أن هذا هو أقصى ما أستطيع مساعدتك به، حيث أنني غير ملم بنظام ويندوز.

ربما يتمكن @rishabh من تأكيد ما إذا كان من المفترض أن يعمل هذا على ويندوز أيضًا، وتحديث أي خطوات مفقودة لذلك (أو إضافة ملاحظة إذا لم يعمل).

3 إعجابات

@sam هل ما أحاول فعله طريقة مدعومة ولو بشكل بعيد لتشغيل Discourse لأغراض التطوير؟ في موضوع التطوير على Windows ذكرت أنك جربت ذلك، لكن الأمور لم تسر بشكل جيد حتى الآن. تعمل حاويات Ubuntu الأساسية (غير المخصصة لـ Discourse) تقنيًا، لكن الأوامر المحددة في منشور الموضوع الأصلي في هذا الموضوع لا تعمل.

لقد ذكرت لي في الأصل ما يلي:

لذلك، ما لم يكن لديك اقتراح لمساعدتي على تجاوز المشاكل التي أواجهها مع Docker على Windows، فمن الأرجح أن يكون من الأفضل لي التوقف عن الخسارة وتشغيله في آلة افتراضية Ubuntu باستخدام شيء مثل VirtualBox.

إعجابَين (2)

كثير منا يستخدم الحلقة البطيئة دون أي مشاكل. الألعاب تعمل، وSteam يعمل، وكل شيء يعمل.

أتفهم مخاوفكم هنا، لكنها حقًا ليست مشكلة كبيرة. على أي حال، إذا كان هذا الأمر مخيفًا جدًا بالنسبة لكم، فأوصي باستخدام آلة افتراضية تقليدية مثل Hyper-V أو VirtualBox. قم بتثبيت Docker فيها واستخدم إعدادات التطوير الخاصة بنا عبر Docker.

6 إعجابات

لو لم يكن هذا حاسوبي الأساسي (والوحيد)، لانضممتُ إليكم في حلقة التحديثات البطيئة، لكنني لا أستطيع المجازفة بذلك. لذا سأعتمد على آلة افتراضية تقليدية مع Docker. شكرًا مجددًا على النصيحة. آمل أن أتمكن من تشغيل شيء قريبًا.

ما الذي يكفي من مساحة القرص والذاكرة العشوائية لتخصيصها للآلة الافتراضية؟ كنت أفكر ربما في 16 جيجابايت من مساحة القرص و4 جيجابايت من الذاكرة العشوائية، لكنني أردت التحقق أولًا.

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

هذا يكفي على الأرجح، وأفضل طريقة لإيجاد الوصفة المثالية هي التجربة

6 إعجابات

حسناً، أنا قريب من جعل هذا يعمل بشكل فعلي. لدي نسخة محلية تعمل باستخدام Docker في آلة افتراضية تعمل بنظام Ubuntu. أفترض أنني يجب أن أشغّل d/boot_dev --init فقط في المرة الأولى، وبعد ذلك سأقوم بتشغيل d/boot_dev فقط. هل هذا دقيق؟ السبب في سؤالي هو أن d/unicorn يعمل عندما أدرج --init، لكنه لا يعمل عندما أغفل --init من d/boot_dev. عندما يفشل في البدء، أحصل على الخطأ:

Could not find aws-partitions-1.270.0 in any of the sources.
Run bundle install to install missing gems.

لكن عند تشغيل bundle install يفشل مع الرسالة:

actionview_precompiler-0.2.2 requires ruby version >= 2.6, which is incompatible with the current version, ruby 2.5.1p57

هل هناك إصدار محدد من Ruby يجب أن أحدث إليه؟ أم أن هناك شيئاً آخر يحدث؟


آلتي الافتراضية تعمل بنظام Ubuntu 18.04 (LTS)، وهذه المرة تمكنت من اتباع التعليمات في المنشور الأصلي مباشرة، لذا لا أعرف أين قد أكون أخطأت (إذا كان هناك خطأ ما).

إعجابَين (2)

لن تستخدم bundle install، بل ستستخدم d/bundle install لأنك تريد تثبيت الحزمة داخل الحاوية، ولا تحتاج الآلة الافتراضية إلى Ruby.

4 إعجابات

نعم، كنت أشعر بأن الأمر كذلك، لكنني لم أكن أعرف الطريقة الصحيحة لتشغيله داخل الحاوية. شكراً جزيلاً مرة أخرى على المساعدة!

إعجابَين (2)

لقد سحب أحدث إصدار من المستودع، وكالمعتاد يخبرني d/unicorn بـ “شغّل bundle install لتثبيت الجيمات المفقودة.”. ومع ذلك، هذه المرة عندما أشغّل d/bundle install أحصل على ما يلي:

جلب فهرس المصادر من https://rubygems.org/

إعادة محاولة الجلب بسبب خطأ (2/4): Bundler::HTTPError تعذر جلب المواصفات من https://rubygems.org/

إعادة محاولة الجلب بسبب خطأ (3/4): Bundler::HTTPError تعذر جلب المواصفات من https://rubygems.org/

إعادة محاولة الجلب بسبب خطأ (4/4): Bundler::HTTPError تعذر جلب المواصفات من https://rubygems.org/

تعذر جلب المواصفات من https://rubygems.org/

لذا لا يمكنني تشغيل Discourse حاليًا. ليس لدي أي فكرة عما إذا كان هذا مرتبطًا بالسحب (مباشرة أو بشكل غير مباشر) أم أنه شيء غير مرتبط تمامًا. لم يكن البحث عن الخطأ في Google مفيدًا بشكل خاص، لذا لا أعرف كيف أواصل.

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

هل تمكنت من الوصول إلى rubygems.org؟

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