সর্বশেষ সম্পাদনা করেছেন হাঙ্গরিকোডার (০৭-০৯-২০০৮ ২১:৪৮)

টপিকঃ নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

পূর্বের পর্ব


নিজের প্রয়োজনে এবং কিছুটা অন্যের জন্যে সম্প্রতি ভিপিএস নিয়ে খেলছিলাম। সে অভিজ্ঞতাগুলো এখানে তুলে রাখছি ভবিষ্যতে কারো কাজে লাগবে ভেবে।

কোন আহামরি কিছু না, মাত্র ৬৪মেগের একটা ভিপিএস কিনি prgmr.com থেকে। দুদিন লাগে সেটা তেরী হতে। আন-ম্যানেজড বলে তাতে অপারেটিং সিস্টেম হিসাবে ছাল-ছোলা ডেবিয়ান ছাড়া আর কিছু ছিল না। নিরাপত্তার সাথে তাতে লগইন করার জন্য কেবল ssh রান করছিল।

সার্ভার বলতেই অনেকটা ওয়েব সার্ভার বোঝায় অনেকে। ওয়েব সার্ভারের কাজ হলো ইনকামিং http রিকোয়েস্টগুলোকে সার্ভ করা। এপাশি বহুল ব্যবহৃত ওয়েব সার্ভার। এর সুবিধা, ফিচার নিরাপত্তা অনেক বেশী এবং পরীক্ষিত- অনেকটা সে কারণে বেশীর ভাগ মানুষ ওয়েব সার্ভার প্রোগ্রাম বলতে এপাশিকেই মনে করে। তবে এপাশির ভাল দিকের পাশাপাশি কিছু দুর্বলতাও আছে। সেগুলো হলো: এপাশি অনেক মেমরি খায়, কাজের গতি ধীর। যেসব ওয়েব সাইটে প্রতি সেকেন্ডে কয়েক হাজার বা মিলিয়ন হিট হয় সেখানে এপাশি খুব সুবিধা করতে পারে না।

এপাশির বিকল্প হিসাবে আছে lighttp (আদর করে লাইটি বলে), lightspeed (কমার্শিয়াল) ও আরও বেশ কিছু প্রোগ্রাম। লাইটি খুব দ্রুত কাজ করে, তবে তাতে কিছু বাগের দরুন মাঝে মাঝেই রিবুট করতে হয়। গত কয়েক মাসে বিস্ময়করভাবে নতুন একটা সার্ভার প্রোগ্রাম সবার নজর কেড়েছে। এটার নাম nginx  (এঞ্জিনেক্স)। প্রোগ্রামটি রাশান একজনের লেখা, রাশান ভাষাতেই সব ডকুমেন্ট হওয়ার কারণে ব্যবহারও রাশিয়াতে সীমাবদ্ধ। কিন্তু এঞ্জিনেক্সের গতি, ফিচার এতটাই অবাক করেছে যে, এখন ফেসবুকের মতো সাইটও এঞ্জিনেক্সে চলছে। আমি একজনের পরামর্শে, কিছুটা ওয়েব ঘেঁটে আমার ভিপিএসের জন্য এঞ্জিনেক্সকেই পছন্দ করি। এঞ্জিনেক্সের মধ্যে ওয়েব ছাড়াও মেইলের জন্য পপ৩, আইম্যাপ, এসএমটিপি এমনকি একটা এফটিপি (বেটা) ও আছে। আমি শুধু ওয়েবের অংশটুকু ব্যবহার করতে চাই।

কম্পাইল/বিল্ড:
জনপ্রিয় প্রায় সব ডিস্ট্রোর জন্য এঞ্জিনেক্সের প্যাকেজ পাওয়া যায়। ডিস্ট্রো অনুযায়ী সঠিক কমান্ড দিলেই তা ইন্সটল হয়ে যায়। তবে বিশেষ কিছু সুবিধার জন্য আমি দুটো টিউটোরিয়াল, আর এঞ্জিনেক্সের উইকি দেখে নিজে কম্পাইল করার সিদ্ধান্ত নিই। নীচে তা ধাপে ধাপে বলছি:

