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++
创建运行用户,组。
useradd -M -s /sbin/nologin nginx
tar xzvf nginx-1.12.0.tar.gz -C /opt
配置启用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状态统计模块//
make && make install
为了使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
手工编译安装mysql
首先使用yum安装mysql服务所需的环境依赖包
bison、(语法分析器)
libaio-devel (支持同步I/O)的软件包
ncurses是字符终端下屏幕控制的基本库
yum -y install ncurses-devel cmake gcc gcc-c++ ncurses bison libaio-devel
解压事先准备的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
-----注意:如果在CMAKE的过程中有报错,当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE,否则错误依旧------------
make && make install #编译并安装 此处时间可能稍长
优化调整
在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 #设置开机自启项
设置环境变量
为了方便在任何目录下使用mysql命令,需要在/etc/profile设置环境变量
echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
. /etc/profile (注意:"."后面有空格)
创建一个运行用户mysql ,并不进行shell登录
useradd -s /sbin/nologin mysql
chown -R mysql.mysql /usr/local/mysql #改变数据库目录的所有者为运行用户mysql
初始化数据库
为了能够正常使用mysql数据库系统,应以运行用户mysql的身份执行初始化
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
vim /etc/init.d/mysqld
...........
basedir=/usr/local/mysql
datadir=/home/mysql #修改服务启动脚本,指定数据存放位置
............
启动mysql服务
安装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
进入到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模块
make && make install #编译,安装(此处需要时间稍长,大概20分钟)
为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/
为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
配置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
开启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
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 #最大空闲进程数
3)启动php-fpm模块,进程使用9000端口
配置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的配置文件
}
(2)重启nginx服务,并在nginx站点目录下创建php测试页面
killall -1 nginx
vim /usr/local/nginx/html/index.php
phpinfo();
?>
systemctl stop firewalld.service #关闭防火墙
setenforce 0 #关闭selinux
(3)在浏览器中访问“http://192.168.30.10/index.php”php文件,如下图,说明配置成功
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
(2)设 置专用的数据库bbs,及授权用户bbsuer
mysql> CREATE DATABASE bbs; //创建一个数据库//
mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'abc123'; //把bbs数据库里面所有表的权限授予给bbsuser,并设置密码//
mysql>flush privileges; //刷新数据库//
安装web应用
访问http://192.168.30.10/bbs/install/index.php进行安装。
点击同意后,显示系统环境,目录权限,缓存可写性等检测通过
正确配置数据库连接,设置管理员帐号,密码
访问web应用系统
完成安装以后,访问http://192.168.30.10/bbs/index.php,可以看到论坛首页,以管理员账号登录后,可以进入管理后台
在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 "" >/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"
赋予脚本 执行权限,执行脚本(/root目录下执行),只需等待(大约两个小时左右),即可安装部署完成LNMP环境,并搭建好Discuz!论坛。
chmod 755 lnmp.sh
./lnmp.sh