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 目錄

    下載的軟件包,存放在這個目錄下

創建用戶

  1. 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
    
  2. nginx 用戶

    $ useradd -c 'This is the nginx service user' -u 2002 -s /usr/sbin/nologin -d /server/www -M -U nginx
    
  3. 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 {} \;