০. সব কিছু কম্পাইল করার জন্য /home এ বা অন্য কোথাও একটা ফোল্ডার বানিয়ে নিলে ভাল হয়। ধরা যাক সেটা /home/alam, এই ফোল্ডারে বসেই সব কমান্ড দিব।
১. http://nginx.net/ থেকে সর্বশেষ স্ট্যাবল ভার্শন নামাতে হবে। এ লেখা লেখার সময় স্ট্যাবল ভার্শন 0.6.32, ডেভেলপমেন্ট ভার্শন 0.7.14
ডাউনলোড লিংক কপি করে তা পুটিতে রাইট ক্লিক করে পেস্ট করে দিতে হবে। তার আগে wget লিথতে হবে। সব মিলিয়ে কমান্ড হবে:
#wget http://sysoev.ru/nginx/nginx-0.6.32.tar.gz

২. কম্প্রেসড টার ফাইলকে আনকম্প্রেস করার জন্য:
#tar xvfz nginx-0.6.32.tar.gz
এবার আনকম্প্রেস হয়ে nginx-0.6.32 নামে একটা ফোল্ডার তৈরি হবে।

৩. #cd nginx-0.6.32 দিয়ে সে ফোল্ডারের মধ্যে প্রবেশ করে আমাদের  কম্পাইলের কাজটা করতে হবে। কম্পাইল করার দুটো ধাপ। প্রথম ধাপ হচ্ছে কনফিগার করা। এটি করার জন্য:  #./configure লিখে এন্টার দিতে হবে। যদি সি/সি++ কম্পাইলার না থাকে তবে এরর আসবে। সে ধরনের কিছু হলে সি/সি++ কম্পাইলার এবং মেক ইউটিলিটি ইন্সটল করে নিতে হবে। কমান্ড:
#apt-get install g++
#apt-get install make

৪. এর পর আবার ./configure চালাতে হবে। প্রতিবারই কিছু ঘাটতি থাকলে তা এরর হিসাবে দেখাবে, এবং সেটা দূর করার জন্য এক বা একাধিক প্যাকেজ ইন্সটল করে নিতে হবে।

৫. কনফিগার ঠিক মতো কাজ করলে আমরা চূড়ান্তভাবে কনফিগার করব। এটি করার জন্য  কিছু বাড়তি অপশন যোগ করতে হবে। এসব বাড়তি অপশন এঞ্জনেক্সের জন্য দরকার। যেসব অপশন দরকার হবে:

--with-http_ssl_module      যদি এসএসএল দরকার হয়
--without-mail_pop3_module  দরকার নেই
--without-mail_imap_module  দরকার নেই
--without-mail_smtp_module  দরকার নেই
--with-zlib= PATH        জিলিব দরকার,
--with-pcre=PATH        এপাশির রিরাইট মতো কাজ করানোর জন্য দরকার
--with-http_stub_status_module  সার্ভারের স্ট্যাটাস জানার জন্য দরকার।

আরো অনেক অপশন আছে। এখানে সব অপশন পাওয়া যাবে।

৬. চুড়ান্ত কনফিগার কমান্ড দেয়ার আগে আরো দুটি প্যাকেজ নামানো প্রয়োজন, তা না হলে কম্পাইল হবে, কিন্তু পরে রান করানোর সময় রানটাইম লাইব্রেরি খুঁজে পাবে না। প্যাকেজ দুটি হলো, pcre ও zlib. এ দুটোরও সোর্সকোডের টার নামাতে হবে, একই ভাবে কনফিগার, বিল্ড কমান্ড দিতে হবে। সেটা পরে আসা যাক। কেবল মনে রাখতে হবে pcre ও zlib এর সোর্সকোড কোথায় রাখা আছে। ধরে নিই তা /home/alam/pcre-7.7 ও /home/alam/zlib-1.2.3 ফোল্ডারে রাখা আছে।

৭. চুড়ান্ত কনফিগার কমান্ডটা হবে:
./configure --with-http_ssl_module    --without-mail_pop3_module  --without-mail_imap_module  --without-mail_smtp_module --with-zlib=/home/alam/pcre-7.7 --with-pcre=/home/alam/zlib-1.2.3   --with-http_stub_status_module

সবটা একলাইনে লিখে এন্টার। কনফিগার সার্থক হলে মেইক ফাইল তৈরী হবে। এই মেইক ফাইলকে কম্পাইল করতে হবে।

৮. কম্পাইল করা একদম সোজা: #make all; make install লিখে এন্টার। কিছুটা সময় নিয়ে প্রথমে কম্পাইল হবে, এরপর ইন্সটল হবে। কোন এরর পেলে ধরে নিতে হবে কনফিগারে কোন সমস্যা হয়েছে।

