Pocky Glico
Aug 28, 2017 · 5 min read

ติดตั้ง Nginx + Laravel 5.4 (PHP 7.1) บน CentOS 7

จุดประสงค์ของเนื้อหานี้ เพื่อใช้จดบันทึกขั้นตอนการ Setup และการ Configure Server เพื่อให้พร้อมต่อการทำงานของ Nginx กับ Laravel 5.4(PHP 7.1) บน CentOS 7


วันที่อัพเดทเนื้อหาล่าสุด: 28 สิงหาคม 2060


ความพร้อมก่อนเข้าเนื้อหา

  1. มี Server ที่ติดตั้ง CentOS 7 (Clean Install)
  2. มีพื้นฐานเกี่ยวกับ Laravel มาก่อน

สรุปขั้นตอนก่อนลงมือ

  1. ติดตั้ง Nginx
  2. ติดตั้ง PHP 7.1 (PHP-FPM)
  3. Configure ให้ PHP ทำงานบน Nginx
  4. ติดตั้ง Laravel 5.4
  5. Configure Virtual Host ของ Nginx
  6. Configure Laravel และ SELinux

ติดตั้ง Nginx

ติดตั้ง EPEL repository ก่อน, จากนั้นติดตั้ง Nginx

# sudo yum -y install epel-release
# sudo yum -y install nginx

Run และ Enable เพื่อให้ Nginx ทำงานทันทีหากมีการ Reboot Server

# sudo systemctl start nginx
# sudo systemctl enable nginx

ทดสอบการทำงาน โดยรันคำสั่งต่อไปนี้

# netstat -plntu// หารันแล้วแสดงข้อความว่า 
// "-bash: netstat: command not found"
// ให้ติดตั้ง net-tools package ด้วยคำสั่งนี้
// และลองรัน
$ netstat -plntu อีกครั้ง
# sudo yum -y install net-tools

จะได้ผลลัพธ์ดังรูป


ติดตั้ง PHP 7.1 (PHP-FPM)

ติดตั้ง repository ที่ชื่อว่า webtatic, จากนั้นติดตั้ง PHP+PHP-FPM และ Components พื้นฐานของ PHP ที่ต้องใช้สำหรับ Laravel

# sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm# sudo yum install -y php71w php71w-curl php71w-common php71w-cli php71w-mysql php71w-mbstring php71w-fpm php71w-xml php71w-pdo php71w-zip

ทดสอบการทำงาน โดยรันคำสั่งต่อไปนี้

# php-fpm -v

จะได้ผลลัพธ์ดังรูป


Configure ให้ PHP-FPM ทำงานบน Nginx

เปิดไฟล์ /etc/php.ini ด้วย vi หรือ nano(แล้วแต่ถนัด)โดยหาบรรทัดที่มีค่าว่า

;cgi.fix_pathinfo=1

จากนั้นแก้ไขโดย Uncomment (เอา ; ออก) และแก้ค่าเป็น 0 ดังนี้

cgi.fix_pathinfo=0

Save และปิดไฟล์

จากนั้นเปิดไฟล์ /etc/php-fpm.d/www.conf ด้วย vi หรือ nano(แล้วแต่ถนัด) และแก้ไขบรรทัดต่อไปนี้

user = apache
group = apache
-- แก้ไขให้เป็น --user = nginx
group = nginx
listen = 127.0.0.1:9000-- แก้ไขให้เป็น --listen = /run/php-fpm/php-fpm.sock

และ

;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660
-- แก้ไขให้เป็น --listen.owner = nginx
listen.group = nginx
listen.mode = 0660

จากนั้น Save และปิดไฟล์

Run และ Enable เพื่อให้ php-fpm ทำงานทันทีหากมีการ Reboot Server

# sudo systemctl start php-fpm
# sudo systemctl enable php-fpm

ทดสอบการทำงาน โดยรันคำสั่งต่อไปนี้

# netstat -pl | grep php-fpm.sock

จะได้ผลลัพธ์ดังรูป

ทดสอบการทำงาน PHP-FPM บน Nginx โดยการเปิด Web browser และกรอก URL เป็น IP Address หรือ Domain name ของ Server

หากทำงานได้ปกติ จะแสดงหน้าเว็บ Wellcome Nginx, แต่หากไม่ทำงาน ให้ตรวจสอบ firewall ด้วยคำสั่งต่อไปนี้

# firewall-cmd --list-all

