استخدام Chef-solo لتكوين تطبيق Django على Ubuntu

هناك العديد من الطرق لأتمتة عملية إعداد المربع وتكوينه. لأي سبب من الأسباب ، إذا كان نظامنا بالكامل في هذه المرحلة يتألف من مربع واحد فقط ، فإن إعداد بنية تحتية كاملة لـ SCM (إدارة تكوين البرامج) هو مبالغة. تعد برامج نصية Shell أحد الخيارات ، ولكن يمكننا أيضًا استخدام نسخة مجردة من SCM والتي تتوفر في عدد قليل من الأدوات الموجودة. يعد Chef أحد الخيارات الشائعة و "chef-solo" هو وضع التكوين المستقل لـ Chef حيث لا نحتاج إلى عقدة إضافية لتكون بمثابة "خادم الشيف". كل ما تحتاجه هو عنوان URL أو مسار لحزمة tarball التي تحتوي على كتب الطهاة. مقارنة بالنصوص البرمجية ، يعتبر هذا النوع من النهج أكثر تعبيراً وفعالية خارج الصندوق وهو أيضاً مقدمة جيدة لبدء عمليات SCMs أو IaC (البنية التحتية ككود).

بعض الفوائد الأخرى لاستخدام chef-solo:

  • سهولة التركيب: استخدم كتب الطبخ المجتمعية من سوبر ماركت الشيف أو أماكن أخرى.
  • مصدر مجاني ومفتوح ؛ مرخص بموجب ترخيص Apache 2.0 المتساهل.
  • الوصول إلى بقية النظام البيئي الخاص بشيف (InSpec و ChefSpec و Cookstyle و Foodcritic و chef-shell وما إلى ذلك)
  • يمكن تكييف كتب الطبخ والوصفات لاحقًا مع وضع العميل / الخادم.

وبعض السلبيات:

  • بعض كتب الطهي المجتمعية في سوبر ماركت الشيف عفا عليها الزمن ، مكسورة ولا تتم صيانتها.
  • لا يمكن لـ chef-solo حل التبعيات بمفردها.

تحتوي "الوصفات" الموجودة في كتاب الطبخ "chef" على DSL قائم على الياقوت يصف "الموارد" لتكون في حالة معينة على عقدة. دعنا ننتقل إلى جولة إرشادية للتعرف على بعض مفاهيم الشيف التي تنطبق أيضًا على الشيف المنفرد. هدفنا هو إعداد عقدة Ubuntu تقوم بتشغيل تطبيق ويب Python / Django باستخدام Gunicorn و NGINX.

ملاحظة: لا نطلب بالضرورة تثبيت ChefDK على "محطة عمل الشيف" (الجهاز الخاص بنا) ، على الرغم من أنه باستخدامه ، يمكننا استخدام أوامر "chef الإنشاء" للبدء بهيكل دليل لإنشاء كتب الطبخ والوصفات والمزيد. في هذه المقالة ، سنفترض أن ChefDK مثبت على محطة العمل الخاصة بنا. تم تشغيل الأوامر باستخدام الإصدار 4.7.26-1 من ChefDK.


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

إنشاء كتاب الطبخ

كتب الطهي في الطاهي هي وحدات قابلة لإعادة الاستخدام تحتوي على كل ما يلزم لدعم سيناريو التكوين. يمكن أن تحتوي كتب الطبخ على العديد من "الوصفات" و "الوصفات" تتكون في الغالب من أنماط الموارد. default.rbهي الوصفة الافتراضية التي سيتم تشغيلها عند الإشارة إلى كتاب الطبخ في قائمة التشغيل . تسمح الوصفات المختلفة بفصل المخاوف. في هذا البرنامج التعليمي ، ومع ذلك ، سنضيف جميع إعلانات الموارد في ملف وصفة رئيسي واحد ، وهو default.rb.

قم بإنشاء مجلد باسم "my-chef-project" وقم بإنشاء مجلد بداخله يسمى "كتب الطبخ". من ./my-chef-project/cookbooks/، تشغيل:

$ chef generate cookbook my-cookbook

سيبدو هيكل الدليل الآن كما يلي:

.
└── my-chef-project
└── cookbooks
└── my-cookbook
├── CHANGELOG.md
├── LICENSE
├── Policyfile.rb
├── README.md
├── chefignore
├── kitchen.yml
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb

مضيفا الحزم

الخطوة الأولى لإعداد عقدة لدينا هي تحديد الحزم التي يتطلبها تطبيقنا. تم اختيار العقدة الخاصة بنا لتكون Ubuntu ، لذا يمكننا الاعتماد على مدير حزم APT لجمع التبعيات. تثبيت الحزم التي يوفرها توزيع نظام التشغيل هو قطعة من الكعكة:

apt_update
package 'python3'
package 'python3-pip'
package 'nginx'
package 'pkg-config'
package 'libcairo2-dev'
package 'libjpeg-dev'
package 'libgif-dev'
package 'libgirepository1.0-dev'

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

ملاحظة: الحزم التالية "nginx" مطلوبة لتجميع بعض تبعيات الثعبان من خلال النقطة. قد تختلف هذه بناءً على تبعيات مشروع python / django المحددة في requirements.txt. يمكنك استخدام طريقة التجربة والخطأ لتحديد هذه الحزم التي تحتاج إلى تضمينها في كتاب الطبخ الخاص بك. للقيام بذلك ، قم بإجراء دليل sudo pip install -r requirements.txt(ملاحظة: هذا يثبت الحزم على مستوى النظام!) على جهاز أوبونتو حديثًا لمعرفة ما إذا كان يعمل بنجاح. إذا لم يكن الأمر كذلك ، يجب أن يمنحك stderr تلميحات حول الحزم المفقودة.

إنشاء مستخدمي لينكس

بمجرد الانتهاء من إضافة الحزم المطلوبة ، نحتاج إلى إنشاء مستخدم Linux غير مميز يمتلك شفرة مصدر التطبيق.

user 'bob' do
  uid 1212
  gid 'users'
  home '/home/bob'
  shell '/bin/bash'
  password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end

لاحظ أن كلمة المرور هي تنسيق تجزئة ظل مستخدم في Linux. يمكن اشتقاقها باستخدام OpenSSL:

$ openssl passwd -1 -salt alilbitof mypassword

بما في ذلك مصدر التطبيق

الآن دعونا نضيف كود مصدر تطبيق Django إلى كتاب الطبخ الخاص بنا. ضع التعليمات البرمجية المصدر داخل ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ إنشاء ./my-chef-project/cookbooks/my-cookbook/files/defaultالدليل إذا لم يكن موجودًا.

يتم وصف تعليمات نسخ هذه الملفات إلى موقع بعيد على العقدة الخاصة بنا باستخدام مورد remote_directory :

remote_directory '/home/bob/myapp' do
  source 'myapp' # This is the name of the folder containing our source code that we kept in ./my-cookbook/files/default/
  owner 'bob'
  group 'users'
  mode '0755'
  action :create
end

جذب تبعيات الثعبان

لتثبيت حزم بايثون requirements.txt، يمكننا استخدام المورد التنفيذ لتشغيل أمر تعسفي. في هذه الحالة ، نحتاج إلى تنفيذ الأمر pip install عليه:

execute 'install python dependencies' do
  command 'pip3 install -r requirements.txt'
  cwd '/home/bob/myapp'
end

ملاحظة: ضع في اعتبارك أن هذا سيتم تنفيذه حيث سيتم تثبيت المستخدم الجذر ومكتبات الثعبان على مستوى النظام. إذا تم تعيين العقدة الخاصة بنا لتشغيل تطبيق الثعبان الواحد هذا حصريًا ، فلن تكون مشكلة كبيرة. على الرغم من ذلك ، فإن الخيار الأفضل للحفاظ على نظافة الأشياء وعقلها هو العثور على كتاب طبخ المجتمع واستخدامه الذي يدير عمليات تثبيت الثعبان أو "Virtualenvs". (أو على الأقل ، اكتب سلسلة من كتل التنفيذ لتكرار ذلك). يضمن استخدام virtualenvs في python ألا تتأثر أي أدوات نظام تعتمد على python أو مشاريع أخرى من python