সেটআপ:
এবার এঞ্জিনেক্সের মধ্যে ডোমেইন ইত্যাদি সেট করার পালা। এনঞ্জিনেক্সের কনফিগারেশন ফাইলটা হলো: /user/local/nginx/conf/nginx.conf
পিকো বা অন্য এডিটর দিয়ে খোলা যাক:
#cd /usr/local/nginx/
#pico conf/ngingx.conf

ফাইলের মধ্যে নিচের মতো করে সেট করতে হবে:  বাংলায় কমেন্টগুলো কেবল বোঝানোর জন্য।
user www-data;  // এঞ্জিনেক্স নিজেকে কী ইউজার হিসাবে রান করাবে
worker_processes 2;  //কয়টা ওয়ার্কার প্রসেস থাকবে। একটা মূল/মাস্টার প্রসেসের অধীন একাধিক ওয়ার্কার প্রসেস চলে
pid   logs/nginx.pid;  //প্রসেস আইডি কোথায় থাকবে, এঞ্জিনেক্সকে বন্ধ করতে/ স্ট্যাটাস জানতে দরকার হবে
events {
worker_connections 768;   // কতগুলো কানেকশন থাকতে পারে
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nodelay on;
keepalive_timeout 10 10;
gzip on;  // বাই ডিফল্ট আউটপুট দেয়ার সময় জিপ করে দিবে
gzip_comp_level 1; gzip_proxied any;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

server {
        listen     80;  //কোন পোর্ট
        server_name  localhost alamgir.xen.prgmr.com;  //হোস্টের নাম
        charset utf-8;

        location / {
            root   /www;  // ডিফল্ট ডিরেক্টরি যেখানে ওয়েব পেজগুলো থাকবে
            index  index.html index.htm index.php;  // ইনডেক্স ফাইলের ডিফল্ট নাম
        }
}
}

এই হচ্ছে বেসিক সেটিং। এতে শুধু মাত্র এইচটিএমএল দেখাবে। পিএইচপির জন্য বাড়তি কাজ করতে হবে, তা পরের পোস্টে আসবে।


কনফিগারেরশন শেষ হলে ফাইল সেভ করে বেরিয়ে আসতে হবে। এবার সার্ভার রান করানোর জন্য:
#cd /user/local/nginx/sbin
#./nginx

কনফিগার ফাইলে যদি কোন সমস্যা থাকে তবে ইঞ্জনেক্স রান না হয়ে তা দেখাবে। কনফিগ ফাইলের কোন সমস্যা হলে তা ঠিক করতে হবে।
কোন শেয়ার্ড লাইব্রেরি না পেলে নতুন করে কম্পাইল করতে হবে।

আমি যে, সার্ভারটা সেট করেছি তা আপাতত alamgir.xen.prgmr.com/drup/ এখানে রান করছে। এই ছোট্ট সার্ভার কতটা লোড নিতে পারে সেটা দেখার জন্য ওখানে একটা ড্রুপাল ইন্সটল করে কিছু ডেমো কন্টেট রাখা হয়েছে।

বাড়তি লিংক:
http://www.yawn.it/2008/04/30/nginx-php … n-etch-40/
http://blog.taragana.com/index.php/category/nginx/

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

thumbs_upthumbs_up

আমি মানুষটা বড় বেশি রংছুট,চাঁদের ঘরে কড়া নেড়ে, চাঁদকে করি লুট

সর্বশেষ সম্পাদনা করেছেন হাঙ্গরিকোডার (০৭-০৯-২০০৮ ২২:১১)

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

ভাই, এমনিতেই একটা কঠিন কাজের জিনিস দেখাচ্ছেন, সেখানে আবার নতুন ওয়েব সার্ভারে! একটু কঠিন হয়ে যাবে না? আবার বলছেন ডকুমেন্টেশনও নাকি রাশান ভাষায় roll!

যাহোক, যারা এপাচি জানে, তাদের জন্য এটা একটা ভাল জিনিস। যারা অল্প খরচে পরীক্ষা করতে চান তারা http://www.centicero.com/vps.php থেকে ভিপিএস নিতে পারেন। মাত্র ৬ ডলার। আমি একমাস ব্যবহার করেছিলাম কিছু বিষয় পরীক্ষা (রেড ৫) করার জন্য। তেমন কোন সমস্যা চোখে পড়ে নাই। বেশ ভালই ছিল। এখন মনে হচ্ছে আবার নিতে হবে smile

