手动部署LNMP环境(CentOS 8)+phpMyAdmin配置
手动部署LNMP环境(CentOS 8)+phpMyAdmin配置
LNMP是目前主流的网站服务器架构之一,适合运行大型和高并发的网站应用,例如电子商务网站、社交网络、内容管理系统等。LNMP分别代表Linux、Nginx、MySQL和PHP。本文介绍如何在Alibaba Cloud Linux 3/2、CentOS 7/8操作系统的ECS实例上搭建LNMP环境。
LNMP各部分的版本
- Nginx版本:Nginx 1.20.1
- MySQL版本:MySQL 8.0.26
- PHP版本:PHP 7.4.19
- CentOS 8
前期准备
1、 购买服务器(ECS或轻量化服务器)
2、 操作系统Alibaba Cloud Linux 3/2、CentOS 7/8,三者之一都可
3、 服务器放行22、80、443端口
操作步骤
步骤一:安装Nginx
我使用的是Ngingx 1.20版本
- 运行以下命令安装Nginx。
sudo dnf -y install https://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.20.1-1.el8.ngx.x86_64.rpm
- 运行以下命令查看Nginx版本。
nginx -v
查看版本结果如下所示。
nginx version: nginx/1.20.1
步骤二:安装MySQL
-
运行以下命令,安装MySQL。
sudo dnf -y install @mysql
-
运行以下命令,查看MySQL版本。
mysql -V
查看版本结果如下所示。
mysql Ver 8.0.26 for Linux on x86_64 (Source distribution)
步骤三:安装PHP
-
运行以下命令,添加并更新epel源。
sudo dnf -y install epel-release sudo dnf -y update epel-release
-
运行以下命令,删除缓存的无用软件包并更新软件源。
sudo dnf clean all sudo dnf makecache
-
启用
php:7.4
模块。说明
这里我使用
php:7.4
版本。如果需要使用PHP 8.0
或PHP 8.2
版本,需要使用CentOS Stream操作系统。sudo dnf module enable php:7.3
-
运行以下命令,安装PHP相应的模块。
sudo dnf -y install php php-curl php-dom php-exif php-fileinfo php-fpm php-gd php-hash php-json php-mbstring php-mysqli php-openssl php-pcre php-xml libsodium
-
运行以下命令查看PHP版本。
php -v
查看版本结果如下所示。
PHP 7.4.19 (cli) (built: May 4 2021 11:06:37) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.19, Copyright (c), by Zend Technologies
步骤四:配置Nginx
-
运行以下命令,查看并记录Nginx配置文件的默认路径。
cat /etc/nginx/nginx.conf
在
http
大括号内,查看include
配置项。即配置文件的默认路径。
-
在配置文件的默认路径下,备份默认配置文件。
cd /etc/nginx/conf.d sudo cp default.conf default.conf.bak
-
修改默认配置文件。
-
运行以下命令打开默认配置文件。
sudo vim default.conf
-
按
i
进入编辑模式。 -
在
location
大括号内,修改以下内容。location / { #将该路径替换为你的网站根目录。 root /usr/share/nginx/html; #添加默认首页信息index.php。 index index.html index.htm index.php; }
-
去掉被注释的
location ~ \.php$
大括号内容前的#
,并修改大括号的内容。修改完成如下所示。
location ~ \.php$ { #将该路径替换为您的网站根目录。 root /usr/share/nginx/html; #Nginx通过unix套接字与PHP-FPM建立联系,该配置与/etc/php-fpm.d/www.conf文件内的listen配置一致。 fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; #将/scripts$fastcgi_script_name修改为$document_root$fastcgi_script_name。 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #Nginx调用fastcgi接口处理PHP请求。 include fastcgi_params; }
说明
Nginx与PHP-FPM进程间通信方式有两种。
- TCP Socket:该方式能够通过网络,可用于跨服务器通信的场景。
- UNIX Domain Socket:该方式不能通过网络,只能用于同一服务器中通信的场景。
-
按下
Esc
键,并输入:wq
保存退出文件。
-
-
运行以下命令,启动Nginx服务。
sudo systemctl start nginx
-
运行以下命令,设置Nginx服务开机自启动。
sudo systemctl enable nginx
步骤五:配置MySQL
-
运行以下命令启动MySQL,并设置为开机自启动。
sudo systemctl enable --now mysqld
-
运行以下命令,查看MySQL是否已启动。
sudo systemctl status mysqld
查看返回结果中
Active: active (running)
表示已启动。 -
运行以下命令,执行MySQL安全性操作并设置密码。
sudo mysql_secure_installation
命令运行后,根据命令行提示执行如下操作。
-
输入Y并回车开始相关配置。
-
选择密码验证策略强度,输入2并回车。
策略0表示低,1表示中,2表示高。建议您选择高强度的密码验证策略。
-
设置MySQL的新密码并确认。
需要输入两次一样的密码
-
输入Y并回车继续使用提供的密码。
-
输入Y并回车移除匿名用户。
-
设置是否允许远程连接MySQL。
- 不需要远程连接时,输入Y并回车。
- 需要远程连接时,输入N或其他任意非Y的按键,并回车。
我们需要使用到phpMyAdmin,建议选择n
-
输入Y并回车删除
test
库以及对test
库的访问权限。 -
输入Y并回车重新加载授权表。
-
步骤六:配置PHP
-
修改PHP配置文件。
-
运行以下命令,打开配置文件。
sudo vim /etc/php-fpm.d/www.conf
-
按
i
进入编辑模式。 -
找到
user = apache
和group = apache
,将apache
修改为nginx
。由于我们使用的是nginx所以要将使用者和所属组改成nginx对象。 -
按下
Esc
键,并输入:wq
保存退出文件。
-
-
新建并编辑
phpinfo.php
文件,用于展示PHP信息。-
运行以下命令,新建
phpinfo.php
文件。sudo vim <网站根目录>/phpinfo.php
<网站根目录>是您在
nginx.conf
配置文件中location ~ .php$
大括号内,配置的root
参数值,如下图所示。本文配置的网站根目录为
/usr/share/nginx/html
,因此需要运行以下命令新建phpinfo.php
文件:sudo vim /usr/share/nginx/html/phpinfo.php
-
按
i
进入编辑模式。 -
输入下列内容,函数
phpinfo()
会展示PHP的所有配置信息。<?php echo phpinfo(); ?>
-
按
Esc
键后,输入:wq
并回车,保存关闭配置文件。
-
-
运行以下命令,启动
PHP-FPM
。sudo systemctl start php-fpm
-
运行以下命令,设置
PHP-FPM
开机自启动。sudo systemctl enable php-fpm
步骤七:测试访问LNMP平台
-
在本地物理机上打开浏览器。
-
在地址栏输入
http://<实例公网IP地址>/phpinfo.php
。返回结果如下图所示,表示LNMP环境部署成功。
注意:测试访问LNMP配置信息页面后,建议您运行以下命令将phpinfo.php
文件删除,消除数据泄露风险。
sudo rm -rf <网站根目录>/phpinfo.php
其中,<网站根目录>需要替换为您在nginx.conf
中配置的网站根目录。
本文配置的网站根目录为/usr/share/nginx/html
,因此需要运行以下命令:
sudo rm -rf /usr/share/nginx/html/phpinfo.php
步骤八:安装phpMyAdmin
- 下载phpMyAdmin压缩包
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.1/phpMyAdmin-5.0.1-all-languages.zip
- 安装解压工具
yum install unzip –y
- 解压安装包
unzip unzip phpMyAdmin-5.0.1-all-languages.zip
步骤九:配置phpMyAdmin
- 重命名phpMyAdmin
mv phpMyAdmin-4.9.5-all-languages phpmyadmin
- 将文件移动到Nginx配置文件的默认路径
mv phpmyadmin /usr/share/nginx/html/
-
修改配置文件、
a 复制重命名配置文件
cp config.sample.inc.php config.inc.php
b 编辑
vim config.inc.php
c 将下列项目修改
$cfg[‘blowfish_secret’] = ‘任意字符串’;
//这里需要填写一个足够复杂的随机字符串。这个字符串将用于加密保存在cookie中的登录信息,以确保安全性。请确保这个字符串在您的环境中是唯一的,并且不要轻易泄露。每次更改这个密钥后,所有用户的登录信息都将失效,他们需要重新登录。之后保存config.inc.php
文件并刷新phpMyAdmin页面以应用新的配置。
$cfg['blowfish_secret'] = 'aVeryComplexAndLongStringForEncryption';
c f g [ ′ S e r v e r s ′ ] [ cfg['Servers'][cfg[ ′ Servers ′ ][i][‘host’] = ‘127.0.0.1’;更改nginx的配置文件
这里是为了让phpMyAdmin连接到本地的MySQL服务器(运行在localhost上)。由于我是服务器本机使用,所以我选择的时填写127.0.0.1
cfg[′Servers′][cfg['Servers'][cfg[′Servers′][i][‘host’]=‘127.0.0.1’;
d 修改Nginx配置(nginx.conf),添加phpmyadmin的路径
location /phpmyadmin {
alias /usr/share/nginx/html/phpmyadmin;
index index.php;
}
location ~ /phpmyadmin/.+\.php$ {
if ($fastcgi_script_name ~ /phpmyadmin/(.+\.php.*)$) {
set $valid_fastcgi_script_name $1;
}
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/phpmyadmin/$valid_fastcgi_script_name;
}
注意:有的人nginx.conf中没有server部分,而添加的phpmyadmin的路径需要加到server里面,可以参考下面的nginx.conf文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen **; # 根据实际情况设置监听端口和协议,如:80或443(https)
server_name ***.***.***.***/; # 替换为你的域名或IP地址
location /phpmyadmin {
alias /usr/share/nginx/html/phpmyadmin; # 确保路径正确
index index.php;
location ~ ^/phpmyadmin/(.+\.php)$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; # 请确保此处的端口与PHP-FPM监听的端口一致
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_index index.php;
}
}
}
include /etc/nginx/conf.d/*.conf;
}
- 重启nginx
sudo systemctl restart nginx
- 测试phpMyAdmin
访问http://localhost/phpmyadmin/
此时输入你的mysql用户名和密码就可以登陆了
可能会出现的问题
一、 nginx不能正常工作
该问题可能是受SELinux策略的限制,所以我们一般在SELinux关闭的情况下安装nginx
如果SELinux状态参数是Disabled
,则SELinux为关闭状态。执行 步骤一,安装nginx
如果SELinux状态参数是Enforcing
,则SELinux为开启状态,请执行参考查看SELinux状态并开启或关闭SELinux_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)
二、 配置phpMyAdmin后,启动nginx出现错误,无法重启。
这里可能会出现很多的错误可能性,输入下面的代码检查,根据报错解决问题。
sudo systemctl status nginx.service
一般是 配置文件错误,检查更改文件时是否出现粗心导致的输入错误,再去核实一遍。
三、 所要访问的文件权限不够
phpMyAdmin - Error Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.
session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13)
session_start(): Failed to read session data: files (path: /var/lib/php/session)
-
检查session目录权限: 确保web服务器用户(这里我用的是
nginx
,你们用的不一样的话,就改成自己的)拥有在/var/lib/php/session
目录下创建和读写文件的权限。可以使用以下命令更改权限和所有权:1sudo chown -R nginx:nginx /var/lib/php/session 2sudo chmod -R 700 /var/lib/php/session
-
检查SELinux(如果启用): 如果您的系统启用了SELinux,请确保SELinux策略允许web服务器进程读写session目录。可以尝试运行以下命令(以CentOS/RHEL为例):
1sudo restorecon -Rv /var/lib/php/session
-
检查PHP配置: 确保PHP配置文件(
php.ini
)中的session.save_path指向正确的目录,并且该目录具有正确的权限。打开php.ini文件,找到session.save_path
,确保其值为/var/lib/php/session
或一个web服务器有权访问的目录。 -
检查web服务器配置: 如果您使用的是Nginx或Apache,请确保配置中已正确处理PHP会话文件,特别是在使用FastCGI的情况下,确保PHP-FPM运行的用户有权限访问session目录。
-
检查浏览器设置: 虽然错误信息主要是服务器端的问题,但也请确保浏览器已启用cookies,因为会话通常依赖于cookies来跟踪用户状态。
写在最后
LNMP+phpMyAdmin这个搭配相对于LAMP+phpMyAdmin(Linux Apache Mysql PHP)来说配置的难度要大点,纯纯新手还是比较推荐LAMP+phpMyAdmin。
而两者在性能上的区别也主要是nginx和Apache的区别体现。
Nginx优点:
- 性能优势:Nginx在高并发请求下表现优秀,因其采用了异步、事件驱动的模型,更适合处理静态文件和大量并发连接,减轻了服务器的压力。
- 内存消耗:相对于Apache,Nginx在同等负载下内存占用更低,尤其是在处理静态资源时更加高效。
- 灵活配置:Nginx支持更细致的请求路由和反向代理设置,对于大型站点或负载均衡集群有更好的支持。
Apache缺点:
- 动态处理:对于PHP动态请求,Nginx通常需要借助FastCGI进程管理器(如PHP-FPM)来处理,配置相对复杂,初次接触可能会觉得不易理解和调试。
- 兼容性:尽管主流PHP应用都能良好支持,但在某些情况下,特别是老旧的PHP应用可能需要额外的配置才能在Nginx下正常运行。
LAMP优点:
- 易于配置:Apache历史悠久,配套文档丰富,初学者更容易上手,模块化设计使得许多PHP功能如.htaccess支持开箱即用。
- 广泛兼容:Apache对各种PHP特性支持较为全面,包括对.htaccess的支持,这对于小型项目和临时修改是非常方便的。
- 成熟稳定:Apache生态庞大,开发者社区活跃,对于已存在的PHP应用迁移至LAMP架构更为平滑。
LAMP缺点:
- 资源消耗:在高并发场景下,Apache的工作进程模式可能导致资源消耗较高,尤其是内存和CPU使用率。
- 性能瓶颈:在处理大量静态资源或高并发请求时,Apache的多进程或多线程模型可能不如Nginx的事件驱动模型高效。
但是两个架构中并无显著优劣之分,只要PHP和MySQL环境配置正确,phpMyAdmin均可正常工作。选择LNMP还是LAMP更多取决于我们的具体需求,如网站规模、并发请求量、硬件资源状况以及团队对技术栈的熟悉程度等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!