本文参考How to Install LEMP Stack on Rocky Linux 9一文,并在虚拟机中试验成功。


LNMP(又有称LEMP的)是免费、开源软件的组合。首字母缩略词LNMP指的是Linux(操作系统)、Nginx服务器、MySQL(数据库软件)和PHP、PERL或Python的首字母,它们是构建一个可行的通用web服务器的主要组件。

升级系统

首先,我们将使用以下命令将系统更新到最新版本

dnf update

注:如果你习惯用yum update,那么Rocky Linux同样支持。两者属于不同的包管理软件,只是dnf更强大,速度也更快,所以下面所有的安装都通过dnf进行。

安装NGINX服务

首先,我们将从安装Nginx服务开始。要完成安装,请使用以下命令:

dnf install nginx -y

输出:
dnf_install_nginx.jpg
安装完成后,启动web服务器,添加Nginx到系统服务中,并使用以下命令验证状态。

systemctl start nginx

systemctl enable nginx

systemctl status nginx

输出:
systemctl_status_nginx.jpg
检查Nginx版本:

nginx -v

输出:

[root@localhost ~]# nginx -v
nginx version: nginx/1.20.1

要使你的网页对公众开放,你必须使用以下命令编辑你的防火墙规则,以允许web服务器上的HTTP请求。

firewall-cmd --permanent --zone=public --add-service=http 

firewall-cmd --permanent --zone=public --add-service=https

firewall-cmd --reload

输出:

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=http
success
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@localhost ~]# firewall-cmd --reload
success

通过访问服务器的IP地址,验证web服务器正在运行并可访问。
在浏览器中输入地址:

http://IP_address

install_nginx_success.jpg

我们需要让Nginx用户成为web目录的所有者。默认情况下,它属于root用户。

chown nginx:nginx /usr/share/nginx/html -R

注:用户可以根据自己的需要调整,别太离谱就成。常用的还有www:www或者http:http之类的。

安装MariaDB服务

MariaDB是一个流行的数据库服务器(它属于MySQL的分支,并保留了与MySQL的高度兼容性)。安装很简单,只需要几个步骤,如下所示。

dnf install mariadb-server mariadb -y

安装完成后,启动MariaDB,开启MariaDB的自启动服务,并使用下面的命令验证状态。

systemctl start mariadb

systemctl enable mariadb

systemctl status mariadb

最后,你需要通过以下命令来对MariaDB的安装进行安全设置。

mysql_secure_installation

安全设置之后,你可以连接到MySQL,并使用以下命令查看数据库服务器上的现有数据库。

mysql -e "SHOW DATABASES;" -p

输出:

[root@localhost ~]# mysql -e "SHOW DATABASES;" -p
Enter password:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

安装PHP

执行以下命令安装PHP-FPM。

dnf install php php-mysqlnd php-fpm php-opcache php-gd php-xml php-mbstring -y

安装完成后,启动php-fpm,启用php-fpm自动启动,并使用下面的命令验证状态。

systemctl start php-fpm

systemctl enable php-fpm

systemctl status php-fpm

默认情况下,PHP-FPM作为Apache用户运行。由于我们使用的是NGINX Web服务器,因此我们需要更改以下行。

使用你喜欢的编辑器,编辑文件/etc/php-fpm.d/www.conf

vim /etc/php-fpm.d/www.conf

找到以下内容:

user = apache
group = apache

将它们改为:

user = nginx
group = nginx

注:如果你在安装nginx的步骤中,将web目录改成了www或者http用户和用户组,那么这里也做相应调整。

更改后,需要重新加载php-fpm

systemctl reload php-fpm

现在,可以通过创建一个简单的info.php文件来测试你的PHP服务。该文件应放在你的Web服务器的根目录/usr/share/nginx/html/中。

用以下代码创建文件:

echo "<?php phpinfo() ?>" > /usr/share/nginx/html/info.php

重启Nginx和PHP-FPM。

systemctl restart nginx php-fpm

现在,再次访问http://localhost/info.phphttp://yourserver-ip-address/info.php,你应该看到与下面类似的页面。
php_info.jpg

问题汇总

在使用systemctl enable nginx命令时,系统提示/etc/rc.d/rc.local not marked executable, skipping
使用systemctl status rc-local命令查看rc-local的服务
systemctl_status_rc-local.jpg
结果服务未启动。
使用systemctl enable rc-local开启服务,错误提示如下:

The unit files have no [Install] section. They are not meant to be enabled
 using systemctl.
 Possible reasons for having this kind of units are:
 1) A unit may be statically enabled by being symlinked from another unit's
 .wants/ or .requires/ directory.
 2) A unit's purpose may be to act as a helper for some other unit which has
 a requirement dependency on it.
 3) A unit may be started when needed via activation (socket, path, timer,
 D-Bus, udev, scripted systemctl call, ...).

解决办法就是编辑/etc/systemd/system/rc-local.service文件:

[Unit]
 Description=/etc/rc.d/rc.local Compatibility
 ConditionPathExists=/etc/rc.d/rc.local

[Service]
 Type=forking
 ExecStart=/etc/rc.d/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99

[Install]
 WantedBy=multi-user.target

保存后还需确保rc.local可执行,因此执行如下命令:

sudo chmod +x /etc/rc.d/rc.local

重新启动服务,问题解决。

该问题参考资料:https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd

最后修改:2024 年 04 月 28 日
如果觉得我的文章对你有用,请随意赞赏