আর আপনার দ্রুপাল তো খুবই ভাল আসছে। thumbs_up

[img]http://twitstamp.com/thehungrycoder/standard.png[/img]
what to do?

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

কপি করে রাখলাম, পুরা বিয়ষটা একরারে ধরতে পারছি না।

রক্তের গ্রুপ AB+

microqatar'এর ওয়েবসাইট

লেখাটি GPL v3 এর অধীনে প্রকাশিত

সর্বশেষ সম্পাদনা করেছেন প্রকৃতিপ্রেমিক (০৮-০৯-২০০৮ ০৩:১২)

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

আলমগীর ভাই, ভালো হচ্ছে লেখাটা। হোস্টিংএর ভবিষ্যত ভিপিএস।

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

এপ্যাচিকে ঠিকমত রান করাতে পারলে সেটাও খুব ফাস্ট রান করে।
কিন্তু সমস্যা হল, শেয়ার্ড হোস্টিং এ সবার জন্য হাজার রকম মডিউল এড করতে করতে  এটা স্লো হয়ে যায়।
ভিপিএস ফাস্ট  হবেই। কারণ এখানে তাই রান করবে যা আপনার দরকার। কিন্তু শেয়ার্ড হলে তো এমন কিছু না কিছু রান করবে যা আপনার দরকার নেই কিন্তু অন্য কারও দরকার।

শেয়ার্ড হোস্টিং এ কোন স্বাধীনতা নেই। তাই ভিপিএস কেনার ইচ্ছা আছে।

Feed থেকে ফোরাম সিগনেচার, imgsign.com
ব্লগ: shiplu.mokadd.im
মুখে তুলে কেউ খাইয়ে দেবে না। নিজের হাতেই সেটা করতে হবে।

শিপলু'এর ওয়েবসাইট

লেখাটি GPL v3 এর অধীনে প্রকাশিত

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

শিপলু লিখেছেন:

এপ্যাচিকে ঠিকমত রান করাতে পারলে সেটাও খুব ফাস্ট রান করে।

এইটা ফেসবুক আর ওয়ার্ডপ্রেস অলারা কেন বুঝতে পারছে না hmm

গুগলে nginx vs apache লিখে সার্চ দাও, চেয়ার উল্টে পড়ে যাবা lol

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

ধন্যবাদ আলমগীর ভাই thumbs_upthumbs_up(y)

রক্তের গ্রুপ B+
যুদ্ধাপরাধী ও রাজাকারদের ঘৃণা করি।

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

কাজের এবং সময় উপযুগী একটা লেখা দিয়েছেন। আজকে আমার vps একটিভ হইছে। দেখি কতটুকু কি করতে পারি। ধন্যবাদ।

১০ সর্বশেষ সম্পাদনা করেছেন শিপলু (০৮-০৯-২০০৮ ১৬:৫২)

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

আলমগীর ভাই,
ব্যান্ডউইডথ, ডাটাবেস এর সাইজ, ডিস্ক স্পেস কেমন থাকে?
আমার কি আলাদা একটা আইপি থাকবে? নাকি সেটার জন্য আবার টাকা দিতে হবে? mad

Feed থেকে ফোরাম সিগনেচার, imgsign.com
ব্লগ: shiplu.mokadd.im
মুখে তুলে কেউ খাইয়ে দেবে না। নিজের হাতেই সেটা করতে হবে।

শিপলু'এর ওয়েবসাইট

লেখাটি GPL v3 এর অধীনে প্রকাশিত

১১

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

শিপলু লিখেছেন:

আলমগীর ভাই,
ব্যান্ডউইডথ, ডাটাবেস এর সাইজ, ডিস্ক স্পেস কেমন থাকে?
আমার কি আলাদা একটা আইপি থাকবে? নাকি সেটার জন্য আবার টাকা দিতে হবে?:mad:

BW: 20gig+ নির্ভর করে প্যাকেজের উপর (শেলে ঢুকার জন্য, কম্পাইল করার জন্য যা যাবে, সেটাও হিসাবে ধরা হবে।)
ডেটাবেস সাইজ: কোন লিমিট নাই, মানে ডিস্ক স্পেসের উপর নির্ভর করে।
ডিস্ক স্পেস: আমি $5 ডলারে যেটা কিনেছি, সেটাতে ডিস্ক: 5গিগা। মেমরি: ৬৪মেগ, ব্যান্ডউইডথ: 25গিগ।
একটা আইপি মাস্ট থাকবে। বাড়তি কিনতে টাকা দিতে হতে পারে ($1-$5 /মাসে), বললে মাগনাও দিতে পারে। নিজের নেমসার্ভার বসাতে গেলে ন্যূনতম দুইটা আইপি লাগবে।

