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
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
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
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编译耗时较长,建议使用二进制包或官方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
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)。
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
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
service mysqld start
/usr/local/mysql/bin/mysql -uroot -p
# 输入临时密码后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
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
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
/usr/local/php/sbin/php-fpm
# 添加开机启动
echo '/usr/local/php/sbin/php-fpm' >> /etc/rc.local
chmod +x /etc/rc.local
编辑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路径是否一致。
通过手动编译安装,我们成功搭建了LNMP环境。这种方式虽然步骤较多,但能让你完全掌控每个组件的版本和配置,适合生产环境定制化需求。后续可以进一步优化配置,如开启OPcache、调整MySQL参数等。
专注技术分享与实战