在 RedHat 系 Linux 中部署 LNMP

警告
本文最后更新于 2023-07-04,文中内容可能已过时。

LNMP 是一个开源的 Web 开发应用栈,本文详细讲解了如何在 RedHat 系的 Linux 发行版中安装部署 LNMP.

什么是 LNMP

LNMP分别代表Linux、Nginx、MySQL/MariaDB、PHP,LNMP就是 Linux 系统下 Nginx + MySQL/MariaDB + PHP 这种网站服务器架构。

此教程适用于所有 RedHat 系 Linux 发行版 (RedHat、CentOS、Fedora、Alma Linux、Rocky Linux 等)

Nginx

安装

技巧

如果你使用的是 CentOS 请首先确保系统中已经添加了 EPEL repository,如果没有可以使用以下指令进行添加安装

1
sudo yum install epel-release

使用 yum 或者 dnf 的安装命令安装 Nginx 即可

1
2
sudo yum install nginx # RHEL/CentOS 7 或更早版本
sudo dnf install nginx

使用 systemctl 相关指令启动服务(一般来说会自动启动)

1
2
sudo systemctl start nginx  # 启动 nginx 服务
sudo systemctl enable nginx # 设置 nginx 开机自启

systemctl 指令在启动服务后不会自动返回服务运行状态,可以使用 systemctl status nginx 查看当前 nginx 运行状态。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-04-17 14:08:59 BST; 1 day 14h ago
       Docs: man:nginx(8)
   Main PID: 406 (nginx)
      Tasks: 2 (limit: 882)
     Memory: 7.2M
     CGroup: /system.slice/nginx.service
             ├─ 406 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─4225 nginx: worker process

Apr 17 14:08:59 gatsby-RackNerd systemd[1]: Starting A high performance web server and a reverse proxy server...
查看服务运行日志

systemctl status <UNIT> 可以查看当前服务运行状态,并输出简略的日志记录。更详细的日志可以通过 journalctl 进行查看,例如

1
sudo journalctl -u nginx

会打印输出所有 nginx 运行日志。

更多实用 ststemctl 指令
1
2
3
4
5
6
sudo systemctl start nginx   # 启动 Nginx 服务
sudo systemctl status nginx  # 查看 Nginx 状态
sudo systemctl stop nginx    # 停止 Nginx 服务
sudo systemctl restart nginx # 重启 Nginx 服务
sudo systemctl enable nginx  # 配置 Nginx 开机自启
sudo systemctl disable nginx # 关闭 Nginx 开机自启

防火墙配置

为了让网页服务能够被正常访问,需要放行 HTTP 以及 HTTPS 相关端口的流量,可以通过以下指令进行系统防火墙配置。

1
2
3
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
警告

为了安全起见,建议启动系统防火墙;若此前防火墙未被开启且你当前正在使用 SSH 链接到服务主机,在开启防火墙之前请先确保 SSH 服务相关端口没有被防火墙阻挡,否则可能会造成链接中断。

通过以下指令查询服务端口是否已经被预先定义(例如 http,https,mysql)

1
firewall-cmd -get-services

如果其中包含了 ssh 服务,直接使用一下指令放行该服务流量

1
sudo firewall-cmd --permanent --add-service=SERVICE

如果其中未定义 ssh 服务端口,则可以通过以下指令放行特定端口的流量(以默认 ssh 默认使用的 22 号端口为例)

1
sudo firewall-cmd --permanent --add-port=22/tcp

完成上述配置以后,在浏览器中输入服务器的 IP 或域名可以看到以下页面,说明 nginx 已经正常安装配置完成

/install_lnmp_stack/images/nginx_example_page.webp
Example Page

:不同的 Linux 发行版展示的页面会有所不同。

MySQL/MariaDB

安装

MariaDB 兼容 MySQL 的所有功能,同时还提供了一些额外的功能,并在性能相对 MySQL 有一定性能上的提升。他们的命令行接口几乎是完全一致的,根据自己的需要安装一个即可。

1
2
3
4
5
6
# MySQL
sudo yum install mysql mysql-server # RHEL/CentOS 7 或更早版本
sudo dnf install mysql mysql-server
# MariaDB
sudo yum install mariadb mariadb-server # RHEL/CentOS 7 或更早版本
sudo dnf install mariadb mariadb-server

安装完成之后启动 MySQL 服务 (一般来说会自动启动)

1
2
sudo systemctl start mysql  # 启动 mysql 服务
sudo systemctl enable mysql # 设置 mysql 开机自启
技巧

部分系统自带的源中并不包含 MySQL,但都包含 MariaDB. 如果需要安装 MySQL 需要先到 MySQL 社区版 Yum 仓库 中找到自己系统对应的源并下载安装。

例如 CentOS 7 可以下载安装该源。

/install_lnmp_stack/images/mysql_yum_repositories.webp

1
2
curl -sSLO https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-7.noarch.rpm

配置

对于全新安装的 MySQL 建议运行 DBMS (Database Management System) 提供的安全配置脚本 mysql_secure_installation,进行基础的安全性设置。(该脚本会帮助更改一些不那么安全的默认配置,例如 远程 root 登陆)。

警告

从 2022 年 7 月开始,新安装的 MySQL 需要爱进行一定的配置才能使用 mysql_secure_installation 脚本,否则会卡在一个设置 root 用户密码的死循环。这是因为新安装的 MySQL 默认没有为 root 用户分配密码,且当前并没有启动密码访问。

为了避免这样的问题,在进行安全选项配置之前需要先为 root 用户设定密码。

1
2
3
4
5
6
# 以 root 身份运行 MySQL 命令提示符
sudo mysql
# 修改 root 用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<new_password>';
# 刷新用户数据
FLUSH PRIVILEGES;

完成以上设置后输入 exit 退出 MySQL 命令提示符,至此可以进行后续配置了。

运行 mysql_secure_installation 根据提示进行安全配置。

1
sudo mysql_secure_installation 
建议配置
  • VALIDATE PASSWORD COMPONENT - Y
  • Level of password validation policy - 2 (STRONG)
  • Remove anonymous users? - Y
  • Disallow root login remotely? - Y
  • Remove test database and access to it? - Y
  • Reload privilege tables now? - Y

PHP 安装

直接使用 yum 或者 dnf 安装相关 Package 即可

1
2
sudo yum install php php-mysqlnd php-fpm # RHEL/CentOS 7 或更早版本
sudo dnf install php php-mysqlnd php-fpm

如果当前系统的源中没有 PHP 相关的 Pakage 可以通过以下指令进行配置。

1
2
3
4
5
6
7
8
# 对于 RHEL/CentOS 7
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

# 对于 RHEL/CentOS/Alma/Rocky 8
sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm

# 对于 RHEL/CentOS/Alma/Rocky 9
sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm

安装完成后启动 PHP-FPM (一般会自行启动)

1
2
sudo systemctl start php-fpm  # 启动 php-fpm
sudo systemctl enable php-fpm # 设置 php-fpm 开机自启
Buy me a coffee
支付宝支付宝
贝宝贝宝
微信微信
0%