১২

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

কম্পাইল করার জন্য, মানে শেলে ঢুকে রান করানোর জন্য ব্যান্ডউইডথ ক্যামনে খরচ হয়। এটা বুঝলাম না।

১৩ সর্বশেষ সম্পাদনা করেছেন আলমগীর (০৮-০৯-২০০৮ ১৯:৪০)

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

স্বপ্নচারী লিখেছেন:

কম্পাইল করার জন্য, মানে শেলে ঢুকে রান করানোর জন্য ব্যান্ডউইডথ ক্যামনে খরচ হয়। এটা বুঝলাম না।

তুমি যে কমান্ডটা দিবে সেটা কেমনে করে সার্ভারে যাবে? আর সার্ভারে কম্পাইল করার সময় যে মেসেজগুলো দেখাবে সেগুলো তোমার পিসিতে কেমনে করে আসবে? ভিপিএসের পোর্টে মিটার লাগানো আছে, সব কাউন্ট হবে (শেয়ার্ড হোস্টিংএর মতো কেবল http না)। শেয়ার্ড হোস্টিংএ এফটিপি ট্রাফিকও সাধারণত হিসাবে ধরে না। কিন্তু ভিপিএসে তুমি প্রচুর প্যাকেজ নামাবে, স্পীড খুব বেশী, শু-------ত করে নেমে যায়। এগুলো সব সেই ট্রাফিকে হিসাব হয়। তবে এটা কেবল আমার হোস্টের কথা বললাম, অন্য হোস্ট এই নীতি বাস্তবায়ন নাও করতে পারে।

শিপলু
এঞ্জিনেক্সের মেমরি ফুটপ্রিন্ট দেখো:
http://forum.projanmo.com/uploads/2008/09/836_memusage.png
ট্রাফিক/লোড:
http://forum.projanmo.com/uploads/2008/09/836_nginx.png

১৪ সর্বশেষ সম্পাদনা করেছেন হাঙ্গরিকোডার (০৯-০৯-২০০৮ ১৬:১৫)

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

আমি পরের পর্বের জন্য বসে আছি:D!

আর এ সমস্যা কিভাবে সমাধান করব?
http://forum2.projanmo.com

আপডেট:
সমাধান করেছি।

এখন তাড়াতাড়ি বলেন কিভাবে পিএইপি ব্যবহার করব!:) একটা জায়গায় দেখলাম যে পিএইপি স্ক্রিপ্টগুলোকে এপাচি'র কাছে পাস করে দেয়ার কনফিগ! কিন্তু আবার এপাচিতে গেলে তো যেই লাউ, সেই কদু! কারণ সবই তো পিএইপি স্ক্রিপ্ট!

[img]http://twitstamp.com/thehungrycoder/standard.png[/img]
what to do?

১৫

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

কনসালটেন্সি দেতে হবে smile
আসবে, আজ রাতে দিয়ে দিব।

১৬ সর্বশেষ সম্পাদনা করেছেন হাঙ্গরিকোডার (০৯-০৯-২০০৮ ২৩:১০)

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

