LNMP网站架构部署(非常详细,全文1.1w字,列举了从NGINX到PHP源码部署的全过程)

    技术2025-10-16  2

    导航

    LNMP是什么?脚本部署基础准备Nginx源码安装MySQL源码安装PHP源码安装LNMP架构配置验证结果

    LNMP是什么?

    LNMP为一种缩写,其代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。

    Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、suse等。

    Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。

    Mysql是一个关系型数据库管理系统。

    PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。

    这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

    LNMP组件并不固定,例如:其中"M"还包含mariaDB,"P"包含Perl,Python。

    脚本部署

    可转到LNMP一键安装脚本(执行后只需等待即可)查看或使用LNMP安装脚本

    基础准备

    本案例中,LNMP为单机部署,具体版本如下:

    名称版本Centos7.71908Nginx1.9.5MySQL5.7.26PHP5.6.40

    链接:LNMP软件包 提取码:ucru

    以上就是LNMP软件包.zip压缩包中内容,依照案例中的顺序依次部署即可。

    其他的一些说明: LNMP搭建方式:本地搭建 主机IP地址:192.168.1.123 firewalld防火墙:关闭 SElinux:关闭 本地yum源:依照各自环境搭建

    所有基础操作完成后,就开始部署LNMP架构了。

    Nginx源码安装

    安装Nginx依赖包

    yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel make automake

    创建Nginx运行用户

    groupadd www useradd -g www www -s /sbin/nologin

    上传Nginx源码包,解压,预编译,安装。

    tar xf nginx-1.9.5.tar.gz cd nginx-1.9.5/ ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=www --group=www make && make install

    配置项说明: –prefix:nginx安装路径 –with-http_dav_module:通过WebDAV协议提供文件管理自动化,默认情况下未构建此模块。 –with-http_stub_status_module:提供对NGINX基本状态信息的访问,默认情况下未构建此模块。 –with-http_addition_module:过滤器,可在响应之前和之后添加文本,默认情况下未构建此模块。 –with-http_sub_module:允许一些其他字符串替换NGINX中的指定字符串来修改相应,默认情况下未构建此模块。 –with-http_flv_module:为Flash Video(FLV)文件提供伪流服务器端支持,默认情况下未构建此模块。 –with-http_mp4_module:该 模块为MP4文件提供伪流服务器端支持,默认情况下未构建此模块。 –with-pcre:强制使用PCRE库。 –with-http_ssl_module:启用构建将HTTPS协议支持添加 到HTTP服务器的模块的功能,默认情况下未构建此模块,需要OpenSSL库来构建和运行此模块。 –with-http_gzip_static_module:支持发送.gz扩展名为" "的预压缩文件,而不是常规文件,默认情况下未构建此模块。 –user:NGINX服务运行使用的用户,默认用户名为nobody。 –group:NGINX服务运行使用的组,默认情况下为nginx运行用户的名称。

    通过Nginx启动控制工具启动

    /usr/local/nginx/sbin/nginx

    查看端口,验证Nginx是否启动成功

    netstat -anput | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4993/nginx: master

    MySQL源码安装

    卸载系统中原有的mysql,mariadb及其相关依赖包

    yum -y remove mysql* mariadb*

    创建MySQL运行用户

    groupadd mysql useradd -M -s /sbin/nologin -r -g mysql mysql

    创建mysql数据库文件存放目录并对权限进行控制

    mkdir -p /data/mysql/{data,log} chown -R mysql:mysql /data/mysql/

    安装MySQL依赖包

    yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel bzip2

    上传boost包(MySQL从5.7.5版本之后,必须有boost库的支持),并对其解压

    tar jxf boost_1_59_0.tar.bz2 -C /root/

    上传MySQL软件包,解压,预编译。

    tar xf mysql-5.7.26.tar.gz cd mysql-5.7.26/ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/data/mysql/data \ -DSYSCONFDIR=/etc \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DMYSQL_TCP_PORT=3306 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=/root/boost_1_59_0

    直接粘贴配置项

    cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/root/boost_1_59_0

    预编译配置项说明: -DCMAKE_INSTALL_PREFIX:MySQL程序安装目录。 -DMYSQL_DATADIR:MySQL库数据存放目录。 -DSYSCONFDIR:配置文件存放目录。 -DWITH_MYISAM_STORAGE_ENGINE:添加MYISAM存储引擎支持。 -DWITH_INNOBASE_STORAGE_ENGINE:添加INNOBASE存储引擎支持。 -DWITH_MEMORY_STORAGE_ENGINE:添加MEMORY存储引擎支持。 -DWITH_READLINE:使用readline功能,即方便在命令行复制、粘贴命令。 -DMYSQL_UNIX_ADDR:套接字(socket)文件路径,默认/tmp/mysql.sock。 -DMYSQL_TCP_PORT:MySQL服务端口,默认为3306。 -DENABLED_LOCAL_INFILE:可以使用load data infile命令从本地导入文件,默认OFF。 -DWITH_PARTITION_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM, MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。 -DEXTRA_CHARSETS:支持所有字符集 -DDEFAULT_CHARSET=:指定服务器默认字符集,默认latin1。 -DDEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci。 -DDOWNLOAD_BOOST:将boost下载到本地,若-DWITH_BOOST指定路径中不存在boost库,则会在联网的情况下自动下载,若有boost库则忽略。 -DWITH_BOOST:指定boost库路径。

    查看主机CPU核数

    echo $(grep processor /proc/cpuinfo | wc -l) 4

    调用CPU核数,加快编译速度(不建议调用全部CPU核数,以免影响其他服务正常运行)

    make -j 2 ; make install

    安装完成后,对mysql安装目录进行权限控制

    chown -R mysql:mysql /usr/local/mysql/

    定义配置文件

    vim /etc/my.cnf [mysqld] basedir=/usr/local/mysql datadir=/data/mysql/data port=3306 socket=/usr/local/mysql/mysql.sock symbolic-links=0 character-set-server=utf8 log-error=/data/mysql/log/mysqld.log pid-file=/usr/local/mysql/mysqld.pid

    主配置文件说明: [mysqld]:模块名称 basedir=/usr/local/mysql:mysql安装目录 datadir=/data/mysql/data:mysql数据存放目录 port=3306:mysql监听端口 socket=/usr/local/mysql/mysql.sock:mysql.sock文件存放目录 symbolic-links=0:关闭mysql的符号链接 character-set-server=utf8:指定mysql的字符集为utf8 log-error=/data/mysql/log/mysqld.log:指定mysql的错误日志存放路径 pid-file=/usr/local/mysql/mysqld.pid:mysql的pid文件存放目录

    设置启动脚本

    cp support-files/mysql.server /etc/init.d/mysql.server chmod +x /etc/init.d/mysql.server

    初始化数据库

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

    启动MySQL

    /etc/init.d/mysql.server start

    查看端口确认MySQL是否启动成功

    netstat -anplt | grep mysql tcp6 0 0 :::3306 :::* LISTEN 80502/mysqld

    为MySQL设置PATH变量

    ln -s /usr/local/mysql/bin/* /usr/local/bin/

    输入MySQL,验证是否可以进入数据库

    mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.26 Source distribution Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

    到这里,MySQL的安装就告一段落了。

    PHP源码安装

    安装PHP依赖包

    yum -y install gcc autoconf freetype gd libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel freetype-devel libjpeg-devel bzip2 bzip2-devel openssl openssl-devel

    上传libmcrypt包,解压,预编译,安装

    tar xf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure --prefix=/usr/local/libmcrypt && make && make install

    上传PHP软件包,解压,预编译

    tar xf php-5.6.40.tar.gz cd php-5.6.40/ ./configure --prefix=/usr/local/php5.6 \ --with-mysql=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --enable-mbstring \ --with-curl \ --with-gd \ --enable-fpm \ --with-config-file-path \ --with-openssl \ --enable-fpm \ --enable-sockets \ --enable-sysvshm \ --enable-mbstring \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir=/usr \ --enable-xml \ --with-mhash \ --with-mcrypt=/usr/local/libmcrypt \ --with-config-file-path=/usr/local/php5.6/etc \ --with-config-file-scan-dir=/etc/php.d \ --with-bz2

    直接粘贴预编译

    ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-mbstring --with-curl --with-gd --enable-fpm --with-config-file-path --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/usr/local/php5.6/etc --with-config-file-scan-dir=/etc/php.d --with-bz2

    预编译配置项说明: –prefix:安装位置 –with-mysql:支持mysql –with-pdo-mysql:支持pdo模块 –with-mysqli:支持mysqli模块 注:上面的三选项的作用:数据库与php不在一个服务器上,指定此种方式,安装数据库连接驱动 –enable-mbstring:多字节字符串的支持 –with-curl:支持CURL –with-gd:支持gd库 –enable-fpm:支持构建fpm –with-config-file-path:设置配置文件路径 –with-openssl:支持openssl模块 –enable-fpm:支持fpm模式 –enable-sockets:启用socket支持 –enable-sysvshm:启用系统共享内存支持 –enable-mbstring:多字节字串、像我们的中文就是多字节字串 –with-freetype-dir:支持freetype、就要装freetype-devel、跟字体相关的、字体解析工具 –with-jpeg-dir:处理jpeg图片的php可以动态生成jpeg图片 –with-png-dir:处理png图片的php可以动态生成jpeg图片 –with-zlib:是个压缩库、在互联网传输时用来压缩传输的 –with-libxml-dir:这个libxml是用来解析xml的、指定/usr下 –enable-xml:支持xml –with-mhash:支持mhash –with-mcrypt:libmcrypt-devel这个程序包所指定的 –with-config-file-path:指定配置文件的存放路径的 –with-config-file-scan-dir:配置文件扫描路径 –with-bz2:支持BZip2

    编译并安装

    make -j 2 ; make install

    生成配置文件,从解压的PHP包中复制

    cp php.ini-production /usr/local/php5.6/php.ini

    修改php-fpm.conf文件名称,便于修改

    cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf

    复制PHP启动脚本并赋予权限,从解压的PHP包中复制

    cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm chmod +x /etc/init.d/php-fpm

    启动php-fpm

    /etc/init.d/php-fpm start

    查看PHP服务端口

    netstat -anput | grep php-fpm tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 81639/php-fpm: mast

    LNMP架构配置

    当Nginx,MySQL,PHP都安装完成后,就可以通过配置文件将他们联系起来。

    修改PHP的配置文件,修改运行账户等信息

    vim /usr/local/php5.6/etc/php-fpm.conf user = www group = www pid = run/php-fpm.pid listen = 0.0.0.0:9000

    以上三项为主要修改配置,下面有几项优化PHP,不添加也不影响结果

    pm.max_children =300 #子进程的最大打开数 pm.start_servers =20 #启动时创建子服务的最大个数 pm.min_spare_servers = 20 #空闲时子进程的最小数量 pm.max_spare_servers = 100 #空闲时子进程的最大数量

    修改Nginx配置文件,让其支持PHP页面

    vim /usr/local/nginx/conf/nginx.conf location / { root html; index index.php index.html index.htm; #添加index.php } #在以上模块直接粘贴以下配置项 location ~ .*\.(php|php5)?$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m; fastcgi_cache_min_uses 1; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_cache_key http://$host$request_uri; }

    其他配置不用修改,直接在location / {}中添加index.php网页支持,并在下面直接复制location ~ .*\.(php|php5)?$ {}即可。

    创建PHP测试页面

    vim /usr/local/nginx/html/index.php <?php phpinfo(); ?>

    创建PHP网页连接接MySQL的测试页面

    vim /usr/local/nginx/html/mysql.php <?php $link=mysql_connect('192.168.1.123','lnmp','123456'); if ($link)echo "mysql连接成功......"; mysql_close(); ?>

    其中$link是用于连接MySQL的,格式为:mysql_connect(‘IP地址’,‘MySQL用户’,‘密码’);,若是连接成功了,就会输出"mysql连接成功…"字样。

    进入数据库,创建测试用户

    mysql> grant all on *.* to 'lnmp'@'%' identified by '123456'; mysql> flush privileges;

    接下来重启Nginx和PHP,重载配置

    /usr/local/nginx/sbin/nginx -s reload /etc/init.d/php-fpm restart

    验证结果

    验证PHP页面支持,在浏览器中输入主机IP/index.php。 验证PHP网页连接接MySQL的测试,在浏览器中输入主机IP/mysql.php。 以上LNMP网站架构就搭建成功了。

    Processed: 0.013, SQL: 9