Redis مقبس يونكس، تثبيت أوبونتو

أحاول تثبيت Discourse، وقمت بإعداد قاعدة البيانات و Redis و SMTP. بالنسبة لقاعدة بيانات PostgreSQL، لم تواجه أي مشكلة مع منفذ الاتصال Unix، لكن يبدو أن Redis يشكو من مشكلة.

إعدادات Redis:

sudo sed -i 's/^# unixsocket /unixsocket /' /etc/redis/redis.conf
sudo sed -i 's/^# unixsocketp.*/unixsocketperm 770/' /etc/redis/redis.conf
sudo sed -i 's/^# maxmemory <bytes>/maxmemory 1024mb/' /etc/redis/redis.conf
sudo sed -i 's/^# maxmemory-policy noeviction/maxmemory-policy allkeys-lru/' /etc/redis/redis.conf
sudo cat /etc/redis/redis.conf | grep "^maxmemory\|^unixsocket"

تهيئة منفذ اتصال Redis:
nano /var/www/discourse/config/discourse.conf
redis_host = "/var/run/redis/redis-server.sock"

أثناء تثبيت Discourse:

RAILS_ENV=production /root/.rbenv/versions/2.7.2/bin/bundle exec rake db:migrate

فشل في الإبلاغ عن الخطأ: خطأ في الاتصال بـ Redis على localhost:///var/run/redis/redis-server.sock:6379 (SocketError) 2 خطأ في الاتصال بـ Redis على localhost:///var/run/redis/redis-server.sock:6379 (SocketError
) فشل الاشتراك، إعادة الاتصال خلال ثانية واحدة. قائمة الاستدعاء ["/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:362:in `rescue in establish_connection'", "/var/www/discourse/vendor/b
undle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:343:in `establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:107:in `block in connect'", "/var/www/disc
ourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:308:in `with_reconnect'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:106:in `connect'", "/var/www/disco
urse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:289:in `with_socket_timeout'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:139:in `call_loop'", "/var/www
/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/subscribe.rb:44:in `subscription'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/subscribe.rb:14:in `subscribe'", "/var/
www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:3506:in `_subscription'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:2326:in `block in subscribe'", "/var/www
/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:69:in `block in synchronize'", "/root/.rbenv/versions/2.7.2/lib/ruby/2.7.0/monitor.rb:202:in `synchronize'", "/root/.rbenv/versions/2.7.2/lib/ru
by/2.7.0/monitor.rb:202:in `mon_synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:69:in `synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/
redis.rb:2325:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.1/lib/message_bus/backends/redis.rb:287:in `global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems
/message_bus-3.3.1/lib/message_bus.rb:754:in `global_subscribe_thread'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.1/lib/message_bus.rb:702:in `block in new_subscriber_thread'"]
rake aborted!
Redis::CannotConnectError: خطأ في الاتصال بـ Redis على localhost:///var/run/redis/redis-server.sock:6379 (SocketError)
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:362:in `rescue in establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:343:in `establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:107:in `block in connect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:308:in `with_reconnect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:106:in `connect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:381:in `ensure_connected'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:233:in `block in process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:320:in `logging'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:232:in `process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:126:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:557:in `block in del'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:69:in `block in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:69:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:556:in `del'
/var/www/discourse/lib/discourse_redis.rb:81:in `block in del'
/var/www/discourse/lib/discourse_redis.rb:29:in `ignore_readonly'
/var/www/discourse/lib/discourse_redis.rb:79:in `del'
/var/www/discourse/lib/cache.rb:73:in `delete'

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

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

شكرًا لك على الرد.

فقط للتوضيح، لقد أصبحت جاهزًا تمامًا ويعمل كل شيء، لكنني اضطررت إلى تعيين مضيف Redis إلى “localhost” لأن الاتصال بـ Redis عبر منفذ Unix لم ينجح.

لقد اتبعت هذا الدليل: Install Discourse Forum on Ubuntu 18.04 Without Docker
وبما أن الدليل قديم بعض الشيء، فقد اضطررت إلى إجراء بعض التعديلات هنا وهناك، لكنني على دراية جيدة بنظام Linux لذا تمكنت من التعامل معه دون مشكلة.

تثبيتي يعمل على حاوية LXC من Proxmox تشغل Ubuntu 20.04.

لا أجد العديد من المراجع عبر الإنترنت حول استخدام Redis عبر منفذ Unix، وأتساءل عما إذا كان ذلك جديدًا بعض الشيء لـ Redis. لقد وجدت رابطًا، لكن يبدو أنهم يستخدمون Docker وأنا لا أفعل ذلك، لذا فهو غير قابل للتطبيق مباشرة: Discourse PR for redis.socketed.template.yml - Discourse System Administration - Unix Linux Community

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

في هذه الحالة، ستعتمد إلى حد كبير على نفسك، حيث أن دعم التثبيت القياسي الرسمي لـ Discourse هو الوحيد المدعوم هنا.

أعتقد أن تثبيت أو صيانة مثيل إنتاجي لا يستخدم Docker سيكون أمرًا صعبًا نسبيًا. فهناك عدة نقاط معقدة في التفاعل بين nginx وDiscourse، وسيكون من الصعب إدارتها دون حاوية Docker التي يقدمونها، لكن أي شيء ممكن، أعتقد.

نعم، لحسن الحظ، يقدمون ملف تكوين nginx عينة.

/var/www/discourse/config/nginx.sample.conf

من خلال ما أقرأه، حتى صورة docker لا تدعم Redis عبر منفذ Unix بعد.

من غير المرجح أن يتغير ذلك. إذا كانت القالب الحالي لا يدعم استخدام منفذ (socket)، فهذا يعني أن CDCK لا تستخدم منفذ Redis في استضافتهم أو في تثبيت Docker المدعوم لديهم.

لست متأكدًا من المشكلة التي تحاول حلها بعدم استخدام تكوين ./launcher و docker المدعوم، لكنك على الأرجح ستواجه العديد من المشاكل الأخرى أيضًا.

لست متأكدًا مما إذا كنت قد استخدمت Proxmox من قبل، لكنني أعتبره رائعًا! يمكنني تسجيل الدخول إلى واجهة الويب وإنشاء نسخة احتياطية بنقرة واحدة، ثم إجراء تعديلات، وإذا حدث خطأ ما، أختار النسخة الاحتياطية وأضغط على استعادة.

وعلاوة على ذلك، تحصل على أداء أفضل بكثير من حاوية LXC مقارنة بصورة Docker، فلا يوجد مقارنة بينهما.

لست أقول إن Docker سيء، لأنكما أشرتم إلى أنه يجعل الإعداد أسهل بكثير.

أراهن أنه كان ممتازًا في الأشياء التي استخدمته من أجلها!

أنا متأكد تقريبًا من أن الناس قاموا بهذه المقارنة، وأن عدد الصور التي تعمل على Docker يفوق عدد الصور التي تعمل على LXC بمقدار 100-1000 مرة (وقد استخدمت LXC مرة واحدة في الماضي).

أنا لا أقول إن Proxmox سيء، ولكن إذا كنت تريد إعداد Discourse وصيانته بسهولة، فستستخدم Docker. كإطار مرجعي، لو طلبت المساعدة في Marketplace بميزانية تقل عن 1000 دولار، فلن أرد.

الهدف من الموضوع كان السؤال عن الوضع الحالي لـ Redis Unix Socket، وليس النقاش حول ما إذا كان LXC أو Docker أكثر ملاءمة لـ Discourse. لقد ذكرت فقط سبب عدم استخدامي لـ Docker لأنك بدوت مهتمًا بذلك. بالنسبة للشخص العادي، سيفوز Docker في كل مرة لأنه بسيط. هذا هو السبب أيضًا في أن العديد من التطبيقات استخدمت MySQL بدلاً من PostgreSQL لفترة طويلة. لكنني أحب PostgreSQL حقًا.

حتى أواجه نوعًا من المشاكل المدمرة، سألتزم بلا شك بـ LXC، فهو يعمل بشكل رائع! كما لا يمكنني الموافقة أكثر على أنه إذا كنت تعتقد أنك قد تحتاج إلى دعم خارجي، فمن الأفضل أن تلتزم بالقيم الافتراضية الموصى بها. أنا شخصيًا لدي 20 خدمة مختلفة، كل منها في حاوية LXC خاصة به، تعمل جميعها على عقدة Proxmox واحدة، وتعمل جميعها بشكل ممتاز، وهذا مجرد عقدة واحدة في مجموعة Proxmox. النسخ الاحتياطي الآلي، والمراقبة، والهجرة بين العقد في المجموعة، كل هذه أشياء رائعة :slight_smile:

هل ذكرت أن التثبيت سار بسلاسة؟ حتى الآن، أنا أحب Discourse، باستثناء الحاجة إلى استخدام localhost لـ Redis بدلاً من Unix Socket، لم أواجه أي مشاكل، وسأحاول التذكير بنشر تحديث بعد بضعة أشهر لأخبركم إذا كان الأمر لا يزال كذلك :wink:

إعجابَين (2)

ها! لا! رائع! سعيد لأنك تمكنت من حل المشكلة! يبدو أنه إذا كنت مستعدًا للعيش مع localhost لـ redis، فستكون خاليًا من المتاعب في المستقبل.

أعتقد أنه usermod -aG redis discourse أو بدلاً من ذلك unixsocketperm 777 حتى يتمتع unicorn بالأذونات اللازمة للوصول إلى المقبس. تأكد أيضًا من أن الدليل الذي سيتم إنشاء المقبس فيه موجود وأن المستخدم redis هو مالكه. ومع ذلك، فإن حزمة redis-server الشائعة المستندة إلى خدمة systemd في Ubuntu تضمن ذلك.