অদ্ভূত! আমি প্রথমবার সহজেই কম্পাইল করেছিলাম। কিন্তু এখন হচ্ছে না!~X(

আপডেট:
কনফিগারের কোন রকম প্যারামিটার ছাড়া দেয়ার পর হল। মানে শুধু
./configure
চালিয়েছে। pcre and zlib এর পাথ ঠিক মত দেয়ার পরও pcre এর মেকফাইল এর সমস্যার কারণে ওভাবে হয় না। যাহোক, এখন যাচ্ছি পিএইপি সেকশনে smile

[img]http://twitstamp.com/thehungrycoder/standard.png[/img]
what to do?

১৭

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

এঞ্জিনেক্সকে দ্রুত স্টার্ট, স্টপ ও রিস্টার্ট করার জন্য (জীবনে প্রথম) একটা স্ক্রিপ্ট লিখলাম। এতে নিম্মোক্ত উপায়ে সার্ভার স্টার্ট স্টপ করা যাবে:

nginx start

nginx stop

nginx restart

সেজন্য http://hungrycoder.xenexbd.com/uploads/nginx.txt ফাইলটি /sbin/nginx নামে সেভ করে এক্সিকিউট পারমিশন দিতে হবে। ব্যাস কাজ শেষ।

বিস্তারিত আমার ব্লগে।

[img]http://twitstamp.com/thehungrycoder/standard.png[/img]
what to do?

১৮

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

হাঙ্গরিকোডার লিখেছেন:

ভাই, এমনিতেই একটা কঠিন কাজের জিনিস দেখাচ্ছেন, সেখানে আবার নতুন ওয়েব সার্ভারে! একটু কঠিন হয়ে যাবে না? আবার বলছেন ডকুমেন্টেশনও নাকি রাশান ভাষায়:rolleyes:!

কথাটি ঠিক নয়। এঞ্জিনেক্স-এর ফুল ফ্লেজেড ইংলিশ ডকুমেন্টেশন আছে, একটু ঢুঁ মারলেই এই উইকিটা পেয়ে যেতেনঃ
http://wiki.codemongers.com/

এত্তবড় একটা রিসোর্স সাইট থাকার পর আলাদা আর কোন ডকুমেন্টেশনের প্রয়োজন নেই, এদের এক্সাম্পল কনফিগারেশ্ন দেখে আপনি অনেক কিছুই জানতে পারবেন।

এঞ্জিনেক্স মূলতঃ স্ট্যান্ডঅ্যালোন ওয়েবসার্ভার ছিলোনা, বরং একটি জনপ্রিয় রাশান সাইট (সম্ভবতঃ fastmail.fm, ঠিক মনে পড়ছেনা) এর জন্য HTTP/POP3/IMAP4 রিভার্স প্রক্সি হিসেবে তৈরী করা হয়েছিলো কয়েক বছর আগে। পরে এর হাই-পার্ফর্ম্যান্স দেখে অনেকেই ইন্টারেস্টেড হয় এর প্রতি, তারপর ওপেন সোর্স করে ছেড়ে দেয়া হয়। তারপরের ঘটনা তো ইতিহাস। এখন নেটক্র্যাফট-এর সার্ভে অনুযায়ী এঞ্জিনেক্স প্রথম পাচঁটি জনপ্রিয় সার্ভারের মধ্যে আছে। ওয়ার্ডপ্রেস, ফেসবুক-এর মত হেভীওয়েট সাইট এখন এঞ্জিনেক্স ব্যবহার করছে।

২০০৬ সালের দিকে আমি প্রথম এঞ্জিনেক্স-এর খোঁজ পাই, কিন্তু ইংলিশ ডকুমেন্টেশ্ন-এর অভাব, রিয়েল ওয়্যার্ল্ড স্যাম্পল ইম্পলিমেন্টেশন নাই এইসব বিভিন্ন কারণে বেশিদূর এগুতে পারি নি। গত বছরের মাঝামাঝি আবার এঞ্জিনেক্স এর কথা শুনি, এইবার দেখলাম কিছু এঞ্জিনেক্স ফ্যান ডকুমেন্টেশ্ন ইংলিশে ট্রান্সলেট করে ফেলেছে।

এ্যাপাচের সাহায্যকারী হিসাবে মূলতঃ এঞ্জিনেক্স-এর জন্ম; ডাইনামিক পেজ জেনারেট করতো মূল সার্ভার হিসাবে অ্যাপাচে, আর স্ট্যাটিক কন্টেন্ট-এর জন্য সেকেন্ডারী সার্ভার হিসাবে ছিলো এঞ্জিনেক্স। আর এখন এঞ্জিনেক্স নিজেই অ্যাপাচে-কিলার হিসেবে প্রতিষ্ঠিত হয়ে গেছে!

এঞ্জিনেক্স+পিএইচপি জন্য আমার পছন্দ ফাস্ট-সিজিয়াই প্রসেস ম্যানেজার (php-fpm)। আরো অনেক ভাবেও পিএইচপি ইন্টিগ্রেট করা যায় - php-fpm আসার আগে lighthttpd-র ফাস্ট-সিজিআই বাইনারী ব্যবহার করতাম এঞ্জিনেক্স-এর সাথে, তবে সেটা ছিলো টেম্পোরারী হ্যাক।

রুবি-পাইথন ক্রাউডের চোখের মণি এখন এঞ্জিনেক্স - আজকাল মংগ্রেল-এর তেমন কদর নেই (ব্যাকএন্ড ছাড়া)।

অতএব ওয়েব ডেভেলপার-দের চিন্তা করার কারণ নেই - আপনার স্ক্রিপ্ট এঞ্জিনেক্স-এ রান করবে কোন সমস্যা ছাড়াই। তবে url-rewrite/seo-friendly url এ্যাপাচে থেকে এঞ্জিনেক্স-এ কনভার্ট করতে গেলে প্রাথমিকভাবে একটু সমস্যা হতে পারে।

Calm... like a bomb.

১৯

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

এঞ্জিনেক্স-এর জন্য বেশ কিছু ইনিট স্ক্রিপ্ট ব্যবহার করি, তার মধ্যে থেকে একটি তুলে দিলামঃ

#! /bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO

PATH=/wwwroot/sbin:/wwwroot/bin
DAEMON=/wwwroot/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile /wwwroot/data/nginx.pid \
                --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile /wwwroot/data/nginx.pid \
                --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                /wwwroot/data/nginx.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                /wwwroot/data/nginx.pid --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile /wwwroot/data/nginx.pid \
          --exec $DAEMON
      echo "$NAME."
      ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

আমি সাধারণতঃ এঞ্জিনেক্স কম্পাইল করার সময় অনেক সেটিংস যেমন ডাইরেক্টরী/পাথ সেটিংস কাস্টোমাইজ করি (chroot সিম্পলিফাই করার জন্য)। তাই আপনাকে এই স্ক্রিপ্ট-এর পাথ-গুলো বদলাতে হবে।

Calm... like a bomb.

২০

Re: নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)

