LNMP:linux(系统)+nginx+mysql+php组合在一起的网站服务器架构。提供一个免费,高效,扩展性强的网站服务系统。

实验安装包:(百度网盘免费提供)

nginx-1.12.0.tar.gz https://pan.baidu.com/s/1N4BzrL3EqI3jGWA6C7ouHA

mysql-5.5.24.tar.gz https://pan.baidu.com/s/1qqPVyexjagNYCm9h2Ry6tg

php-5.6.11.tar.bz2 https://pan.baidu.com/s/1o7IM21Pv9gN2zfKyOBA59g

ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz https://pan.baidu.com/s/1tzd46u4RAQ0EU17Pv_wNeg

Discuz_X2.5_SC_UTF8.zip https://pan.baidu.com/s/1qadcv_rOHbxOOEZ59pfMkA

安装nginx

首先使用yum安装配置编译nginx需要的环境依赖包

安装nginx的依赖包,准备编译安装环境,nginx的运行需要pcer zlib等软件包的支持,因此应在配置编译安装前预先安装这些软件的开发包,以便提供相应的库和头文件,确保nginx的安装顺利。

yum -y install pcre-devel zlib-devel gcc gcc-c++ 

1

创建运行用户,组。

useradd -M -s /sbin/nologin nginx

tar xzvf nginx-1.12.0.tar.gz -C /opt

2

配置启用http_stub_status_module模块以支持状态统计。编译安装

----- ----配置编译安装--------

cd /opt/nginx-1.6.0/

./configure \

--prefix=/usr/local/nginx \

--user=nginx \

--group=nginx \

--with-http_stub_status_module             //开启stub_status状态统计模块//

3

make && make install

4

为了使Nginx服务运行更加方便,可以为主程序nginx创建链接文件,方便管理。使用nginx命令就可以启动服务,