إعداد Gunicorn و NGINX

حان الوقت الآن لإعداد خادم Gunicorn WSGI HTTP مع NGINX كخادم وكيل عكسي. يستخدم Nginx أيضًا للتعامل مع جميع الأصول الثابتة من Django.

لربط Gunicorn كخدمة على Ubuntu ، يمكن استخدام Systemd. تم تضمين مورد systemd_unit في Chef منذ الإصدار 12.11.

systemd_unit 'gunicorn.service' do
  content({
  Unit: {
    Description: 'Django on Gunicorn',
    After: 'network.target',
  },
  Service: {
    ExecStart: '/usr/local/bin/gunicorn --workers 3 --bind localhost:8080 myapp.wsgi:application',
    User: 'bob',
    Group: 'www-data',
    WorkingDirectory: '/home/bob/myapp'
    Restart: 'always',
  },
  Install: {
    WantedBy: 'multi-user.target',
  }
  })
  action [:create, :enable, :start]
end

علينا الآن تضمين تكوين وكيل NGINX قياسي لخادم Gunicorn هذا كما هو موضح أدناه. يمكن أن يدخل هذا المقتطف ./my-cookbook/templates/nginx.conf.erb. قم بإنشاء دليل القوالب إذا لم يكن موجودًا.

ملاحظة: تدعم قوالب الشيف ملفات روبي المضمنة التي يمكن أن تحتوي على متغيرات وتعبيرات روبي وعبارات. على الرغم من أن هذا الملف يحتوي على امتداد 'erb' ، إلا أننا لم نستخدم أيًا من عبارات أو تعبيرات الياقوت. أيضًا ، من أجل البساطة ، لدينا فقط تكوين غير HTTPS nginx هنا (تذكير لطيف ؛ يرجى عدم القيام بذلك في الإنتاج!)

server {
  listen 80;
  server_name http://example.com/;

  location = /favicon.ico { access_log off; log_not_found off; }
  location /static/ {
    root /home/bob/myapp/myapp/static;
  }

  location / {
  include proxy_params;
    proxy_pass http://localhost:8080/;
  }
}

ملاحظة: هناك أيضًا بديل وتكوين أفضل ، حيث ، على سبيل المثال ، خادم Gunicorn مرتبط بمقبس مجال unix بدلاً من اتصال استرجاع TCP. من الجدير استكشاف ذلك لأسباب الأداء.

للنسخ عبر هذا التكوين إلى المجلد الممكّن للمواقع على العقدة ، استخدم مورد القالب من Chef.

template '/etc/nginx/sites-available/example.com.conf' do
  source 'nginx.conf.erb'
  owner 'root'
  group 'root'
  mode '0744'
end

يتم تنشيط التهيئة على nginx عادةً عن طريق إنشاء ارتباط رمزي يشير إلى التكوين sites-availableفي sites-enabledمجلد nginx . يمكن التصريح عن الروابط في كتب الطهي مع مورد الرابط كما هو موضح أدناه:

link '/etc/nginx/sites-enabled/example.com.conf' do
  to '/etc/nginx/sites-available/example.com.conf'
end

ولحذف ارتباط التكوين الافتراضي:

link '/etc/nginx/sites-enabled/default' do
  action :delete
end

بدء NGINX

وأخيرًا ، لتنشيط خدمة nginx:

service 'nginx' do
  action :enable
  action :start
end

قوائم التشغيل

