debian11部署LNMP(nginx+mariadb+php)教程

前言

LNMP是一种常见的网站开发和运行环境,它由四个主要的软件组成:

  • Linux:操作系统,提供基础的运行平台
  • Nginx:高性能的Web服务器,负责处理HTTP请求和响应
  • MariaDB:开源的关系型数据库管理系统,负责存储和管理数据
  • PHP:脚本语言,负责处理业务逻辑和动态内容

在本教程中,我们将使用debian11作为操作系统,编译安装最新版本的nginx、mariadb和php,并且开启一些常用的和必要的模块。我们假设你已经有了一台安装了debian11的服务器,并且可以通过SSH远程登录。

步骤一:安装必要的依赖包

在开始编译安装之前,我们需要先安装一些必要的依赖包,这些包可以帮助我们编译、安装和运行LNMP的各个组件。我们可以使用apt命令来安装这些包,如下所示:

1
2
sudo apt update && apt upgrade -y
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev libxml2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libzip-dev libpam0g-dev libjudy-dev libsnappy-dev liblzma-dev bison libpmem-dev libbz2-dev -y

这里我们安装了以下几类包:

  • build-essential:包含了编译器、链接器等基本的开发工具
  • libpcre3、libpcre3-dev:提供了Perl兼容正则表达式的库,用于nginx的rewrite模块
  • zlib1g、zlib1g-dev:提供了压缩和解压缩的库,用于nginx的gzip模块
  • openssl、libssl-dev:提供了加密和解密的库,用于nginx的ssl模块
  • libxml2-dev、libcurl4-openssl-dev:提供了XML解析和HTTP客户端的库,用于php的curl、dom、simplexml等扩展
  • libjpeg-dev、libpng-dev、libfreetype6-dev:提供了图像处理的库,用于php的gd扩展
  • libmcrypt-dev:提供了加密算法的库,用于php的mcrypt扩展
  • libzip-dev:提供了ZIP文件处理的库,用于php的zip扩展

安装完成后,我们可以检查一下这些包是否正确安装:

1
dpkg -l | grep -E 'build-essential|libpcre3|zlib1g|openssl|libxml2|libcurl4|libjpeg|libpng|libfreetype6|libmcrypt|libzip'

如果没有报错,就说明这些包都已经成功安装。

要养成把源码包放到/usr/local/src目录下的好习惯

步骤二:下载并编译安装nginx

接下来,我们要下载并编译安装nginx。我们可以从官网下载最新版本的源码包:

1
2
3
wget https://nginx.org/download/nginx-1.24.0.tar.gz

cp nginx-1.24.0.tar.gz /usr/local/src

然后解压缩源码包:

1
tar zxvf nginx-1.24.0.tar.gz

进入源码目录:

1
cd nginx-1.24.0

执行configure命令来配置编译选项:

1
./configure --prefix=/usr/local/nginx --user=www-data --group=www-data --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre

这里我们指定了以下几个选项:

  • –prefix=/usr/local/nginx:指定了安装目录为/usr/local/nginx
  • –user=www-data –group=www-data:指定了运行nginx的用户和组为www-data(如果不存在,则会自动创建)
  • –with-http_ssl_module:开启了ssl模块,支持HTTPS协议
  • –with-http_gzip_static_module:开启了gzip_static模块,支持压缩静态文件
  • –with-http_stub_status_module:开启了stub_status模块,支持查看nginx状态信息
  • –with-pcre:使用pcre库支持rewrite模块

如果没有报错,就说明配置成功。然后执行make命令来编译源码:

  • 如果你服务器线程够多,可以在make 命令后面加个-j参数,编译会更快,安装也同理,如给四个线程 make -j4 ,或者直接最大线程 make -j$(nproc)
  • 如果make 或者make install 出现报错,则:
    1. 检查你的环境是否安装了需要的依赖包,比如编译工具、库文件等等。可以尝试使用 apt install package 安装相关依赖。
    2. 检查编译选项中是否有与当前系统不兼容的配置。可搜索相应错误信息来确认具体原因,然后酌情修改编译选项。
1
make -j$(nproc)

如果没有报错,就说明编译成功。最后执行make install命令来安装nginx:

1
sudo make install -j$(nproc)

如果没有报错,就说明安装成功。我们可以检查一下nginx是否正确安装:

1
sudo /usr/local/nginx/sbin/nginx -v

如果输出了nginx的版本信息,就说明nginx已经正确安装。我们可以查看一下nginx的配置文件:

1
sudo vim /usr/local/nginx/conf/nginx.conf

