متغيرات البيئة لقاعدة البيانات الخارجية غير موثقة (منفذ PG الخارجي، متغيرات بيئة Redis الخارجية)

Greetings,

I can’t post in the Sysadmin category.

I can configure an external DB using:

DISCOURSE_DB_USERNAME
DISCOURSE_DB_PASSWORD
DISCOURSE_DB_HOST
DISCOURSE_DB_NAME

But I couldn’t find:

DISCOURSE_DB_PORT (External PostgreSQL Port)
DISCOURSE_REDIS_HOST
DISCOURSE_REDIS_USERNAME
DISCOURSE_REDIS_PASSWORD
DISCOURSE_REDIS_NAME (which database, 0,1,2,3, etc)

I’m an engineer at Compose/IBM and I’m attempting to setup Discourse using our production-ready, replicated databases. I’d like to run a web_only instance with external Redis & PostgreSQL

I also couldn’t find configuration parameters for failover support:

We supply two URIs “portals” for connection failover. I don’t have a ton of time to dig through the Discourse codebase and see which client driver you are using.

Lastly, we use SSL (using valid LE certs) for both Redis and PostgreSQL. Is your app configured for SSL support?

Thanks!

P.S. I’m reaching out personally, not officially from IBM/Compose. I enjoy Discourse and have been considering writing an article on how to configure Discourse using our services:

You can see all of the possible global vars documented at:

You can pass in config from your environment, all the settings below are available.
Append DISCOURSE_ and upper case the setting in ENV. For example:
to pass in db_timeout of 200 you would use DISCOURSE_DB_TIMEOUT=200

أقوم بذلك لتطبيق docker-compose، وعلى الرغم من تصدير متغير البيئة DISCOURSE_REDIS_HOST (كـ redis)، إلا أنه لا يلتزم بهذا المتغير:

name, 'name', name),\n  updated_at,\n  created_at,\n  updated_at\nFROM facebook_user_infos\n")
discourse_1_9cc0cea436ca | rake aborted!
discourse_1_9cc0cea436ca | Redis::CannotConnectError: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
discourse_1_9cc0cea436ca | /usr/local/bundle/gems/redis-4.0.1/lib/redis/client.rb:344:in `rescue in establish_connection'

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

لست متأكدًا تمامًا من سبب وجود هذه المشكلة، لكنك ستواجه ألمًا أقل بكثير إذا اتبعت هذه الطريقة الموصى بها: Install Discourse for development using Docker

انظر أيضًا: Can Discourse ship frequent Docker images that do not need to be bootstrapped? - #6 by fbender

ربما أقرأ الكود بشكل خاطئ، لكن سكريبت bin/docker/boot_dev --init لا يزال يتفاعل مع قاعدة البيانات والاعتمادات على المضيف.

بالنسبة للموضوع الثاني، ما الذي تشير إليّ تحديداً للنظر فيه؟ يحتوي على 151 مشاركة. شكراً!

يتم احترام هذا المتغير بشكل صحيح في بيئة الإنتاج.

أما في بيئة التطوير، فإننا نبحث افتراضيًا عن مثيل محلي، وهو ما يعمل بشكل ممتاز إذا اتبعت إحدى بيئات التطوير المدعومة.

أقوم بتشغيله مع متغير البيئة production، لكنه لم يُحترم. كحل بديل، قمت بتعديل الإعدادات باستخدام sed، وقد نجح ذلك. لا تزال هناك العديد من المشاكل الأخرى التي أعمل على حلها.

على سبيل المثال، أبدأ بالتصريح صراحةً بعدم تشغيل الخدمة في الخلفية (لإبقاء الحاوية قيد التشغيل):

bundle exec rails s --port 3000 --no-daemon --environment=production --binding 0.0.0.0

ولكن يبدو أنها تقرر القيام بذلك على أي حال! ومن المنطقي بعد ذلك أن تغادر الحاوية.

discourse_1_f60e0e3f1186 | [358] Puma starting in cluster mode...
discourse_1_f60e0e3f1186 | [358] * Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
discourse_1_f60e0e3f1186 | [358] * Min threads: 8, max threads: 32
discourse_1_f60e0e3f1186 | [358] * Environment: production
discourse_1_f60e0e3f1186 | [358] * Process workers: 4
discourse_1_f60e0e3f1186 | [358] * Preloading application
discourse_1_f60e0e3f1186 | [358] * Listening on tcp://0.0.0.0:3000
discourse_1_f60e0e3f1186 | [358] * Daemonizing...
docker-compose-discourse_discourse_1_f60e0e3f1186 exited with code 0

من الغريب وجود حجج وتعليمات ومتغيرات بيئة لأشياء معينة، لكنها لا تُحترم فعليًا. من الصعب معرفة ما يجب الوثوق به.

هل تريد بيئة إنتاج أم بيئة تطوير؟

لماذا لا يمكنني تشغيل بيئة إنتاج واستخدامها للتطوير؟ وماذا يفعل sidekiq؟ هل يجب تشغيله بمفرده لبدء التطبيق؟ على سبيل المثال، لدي حاوية أخرى (نفس الأساس) مع أمر بدء:

bundle exec sidekiq

وهو يعتمد على حاوية discourse الرئيسية (نقل قاعدة البيانات، تجميع الملفات الثابتة مسبقًا، إلخ). يبدو أن كل شيء يعمل، لكن لا توجد تطبيق ويب.

يسعدني قضاء وقت أطول في هذا الأمر، بشرط أن لم أبدأ أي شيء بعد، لكنني بحاجة إلى حل لا يتطلب مني تثبيت قاعدة بيانات على مضيفي. باستخدام الحاويات، لا ينبغي أن نضطر إلى فعل ذلك. مرة أخرى، يبدو أن تطبيق Compose هنا GitHub - vsoch/discourse-compose: docker-compose with discourse · GitHub يعمل بشكل صحيح (لا توجد أخطاء في أي سجلات)، ومع ذلك لا توجد أي تطبيق.

لأنها تخزن مؤقتًا وتُجمِّع مسبقًا مجموعة من الأشياء تجعل التطوير مستحيلًا تقريبًا.

الدليل Install Discourse for development using Docker الذي رابته أعلاه يفعل ذلك بالضبط.

يقوم Sidekiq بوضع المهام في طابور ومعالجتها لمعالجتها لاحقًا.

ما الذي أفتقده؟ يتم تشغيل الأمر الخاص بـ --init على المضيف:

حسناً، لكن لنفترض أنني أقوم بالتجميع المسبق على أي حال (فهذا يستغرق وقتًا طويلاً!) وأريد بدء الخادم. لماذا لا يعمل؟

حسناً، استسلمت وقمت بتشغيل أمر --init. يمكنني تأكيد أن الحاوية تعمل:

CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS                                                                                            NAMES
d2254e1374f5        discourse/discourse_dev:release   "/sbin/boot"        24 minutes ago      Up 24 minutes       0.0.0.0:1080->1080/tcp, 0.0.0.0:3000->3000/tcp, 0.0.0.0:9292->9292/tcp, 0.0.0.0:9405->9405/tcp   discourse_dev

لكنني لا أرى أي سجل لها على أي منفذ. جربت متصفحين مختلفين، و localhost، و 127.0.0.1، و 0.0.0.0، ولا توجد أي تطبيق ويب. الخطأ هو ERR_CONNECTION_RESET. لا أرى أي شيء في iptables قد يمنع هذا:

Chain DOCKER (3 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:9405
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:9292
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:3000
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:socks

تحديث 10 يوليو 2019

شكراً للجميع على مساعدتكم - كانت المشكلة هي الحاجة إلى إصدار أمر “unicorn”، والآن تعمل كل شيء بشكل صحيح. كما اضطررت أيضاً إلى تشغيل rake admin:create في أمر البدء، وإلا فإنه يطلب تأكيد عبر البريد الإلكتروني (المستودع الكامل هنا). يعمل discourse_dev أيضاً.