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

টপিকঃ নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

ভুমিকা:
পিএইচ একটি প্রোগ্রামিং ল্যাংগুয়েজ এটা সবাই জানি। পিএইচপিতে লেখা কোডকে রান করানোর জন্য পিএইচপির ইন্টারপ্রেটার দরকার হয়। এই ইন্টারপ্রেটার
স্ট্যান্ডএলোন এক্সিকিউটেবল হিসাবে পাওয়া যায়, আবার কিছু ওয়েব সার্ভার প্রোগ্রাম (যেমন লাইটস্পিড) এর সাথে বিল্টইনও থাকে।

সার্ভারে যখন কোন পিএইচপি ফাইলের জন্য রিকোয়েস্ট যায়, তখন সার্ভার সেই পিএইচপি ফাইলটাকে সার্ভ করে না। পিএইচপি ফাইলটাকে পিএইচপির ইন্টারপেটার চালিয়ে রান করে; রানের ফলে যা আউটপুট পাওয়া তা সার্ভ করে। এ কাজটি করার জন্য ওয়েব সার্ভার প্রোগ্রামের সাথে পিএইচপির ইন্টারপ্রেটার প্রোগ্রামের একটি যোগসূত্র তৈরি করতে হয়। এপাশিতে তা মড-পিএইচপি, সিজিআই ইত্যাদি নামে পরিচিত। আমরা ইঞ্জিনেক্সের জন্য পিএইচপিকে 'ফাস্ট সিজিআই' রূপে সংযুক্ত করব। এ পদ্ধতিতে এঞ্জিনেক্স সরাসরি পিএইচপি ইন্টারপ্রেটারকে কল করার বদলে মেমরিতে চলমান 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

৯. এবার পায়ের উপর পা তুলে আয়েশ করতে হবে:)

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

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

পর্ব - ০: http://forum.projanmo.com/t7552.html
পর্ব - ১: http://forum.projanmo.com/t7550.html

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

আলমগীর ভাইকে অসংখ্য অসংখ্য ধন্যবাদ একটি সময় উপযোগী লেখার জন্য। কারণ আমি ভিপিএস কিনেছি কিন্তু নেট এর সমস্যার কারণে এখনো ঘেটে দেখতে পারছি না cryingcrying--(--(

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

সরাসরি পিএইচপি প্যাকেজ ইনস্টল করে ফাস্টসিজিআই এবং এঞ্জিনেক্স কনফিগার করলে কী সমস্যা?

http://www.howtoforge.com/nginx_php5_fa … ubuntu7.04

অথবা এফপিএমের কী সুবিধা?

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

সেটা করতে পার।
আমি যেটা বুঝি, পিএইচপি ইন্টারপেটার কল করার ওভারহেড আছে, সিকুউরিটির ব্যপার ও আছে। (এজন্য এপাশি মড-ব্যবহার করে)।
FPM এর সুবিধা হলো, এটা একটা ডেমন হিসাবে সবসময় মেমরিতে রেসিডেন্ট থাকে, প্রয়োজনমতো পিএইচপিকে স্পন করে।
FPM ব্যবহার করতে হলে, পিএইচপির কোডে প্যাচ এপ্লাই করতে হয়, এজন্য পুরোটা নতুন করে বিল্ড করতে হয়।

xcache নিয়ে পরে বলব।

FPM নিয়ে কিছু কথা এখানে পাবে:
https://calomel.org/nginx.html

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

এই মাত্র সব কমপ্লিট করলাম smile

http://forum2.projanmo.com/index.php

এখন জেন্ড এক্সটেনশনটা ইনস্টল করছি।

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

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

আমি কি করমু, সব কপি করইরা রাখতেছি। পরে কাজে লাগাবো:D

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

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

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

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

থাংক্যু

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

আলমগীর ভাই,
আমার সার্ভার মোটামুটি রেডি। কিন্তু সমস্যা হল মড রিরাইট নিয়ে। সেটা তো ইঞ্জিনেক্সে কাজ করছে না। আসলে কাজ করার মত তো কিছু করাই হয়নিb-(!

যাহোক, সমস্যা হল ফোরামের ইউআরএল রিরাইট মডগুলো হার্ডকোডেড! সো সেটা বন্ধ করতে হলে এখন কোড এডিট করতে হবে যা অনেক ঝামেলার। এখন দ্রুত কিভাবে সেটা করা যায় একটু বলুন:)।

আর প্রজন্ম মাইগ্রেশনের ট্রায়াল শেষ করলাম কিছুক্ষণ আগে। http://forum2.projanmo.com টা দেখুন। শুধু রিরাইটটা সলভ করলেই খালাস!:x

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

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

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

এঞ্জিনেক্সে এপাশির প্রায় সবকিছু ইমুলেট করা যায়। (তবে কেমনে যায়, সব জানি  না)।
আমি ড্রুপালের ক্লিন আর্ল করেছি এটা দেখে:
http://hostingfu.com/article/running-dr … r-lighttpd

গুগলে ঘেঁটে যা পেলাম:
http://news.gmane.org/gmane.comp.web.nginx.english
http://www.k4ml.com/taxonomy/term/25

তুমি খুব দ্রুত মাইগ্রেশনের চিন্তা করছ। ভিপিএসে যাবার আগে একটু ধীরে সুস্থে smile

এঞ্জিনেক্স রিরাইটের জন্য রেগুলার এক্সপ্রেশন ব্যবহার করে, যেটার উস্তাদ হলে শিপলু। শিপলুর সুবিধার জন্য লিংকটা দিয়ে দিলাম। এঞ্জিনেক্সের মধ্যে এই রুলগুলো ব্যবহৃত হয়।
http://perldoc.perl.org/perlre.html

পানবিবির কোড  এডিট না হোক কী কী রুল এপ্লাই করা হয়েছে তাতো জানতেই হবে। (সেটা .htaccess এর মধ্যেও থাকার কথা।)

১১

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

হুম...........ঠিক! একটু তাড়াতাড়িই করছি। কারণ এ সার্ভারের উপর লোড কমাতে হচ্ছে! যে কোন দিন কাস্টমাররা ধরে মাইর লাগাবে!--(

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

১২

Re: নিজের ভিপিএস - ২ (পিএইচপি সেটআপ)

একটা গুরুত্বপূর্ণ বিষয়। এটাও আলমগীর ভাই ই বলে দিয়েছেন। আমি পোস্ট দিচ্ছি যাতে রেফারেন্সটা থাকে। সমস্যাটা কমন হওয়ারই সম্ভাবনা বেশি!

পুরো সেটিংস কমপ্লিট হলে হয়তো দেখবেন পিএইপিচর কিছু গ্লোবার ভেরিয়েবল এর মান নেই। যেমন আমি PHP_SELF নিয়েই ঝামেলায় পড়ে ছিলাম। phpinfo() দেখলে হয়তো আরও কিছু এরকম ভেরিয়েবল পাবেন।

এ সমস্যার সমাধানও একেবারে সহজ।

location ~ \.php$ {
            root           /www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;

           include        fastcgi_params;  #newly added

            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;
......
......

মোটা অক্ষরের লাইনটা যুক্ত করলেই এ সমস্যার সমাধান হবে।

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