বেশ কিছু দিন আগে, আমি ডকার সম্পর্কে আমার দীর্ঘ, পুঙ্খানুপুঙ্খ নির্দেশিকা প্রকাশ করেছি, LXC-এর উপর ভিত্তি করে একটি অপারেটিং সিস্টেম স্তরের ভার্চুয়ালাইজেশন প্রযুক্তি, যা কন্টেইনারাইজড অ্যাপ্লিকেশনের ব্যবস্থা করার একটি দ্রুত, হালকা ও নিরাপদ পদ্ধতি অফার করে। সুদৃশ্য
এখন, আমাদের প্রথম পরিষেবাগুলি, SSH এবং Apache পরীক্ষা করার সময় আমরা যে সমস্যার সম্মুখীন হয়েছিলাম, তার মধ্যে একটি ছিল এই পরিষেবাগুলির নিয়ন্ত্রণ৷ আমাদের কাছে ইনিট স্ক্রিপ্ট বা সিস্টেমড কন্টেইনারগুলির মধ্যে উপলব্ধ ছিল না এবং সত্যি বলতে, আমরা সেগুলি চাই না। কিন্তু আমরা আমাদের পরিষেবাগুলি শুরু করতে, বন্ধ করতে এবং যা কিছু না করার জন্য কিছু ব্যবস্থা চাই। সুপারভাইজার পরিচয় করিয়ে দেওয়া হচ্ছে, তাই এই টিউটোরিয়াল। আমাকে অনুসরণ করুন.
সংক্ষেপে সুপারভাইজার
সুপারভাইজার হল একটি প্রক্রিয়া নিয়ন্ত্রণ ব্যবস্থা, যা প্রক্রিয়াগুলি নিরীক্ষণ এবং নিয়ন্ত্রণ করার জন্য ডিজাইন করা হয়েছে। এটি init প্রতিস্থাপন করার লক্ষ্য রাখে না, পরিবর্তে এটি তার নিজস্ব কাঠামোর মধ্যে প্রক্রিয়াগুলিকে এনক্যাপসুলেট করে এবং বুট করার সময় সেগুলি শুরু করতে পারে, ঠিক যেমন আমরা চাই। এই মুহুর্তে সফ্টওয়্যার সম্পর্কে আরও গভীরে যাওয়ার কোনও কারণ নেই।
সুপারভাইজার সেটআপ
মূলত, সুপারভাইজার একটি পাইথন মডিউল। এটি easy_install ব্যবহার করে ইনস্টল করা যেতে পারে, যা সেটআপটুলগুলির একটি অংশ, যা নিজেই পাইথন ডিস্টুটিলস প্যাকেজের একটি এক্সটেনশন। হ্যাঁ, এই মুহুর্তে এটি বেশ জটিল হয়ে ওঠে। সৌভাগ্যবশত, বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশন ইজি_ইনস্টল সহ, সেন্টোস সহ, যা আমাদের আজকের পরীক্ষার প্ল্যাটফর্ম।
কাজ শুরু করার জন্য, আমাদের একটি পাত্রে সুপারভাইজার ইনস্টল করতে হবে। তারপর, আমরা ইমেজটি প্রতিশ্রুতিবদ্ধ করব এবং এটিকে আমাদের বিল্ডগুলির জন্য একটি বেসলাইন হিসাবে ব্যবহার করব, যা পূর্বোক্ত SSH এবং Apache এর মতো পরিষেবাগুলিকে অন্তর্ভুক্ত করবে। আপনি যদি আপনার হোস্টে সুপারভাইজার ইনস্টল করার চেষ্টা করেন, আপনার কোনো সমস্যা ছাড়াই সফল হওয়া উচিত:
easy_install সুপারভাইজার
সুপারভাইজার জন্য অনুসন্ধান
https://pypi.python.org/simple/supervisor/ পড়া হচ্ছে
সেরা ম্যাচ:সুপারভাইজার 3.1.3
ডাউনলোড হচ্ছে https://pypi.python.org/packages/source/s/supervisor/
সুপারভাইজার-3.1.3.tar.gz#md5=aad263c4fbc070de63dd354864d5e552
প্রসেসিং সুপারভাইজার-3.1.3.tar.gz
লেখা /tmp/easy_install-vbOcMG/supervisor-3.1.3/setup.cfg
রানিং সুপারভাইজার-3.1.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-vbOcMG/supervisor-3.1.3/egg-dist-tmp-i96mIs
সতর্কতা:'docs/.build' ডিরেক্টরির অধীনে '*' এর সাথে মিলিত কোনো পূর্বে-অন্তর্ভুক্ত ফাইল পাওয়া যায়নি
easy-install.pth ফাইলে সুপারভাইজার 3.1.3 যোগ করা হচ্ছে
echo_supervisord_conf স্ক্রিপ্ট /usr/bin এ ইনস্টল করা হচ্ছে
/usr/bin এ পিডপ্রক্সি স্ক্রিপ্ট ইনস্টল করা হচ্ছে
সুপারভাইজারটিএল স্ক্রিপ্ট /usr/bin এ ইনস্টল করা হচ্ছে
সুপারভাইজার স্ক্রিপ্ট /usr/bin এ ইনস্টল করা হচ্ছে
ইনস্টল করা হয়েছে
/usr/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg
সুপারভাইজার জন্য নির্ভরতা প্রক্রিয়াকরণ
মেল্ড3>=0.6.5 এর জন্য অনুসন্ধান করা হচ্ছে
https://pypi.python.org/simple/meld3/ পড়া হচ্ছে
সেরা ম্যাচ:meld3 1.0.2
ডাউনলোড হচ্ছে https://pypi.python.org/packages/source/m/meld3/
meld3-1.0.2.tar.gz#md5=3ccc78cd79cffd63a751ad7684c02c91
প্রক্রিয়াকরণ meld3-1.0.2.tar.gz
লেখা /tmp/easy_install-wnhLVS/meld3-1.0.2/setup.cfg
চলছে meld3-1.0.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-wnhLVS/meld3-1.0.2/egg-dist-tmp-Lp88cX
zip_safe পতাকা সেট করা হয়নি; সংরক্ষণাগার বিষয়বস্তু বিশ্লেষণ করা হচ্ছে...
easy-install.pth ফাইলে meld3 1.0.2 যোগ করা হচ্ছে
ইনস্টল করা হয়েছে /usr/lib/python2.7/site-packages/meld3-1.0.2-py2.7.egg
সুপারভাইজার
একটি পাত্রের ভিতরে, আপনি একটি ত্রুটি পাবেন, কারণ পাত্রে যোগ করা পাইথন ফ্রেমওয়ার্ক সম্পূর্ণ নয় এবং কিছু মডিউল অনুপস্থিত।
# সহজ_ইন্সটল সুপারভাইজার
ট্রেসব্যাক (সবচেয়ে সাম্প্রতিকতম কল সর্বশেষ):
ফাইল "/usr/bin/easy_install", লাইন 5, <মডিউল>-এ
pkg_resources import load_entry_point থেকে
আমদানি ত্রুটি:pkg_resources
এর মানে আমাদের ম্যানুয়ালি সেটআপ করতে হবে easy_install:
wget https://bitbucket.org/pypa/setuptools/raw/ ->
-> bootstrap/ez_setup.py -O - | পাইথন
সুপারভাইজার কনফিগারেশন
পরবর্তী ধাপ হল ধারকটির জন্য একটি কনফিগারেশন তৈরি করা। আমরা হোস্টে ফাইলটি তৈরি করতে পারি এবং তারপরে আমরা আমাদের ডকারফাইলে কপি নির্দেশনা ব্যবহার করে বিল্ড প্রক্রিয়া চলাকালীন এটিকে আমাদের ছবিতে অনুলিপি করব।
কপি ./supervisord.conf /etc/supervisord.conf
কনফিগারেশন নিজেই এমন কিছু হবে:
[তত্ত্বাবধায়ক]
nodaemon =সত্য
[প্রোগ্রাম:sshd]
কমান্ড=/usr/sbin/sshd -D
[প্রোগ্রাম:httpd]
command=/bin/bash -c "exec /usr/sbin/httpd -DFOREGROUND"
এখানে আমাদের কি আছে? প্রতিটি বর্গ বন্ধনী জোড়া একটি বিভাগ সংজ্ঞায়িত করে। সুপারভাইজারদের জন্য, আমরা সংজ্ঞায়িত করি যে এটি নিজেকে ডেমনাইজ করার পরিবর্তে ফোরগ্রাউন্ডে শুরু করা উচিত, যার অর্থ একটি ব্যাকগ্রাউন্ড পরিষেবা হয়ে উঠবে।
sshd নামের প্রোগ্রামটির জন্য, আমরা প্রাসঙ্গিক কমান্ডটি কার্যকর করি, মূলত SSHD ব্যাকগ্রাউন্ডে চলমান। httpd নামের প্রোগ্রামের জন্য, আমরা একটি আলাদা শেলে ফোরগ্রাউন্ডে সার্ভার শুরু করি। অন্যান্য অনেক বিকল্প উপলব্ধ আছে, কিন্তু এই মুহুর্তে, সুপারভাইজারদের সাথে আমাদের কাজ করার জন্য এটি সর্বনিম্ন।
একটি ধারক চালানো এবং সমস্যা সমাধান করা
আমরা আমাদের ইমেজ তৈরি করার পরে এবং এটি চালানোর পরে, সুপারভাইজারকে শুরু করা উচিত এবং আমাদের প্রক্রিয়াগুলি শুরু করা উচিত। কিন্তু প্রথম, আসুন কিছু সাধারণ ত্রুটি মোকাবেলা করা যাক. আপনি দেখতে পারেন যে একটি হল:
ডকার রান -ti -p 22 -p 80 ইমেজ-3:সর্বশেষ
/usr/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg/
supervisor/options.py:296:UserWarning:Supervisord রুট হিসাবে চলছে এবং এটি ডিফল্ট অবস্থানে (এর বর্তমান কার্যকারী ডিরেক্টরি সহ) এর কনফিগারেশন ফাইল অনুসন্ধান করছে; আপনি সম্ভবত উন্নত নিরাপত্তার জন্য একটি কনফিগারেশন ফাইলের একটি সম্পূর্ণ পথ নির্দিষ্ট করে একটি "-c" আর্গুমেন্ট নির্দিষ্ট করতে চান।
'সুপারভাইজার রুট হিসাবে চলছে এবং এটি অনুসন্ধান করছে'
ত্রুটি:ডিফল্ট পাথগুলিতে কোন কনফিগার ফাইল পাওয়া যায়নি (/usr/etc/supervisord.conf, /usr/supervisord.conf, supervisord.conf, etc/supervisord.conf, /etc/supervisord.conf); একটি ভিন্ন পাথে একটি কনফিগার ফাইল নির্দিষ্ট করতে -c বিকল্পটি ব্যবহার করুন
সাহায্যের জন্য, /usr/bin/supervisord -h
আপনি supervisord.conf ফাইলের জন্য একটি ভুল পথ নির্দিষ্ট করে থাকলে, বা একটি ভুল নাম ব্যবহার করলে, পরিষেবাটি চালানো যাবে না। আপনাকে কপি নির্দেশনা সম্পাদনা করতে হবে, আপনার ছবি পুনর্নির্মাণ করতে হবে এবং আবার শুরু করতে হবে। তারপরে, আপনি পরবর্তী ত্রুটির সম্মুখীন হতে পারেন:
# ডকার রান -ti -p 22 -p 80 ইমেজ-3:সর্বশেষ
/usr/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg/
supervisor/options.py:296:UserWarning:Supervisord রুট হিসাবে চলছে এবং এটি ডিফল্ট অবস্থানে (এর বর্তমান কার্যকারী ডিরেক্টরি সহ) এর কনফিগারেশন ফাইল অনুসন্ধান করছে; আপনি সম্ভবত উন্নত নিরাপত্তার জন্য একটি কনফিগারেশন ফাইলের একটি সম্পূর্ণ পথ নির্দিষ্ট করে একটি "-c" আর্গুমেন্ট নির্দিষ্ট করতে চান।
'সুপারভাইজার রুট হিসাবে চলছে এবং এটি অনুসন্ধান করছে'
372 CRIT সুপারভাইজার রুট হিসাবে চলছে (কনফিগ ফাইলে কোন ব্যবহারকারী নেই)
375 INFO সুপারভাইজার পিড 1 দিয়ে শুরু করেছিলেন
378 INFO তৈরি হয়েছে:pid 9 সহ 'httpd'
381 INFO তৈরি হয়েছে:pid 10 সহ 'sshd'
602 তথ্য প্রস্থান হয়েছে:httpd (প্রস্থান অবস্থা 1; প্রত্যাশিত নয়)
606 তথ্য উদ্ভূত হয়েছে:পিড 11 সহ 'httpd'
606 INFO সফলতা:sshd চলমান অবস্থায় প্রবেশ করেছে, প্রক্রিয়াটি 1 সেকেন্ডেরও বেশি সময় ধরে (স্টার্টসেক) রয়ে গেছে
671 তথ্য প্রস্থান হয়েছে:httpd (প্রস্থান অবস্থা 1; প্রত্যাশিত নয়)
676 তথ্য উদ্ভূত হয়েছে:পিড 12 সহ 'httpd'
742 INFO প্রস্থান হয়েছে:httpd (প্রস্থান অবস্থা 1; প্রত্যাশিত নয়)
749 তথ্য উদ্ভূত হয়েছে:পিড 13 সহ 'httpd'
825 INFO প্রস্থান হয়েছে:httpd (প্রস্থান অবস্থা 1; প্রত্যাশিত নয়)
826 INFO ছেড়ে দেওয়া হয়েছে:httpd মারাত্মক অবস্থায় প্রবেশ করেছে, অনেকগুলি খুব দ্রুত পুনরায় চেষ্টা করা শুরু করেছে
ছেড়ে দেওয়া হয়েছে:httpd মারাত্মক অবস্থায় প্রবেশ করেছে, অনেকগুলি খুব দ্রুত পুনঃপ্রচার শুরু করে
আমাদের এখানে যা আছে তা হল Apache থ্রেডগুলি প্রস্থান করা, সুপারভাইজারকে তাদের আবার শুরু করার জন্য পুনরায় চেষ্টা করতে বাধ্য করে এবং অবশেষে হাল ছেড়ে দেয়, যা আমাদের একটি মারাত্মক অবস্থার দিকে নিয়ে যায়। আমাদের কন্টেইনার এই সময়ে প্রায় অকেজো।
এখানে, রেজোলিউশনটি হল supervisord.conf ফাইলটি সম্পাদনা করা এবং httpd প্রোগ্রাম বিভাগে অতিরিক্ত নির্দেশাবলী প্রবর্তন করা, যা প্রক্রিয়াটি আরও সুন্দরভাবে পরিচালনা করবে।
[প্রোগ্রাম:httpd]
startsecs =0
autorestart =মিথ্যা
command=/bin/bash -c "exec /usr/sbin/httpd -DFOREGROUND"
আমরা startsecs =0 এবং autorestart =false যোগ করেছি। প্রথম নির্দেশ আমাদের বলে:
একটি স্টার্টআপের পরে সফল শুরু বিবেচনা করার জন্য প্রোগ্রামটিকে চলতে থাকা মোট সেকেন্ডের সংখ্যা। যদি প্রোগ্রামটি শুরু হওয়ার পরে অনেক সেকেন্ড পর্যন্ত না থাকে, এমনকি যদি এটি একটি প্রত্যাশিত প্রস্থান কোড (এক্সিটকোডগুলি দেখুন) দিয়ে প্রস্থান করে তবে স্টার্টআপটি ব্যর্থ বলে বিবেচিত হবে।
দ্বিতীয়টির অর্থ হল সুপারভাইজার Apache থ্রেড রিস্টার্টগুলি পরিচালনা করবে না এবং এইগুলি ওয়েব সার্ভার নিজেই পরিচালনা করবে, কারণ এটি ইনকামিং HTTP অনুরোধগুলি পরিচালনা করে।
মিথ্যা, অপ্রত্যাশিত বা সত্য হতে পারে। মিথ্যা হলে, প্রক্রিয়াটি কখনই স্বয়ংক্রিয়ভাবে আরম্ভ হবে না। অপ্রত্যাশিত হলে, প্রক্রিয়াটি পুনরায় চালু হবে যখন প্রোগ্রামটি একটি প্রস্থান কোড সহ প্রস্থান করবে যা এই প্রক্রিয়া কনফিগারেশনের সাথে যুক্ত প্রস্থান কোডগুলির একটি নয় (এক্সিটকোড দেখুন)। সত্য হলে, প্রস্থান কোড বিবেচনা না করে, প্রস্থান করার সময় প্রক্রিয়াটি নিঃশর্তভাবে পুনরায় আরম্ভ করা হবে।
এখন, আমরা আবার কন্টেইনার চালানোর চেষ্টা করতে পারি। মূল গাইডে আমরা যে /run/httpd সমস্যাটির সম্মুখীন হয়েছিলাম তা মনে আছে? /run ডিরেক্টরিটি জায়গায় না থাকলে, আপনি নিম্নলিখিত বার্তাগুলি দেখতে পাবেন:
ডকার রান -ti -p 22 -p 80 ইমেজ-3:সর্বশেষ
/usr/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg/
supervisor/options.py:296:UserWarning:Supervisord রুট হিসাবে চলছে এবং এটি ডিফল্ট অবস্থানে (এর বর্তমান কার্যকারী ডিরেক্টরি সহ) এর কনফিগারেশন ফাইল অনুসন্ধান করছে; আপনি সম্ভবত উন্নত নিরাপত্তার জন্য একটি কনফিগারেশন ফাইলের একটি সম্পূর্ণ পথ নির্দিষ্ট করে একটি "-c" আর্গুমেন্ট নির্দিষ্ট করতে চান।
'সুপারভাইজার রুট হিসাবে চলছে এবং এটি অনুসন্ধান করছে'
913 CRIT সুপারভাইজার রুট হিসাবে চলছে (কনফিগ ফাইলে কোন ব্যবহারকারী নেই)
916 INFO সুপারভাইজার পিড 1 দিয়ে শুরু করেছেন
919 তথ্য উদ্ভূত হয়েছে:পিড 8 সহ 'httpd'
921 INFO তৈরি হয়েছে:pid 9 সহ 'sshd'
079 তথ্য সাফল্য:httpd চলমান অবস্থায় প্রবেশ করেছে, প্রক্রিয়াটি 0 সেকেন্ডেরও বেশি সময় ধরে রয়েছে (স্টার্টসেক)
105 তথ্য প্রস্থান হয়েছে:httpd (প্রস্থান স্থিতি 0; প্রত্যাশিত)
120টি তথ্য অজানা পিড 10 কাটা হয়েছে
122 INFO সফলতা:sshd চলমান অবস্থায় প্রবেশ করেছে, প্রক্রিয়াটি 1 সেকেন্ডেরও বেশি সময় ধরে (স্টার্টসেক)
এই মুহুর্তে, আপনাকে অবশ্যই কন্টেইনারের সাথে সংযোগ করতে হবে (একটি BASH শেল সংযুক্ত করুন বা চালান), লগগুলি পরীক্ষা করুন এবং কেন পরিষেবাটি প্রত্যাশিত হিসাবে চলছে না তা বোঝার চেষ্টা করুন।
সফল পরীক্ষা
এবং তারপর, একবার আমরা অবশেষে সবকিছু সাজিয়ে নিই:
উপসংহার
এটি একটি মোটামুটি nerdy টিউটোরিয়াল. কিন্তু এটি আমাদের অস্ত্রাগারে আরেকটি দরকারী টুল প্রবর্তন করে, যা আমরা এখন সিস্টেমডের মতো জটিল, ব্যয়বহুল ফ্রেমওয়ার্ক ইনস্টল না করে একটি শক্তিশালী এবং মার্জিত পদ্ধতিতে কন্টেইনারগুলির মধ্যে পরিষেবাগুলি নিয়ন্ত্রণ করতে ব্যবহার করতে পারি। এটি ডকার সম্পর্কে আরও কিছু শেখায়, কীভাবে কাজ করতে হয় এবং সমস্যাগুলি সমাধান করতে হয় এবং এই জাতীয়।
সুপারভাইজার কঠোরভাবে প্রয়োজনীয় নয়, কারণ আমরা এটি ছাড়াই আমাদের sshd এবং httpd প্রক্রিয়াগুলি চালাতে পেরেছি, তবে কিছু লোক এই পদ্ধতিটি পছন্দ করতে পারে, বিশেষ করে যদি তাদের প্রায়শই তাদের পরিষেবাগুলি শুরু এবং পুনরায় চালু করতে হয়। যেভাবেই হোক, ইউটিলিটির সাথে পরিচিত হওয়া ডকার মেকানিজমের মধ্যে বোঝাপড়া এবং আত্মবিশ্বাস তৈরি করতে সাহায্য করে। আমি আশা করি আপনি এই নির্দেশিকাটি দরকারী বলে মনে করেন, এবং অনুগ্রহ করে আপনার অনুরোধগুলি পাঠান যে আমাদের পরবর্তীতে কী অন্বেষণ করা উচিত।
চিয়ার্স।