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

من جهاز Ubuntu الافتراضي الخاص بي، تمكنت من عمل ping لـ rubygems.org. لا أعرف ما إذا كان هناك طريقة للتحقق مما إذا كان يمكن لحاوية Docker القيام بذلك. أعتقد أنني قمت بعمل ping للإصدار HTTP فقط، وليس HTTPS، على الرغم من ذلك. أذكر ذلك في حال كانت المشكلة مرتبطة بذلك. (أحد الصفحات التي شاهدتها عند البحث على جوجل اقترح تغيير HTTPS إلى HTTP، لكن لا يمكنني فعل ذلك لأن السلوك المحدد موجود في مكان ما داخل حاوية Docker.)

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

لقد جربت خيارات macOS.

أولاً، استخدمت الخيار 2 وهو Homebrew، لكن واجهت بعض المشاكل لأن بعض التبعية لم يتم تثبيتها باستخدام الأمر المذكور في هذا الدليل. ساعدني هذا الرابط في التقدم قليلاً: https://medium.com/@yutafujii_59175/a-complete-one-by-one-guide-to-install-docker-on-your-mac-os-using-homebrew-e818eb4cfc3.

لقد علقت الآن في الخطوة 2 d/boot_dev --init:

Migrating database...

rake aborted!

PG::ConnectionBad: could not connect to server: No such file or directory

Is the server running locally and accepting

connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

/src/lib/site_settings/db_provider.rb:61:in `table_exists?'

/src/lib/site_settings/db_provider.rb:16:in `all'

/src/lib/site_settings/defaults_provider.rb:29:in `db_all'

/src/lib/site_setting_extension.rb:277:in `block in refresh!'

/src/lib/site_setting_extension.rb:274:in `synchronize'

/src/lib/site_setting_extension.rb:274:in `refresh!'

/src/lib/site_setting_extension.rb:495:in `block in setup_methods'

/src/config/initializers/004-message_bus.rb:120:in `<main>'

/src/config/environment.rb:7:in `<main>'

/usr/local/bin/bundle:23:in `load'