ln -s /usr/local/nginx/sbin/* /usr/local/sbin/   //让系统识别命令

nginx       #开启nginx服务

netstat -antp | grep nginx

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      15726/nginx: master

5

手工编译安装mysql

首先使用yum安装mysql服务所需的环境依赖包

bison、(语法分析器)

libaio-devel (支持同步I/O)的软件包

ncurses是字符终端下屏幕控制的基本库

yum -y install ncurses-devel cmake gcc gcc-c++ ncurses bison libaio-devel       

6

解压事先准备的mysql软件包,并进入目录准备cmake配置安装

tar xzvf mysql-5.5.24.tar.gz

cd mysql-5.5.24/

cmake \                          #cmake配置

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \                      #指定mysql程序安装目录

-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \            #mysql的通讯目录

-DSYSCONFDIR=/etc \                                                   #指定初始化参数文件目录

-DSYSTEMD_PID_DIR=/usr/local/mysql \                       #指定pid文件存放目录

-DDEFAULT_CHARSET=utf8  \                                 #指定默认使用的字符集编码 utf8

-DDEFAULT_COLLATION=utf8_general_ci \               #指定默认使用的字符集校对规则,utf8_general_ci

-DWITH_INNOBASE_STORAGE_ENGINE=1 \              #安装innodb存储引擎

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \                  #安装archive引擎

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \              

-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \

-DMYSQL_DATADIR=/usr/local/mysql/data \                       #指定数据目录存储位置

-DWITH_BOOST=/usr/local/boost \                                        #指定boost库的位置,5.7版本必须添加这个参数

-DWITH_SYSTEMD=1    

7                        

-----注意:如果在CMAKE的过程中有报错,当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE,否则错误依旧------------

make && make install             #编译并安装 此处时间可能稍长

 8

优化调整

在mysql源码目录中的support-files文件夹下,根据实际需求建立mysql系统的配置文件my.cnf

将mysql服务的启动脚本mysql.server添加为系统服务,并设置为开机自启项

cp support-files/my-medium.cnf /etc/my.cnf          #复制配置文件

cp support-files/mysql.server /etc/init.d/mysqld      #复制启动脚本

chmod +x /etc/init.d/mysqld                       #更改权限          

chkconfig --add mysqld                              #加入系统服务

chkconfig --level 35 mysqld on                  #设置开机自启项

9

设置环境变量

为了方便在任何目录下使用mysql命令,需要在/etc/profile设置环境变量

echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile

. /etc/profile            (注意:"."后面有空格)

10

创建一个运行用户mysql ,并不进行shell登录
useradd -s /sbin/nologin mysql                               
chown -R mysql.mysql /usr/local/mysql                    #改变数据库目录的所有者为运行用户mysql

11

初始化数据库

为了能够正常使用mysql数据库系统,应以运行用户mysql的身份执行初始化

/usr/local/mysql/scripts/mysql_install_db \

--user=mysql \

--ldata=/var/lib/mysql \

--basedir=/usr/local/mysql \

--datadir=/home/mysql

12

vim /etc/init.d/mysqld

...........

basedir=/usr/local/mysql

datadir=/home/mysql                       #修改服务启动脚本,指定数据存放位置

............

13

启动mysql服务

14

安装php服务

nginx配置网页动静分离,解析php,有两种方法可以选择:

使用php的fpm模块

或者将访问php页面的web请求转交给apache服务器去处理

较新版本的php已经自带fpm(fastcgi process manager,fastcgi进程管理工具)模块,用来对php解析实例进行管理和优化解析效率。fastcgi将静态请求和动态脚本语言分离开,nginx专门处理静态请求,并转发动态请求给php-fpm,单服务器的LNMP架构通常使用fpm的方式来解析php

使用yum安装php所需的环境依赖包,

安装GD库及GD库关联程序

yum -y install \

gd \

libxml2-devel \

libjpeg-devel \

libpng-devel \

zlib-devel \

fontconfig-devel \

openssl-devel \

bzip2-devel

15

进入到php源码目录下,进行配置,编译,安装

cd php-5.6.11/

./configure \

--prefix=/usr/local/php5 \

--with-gd \

--with-zlib \

--with-mysql=/usr/local/mysql \

--with-config-file-path=/usr/local/php5 \

--enable-mbstring \

--with-jpeg-dir=/usr/lib \

--with-openssl \    

--disable-ipv6 \

--enable-fpm                        #添加fpm模块

16

make && make install           #编译,安装(此处需要时间稍长,大概20分钟)

17

为php创建配置文件

复制模板文件作为php的主配置文件,在开发时使用php.ini-development文件,在生产环境复制php.ini-production文件。

cp php.ini-development /usr/local/php5/php.ini

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

ln -s /usr/local/php5/sbin/* /usr/local/sbin/

18

为PHP安装加速器

安装ZendGuardLoader用于提高php的解析效率,复制ZendGuardLoader.so 到/usr/local/php5/lib/php下面

cd ~/

tar xzvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz

cd ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x

cp ZendGuardLoader.so /usr/local/php5/lib/php

19

配置PHP识别加速器

在php.ini文件末尾加入以下参数,开启ZendGuardLoader模块

vim /usr/local/php5/php.ini

.........

[Zend Guard Loader]

zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so

zend_loader.enable=1

20

开启nginx的PHP支持

(1)php-fpm模块配置,

1)复制模板文件php-fpm.conf.default 作为php-fpm的配置文件

cd /usr/local/php5/etc/

cp  php-fpm.conf.default php-fpm.conf

useradd -M -s /sbin/nologin php          #添加一个运行用户php

21

2)修改php-fpm的配置文件

在配置文件中找到以下参数进行优化设置

vi php-fpm.conf

..........

pid = run/php-fpm.pid                   #去掉前面的分号,确定pid文件位置

user = php                                #表示由php用户调用

group = php

pm.max_children=50                      #fpm模块的最大进程数

pm.start_servers = 20                       #启动时开启的进程数

pm.min_spare_servers = 5              #最小空闲进程数

pm.max_spare_servers = 35                 #最大空闲进程数

22

23 

24 

3)启动php-fpm模块,进程使用9000端口

25

配置nginx支持php解析

(1)在nginx的主配置文件中的server{}配置段,将php的网页请求转给fpm模块处理

vi /usr/local/nginx/conf/nginx.conf

location ~ \.php$ {

            root           html;                         #php文件所在目录

            fastcgi_pass   127.0.0.1:9000;       #php文件转发给php-fpm模块

            fastcgi_index  index.php;                  #默认文件是index.php

            include        fastcgi.conf;              #包含fastcgi的配置文件

        }

26

(2)重启nginx服务,并在nginx站点目录下创建php测试页面

killall -1 nginx

vim /usr/local/nginx/html/index.php

<?php

phpinfo();

?>

systemctl stop firewalld.service                #关闭防火墙

setenforce 0                              #关闭selinux

28

27

(3)在浏览器中访问“http://192.168.30.10/index.php”php文件,如下图,说明配置成功

29

Discuz!论坛安装

Discuz!:一套通用的社区论坛软件系统,用户可以在不需要任何编程经验的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能,很强负载能力和可高度定制的论坛服务。Discuz!的基础架构采用世界上最流行的web编程组合php+mysql实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案

(1)解压准备好的Discuz!程序文件,复制upload文件目录下的内容到LNMP服务器的网站根目录,并适当调整权限,以允许nginx,php-fpm程序拥有必要的写入权限

unzip /opt/lamp/Discuz_X2.5_SC_UTF8.zip

mkdir -p /usr/local/nginx/html/bbs

mv upload/* /usr/local/nginx/html/bbs/

cd /usr/local/nginx/html/bbs/

chown -R php ./config

chown -R php ./data

chown -R php ./uc_client

chown -R php ./uc_server/data

30

(2)设 置专用的数据库bbs,及授权用户bbsuer

mysql> CREATE DATABASE bbs;  //创建一个数据库//

mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'abc123';   //把bbs数据库里面所有表的权限授予给bbsuser,并设置密码//

mysql>flush privileges; //刷新数据库//

31

安装web应用

访问http://192.168.30.10/bbs/install/index.php进行安装。

32

点击同意后,显示系统环境,目录权限,缓存可写性等检测通过

33

正确配置数据库连接,设置管理员帐号,密码

34 

35

访问web应用系统

完成安装以后,访问http://192.168.30.10/bbs/index.php,可以看到论坛首页,以管理员账号登录后,可以进入管理后台

36 

37

在LNMP环境平台上部署 Discuz!论坛完成,论坛的具体应用不做过多介绍。

到此LNMP环境部署完成,为了以后方便使用,本人根据以上步骤整理出一个LNMP环境部署及Discuz!论坛安装脚本;

只需将需要的软件包放入/root/目录下,执行脚本即可完成LNMP平台部署及论坛安装。

vim lnmp.sh

#!/bin/bash
#LNMP架构部署
#搭建nginx服务
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
tar xzvf nginx-1.12.0.tar.gz -C /opt
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
nginx  
#搭建mysql服务
yum -y install ncurses-devel cmake gcc gcc-c++ ncurses bison libaio-devel
cd ~/
tar xzvf mysql-5.5.24.tar.gz
cd mysql-5.5.24/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc -DMYSQL_DATADIR=/home/mysql/ -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_SSL=system -DMYSQL_TCP_PORT=3306 -DENABLE_DOWNLOADS=1 -DWITH_SSL=bundled
make && make install
\cp support-files/my-medium.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld      
chkconfig --add mysqld
chkconfig --level 35 mysqld on
echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
source /etc/profile
useradd -s /sbin/nologin mysql
chown -R mysql.mysql /usr/local/mysql
/usr/local/mysql/scripts/mysql_install_db --user=mysql --ldata=/var/lib/mysql --basedir=/usr/local/mysql --datadir=/home/mysql
sed -i '46c basedir=/usr/local/mysql' /etc/init.d/mysqld
sed -i '47c datadir=/home/mysql' /etc/init.d/mysqld
service mysqld start
netstat -anpt | grep 3306
#搭建php
yum -y install gd libxml2-devel libjpeg-devel libpng-devel zlib-devel fontconfig-devel openssl-devel bzip2-devel
cd ~/
tar xjvf php-5.6.11.tar.bz2
cd php-5.6.11/
./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql -with-config-file-path=/usr/local/php5 --enable-mbstring --with-jpeg-dir=/usr/lib --with-openssl --disable-ipv6 --enable-fpm
make && make install
cp php.ini-development /usr/local/php5/php.ini
ln -s /usr/local/php5/bin/* /usr/local/bin/
ln -s /usr/local/php5/sbin/* /usr/local/sbin/
#配置php识别加速器
cd ~/
tar xzvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
cd ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x
cp ZendGuardLoader.so /usr/local/php5/lib/php
sed -i '$a [Zend Guard Loader]\nzend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so\nzend_loader.enable=1'  /usr/local/php5/php.ini
#开启nginx的php支持
cd /usr/local/php5/etc/
cp  php-fpm.conf.default php-fpm.conf
useradd -M -s /sbin/nologin php
sed -i '25s/;//g' /usr/local/php5/etc/php-fpm.conf
sed -i '149,150s/nobody/php/g' /usr/local/php5/etc/php-fpm.conf
sed -i '235s/5/50/g' /usr/local/php5/etc/php-fpm.conf
sed -i '240s/2/20/g' /usr/local/php5/etc/php-fpm.conf
sed -i '245s/1/5/g' /usr/local/php5/etc/php-fpm.conf
sed -i '250s/3/35/g' /usr/local/php5/etc/php-fpm.conf
/usr/local/sbin/php-fpm
netstat -tnal | grep 9000
#以下是让nginx支持PHP功能
sed -i '46a         location ~ \.php$ {\n            root            html;\n            fastcgi_pass    127.0.0.1:9000;\n            fastcgi_index   index.php;\n            include         fastcgi.conf;\n        }' /usr/local/nginx/conf/nginx.conf
killall -1 nginx
echo -e "<?php\nphpinfo();\n?>" >/usr/local/nginx/html/index.php
#论坛安装
cd ~/
unzip Discuz_X2.5_SC_UTF8.zip -d /opt/dis
mkdir /usr/local/nginx/html/bbs
cd /opt/dis
cp -r upload/* /usr/local/nginx/html/bbs
cd /usr/local/nginx/html/bbs
chown -R php ./config
chown -R php ./data
chown -R php ./uc_client
chown -R php ./uc_server/data
systemctl stop firewalld.service
setenforce 0
echo "请手工在mysql创建数据库bbs并设置授权用户bbsuser远程登录权限"
echo "在网页测试“http://本机IP/index.php“"
echo "在网页安装Discuz!:http://本机IP/bbs/install/index.php"

38

39

40

41

42

赋予脚本  执行权限,执行脚本(/root目录下执行),只需等待(大约两个小时左右),即可安装部署完成LNMP环境,并搭建好Discuz!论坛。

chmod 755 lnmp.sh     

./lnmp.sh