CentOS7 LNMP环境全手动搭建

2026-07-11 4 min read 4

前言

LNMP(Linux + Nginx + MySQL + PHP)是Web开发中最经典的环境组合之一。相比一键安装包,手动搭建能让你更深入理解各组件的工作原理,便于后续调优和排错。本文以CentOS 7为例,从零开始编译安装Nginx 1.24、MySQL 8.0、PHP 7.4,并配置它们协同工作。

环境准备

确保系统已更新并安装编译工具:

yum update -y
yum groupinstall -y 'Development Tools'
yum install -y wget curl vim net-tools

关闭防火墙和SELinux(测试环境)

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

第一步:编译安装Nginx

下载源码

cd /usr/local/src
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz

安装依赖

yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel

编译安装

cd nginx-1.24.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module
make && make install

配置Nginx服务

cat > /usr/lib/systemd/system/nginx.service << 'EOF'
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl start nginx
systemctl enable nginx

第二步:编译安装MySQL 8.0

MySQL 8.0编译耗时较长,建议使用二进制包或官方yum源。这里采用二进制包方式:

下载并解压

cd /usr/local
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.33-linux-glibc2.12-x86_64 mysql

创建mysql用户和目录

groupadd mysql
useradd -r -g mysql -s /bin/false mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql

初始化数据库

cd /usr/local/mysql
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

记下输出的临时密码(类似 root@localhost: xxxxxx)。

配置my.cnf

cat > /etc/my.cnf << 'EOF'
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
port=3306
user=mysql
character-set-server=utf8mb4

[client]
socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOF

启动MySQL

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
service mysqld start

修改root密码

/usr/local/mysql/bin/mysql -uroot -p
# 输入临时密码后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';

第三步:编译安装PHP 7.4

安装依赖

yum install -y libxml2-devel sqlite-devel libcurl-devel libpng-devel libjpeg-devel freetype-devel bison re2c

下载并解压

cd /usr/local/src
wget https://www.php.net/distributions/php-7.4.33.tar.gz
tar -zxvf php-7.4.33.tar.gz
cd php-7.4.33

编译配置

./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-curl \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--enable-fpm \
--enable-mbstring \
--enable-sockets \
--enable-zip \
--disable-fileinfo

编译安装

make -j$(nproc) && make install

配置PHP-FPM

cp php.ini-production /usr/local/php/etc/php.ini
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf

编辑 php-fpm.d/www.conf,修改以下内容:

user = nginx
group = nginx
listen = /var/run/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

启动PHP-FPM

/usr/local/php/sbin/php-fpm
# 添加开机启动
echo '/usr/local/php/sbin/php-fpm' >> /etc/rc.local
chmod +x /etc/rc.local

第四步:配置Nginx支持PHP

编辑Nginx配置文件 /usr/local/nginx/conf/nginx.conf,修改server块:

server {
    listen       80;
    server_name  localhost;

    root   /var/www/html;
    index  index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

创建测试目录和文件:

mkdir -p /var/www/html
echo "" > /var/www/html/index.php
chown -R nginx:nginx /var/www/html

重新加载Nginx:

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

第五步:验证环境

访问服务器IP,应看到PHP信息页面。如果出现502错误,检查PHP-FPM是否运行,以及socket路径是否一致。

常见问题排查

  • 502 Bad Gateway:检查PHP-FPM是否启动,socket文件权限是否正确。
  • 404 Not Found:检查Nginx的root路径和index配置。
  • MySQL连接失败:确认MySQL已启动,且用户权限正确。

总结

通过手动编译安装,我们成功搭建了LNMP环境。这种方式虽然步骤较多,但能让你完全掌控每个组件的版本和配置,适合生产环境定制化需求。后续可以进一步优化配置,如开启OPcache、调整MySQL参数等。

IT搬运工

专注技术分享,坚持原创深度内容。

分类
链接
订阅

RSS 订阅关注最新文章

© 2026 IT搬运工 · 站点地图 · 鄂ICP备19007640号-3