LNMP 部署環境
LNMP 是 PHP 首選的部署環境,本教程全面介紹了 LNMP 部署環境的搭建
本教程適合初學者熟悉 LNMP 結構的入門教程,學完自己就可以輕松搭建 LNMP 環境,也可以當作開發者日常參考手冊使用
倉庫說明
lnmp 是系列文檔的一部分,官方主要實時更新3個途徑:
測試環境
本次有兩個測試環境:
騰訊云 CVM
測試環境 CVM
的系統參數如下:
- 系統 :
Debian GNU/Linux 11 (bullseye) x86_64
- 內核 :
5.10.0-9-amd64
- 內存 :
1854Mb
- 處理器 :
Intel Xeon Gold 6133 (1) @ 2.494GHz
WMware 虛擬機
測試環境 虛擬機
的系統參數如下:
- 系統 :
Debian GNU/Linux 11 (bullseye) x86_64
- 內核 :
5.10.0-9-amd64
目錄結構
整個 LNMP 項目部署結構
====================================================
LNMP 部署環境目錄
====================================================
├─ /lnmp LNMP 核心目錄
| ├─ nginx nginx
| | ├─ conf nginx配置文件
| | └─ ...
| |
| ├─ php PHP 版本目錄
| | ├─ 8.0 PHP8.0
| | ├─ 8.1 PHP8.1
| | └─ ...
| |
| ├─ ImageMagick ImageMagick
| | └─ ...
| |
| ├─ MariaDB MariaDB
| | └─ ...
| |
| ├─ Sqlite3 Sqlite3
| | └─ ...
| |
| ├─ Redis Redis
| | └─ ...
| |
| ├─ run Redis
| | └─ ...
| |
| ├─ default 缺省站點路徑
| | ├─ pma MySQL 管理工具
| | ├─ adminer.php 數據庫管理工具
| | ├─ phpinfo.php PHP 配置的信息
| | ├─ index.php 缺省站點提示頁面
| |
| ├─ /web wamp配置目錄
| | ├─ sites 虛擬主機配置文件目錄
| | |
| | ├─ www 站點根目錄
| | |
| | ├─ data MariaDB的數據目錄
| | |
| | ├─ logs 服務器相關日志文件目錄
| | | ├─ httpd httpd日志目錄
| | | ├─ mariadb MariaDB日志目錄
| | |
|
├─ install.bat 安裝wamp相關服務到系統服務
|
├─ uninstall.bat 卸載wamp相關系統服務
|
├─ menu.bat 日常用到的操作菜單
|
└─ force-delete.bat net指令刪除wamp相關系統服務
lnmp 準備工作
目錄說明
/server 目錄
存放運行 lnmp 時必要的數據和編譯文件
/package/lnmp 目錄
下載的軟件包,存放在這個目錄下
創建用戶
vsftpd 用戶
pam 驗證的虛擬用戶的系統映射用戶
$ useradd -c 'This Linux user is used to map VSFTPD virtual users' -u 2001 -s /usr/sbin/nologin -d /server/default -M -U www
nginx 用戶
$ useradd -c 'This is the nginx service user' -u 2002 -s /usr/sbin/nologin -d /server/www -M -U nginx
php-fpm 用戶
$ useradd -c 'This is the php-fpm service user' -u 2003 -s /usr/sbin/nologin -d /server/www -M -U phpfpm
創建子目錄
/server 目錄
$ mkdir -p /server/www $ mkdir /server/default /server/sites /server/nginx /server/php /server/redis /server/sqlite3 /server/ImageMagick $ mkdir -p /server/run/mariadb $ mkdir /server/run/nginx /server/run/redis /server/run/php $ mkdir -p /server/logs/nginx $ mkdir /server/logs/mariadb /server/logs/php
/package/lnmp 目錄
$ mkdir -p /package/lnmp/default $ mkdir /package/lnmp/ext_static $ mkdir /package/lnmp/ext_dynamic
目錄配置權限
$ chown nginx /server/run/nginx /server/logs/nginx
$ chown phpfpm /server/run/php /server/logs/php
$ chown mysql /server/run/mariadb /server/logs/mariadb
提示:mysql 用戶需要在構建 MariaDB 時自動生成的
安裝包列表
這些軟件包都是需要解壓的,后面都會用到
lnmp 包
目錄: /package/lnmp
包名及下載 |
---|
nginx-1.20.1.tar.gz |
openssl-1.1.1l.tar.gz |
pcre-8.45.tar.gz |
zlib-1.2.11.tar.gz |
php-8.0.12.tar.gz |
redis-6.2.5.tar.gz |
sqlite-autoconf-3360000.tar.gz |
ImageMagick-7.1.0-13.tar.gz |
PHP 靜態擴展
目錄: /package/lnmp/ext_static
包名及下載 |
---|
redis-5.3.4.tgz |
swoole-4.8.0.tgz |
yaml-2.2.1.tgz |
PHP 動態擴展
目錄: /package/lnmp/ext_dynamic
包名及下載 |
---|
imagick-3.5.1.tgz |
用戶
本次 lnmp 主要涉及到如下幾個用戶
nginx phpfpm www mysql root
root
root 是 linux 的超級用戶,擁有操作系統的全部能力
略過講解
mysql
mysql 用戶是 MariaDB 的管理用戶
- MariaDB 的 unix socket 使用 mysql 用戶創建
- MariaDB 的 pid 文件使用 mysql 用戶創建
- MariaDB 的數據庫使用 mysql 用戶管理
- MariaDB 運行用戶也是 mysql
www
www 用戶是 vsftpd 的用戶,我們 web 站點文件使用 www 用戶及 www 用戶組
nginx
nginx 用戶是 nginx 服務器訪問 web 站點的用戶
為了保證 nginx 用戶能正常訪問 web 站點,需要將 nginx 加入到 www 用戶組中
$ usermod -G www nginx
phpfpm
phpfpm 用戶是 php-fpm 服務的管理用戶
php-fpm 服務用戶監聽站點的用戶是 nginx
所以通常來講 phpfpm 用戶并不需要對 web 站點有訪問權限,如有必要,再行加入到 www 用戶組中
$ usermod -G www phpfpm
文件權限
文件類型 | 權限 |
---|---|
用戶 | www |
用戶組 | www |
目錄 | 750 |
文件 | 640 |
設置站點用戶
$ chown www:www -R /site/to/path/
設置站點文件權限
$ find /site/to/path -type f -exec chmod 640 {} \;
設置站點目錄權限
$ find /site/to/path -type d -exec chmod 750 {} \;
寫入權限
如果 php-fpm 服務對目錄需要寫入權限
通常只需要 nginx 用戶有寫入權限即可
phpfpm 用戶通常與站點權限無光
$ chmod 770 /write/to/path
讀取權限
如果只需要讀取權限的話,安全起見修改為 root 用戶
$ chown root:root /read/to/path $ find /read/to/path -type f -exec chmod 444 {} \; $ find /read/to/path -type f -exec chmod 555 {} \;