টপিকঃ নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)
ভুমিকা:
পিএইচ একটি প্রোগ্রামিং ল্যাংগুয়েজ এটা সবাই জানি। পিএইচপিতে লেখা কোডকে রান করানোর জন্য পিএইচপির ইন্টারপ্রেটার দরকার হয়। এই ইন্টারপ্রেটার
স্ট্যান্ডএলোন এক্সিকিউটেবল হিসাবে পাওয়া যায়, আবার কিছু ওয়েব সার্ভার প্রোগ্রাম (যেমন লাইটস্পিড) এর সাথে বিল্টইনও থাকে।
সার্ভারে যখন কোন পিএইচপি ফাইলের জন্য রিকোয়েস্ট যায়, তখন সার্ভার সেই পিএইচপি ফাইলটাকে সার্ভ করে না। পিএইচপি ফাইলটাকে পিএইচপির ইন্টারপেটার চালিয়ে রান করে; রানের ফলে যা আউটপুট পাওয়া তা সার্ভ করে। এ কাজটি করার জন্য ওয়েব সার্ভার প্রোগ্রামের সাথে পিএইচপির ইন্টারপ্রেটার প্রোগ্রামের একটি যোগসূত্র তৈরি করতে হয়। এপাশিতে তা মড-পিএইচপি, সিজিআই ইত্যাদি নামে পরিচিত। আমরা ইঞ্জিনেক্সের জন্য পিএইচপিকে 'ফাস্ট সিজিআই' রূপে সংযুক্ত করব। এ পদ্ধতিতে এঞ্জিনেক্স সরাসরি পিএইচপি ইন্টারপ্রেটারকে কল করার বদলে মেমরিতে চলমান FPM নামে একটা ডেমনকে রিকোয়েস্ট করবে। সে ডেমন দরকার মতো পিএইচপিকে রান করাবে। ঝামেলা মনে হলেও এসব সেট করা কঠিন না।
পিএইচপিকে আমাদের নিজেদের মতো করে কম্পাইল করতে হবে। তার আগে কিছু প্যাকেজ দরকার হতে পারে। এ প্যাকেজগুলোর এক বা একাধিক লাগতে পারে (./configure এর এরর দেখে বোঝা যাবে কোনটা লাগবে)
ibgd-dev
libmcrypt-dev
libxml2-dev
libmysqlclient15-dev
automake
autoconf
libbz2-dev
libpcre3-dev
libssl-dev
zlib1g-dev
এদের যে কোনটা ইন্সটল করার জন্য কমান্ড হবে: #apt-get install package (package এর জায়গায় এক বা একাধিক প্যাকেজের নাম )
বিল্ড/কম্পাইল:
১. পিএইচপির সোর্স কোড নামাতে হবে:
#wget http://au.php.net/get/php-5.2.6.tar.gz/ … net/mirror
২. এবার এটাকে আনকম্প্রেস করা যাক।
#tar xvfz php-5.2.6.tar.gz
৩. এফপিএম হ্যাক নামাতে হবে। এটি এঞ্জিনেক্স আর পিএইচপির মধ্যে যোগাযোগ রক্ষা করবে।
#wget http://php-fpm.anight.org/downloads/hea … .8.diff.gz
৪. পিএইচপির কোডকে এফপিএমের জন্য প্যাচ করতে হবে:
#gzip -cd php-5.2.6-fpm-0.5.8.diff.gz | patch -d php-5.2.6 -p1
৫. প্যাচ সফল হলে, আমরা পিএইচপির ডিরেক্টরিতে যাব।
#cd php-5.2.6
৬. এবার বিল্ড কনফিগার করার পালা
#./configure --enable-fastcgi --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --with-openssl --with-mysql --with-mysql-sock --with-gd --without-sqlite --disable-pdo --disable-reflection
৭. কনফিগার কোন এরর দিলে, সে অনুযায়ী প্রয়োজনীয় প্যাকেজ ইন্সটল করতে হবে। (আমার ডেবিয়ানে জেপেগ libjpeg62-dev, আর পিএনজি libpng12-dev প্যাকেজ ইন্সটল করতে হয়েছিল।) ভুমিকাতে কিছু প্যাকেজের নাম দেয়া আছে যেগুলো সম্ভাব্য প্রয়োজনীয়।
৮. কনফিগার সফল হলে মেইক ফাইল তৈরি হবে। এবার বিল্ড করা:
#make all; make install
বিল্ড হওয়ার জন্য পাঁচ/দশ মিনিট লাগতে পারে।
৯. এবার এফপিএমের গতি বাড়ানোর জন্য একটা হ্যাক:
#strip /usr/local/bin/php-cgi
১০. ব্যাস পিএইচপি রেডি।
সেটআপ:
১. এফপিএমের কনফিগারেশন ফাইলটাকে খুলতে হবে:
#pico /usr/local/etc/php-fpm.conf
এটা একটা এক্সএমএল ফাইল। খুঁজে এ অংশটা বের করতে হবে:
Unix user of processes
<value name="user">nobody</value>
Unix group of processes
<value name="group">nobody</value>
এটুকু বাইডিফল্ট কমেন্ট করা থাকে, কমেন্ট উঠিয়ে দিতে হবে। আর nobody এর বদলে www-data করে দিতে হবে।
Unix user of processes
<value name="user">www-data</value>
Unix group of processes
<value name="group">www-data</value>
ব্যাস, সেভ করে বের হয়ে আসতে হবে।
২. এবার এফপিএমকে রান করাতে হবে:
#php-fpm start
৩. এঞ্জিনেক্সকে এবার পিএইচপি কোডের জন্য সেটআপ করতে হবে (পিএইচপি পেলে যেন সরাসরি সার্ভ না করে রান করিয়ে আউটপুট সার্ভ করে)। এর জন্য এঞ্জিনেক্সকে বন্ধ করতে হবে।
#kill `cat /user/local/nginx/logs/nginx.pid`
এখানে ` মানে উল্টো কমা, (টিল্ডার সাথে যা আছে কিবোর্ডে)।
৪. এঞ্জিনেক্সের কনফিগ ফাইলটা খুলতে হবে।
#pico /usr/local/nginx/conf/nginx/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 alamgir.xen.prgmr.com; #localhost - turn off, otherwise some path problems
charset utf-8;
location / {
root /www;
index index.html index.htm index.php;
}
// এখানে নতুন কিছু যোগ হবে।
}
}
পিএইচপির জন্য যোগ করতে হবে:
location ~ \.php$ {
root /www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}
অর্থাৎ সবশেষে ফাইলে নীচের মতো থাকবে। সেভ করে বের হয়ে আসতে হবে।
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 alamgir.xen.prgmr.com; #localhost -- turn off
charset utf-8;
location / {
root /www;
index index.html index.htm index.php;
}
location ~ \.php$ {
root /www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}
}
}
৬. এবার ইঞ্জিনেক্সকে আবার রান করাতে হবে।
#/usr/local/nginx/sbin/./nginx
৭. এবার /www ফোল্ডারে গিয়ে ছোট্ট একটা পিএইচ ফাইল লিথা যাক।
#touch phptest.php
#pico phptest.php
ফাইলের মধ্যে:
<?
phpinfo();
?>
সেভ করে বের হয়ে আসতে হবে।
৮. এবার ওয়েব ব্রাউজারে দেখতে হবে:
ফায়ারফক্সে: http://alamgir.xen.prgmr.com/phptest.php
৯. এবার পায়ের উপর পা তুলে আয়েশ করতে হবে:)