ทุกวันนี้จะเห็นว่ามีคนหันมาใช้ VPS (Virtual Private Server) กันเยอะขึ้น และคงจะรู้จักตัวจัดการ Hosting อย่าง Vesta CP กันมาบ้างแล้ว ซึ่งเจ้า Vesta CP มันก็คือ Web Hosting Control Panel (หรือจะว่า มันคือตัวจัดการ web Hosting ก็ได้) ทีสำคัญ มันเป็น open source (ฟรี) ใช้งานค่อนข้างง่าย มี option เยอะแยะมากมาย ถ้าใครสนใจก็ลองไปอ่านรายละเอียดเพิ่มเติมได้ที่ https://vestacp.com/#documentation (ปล. ผมเองก็พึ่งมีโอกาส ได้เล่น เมื่อไม่นานนี้เอง แหะๆ)
และบทความนี้ผมจะมาเล่าถึงวิธีติดตั้ง Vesta CP และวิธีการ Upgrade Vesta CP ให้รองรับ PHP 7 เพื่อใช้งานร่วมกับ Web Server อย่าง Nginx นั่นเอง เหตุที่ผมเลือก Nginx ก็เพราะว่ามันใช้ memory ค่อนข้างน้อยกว่า Apache นั้นเอง แถมยังรองรับ concurrent ได้มากกว่าอีกด้วย และเจ้า Nginx มันยังรองรับ HTTP/2.0 ชึ่งจะเป็น Protocol มาตรฐานที่จะมาแทนที่ HTTP/1.X version เก่า ในวันข้างหน้า แล้วเรามาลุยถึงขึ้นตอนการติดตั้งและ config เจ้า Nginx กับ VestaCP กันเลย
อันดับแรกเลยให้ทำการ download ไฟล์ vst-install.sh จากเว็บ https://vestacp.com/ มาก่อน (เราจะใช้ไฟล์นี้ในการติดตั้ง Vesta CP)
1 |
curl -O http://vestacp.com/pub/vst-install.sh |
ทำการเลือก option ที่ต้องการ generate command ในการติดตั้ง
ในที่นี้ผมจะเลือก Nnigx + PHP-FPM เพื่อใช้ในการทดสอบ ส่วน option อื่น เราสามารถกำหนดเองได้เลย ว่าจะใช้ service ตัวไหนบ้าง ถ้าไม่คิดไรมาก ก็เลือกหมดเลยก็ได้
1 |
bash vst-install.sh --nginx yes --phpfpm yes --apache no --vsftpd yes --proftpd no --exim yes --dovecot yes --spamassassin yes --clamav yes --named yes --iptables yes --fail2ban yes --mysql yes --postgresql yes --remi yes --quota no --hostname myhostname.com --email myemail@gmail.com --password 1234@p3ss |
หลังจากเราทำการ Generate command ในการติดตั้งแล้ว ให้ login เข้า server อีกรอบ ผ่าน SSH แล้วทำการติดตั้งด้วย Command line ได้เลย
ในการติดตั้งอาจจะใช้เวลา 3-5 นาที
หลังจากติดตั้งเสร็จ มันจะส่ง Credential เข้า Email (รวมถึง link ในการ login เข้า Vesta CP)
ก็เป็นอันเสร็จในส่วนของการติดตั้ง Vesta CP
จากนั้นมาถึงขึ้นตอนการเปิดใหับริการ WebSite ละ ให้ทำการเลือกหัวข้อ WEB
แล้วทำการ Add เพิ่ม Domain เข้าไป
ถ้าหากเราได้ตรวจสอบ PHP version ที่ติดมากับ Vesta CP จะพบว่า มันยังคง Default PHP 5.X อยู่เลย (ณ. วันที่เขียนบทความนี้)
ชึ่งมันยังไม่ใช่สิ่งที่เราต้องการ.. ^ ^” ครวมนี้มาทำการติดตั้ง PHP 7 กันต่อเลยนะครับ
ทำการติดตั้ง package RMP
1 2 3 4 |
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm yum --enablerepo=remi update remi-release |
ทำการลบ php version เก่าออกก่อน แล้วค่อย install php7 เข้าไปใหม่
1 2 3 |
service nginx stop service httpd stop yum -y remove php |
1 |
yum --enablerepo=remi-php70 install php70-php php70-php-pear php70-php-bcmath php70-php-pecl-jsond-devel php70-php-mysqlnd php70-php-gd php70-php-common php70-php-fpm php70-php-intl php70-php-cli php70-php php70-php-xml php70-php-opcache php70-php-pecl-apcu php70-php-pecl-jsond php70-php-pdo php70-php-gmp php70-php-process php70-php-pecl-imagick php70-php-devel php70-php-mbstring |
ทำการยกเลิก php-fpm version เก่า แล้วสั่ง start php70-fpm ของ version 7 แทน
1 2 |
service php-fpm stop service php70-php-fpm start |
ทำการลบ symlink เดิมออก แล้ว map link php ใหม่
1 2 3 4 5 6 7 8 9 |
rm -f /usr/bin/php ln -s /usr/bin/php70 /usr/bin/php rm -f /usr/lib/systemd/system/php-fpm.service ln -s /usr/lib/systemd/system/php70-php-fpm.service /usr/lib/systemd/system/php-fpm.service vim /etc/opt/remi/php70/php-fpm.conf แก้ไข include (Line 11) เป็น include=/etc/php-fpm.d/*.conf |
ทำการ restart service
1 |
service nginx restart |
เพื่อให้ชัวส์ ทำการตรวจสอบ version สะหน่อย
1 2 3 |
php -v หรือ php -r 'phpinfo();' | grep "PHP Version" |
เปิดใช้ Service ให้มัน start ทุกครั้งเมือมีการ reboot เข้า OS
1 2 3 |
# systemctl disable php-fpm (จะต้อง Diable php-fpm ตัวเก่าออกด้วย ไม่งั้น เวลา start service มันจะชนกัน) # systemctl enable nginx.service # systemctl enable php70-php-fpm.service |
ทีนี้ ลองสร้าง php ไฟล์เพื่อทดสอบ
1 2 |
vi /home/admin/web/mydomain/public_html/index.php <?php phpinfo();?> |
แล้วเข้าเว็บอีกครั้งเพื่อดูว่า ปรกติดีหรือป่าว
http://mydomain.com/
จะพบว่ามันจะติด ERROR 502 (Bad Gatway) หรือ 500 (Internal Server Error)
จากนั้นลองทำการ check log อีกที จะพบ error ว่า มันมีปัญหากับ upstream/fastcgi ซึ่งมันชี้ port ไม่ถูกนั้นเอง
1 2 |
service nginx restart2016/01/13 11:16:42 [error] 2691#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 27.130.41.254, server: mydomain.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9002", host: "www.mydomain.com" [root@testserver001 logs]# connect() failed (111: Connection refused) while connecting to upstream upstream: "fastcgi://127.0.0.1:9002", host:location |
tail -f /var/log/nginx/domains/mydomain.com.error.log
/etc/opt/remi/php70/php-fpm.d/www.conf
จะเห็นวา่ เจ้า php-fpm นั้นมันรันบน port 9000 (ถ้ามีหลาย domain ก็จะมี ไฟล์ *.conf ที่ใช้ port ต่างกัน)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@testserver001 php-fpm.d]# vi www.conf ; a specific port; ; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses ; (IPv6 and IPv4-mapped) on a specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. listen = 127.0.0.1:9000 ; Set listen(2) backlog. ; Default Value: 511 ;listen.backlog = 511 |
กรณีถ้าหากบน Vesta CP มีมากหลายๆ Domain เวลา add domain ใหม่เข้ามา ของเดิมมันจะไปสร้างไฟลฺ์ .conf ใน /etc/php-fpm.d/*.conf
ดังนั้น เราควรจะต้องย้ายให้มันไปอยู่ใน /etc/opt/remi/php70/php-fpm.d/ ด้วย
1 2 3 |
cd /etc/php-fpm.d/ cp mydomain.com.conf /etc/opt/remi/php70/php-fpm.d/ service php70-php-fpm restart |
ทำการตรวจสอบ tcp-connection ด้วยคำสั่ง netstat -an เพื่อให้แน่ใจ
1 2 3 4 5 6 7 8 9 |
[root@testserver001]# netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:9002 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN |
จากนั้นให้ทำการแก้ไข nginx configuration เพื่อแก้ไข port เป็น 9000
vi /home/admin/conf/web/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
server { listen XXX.XXX.XXX.XXX:80; server_name ebookit4u.com www.mydomain.com; root /home/admin/web/mydomain.com/public_html; index index.php index.html index.htm; access_log /var/log/nginx/domains/mydomain.com.log combined; access_log /var/log/nginx/domains/mydomain.com.bytes bytes; error_log /var/log/nginx/domains/mydomain.com.error.log error; location / { location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { expires max; } location ~ [^/]\.php(/|$) { fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; if (!-f $document_root$fastcgi_script_name) { return 404; } fastcgi_pass 127.0.0.1:9000; <- แก้เป็น port ที่ตรงกับ service php-fpm ที่รันอยู่ fastcgi_index index.php; include /etc/nginx/fastcgi_params; } } error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; |
ทำการ restart service อีกรอบ
1 |
service nginx restart |
1 2 3 4 5 6 |
# ps aux | grep php-fpm root 722 0.0 0.9 579988 4952 ? Ss 06:51 0:00 php-fpm: master process (/etc/opt/remi/php70/php-fpm.conf) root 862 0.0 0.0 146752 120 ? Ss 06:51 0:00 php-fpm: master process (/usr/local/vesta/php/etc/php-fpm.conf) admin 872 0.0 0.0 146752 4 ? S 06:51 0:00 php-fpm: pool www admin 873 0.0 0.0 146752 4 ? S 06:51 0:00 php-fpm: pool www admin 965 0.0 0.0 579376 8 ? S 06:51 0:00 php-fpm: pool mydomain.com |
ลองเข้าเว็บอีกรอบ จะเห็นว่า ตอนนี้สามารถใช้งาน php + fpm/FastCGI ได้เรียบร้อยละ
แถมนะครับ
สำหรับ Vesta CP นั้น เราสามารถนำ cert จาก let’s encrypt มาใช้ได้เหมือนกัน
โดยทำการแก้ไข vesta cofig ดังนี้
1 |
vim /usr/local/vesta/nginx/conf/nginx.conf |
มองหา tag : ssl_certificate แล้ว แปะ path ของ certificate ที่เราได้สร้างไว้ตั้งแต่ข้างต้น
1 2 |
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
server { listen 8083; server_name _; root /usr/local/vesta/web; charset utf-8; # Fix error "The plain HTTP request was sent to HTTPS port" error_page 497 https://$host:$server_port$request_uri; ssl on; ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ..... |
จากนั้นทำการ restart vesta อีกรอบ
1 |
/etc/init.d/vesta restart |
สำหรับท่านที่ใช้ Vesta CP อยู่ แล้วอยากลอง Upgrade ไป PHP7 ก็ลองเอาวิธีนี้ไปใช้ดูนะครับ
อีกบทความที่อยากแนะนำ เป็นการเปิดใช้งาน HTTP/2 บน Nginx ถ้าใครสนใจก็สามารถติดตาม link ด้านล่างได้เลย
– วิธีเปิดใช้งาน Nginx ให้รองรับ HTTP/2 บน CentOS 7
หากมีข้อผิดพลาดประการใด ขออภัยมา ณ ที่นี้ด้วยนะครับ ^ ^ 😉
Admin@Rockdevper.com
Comments are closed