这里我们可以看到nginx的默认配置,包括监听端口、日志文件、虚拟主机等。我们可以根据自己的需要修改这些配置,或者添加新的配置。例如,我们可以开启gzip压缩功能,提高网站的性能:

1
2
3
4
5
6
7
8
9
http {
...
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain text/css text/javascript application/json application/javascript application/xml application/x-font-ttf image/svg+xml;
gzip_vary on;
...
}

保存并退出后,我们可以使用以下命令来测试配置文件是否正确:

1
sudo /usr/local/nginx/sbin/nginx -t

如果没有报错,就说明配置文件正确。然后我们可以使用以下命令来启动nginx:

1
sudo /usr/local/nginx/sbin/nginx

如果没有报错,就说明nginx已经启动。我们可以使用以下命令来查看nginx的进程:

1
ps aux | grep nginx

如果看到有一个master进程和几个worker进程,就说明nginx正常运行。我们也可以使用以下命令来查看nginx的状态信息:

1
curl http://localhost/nginx_status

如果看到类似以下的输出,就说明nginx状态信息正常:

1
2
3
4
Active connections: 1 
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0

至此,我们已经完成了下载并编译安装nginx的步骤。

步骤三:下载并编译安装mariadb

安装前依赖解决

  • cmake

https://cmake.org/download/

  • boost

boost Boost库是一个可移植、提供源代码的C库,作为标准库的后备,是C标准化进程的开发引擎之 一

https://www.boost.org

1
2
#cmake命令 2.8 以上
cmake --version
1
2
3
4
5
6
7
wget https://boostorg.jfrog.io/artifactory/main/release/1.82.0/source/boost_1_82_0.tar.gz

cp boost_1_82_0.tar.gz /usr/local/src

tar -zxvf boost_1_82_0.tar.gz

mv boost_1_82_0 /usr/local/boost

接下来,我们要下载并编译安装mariadb。我们可以从官网下载最新版本的源码包:

1
2
wget https://mirrors.ustc.edu.cn/mariadb/mariadb-10.10.4/source/mariadb-10.10.4.tar.gz
cp mariadb-10.10.4.tar.gz /usr/local/src

然后解压缩源码包:

1
tar zxvf mariadb-10.10.4.tar.gz

进入源码目录:

1
cd mariadb-10.10.4

创建build目录,用来放编译后的缓存文件,然后进入build目录:

1
mkdir build && cd build

如果cmake 出错或者又需要添加别的库的支持,直接执行 rm -rf *命令,删除build当前目录下的所有编译文件

执行cmake命令来配置编译选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-DMYSQL_DATADIR=/usr/local/mariadb/data \
-DMYSQL_UNIX_ADDR=/usr/local/mariadb/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STPRAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWIYH_READLINE=1 \
-DWITH_LIBWRAP=0 \
-DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DMYSQL_TCP_PORT=3306 \
-DWITH_BOOST=/usr/local/boost -DBOOST_ROOT=/usr/local/boost \
-DMYSQL_USER=mysql \
-DWITHOUT_GSSAPI=ON

这里我们指定了以下几个选项:

  • -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb:指定了安装目录为/usr/local/mariadb
  • -DMYSQL_DATADIR=/usr/local/mariadb/data:指定了数据文件的目录为/usr/local/mariadb/data
  • -DMYSQL_UNIX_ADDR=/usr/local/mariadb/mysql.sock:指定sock文件路径
  • -DWITH_INNOBASE_STORAGE_ENGINE=1:开启了InnoDB存储引擎支持,支持事务和外键等特性
  • -DWITH_ARCHIVE_STORAGE_ENGINE=1:开启了Archive存储引擎支持,支持高压缩比的存储
  • -DWITH_BLACKHOLE_STORAGE_ENGINE=1:开启了Blackhole存储引擎,支持不存储任何数据的存储
  • -DWITH_EMBEDDED_SERVER=1:开启嵌入式服务器支持,可以作为一个嵌入式服务器集成到其他程序中。生成一个libmysqld.a(.so)的库,这个库同时集成了mysql服务与客户端API
  • -DENABLED_LOCAL_INFILE=1:开启本地数据导入支持。
  • -DWITH_READLINE=1:使用readline库支持命令行编辑和历史记录功能
  • -DWITH_LIBWRAP=0:关闭libwrap库的支持,避免编译错误
  • -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci :安装所有字符集、默认字符集utf-8 、校验字符
  • -DWITH_SSL=system:使用系统自带的openssl库支持加密连接功能
  • -DWITH_ZLIB=system:使用系统自带的zlib库支持压缩功能
  • -DMYSQL_TCP_PORT=3306:指定了TCP端口号为3306
  • -DWITH_BOOST=/usr/local/boost -DBOOST_ROOT=/usr/local/boost :允许下载boost库文件
  • -DMYSQL_USER=mysql : 指定了运行mariadb的用户为mysql