/usr/local/bin/bundle:23:in `<main>'

Tasks: TOP => db:migrate => db:load_config => environment

(See full trace by running task with --trace)

ثم قمت بتحميل ملف .dmg، ولكن بما أنني جديد على Docker، فلا أعرف ما الذي يجب فعله بعد ذلك. سيكون من الرائع الحصول على وصف أكثر تفصيلاً لخيار macOS.

شكراً لك.

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

في نظام macOS، بمجرد تثبيت Docker من ملف .dmg، تأكد من أنه قيد التشغيل — يجب أن تظهر أيقونة على شريط أدوات macOS يمكنك استخدامها للتحقق من حالته. ثم اتبع الخطوات حرفيًا كما وردت في المنشور الأول (استنساخ المستودع، وما إلى ذلك). اكتب هنا إذا واجهت مشكلة عند اتباع هذا المسار.

ملاحظة: إذا كنت قد قمت بتثبيت Docker باستخدام Homebrew سابقًا، فقد يكون من الجيد إلغاء تثبيت تلك النسخة أولاً أو على الأقل التأكد من أنها غير قيد التشغيل. أنا لم أقم بتثبيت Docker عبر Homebrew من قبل، لذا لا يمكنني تقديم نصيحة في هذا الشأن.

إعجابَين (2)

شكرًا لك.

لقد استخدمت الأيقونة وفتحت لوحة تحكم Docker. لم أجد أي حاويات تعمل هناك، لكنني رأيت عبر سطر الأوامر عدة حاويات قيد التشغيل. كنت أتساءل هل يجب علي تسجيل الدخول لاستخدام لوحة تحكم Docker؟ أم أن هذا السلوك يحدث بسبب وجود إصدارات متعددة من Docker مُثبّتة عبر Homebrew و Desktop (.dmg)؟

في الوقت نفسه، تمكنت من إعداد Discourse على DigitalOcean، وهو يعمل دون مشاكل ويلبي احتياجاتي.

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

ملف DMG يقوم بتثبيت Docker وليس Discourse. لن يضيف أي حاويات في البداية.

من هناك يمكنك اتباع دليل Docker.

إعجابَين (2)

عند تشغيل الأمر أعلاه (على نظام Mac)، أواجه الخطأ التالي:

حدث خطأ أثناء تثبيت cppjieba_rb (0.3.3)، ولا يمكن لـ Bundler المتابعة.

تأكد من نجاح الأمر `gem install cppjieba_rb -v '0.3.3' --source 'https://rubygems.org/'`

قبل استخدام bundler.

هل لديك أي اقتراحات؟ لا أفهم بالضبط ما هي المشكلة. كما أن تثبيت الـ gem بشكل منفصل لا يعمل أيضًا (حتى مع استخدام sudo).

أيضًا، لماذا يجب تثبيت الـ gems عندما أعمل على صورة Docker؟ يفترض أن تكون مثبتة مسبقًا بالكامل، أليس كذلك؟

تحديث: تم الحل

لقد قمت بالاستنساخ إلى ~/repos/discourse بينما كان يجب أن يكون إلى ~/discourse. الآن يعمل بشكل مثالي.

3 إعجابات

إذا حصلت على هذه الرسالة عند تشغيل d/unicorn:

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

فيمكنك إصلاحها بتشغيل الأمر التالي:

docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "cd /src && USER=discourse RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 LD_PRELOAD=/usr/lib/libjemalloc.so RAILS_ENV=${RAILS_ENV:=development} bundle install"

وبعد ذلك سيعمل d/boot_dev بنجاح.

3 إعجابات

أبسط

d/boot_dev
d/bundle install

لدينا أدوات مساعدة لجميع المهام المعتادة.

5 إعجابات

في المنشور الأصلي، يُذكر:

يدعم تدفق عمل تطوير Docker الروابط الرمزية داخل مجلد plugins/

إلى أي شيء نقوم بربط مجلد الإضافات في هذا السياق؟ شكرًا لكم!

إعجاب واحد (1)
cd plugins
ln -s /full/path/to/your/plugin .
ln -s ~/src/my-great-plugin # على سبيل المثال
6 إعجابات

شكرًا لك، المقصود هو إنشاء رابط رمزي إلى دليل الإضافات في هذا السياق.

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

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

4 إعجابات

مرحبًا، أنا أستخدم هذا الدليل وهو يعمل بشكل جيد، لكن قلقي هو أنه كلما قمت بتشغيل d/boot_dev يبدأ في تنزيل ملفات مختلفة. كيف يمكنني تنزيل الملفات الضرورية مرة واحدة فقط والاحتفاظ بها للتشغيل التالي؟ نظام التشغيل الخاص بي هو أوبونتو 20.04

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

حاولت التثبيت على نظام Mint 20 جديد. Docker متوفر:

terrapop@terrapop:/var$ docker version
Client: Docker Engine - Community
 Version:           19.03.12

terrapop@terrapop:/var/discourse$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
     Active: active (running) since Mon 2020-08-24 19:03:48 CEST; 31min ago

ثم قمت باستنساخ Discourse:

sudo git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse
cd /var/discourse

ومع ذلك، يؤدي تشغيل d/boot_dev --init إلى:

d/boot_dev --init

bash: d/boot_dev: لا يوجد ملف أو دليل

هل هناك أي شخص؟

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

تحديث: لقد أضفت الآن مفاتيح واجهة برمجة التطبيقات الخاصة بـ SendGrid إلى ملف app.yml وقمت بإعداد التطبيق عبر ./launcher، والآن يعمل على localhost. هل يمكن أن تكون أوامر d/ المذكورة في المنشور الأصلي قديمة؟ مع ذلك، لا أفهم الأمر. التطبيق يعمل الآن داخل Docker على جهاز Ubuntu (Mint) الخاص بي على localhost تمامًا كما يعمل على بيئة الاختبار في Digital Ocean. نريد التطوير على localhost مع تشغيل التطبيق عبر Docker وروابط رمزية للإضافات، لكنني لست متأكدًا مما إذا كان جاهزًا كما ينبغي لأنني لا أستطيع تنفيذ أوامر d/ بأي طريقة. هل يمكن لأي شخص المساعدة؟ شكرًا.

تحديث: الخطأ مني. لقد استخدمت رابط Git للإنتاج:

git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse

بدلاً من:

git clone GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub

:cowboy_hat_face:

ومع ذلك…

الآن أواجه مشاكل جديدة. يمكنني فقط استنساخ الملفات إلى /var كمستخدم خارق (root) على Ubuntu Mint 20 (مع معرف المستخدم UID 0). لذا، عند الاستنساخ وتشغيل d/boot_dev --init، يتم تنزيل كل شيء والبدء بشكل صحيح، لكن في مرحلة لاحقة، يُظهر السكربت خطأ في الصلاحيات لأنه يتوقع تنفيذ شيء ما بمعرف المستخدم 1000، وهو المستخدم الأول الذي تم إنشاؤه على Mint، أي حسابي الشخصي (terrapop)، وليس root. كيف يمكن تجاوز هذه المشكلة؟

الحل: أبسط مما ظننت. فقط قم بإنشاء مجلد www جديد داخل var. ثم غيّر ملكية المجلد (chown) والصلاحيات (chmod) إلى المستخدم الأول على Mint، وواصل كما هو موضح في منشورات المنشور الأصلي. الآن يعمل بنجاح. سعيد.

إعجابَين (2)

لسبب ما، لم تعمل الروابط الرمزية (symlinks) إلى دلائل مصدر الإضافات الخاصة بي، واضطررت إلى نقل/نسخ دلائل مصدر الإضافات يدويًا إلى دليل plugins لتظهر في /admin/plugins بعد إعادة تشغيل حاوية Docker.

ربما كان هناك تغيير في طريقة دعم Docker للروابط الرمزية؟ أنا أستخدم docker-ce 19.03.12 على نظام Ubuntu.

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

لقد واجهتُ هذا أيضًا مؤخرًا مع Docker Desktop لنظام macOS.

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

اتبعتُ نفس الخطوات على قطرة (Droplet) بقيمة 5 دولارات من DigitalOcean. سارت كل الأمور على ما يرام. الآن، كيف أعرض موقعي لكي أتمكن من الوصول إليه؟

ملاحظة: يعمل الأمر مع ngrok. لكنه لا يزال لا يعمل مع خادم عكسي (reverse proxy) لـ nginx على المنفذ 9292

شكرًا لك على هذا. يمكنك القيام بذلك على الخادم وتجنب إعداد خادم عكسي لـ nginx. أنا أستمتع بإعداد d/و Docker + VS Code عن بُعد :slight_smile:

استخدم d/unicorn -D لتشغيل Unicorn كخدمة خلفية (daemon) بحيث تظل واجهة الأوامر قابلة للاستخدام بعد بدء تشغيل الخادم.

أيضًا، تحتاج إلى قطرة (Droplet) من DigitalOcean بقيمة 10 دولارات على الأقل.

3 إعجابات

أنا أعمل على نظام Mac باستخدام zsh (على iTerm2)، وعندما أحاول استخدام رابط رمزي لتطوير الإضافات، أعلق مع هذه الأخطاء:

readlink: خيار غير قانوني -- f
الاستخدام: readlink [-n] [ملف ...]

السبب في ذلك هو أن تنفيذ أمر readlink على نظام Mac يختلف قليلاً عن نسخة GNU.

أسهل طريقة لحل هذه المشكلة هي القيام بالتالي:

# brew install coreutils
# ln -s "$(which greadlink)" "$(dirname "$(which greadlink)")/readlink"

هذا سيمكنك من استخدام إصدار متوافق من أمر readlink.

تذكّر أنه يجب أن يكون لديك قيمة dirname "$(which greadlink)" في متغير البيئة PATH في موقع يسبق /usr/bin (حيث يوجد عادةً أمر readlink الأصلي). في حالتي، يكون PATH شيئًا مثل /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...، والرابط الرمزي إلى greadlink موجود في /usr/local/bin.

المرجع: Fixing "readlink: illegal option -- f" error on a Mac

5 إعجابات

لتشغيل مجموعة اختبار ملحق واحد، يمكنك القيام بذلك بهذه الطريقة:

# d/rake "plugin:spec[PLUGIN_NAME]"
إعجاب واحد (1)