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 {} \;