ตรวจสอบที่บรรทัด services จะพบว่ายังไม่มี service http และ https, ให้เพิ่มเข้าไปด้วยคำสั่งต่อไปนี้

# sudo firewall-cmd --permanent --zone=public --add-service=http 
# sudo firewall-cmd --permanent --zone=public --add-service=https
# sudo firewall-cmd --reload

เมื่อตรวจสอบ firewall อีกครั้งจะพบว่ามี service http และ https เพิ่มขึ้นมาแล้ว

ทดสอบโดยการ Refresh web browser อีกครั้งจะพบหน้าจอดังรูป


ติดตั้ง Laravel 5.4

ติดตั้ง Composer, Unzip และ Laravel ตามลำดับ

# curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composer# sudo yum -y install unzip# composer create-project laravel/laravel /var/www/laravel

Configure Virtual Host ของ Nginx

สร้าง Virtual Host, โดยการสร้างไฟล์ laravel.conf ไว้ใน /etc/nginx/conf.d/

# nano /etc/nginx/conf.d/laravel.conf

จากนั้นใส่ configuration ดังนี้

server {
listen 80;
#listen [::]:80 ipv6only=on;

# Log files for Debugging
access_log /var/log/nginx/laravel-access.log;
error_log /var/log/nginx/laravel-error.log;

# Webroot Directory for Laravel project
root /var/www/laravel/public;
index index.php index.html index.htm;

# Your Domain Name
server_name 192.168.99.100;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

# PHP-FPM Configuration Nginx
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

โดยบรรทัดที่เป็น server_name 192.168.99.100; ให้แก้ไขให้ตรงกับ IP Address ของ server หรือใส่เป็น Domain name

จากนั้น Save และปิดไฟล์

ทดสอบ Nginx configuration และ Restart Nginx ด้วยคำสั่งต่อไปนี้

# nginx -t
# sudo systemctl restart nginx

Configure Laravel และ SELinux

ก่อนจะทำการ Configure ค่าใดๆ หากเราลองทดสอบด้วยการใช้ web browser ชี้ URL ไปที่ IP address ของ Server, จะพบว่ายังไม่สามารถแสดงผลได้, โดยจะมีข้อความแจ้งว่า “403 Forbidden

ลองรันคำสั่งดังนี้

# sestatus

จะได้ผลลัพธ์ดังนี้

ซึ่งหมายความว่า SELinux อยู่ใน mode enforcing, ซึ่งการปรับตั้งค่าของ SELinux เพื่อให้สามารถรัน Laravel ได้ สามารถทำได้ 2 วิธีดังนี้

วิธีที่ 1 (แนะนำ)

ติดตั้ง SELinux management tools สำหรับ CentOS 7 ด้วยคำสั่ง

# sudo yum -y install policycoreutils-python

จากนั้นรันคำสั่งต่อไปนี้

# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel(/.*)?'# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel/public(/.*)?'# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel/storage(/.*)?'# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel/app(/.*)?'# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel/bootstrap(/.*)?'# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel/config(/.*)?'# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel/database(/.*)?'# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel/resources(/.*)?'# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel/routes(/.*)?'# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel/vendor(/.*)?'# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/laravel/tests(/.*)?'# restorecon -Rv '/var/www/laravel/'

จากนั้นให้ทดลองใช้ web browser ชี้ URL ไปที่ IP address ของ Server, จะพบ error ดังรูปนี้

แก้ไขโดยรันคำสั่งต่อไปนี้

# chown -R nginx:root /var/www/laravel# chmod 755 /var/www/laravel/storage

ลอง Refresh web browser จะพบหน้า Laravel ดังรูป

วิธีที่ 2 (ไม่แนะนำ)

วิธีนี้เราจะทำการ disable SELinux โดยเปิดไฟล์ /etc/sysconfig/selinux และแก้ไขบรรทัดต่อไปนี้

SELINUX=enforcing-- แก้ไขเป็น --SELINUX=disabled

Save และปิดไฟล์, และให้ทำการ reboot server

จากนั้นให้ตรวจสอบผลการตั้งค่าโดย โดยพิมพ์คำสั่งนี้

# sestatus

จะได้ผลลัพธ์ดังรูป

จากนั้นให้ทดลองใช้ web browser ชี้ URL ไปที่ IP address ของ Server, จะพบ error ดังรูปนี้

แก้ไขโดยรันคำสั่งต่อไปนี้

# chmod -R 777 /var/www/laravel/storage

ลอง Refresh web browser จะพบหน้า Laravel (จบแล้ว)


)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade