টপিকঃ নিজের ভিপিএস - ১ (ওয়েব সার্ভার সেটআপ)
নিজের প্রয়োজনে এবং কিছুটা অন্যের জন্যে সম্প্রতি ভিপিএস নিয়ে খেলছিলাম। সে অভিজ্ঞতাগুলো এখানে তুলে রাখছি ভবিষ্যতে কারো কাজে লাগবে ভেবে।
কোন আহামরি কিছু না, মাত্র ৬৪মেগের একটা ভিপিএস কিনি 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/