以上参数需要和下文my.cnf同步(如果你需要修改我的编译参数,记得下文配置文件一并修改)

如果没有报错,就说明配置成功。然后执行make命令来编译源码:

1
make -j$(nproc)

如果没有报错,就说明编译成功。最后执行make install命令来安装mariadb:

1
sudo make install -j$(nproc)

如果没有报错,就说明安装成功。我们可以检查一下mariadb是否正确安装:

1
sudo /usr/local/mariadb/bin/mysql --version

如果输出了mariadb的版本信息,就说明mariadb已经正确安装。

编译并安装完成后,我们需要进行一些配置工作,以确保MariaDB能够正常运行。首先,我们需要创建一个mysql用户和组,并修改MariaDB目录的属主和属组:

1
2
3
sudo groupadd mysql
sudo useradd -r -g mysql mysql
sudo chown -R mysql:mysql /usr/local/mariadb

然后,我们需要复制初始化脚本到相应的位置,并设置相应的权限:

1
2
sudo cp /usr/local/mariadb/support-files/mysql.server /etc/init.d/mysqld
sudo chmod +x /etc/init.d/mysqld

查看MySQL/MariaDB将要从哪些配置文件中读取默认选项:

1
mysqld --help --verbose | grep "Default options are read" 

默认情况下会在以下位置读取:

1
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf $MARIADB_INSTALL_DIR/my.cnf

修改MariaDB配置文件,优化MariaDB

配置文件位于/etc/my.cnf ,没有则创建一个(直接用vim也会自动创建)

1
sudo vim /usr/local/mariadb/my.cnf