قوائم التشغيل في الطاهي هي قائمة مرتبة من الأدوار أو الوصفات في كتاب طهي سيتم تنفيذها بالتسلسل على العقدة. لدينا كتاب طبخ واحد "my-cookbook" والوصفة "الافتراضية" بداخله التي نحتاج إلى تنفيذها في مربع Ubuntu ، لذا ./my-chef-project/runlist.jsonيجب أن تبدو قائمة runlist.json في دليل مشروعنا ( ) كما يلي:

{
  "run_list": [
    "recipe[my-cookbook::default]"
  ]
}

الخطوات النهائية

كتاب الطهي الخاص بشيف منفرد جاهز لتقديمه. حان الوقت لتوفير جهاز Ubuntu 18.04 وتثبيت ChefDK عليه:

$ ssh [email protected] 'apt-get update && yes | apt-get install curl && curl https://packages.chef.io/files/current/chefdk/4.7.45/ubuntu/18.04/chefdk_4.7.45-1_amd64.deb -o chefdk.deb && yes | dpkg -i chefdk.deb && rm chefdk.deb'

الذهاب إلى لدينا محطة الشيف ، كل ما عليك القيام به هو وضع كتب الطبخ مجلد داخل كتل القطران، ونقل أن كتل القطران جنبا إلى جنب مع runlist.jsonلالعقدة البعيدة نحن المشروطة أعلاه وتشغيل الأمر الشيف منفردا:

(يتم تشغيل الأمر أدناه داخل العقدة أو "عميل الشيف" وليس محطة عمل الشيف)

$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept

أو هنا خط واحد (يتم تشغيله من ./my-chef-project/CWD على Chef Workstation):

tar zvcf chef-solo.tar.gz ./cookbooks &&\
scp chef-solo.tar.gz runlist.json [email protected]:~/ &&\
ssh [email protected] 'chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept'

هذا هو! شاهد المخرجات القياسية الممتلئة بنشاط الشيف الذي يحاول التقريب بين العقدة وبين ما حددته في كتب الطهي. يقوم شيف سولو بتثبيت جميع الأحجار الكريمة المطلوبة لجميع كتب الطبخ. إذا نجح الأمر chef-solo ، فسيكون لدينا تطبيق Django يعمل خلف nginx في مربع Ubuntu. انتقل إلى المجال / IP لاختباره.

ملاحظة: تذكر أنه في django قد تحتاج إلى تعيين هذا المجال / ip في ALLOWED_HOSTSالقائمة في settings.py.

الرد على التغييرات

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

نصيحة: إذا تم التحكم في إصدار كتاب الطهي باستخدام git (كما ينبغي) ، فإن إحدى التوصيات الجيدة هي تعيين خطافات git لتشغيل هذه البطانة الواحدة.

استضافة تاربال (اختياري)

إذا نظرت عن كثب إلى آخر أمر chef-solo ، فلاحظ أن --recipe-urlالغرض منه هو أخذ عنوان URL. هذا يعني أنه يمكن أن يكون لديك سير عمل حيث يقوم CI ببناء لعبة tarf-solo الخاصة بك ، وتحميلها في مكان ما وتكوين عقدة لسحبها بشكل دوري.

نصيحة: استخدم حليقة لسحب كرة القماش المتغيرة بشكل دوري كرونجوب. curl -z $fileستحترم If-Modified-Sinceالرؤوس وستقوم بتنزيل كرة القطران فقط إذا تم تغيير الملف البعيد منذ الطابع الزمني الموجود على المستوى المحلي الحالي $file.



Leave a Comment

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

6 أشياء شديدة الجنون حول نينتندو سويتش

6 أشياء شديدة الجنون حول نينتندو سويتش

يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.

وظائف طبقات معمارية مرجعية للبيانات الضخمة

وظائف طبقات معمارية مرجعية للبيانات الضخمة

اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

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

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

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

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

أصدرت Apple مؤخرًا macOS Catalina 10.15.4 تحديثًا تكميليًا لإصلاح المشكلات ولكن يبدو أن التحديث يتسبب في المزيد من المشكلات التي تؤدي إلى إنشاء أجهزة macOS. قراءة هذه المادة لمعرفة المزيد