安裝 LEMP 開發環境
linux nginx php mysql -在 Ubuntu 上安裝 Nginx + PHP-fpm 開發環境
Install Nginx
參看 Nginx 安裝指南 說明安裝或依下列步驟安裝.
> sudo apt-get update
> lsb_release -a| grep Codename
// Codename:       bionic
> export os=$(lsb_release -a 2>/dev/null | grep Codename | awk -F":" '{print $2}')
> sudo wget https://nginx.org/keys/nginx_signing.key
> sudo apt-key add nginx_signing.key     // (1)
> sudo echo 'deb https://nginx.org/packages/mainline/ubuntu/ $os nginx' >> /etc/apt/sources.list
> sudo echo 'deb-src https://nginx.org/packages/mainline/ubuntu/ $os nginx' >> /etc/apt/sources.list                    // (2)
> sudo apt remove nginx-common       // (3)
> sudo apt update
> sudo apt install nginx             // (4)
- 
加入 Nginx 軟體倉儲金鑰
 - 
將 Nginx 軟體倉儲位址加入 apt 來源列表
 - 
刪除舊版
 - 
更新後安裝 Nginx
 
在 Ubuntu 22.04 安裝時,不用上述<1>加入 Nginx 軟體倉儲金鑰,但可能會出現下列錯誤訊息, 需要為密碼庫加入金鑰
W: GPG error: https://nginx.org/packages/ubuntu focal InRelease: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY $key
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key
Start Nginx
> systemctl start nginx    // (1)
> systemctl status nginx   // (2)
> curl -I 127.0.0.1        // (3)
- 
nginx 啟動
 - 
nginx 狀態
 - 
是否正回應
 
Install PHP-fpm
> sudo apt-get install -y php-fpm
> php -v               // (1)
> ps -ef | grep [p]hp  // (2)
> systemctl status php<version>-fpm.service
- 
檢查版本
 - 
檢查 fpm 是否啟動
 
Setup PHP-fpm + Nginx
> ps -ef | grep [p]hp
// root     10676     1  0 07:11 ?        00:00:00 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
// www-data 10691 10676  0 07:11 ?        00:00:00 php-fpm: pool www
// www-data 10692 10676  0 07:11 ?        00:00:00 php-fpm: pool www
> ps -ef | grep [n]ginx
// root      4449     1  0 07:00 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
// nginx     4453  4449  0 07:00 ?        00:00:00 nginx: worker process
> ls -la /var/run/php/*.sock
// srw-rw---- 1 www-data www-data 0 Dec 24 07:11 /var/run/php/php7.2-fpm.sock
因為讓 Nginx 透過 unix socket 聯繫上 PHP-fpm, 需要 Nginx 和 PHP-fpm 同一個 USER
修改設定檔 /etc/php/7.2/fpm/pool.d/www.conf, 將 PHP-fpm 的由改 nginx 啟動
> sed -i 's/listen.owner = www-data/listen.owner = nginx/g' /etc/php/7.2/fpm/pool.d/www.conf
> sed -i 's/listen.group = www-data/listen.group = nginx/g' /etc/php/7.2/fpm/pool.d/www.conf
修改設定檔 /etc/php/7.2/fpm/php.ini, 避免由 nginx 對 php 注入程式碼的風險
> sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/7.2/fpm/php.ini
重新以 owner=nginx 啟動 php-fpm
> systemctl stop php7.2-fpm.service
> rm -rf /var/run/php/php7.2-fpm.sock
> systemctl start php7.2-fpm.service
編輯設定檔在 server 區間 ./etc/nginx/conf.d/default.conf
    root   /usr/share/nginx/html;
-    index  index.html index.htm;
+    index  index.php index.html index.htm;
+   include        fastcgi_params;
+   fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
+   fastcgi_index  index.php;
+   location ~* \.php$ {
+       fastcgi_pass   unix:/run/php/php7.2-fpm.sock;
+   }
放一個 PHP 測試檔案, 重新啟動 nginx
> echo '<?php phpinfo() ?>' > /usr/share/nginx/html/index.php
> systemctl restart nginx.service
Install PHP-mysql
> sudo apt-get install -y php-mysql > phpenmod mysqli > systemctl restart php7.2-fpm.service