参考配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# Begin /etc/mysql/my.cnf
# The following options will be passed to all MySQL clients
[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
user = mysql
port = 3306
socket = /tmp/mysql.sock
# MariaDB安装地址
basedir = /usr/local/mariadb/
datadir = /usr/local/mariadb/data/
pid-file = /usr/local/mariadb/mysqld.pid
log-error = /usr/local/mariadb/data/logs/mysqld.log

# 开启慢查询日志功能
slow_query_log = 1
slow_query_log_file = /usr/local/mariadb/data/logs/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

#skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
sort_buffer_size = 512K
net_buffer_length = 16K
myisam_sort_buffer_size = 8M
skip-name-resolve = 0

# character set settings
character-set-server = utf8
collation-server = utf8_general_ci

# default storage engine
default-storage-engine = InnoDB

# innodb settings
innodb_buffer_pool_size = 32M
innodb_log_file_size = 48M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 8
innodb_lock_wait_timeout = 50
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_force_recovery =1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
# End /etc/my.cnf

保存并退出后,我们可以使用以下命令来初始化数据库:

1
sudo /usr/local/mariadb/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb --datadir=/usr/local/mariadb/data

如果没有报错,就说明数据库初始化成功。然后我们可以使用以下命令来启动mariadb:

1
sudo /usr/local/mariadb/bin/mysqld_safe --user=mysql

如果没有报错,就说明mariadb已经启动。我们可以使用以下命令来查看mariadb的进程:

1
ps aux | grep mysqld

如果看到有一个mysqld_safe进程和一个mysqld进程,就说明mariadb正常运行。我们也可以使用以下命令来登录mariadb:

1
/usr/local/mariadb/bin/mysql -u root -p

如果看到类似以下的输出,就说明mariadb登录成功:

1
2
3
4
5
6
7
8
9
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.6.5-MariaDB Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

至此,我们已经完成了下载并编译安装mariadb的步骤。

步骤四:下载并编译安装php

接下来,我们要下载并编译安装php。我们可以从官网下载最新版本的源码包:

1
2
3
wget https://www.php.net/distributions/php-8.1.0.tar.gz

cp php-8.1.0.tar.gz /usr/local/src

然后解压缩源码包:

1
tar zxvf php-8.1.0.tar.gz

进入源码目录:

1
cd php-8.1.0

执行configure命令来配置编译选项:

1
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-mysqli=/usr/local/mariadb/bin/mysql_config --with-pdo-mysql=/usr/local/mariadb/bin/mysql_config --with-openssl --with-zlib --with-curl --with-gd --with-jpeg --with-png --with-freetype --enable-gd-jis-conv --with-zip --enable-mbstring

这里我们指定了以下几个选项:

  • –prefix=/usr/local/php:指定了安装目录为/usr/local/php
  • –with-config-file-path=/usr/local/php/etc:指定了配置文件的目录为/usr/local/php/etc
  • –enable-fpm:开启了fpm模式,支持与nginx配合使用
  • –with-fpm-user=www-data –with-fpm-group=www-data:指定了运行php-fpm的用户和组为www-data
  • –with-mysqli=/usr/local/mariadb/bin/mysql_config –with-pdo-mysql=/usr/local/mariadb/bin/mysql_config:开启了mysqli和pdo_mysql扩展,支持与mariadb交互
  • –with-openssl:开启了openssl扩展,支持加密功能
  • –with-zlib:开启了zlib扩展,支持压缩功能
  • –with-curl:开启了curl扩展,支持HTTP客户端功能
  • –with-gd:开启了gd扩展,支持图像处理功能
  • –with-jpeg –with-png –with-freetype:指定了gd扩展使用的图像库
  • –enable-gd-jis-conv:开启了gd扩展的日文转换功能
  • –with-zip:开启了zip扩展,支持ZIP文件处理功能
  • –enable-mbstring:开启了mbstring扩展,支持多字节字符串处理功能

如果没有报错,就说明配置成功。然后执行make命令来编译源码:

1
sudo make -j$(nproc)

如果没有报错,就说明编译成功。最后执行make install命令来安装php:

1
sudo make install -j$(nproc)

如果没有报错,就说明安装成功。我们可以检查一下php是否正确安装:

1
sudo /usr/local/php/bin/php -v

如果输出了php的版本信息,就说明php已经正确安装。我们可以查看一下php的配置文件:

1
sudo vim /usr/local/php/etc/php.ini

这里我们可以看到php的默认配置,包括错误报告、内存限制、文件上传、时区等。我们可以根据自己的需要修改这些配置,或者添加新的配置。例如,我们可以开启错误显示功能,方便调试:

1
2
3
4
[PHP]
...
display_errors = On
...

保存并退出后,我们可以使用以下命令来复制php-fpm的配置文件:

1
2
sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
sudo cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

然后我们可以使用以下命令来启动php-fpm

1
sudo /usr/local/php/sbin/php-fpm

如果没有报错,就说明php-fpm已经启动。我们可以使用以下命令来查看php-fpm的进程:

1
ps aux | grep php-fpm

如果看到有一个master进程和几个worker进程,就说明php-fpm正常运行。我们也可以使用以下命令来测试php是否能够处理请求:

1
curl http://localhost/index.php

如果看到类似以下的输出,就说明php能够处理请求:

1
Hello, world!

至此,我们已经完成了下载并编译安装php的步骤。

步骤五:配置nginx和php-fpm的通信

最后,我们要配置nginx和php-fpm的通信,让nginx能够将PHP请求转发给php-fpm处理,并将结果返回给客户端。我们可以使用以下命令来编辑nginx的虚拟主机配置文件:

1
sudo vim /usr/local/nginx/conf/vhost/default.conf

这里我们可以添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
server_name localhost;
root /usr/local/nginx/html;
index index.html index.php;

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

这里我们指定了以下几个参数:

  • listen 80:指定了监听端口为80
  • server_name localhost:指定了服务器名称为localhost
  • root /usr/local/nginx/html:指定了网站根目录为/usr/local/nginx/html
  • index index.html index.php:指定了默认首页为index.html或index.php
  • location ~ .php$:匹配所有以.php结尾的请求
  • fastcgi_pass 127.0.0.1:9000:指定了将请求转发给本地9000端口的php-fpm进程
  • fastcgi_index index.php:指定了默认PHP文件为index.php
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name:指定了PHP脚本文件的完整路径
  • include fastcgi_params:包含了一些通用的fastcgi参数

保存并退出后,我们可以使用以下命令来测试配置文件是否正确:

1
sudo /usr/local/nginx/sbin/nginx -t

如果没有报错,就说明配置文件正确。然后我们可以使用以下命令来重载nginx:

1
sudo /usr/local/nginx/sbin/nginx -s reload

如果没有报错,就说明nginx已经重载。我们可以使用以下命令来测试nginx是否能够处理PHP请求:

1
curl http://localhost/index.php

如果看到类似以下的输出,就说明nginx能够处理PHP请求:

1
Hello, world!

至此,我们已经完成了配置nginx和php-fpm的通信的步骤。

步骤六:把所有的服务能通过systemctl来管理启动

为了方便管理和控制我们的LNMP服务,我们可以把它们都注册为systemd的服务单元,这样我们就可以使用systemctl命令来启动、停止、重启、查看状态等操作。我们可以使用以下命令来创建服务单元文件:

创建nginx.service文件

1
sudo vim /lib/systemd/system/nginx.service

然后添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

创建mariadb.service文件

1
sudo vim /lib/systemd/system/mariadb.service

然后添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# mariadb.service
[Unit]
Description=MariaDB database server
Documentation=https://mariadb.com/kb/en/
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/mariadb/mariadb.pid
ExecStart=/usr/local/mariadb/bin/mysqld_safe --user=mysql --basedir=/usr/local/mariadb --datadir=/usr/local/mariadb/data
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

创建php-fpm.service文件

1
sudo vim /lib/systemd/system/php-fpm.service

然后添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# php-fpm.service
[Unit]
Description=PHP FastCGI Process Manager
Documentation=https://www.php.net/manual/en/install.fpm.php
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

这里我们指定了以下几个参数:

  • Description:服务的描述信息
  • Documentation:服务的文档链接
  • After:服务的启动顺序,表示在哪些服务之后启动
  • Wants:服务的启动依赖,表示需要哪些服务同时启动
  • Type:服务的类型,表示如何启动和停止服务,这里我们使用forking类型,表示服务会创建子进程并返回主进程的PID
  • PIDFile:服务的PID文件位置,用于记录主进程的PID,方便管理和控制服务
  • ExecStart:服务的启动命令,用于执行服务的主程序或脚本,可以指定一些参数或选项
  • ExecStartPre:服务的启动前置命令,用于执行一些准备工作,例如检查配置文件等
  • ExecReload:服务的重载命令,用于重新加载配置文件或刷新缓存等,不会中断服务的运行
  • ExecStop:服务的停止命令,用于终止服务的运行,通常是发送一个信号给主进程
  • PrivateTmp:服务的私有临时目录选项,表示是否为每个服务创建一个独立的/tmp目录,避免文件冲突或泄露等问题
  • WantedBy:服务的安装目标,表示在哪些运行级别下启用该服务,这里我们使用multi-user.target,表示在多用户模式下启用该服务

保存并退出后,我们可以使用以下命令来重新加载systemd:

1
sudo systemctl daemon-reload

然后给添加的服务给予执行权限:

1
2
3
chmod a+x /lib/systemd/system/nginx.service
chmod a+x /lib/systemd/system/mariadb.service
chmod a+x /lib/systemd/system/php-fpm.service

如果没有报错,就说明systemd已经重新加载。然后我们可以使用以下命令来启动、停止、重启、查看状态等操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo systemctl start nginx # 启动nginx服务
sudo systemctl stop nginx # 停止nginx服务
sudo systemctl restart nginx # 重启nginx服务
sudo systemctl reload nginx # 重载nginx服务
sudo systemctl status nginx # 查看nginx服务状态

sudo systemctl start mariadb # 启动mariadb服务
sudo systemctl stop mariadb # 停止mariadb服务
sudo systemctl restart mariadb # 重启mariadb服务
sudo systemctl status mariadb # 查看mariadb服务状态

sudo systemctl start php-fpm # 启动php-fpm服务
sudo systemctl stop php-fpm # 停止php-fpm服务
sudo systemctl restart php-fpm # 重启php-fpm服务
sudo systemctl reload php-fpm # 重载php-fpm服务
sudo systemctl status php-fpm # 查看php-fpm服务状态

如果没有报错,就说明systemctl能够正常管理和控制我们的LNMP服务。我们也可以使用以下命令来设置LNMP服务为开机自启动:

1
2
3
sudo systemctl enable nginx # 设置nginx服务为开机自启动
sudo systemctl enable mariadb # 设置mariadb服务为开机自启动
sudo systemctl enable php-fpm # 设置php-fpm服务为开机自启动

如果没有报错,就说明LNMP服务已经设置为开机自启动。我们可以使用以下命令来查看LNMP服务的开机自启动状态:

1
2
3
sudo systemctl is-enabled nginx # 查看nginx服务是否开机自启动
sudo systemctl is-enabled mariadb # 查看mariadb服务是否开机自启动
sudo systemctl is-enabled php-fpm # 查看php-fpm服务是否开机自启动

如果输出了enabled,就说明LNMP服务已经开机自启动。

至此,我们已经完成了把所有的服务能通过systemctl来管理启动的步骤。

结语

恭喜你,你已经成功地用debian11来部署了LNMP(nginx+mariadb+php)环境,并且把它们都注册为systemd的服务单元,方便管理和控制。你现在可以使用这个环境来开发和运行你的网站项目了。希望这个教程文档对你有帮助,如果你有任何问题或者建议,可以随时跟我说哦。谢谢你的阅读和支持。😘