هل هناك ميزة لتثبيت Docker؟

أعلم أن الوثائق والعديد من المواضيع هنا تقترح أن Docker هي الطريقة الوحيدة (الجيدة) للمضي قدمًا، لكنني أردت معرفة السبب. حصلت على صندوق Debian Amazon Lightsail بسعر 3.50 دولار شهريًا، وقمت بتشغيل Discourse في 20 دقيقة. استخدمت rbenv لتثبيت Ruby 3.2.2، وكان الباقي سهلاً. وجدت أن Discourse لا يتبع اصطلاحات Rails أيضًا، مثل سبب وجود ./config/discourse.conf و GlobalSetting فوق config/environments/production.rb التي تحدد هذه القيم - هل هذا ما تنتهي إليه صور Docker بإنشائه (أيضًا sidekiq.yml لا يحتوي على قيم بيئة الإنتاج).

هل هناك ميزة لتشغيل هذا على Docker؟ أتساءل عما إذا كنت أفتقد شيئًا ما…

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

4 إعجابات

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

يحتاج المرء إلى Ruby 3.2.x (عبر rbenv، لذلك لن تكون تحت رحمة نظام التشغيل)، و Node v16.19.x/npm 8.19.x، و PostgreSQL (ربما أي إصدار فوق 11).

  1. لقد أنشأت ملف .ruby-version، والذي حدد إصدار Ruby الذي قمت بتثبيته (3.2.2).
  2. قمت بتشغيل bundle وتم بناء جميع الجواهر (gems) بشكل جيد.
  3. داخل PostgreSQL نفسه، كان عليّ إعداد قاعدة البيانات:
CREATE DATABASE discourse;
CREATE USER discourse WITH password 'fA....';
GRANT ALL PRIVILEGES ON DATABASE discourse TO discourse;
\c discourse
GRANT ALL ON SCHEMA public TO discourse;

لقد فوجئت بأن database.yml لا يأخذ متغيرات production (يبدو هذا مخالفًا جدًا لعرف Rails). كانت جميع إعدادات قاعدة البيانات في config/discourse.conf، جنبًا إلى جنب مع قيم SMTP. قمت بملء تلك.

ثم قمت بتشغيل ترحيلات قاعدة البيانات:

bundle exec rails db:migrate

كل شيء سار على ما يرام، ونجحت الترحيلات.

  1. في config/sidekiq.yml، بعد قسم development، أضفت:
production:
  :concurrency: 2
  :queues:
    - [critical, 2]
    - [default, 1]
    - [low]
    - [ultra_low]
  1. ثم قم بتحرير lib/tasks/assets.rake، حوالي السطر 151، أضف:
harmony: true,

بحيث يبدو كالتالي:

  uglified, map =
    Uglifier.new(
      comments: :none,
      harmony: true,
      source_map: {
        filename: File.basename(from),
        output_filename: File.basename(to),
      },
    ).comp

وقم بتثبيت حزم npm التالية:

npm install terser
npm install -g uglify-js@"<3"

ثم قم ببناء الأصول:

RAILS_ENV=production bundle exec rake assets:precompile

وها هي! الآن يجب أن يعمل هذا:

bundle exec sidekiq -e production -C config/sidekiq.yml
bundle exec puma --config config/puma.rb -e production

هذا يشغل خادم الويب sidekiq و puma.

(أرخص بكثير، والمزيد من التحكم، على سبيل المثال، لدي Ruby 3.2.2 يعمل بالفعل). قضيت معظم الوقت في التعامل مع المشكلات (مثل البحث عن قيم production لأنها لم تكن في المكان الذي ينبغي أن تكون فيه). ولكن بخلاف ذلك، كان الأمر سريعًا جدًا!

إعجابَين (2)

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

كلما طالت مدة تعطل الموقع، زادت خسارة السمعة وخسارة الأعضاء التي قد يتعرض لها موقعك.

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

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