এবং আরো একটা স্ক্রিপ্ট (আরেকটা ভিপিএস-এ ব্যবহার করেছিলাম)ঃ

#! /bin/sh

nginx_BIN=/wwwroot/sbin/nginx
nginx_CONF=/wwwroot/etc/nginx.conf
nginx_PID=/wwwroot/data/nginx.pid

ngx_opts=""
#ngx_opts="-c $nginx_CONF"
wait_for_pid () {
        try=0

        while test $try -lt 35 ; do

                case "$1" in
                        'created')
                        if [ -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;

                        'removed')
                        if [ ! -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                esac

                echo -n .
                try=`expr $try + 1`
                sleep 1

        done

}

case "$1" in
        start)
                echo -n "Starting nginx "

                $nginx_BIN $ngx_opts

                if [ "$?" != 0 ] ; then
                        echo " failed"
                        exit 1
                fi

                wait_for_pid created $nginx_PID

                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;

        stop)
                echo -n "Shutting down nginx "

                if [ ! -r $nginx_PID ] ; then
                        echo "warning, no pid file found - nginx is not running ?"
                        exit 1
                fi

                kill -TERM `cat $nginx_PID`

                wait_for_pid removed $nginx_PID

                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;

        quit)
                echo -n "Gracefully shutting down nginx "

                if [ ! -r $nginx_PID ] ; then
                        echo "warning, no pid file found - nginx is not running ?"
                        exit 1
                fi

                kill -QUIT `cat $nginx_PID`

                wait_for_pid removed $nginx_PID

                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;

        restart)
                $0 stop
                sleep 3
                $0 start
        ;;

        reload)
                echo -n "Reload service nginx "

                if [ ! -r $nginx_PID ] ; then
                        echo "warning, no pid file found - nginx is not running ?"
                        exit 1
                fi

                kill -USR2 `cat $nginx_PID`

                echo " done"
        ;;

        logrotate)

                echo -n "Re-opening nginx log file "

                if [ ! -r $nginx_PID ] ; then
                        echo "warning, no pid file found - nginx is not running ?"
                        exit 1
                fi

                kill -USR1 `cat $nginx_PID`

                echo " done"
        ;;

        *)
                echo "Usage: $0 {start|stop|quit|restart|reload|logrotate}"
                exit 1
        ;;

esac

আগেরটার চাইতে এটা আরেকটু ফিচার সমৃদ্ধ। আগেরটা শুধু ডেবিয়ানের জন্য ছিলো, এই ভার্সনটা সম্ভবতঃ সব লিনাক্স এবং ফ্রিবিএসডি, সোলারিস-এ চলবে।

Calm... like a bomb.