以下所有的实操都是在rhrl6.5上
一.LNMP基本架构
1.L(linux)N(nginx)M(mysql)P(php)
linux+nginx/apache+mysql +php
静态页面处理:nginx
动态页面处理:php
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
2.编译顺序
Mysql ->php ->nginx
由于编译的时候比较浪费磁盘内存,所以把虚拟机的内存尽量放大,使得编译的时候提升速度,我这里的虚拟机大小为2G
二.lnmp架构的优点
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务。Nginx 用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多。
作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm 描述了成功并且美妙的使用经验。
Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)。Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。
三.实现mysql,php,nginx的源码编译
1、mysql源码编译(在server上)
硬件设置:
硬盘:20GIB
内存:查看自己的物理内存,2048M
cpu:2核;
mysql的下载地址
[root@server1 mysql_inst]# ls # 先获取软件包
cmake-2.8.12.2-4.el6.x86_64.rpm # cmake是编译器
mysql-boost-5.7.17.tar.gz
[root@server1 mysql_inst]# tar zxf mysql-boost-5.7.27.tar.gz
[root@server1 mysql_inst]# ls
cmake-2.8.12.2-4.el6.x86_64.rpm mysql-5.7.17 mysql-boost-5.7.17.tar.gz
[root@server1 mysql_inst]# yum install -y cmake.x86_64
[root@server1 mysql_inst]# rpm -ivh cmake-2.8.12.2-4.el6.x86_64.rpm
[root@server1 ~]# yum install -y gcc
[root@server1 ~]# yum install -y gcc-c++
[root@server1 ~]# yum install -y ncurses-devel
[root@server1 ~]# yum install -y bison
[root@server1 ~]# mkdir /usr/local/lnmp
[root@server1 ~]# cd mysql-5.7.17/
[root@server1 mysql-5.7.17]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql\ #安装目录
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data\ ##数据库存放目录
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock\ #Unix socket 文件路径
-DWITH_MYISAM_STORAGE_ENGINE=1\ #安装 myisam 存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1\ #安装 innodb 存储引擎
-DDEFAULT_CHARSET=utf8\ #使用 utf8 字符
-DDEFAULT_COLLATION=utf8_general_ci\ #校验字符
-DEXTRA_CHARSETS=all\ #安装所有扩展字符集
-DWITH_BOOST=boost/boost_1_59_0/\
##'\'是换行
[root@server1 mysql-5.7.17]# ls
[root@server1 mysql-5.7.17]# rm -fr CMakeCache.txt #在编译过程中如果解决依赖性,再重新编译时,需要清除缓
[root@server1 mysql-5.7.17]# make && make install #
[root@server1 mysql-5.7.17]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# ls
bin COPYING docs include lib man mysql-test README share support-files
[root@server1 mysql]# cd support-files/
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? Y
[root@server1 support-files]# vim /etc/my.cnf
basedir =/usr/local/lnmp/mysql
datadir =/usr/local/lnmp/mysql/data
port =3306
# server_id = .....
socket =/usr/local/lnmp/mysql/data/mysql.sock
[root@server1 mysql]# cd support-files/
[root@server1 support-files]# /etc/init.d/mysql status
mysql is stopped
[root@server1 support-files]# rpm -qa | grep mysql #存在mysql的话,全部直接卸载;
[root@server1 support-files]# yum remove mysql-server -y
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld
[root@server1 support-files]# chmod +x /etc/init.d/mysqld
[root@server1 support-files]# /etc/init.d/mysql status
ERROR! MySQL is not running
[root@server1 mysql-5.7.27]# cd /usr/local/lnmp/mysql
[root@server1 mysql]# ll
[root@server1 mysql]# mkdir data
[root@server1 ~]#id mysql #查看是否存在该用户,不存在时创建mysql用户
[root@server1 mysql]# groupadd -g 27 mysql
[root@server1 mysql]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql # 添加mysql用户,-u,指定用户uid,-g,指定用户组,-d,指定用户家目录,-M,禁止自主创建用户家目录
[root@server1 ~]# cd /usr/local/lnmp/
[root@server1 lnmp]# ll
[root@server1 mysql]# cd mysql/support-files/
[root@server1 support-files]# vim /usr/local/lnmp/mysql/support-files/mysql.server #这是mysql的系统文件
[root@server1 lnmp]# chown mysql.mysql /usr/local/lnmp/mysql -R # 修改用户名和组名
[root@server1 lnmp]# vim ~/.bash_profile # 设置环境变量,方便登陆
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
[root@server1 lnmp]# source ~/.bash_profile # 检测语法
[root@server1 lnmp]# cd mysql
[root@server1 mysql]# mysql # 输入mysql,然后按tab键,可以加载出来,说明,文件已经生效
[root@server1 mysql]# mysqld --initialize --user=mysql # 初始化,生成临时登陆密码
获取初始密码的另一种方法
[root@server1 ~]# ll /var/log/mysql.log
[root@server1 ~]# touch /var/log/mysql.log
[root@server1 ~]# chown mysql.mysql /var/log/mysql.log
[root@server1 ~]# grep password /var/log/mysqld.log #获取初始密码
[root@server1 mysql]# chown root.mysql /usr/local/lnmp/mysql -R
[root@server1 mysql]# chown mysql /usr/local/lnmp/mysql/data -R
[root@server1 mysql]# ll
[root@server1 ~]# /etc/init.d/mysqld start #从配置文件开启数据库
[root@server1 ~]# mysql -uroot -p #登录数据库,查看是否能登录
[root@server1 ~]# mysql_secure_installation #数据库初始化,修改root密码 密码设置:大小写,数字;
[root@server1 mysql]# mysql -uroot -p # 登陆成功说明mysql搭建成功
Enter password:
mysql> show databases;
2.php源码编译
#此安装包自行获取
[root@server1 ~]# ls
libmcrypt-2.5.8-9.el6.x86_64.rpm
libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
php-5.6.35.tar.bz2
[root@server1 ~]# tar jxf php-5.6.35.tar.bz2
[root@server1 ~]# yum install re2c-0.13.5-1.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm libmcrypt-devel-2.5.8-9.el6.x86_64.rpm gd-devel-2.0.35-11.el6.x86_64.rpm -y
#下载php的依赖性安装包
[root@server1 ~]# yum install gmp-devel zlib-devel libxml2-devel curl-devel net-snmp-devel -y
[root@server1 ~]# cd php-5.6.35
#开始进行源码编译,选择自己需要的模块进行编译
[root@server1 php-5.6.35]# ./configure --prefix=/usr/local/lnmp/php \
--with-config-file-path=/usr/local/lnmp/php/etc \
--with-mysql=mysqlnd \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-snmp \
--with-gd \
--with-zlib \
--with-curl \
--with-libxml-dir \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--without-pear \
--with-gettext \
--with-gmp \
--enable-inline-optimization \
--enable-soap \
--enable-ftp \
--enable-sockets \
--enable-mbstring \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-mcrypt \
--with-mhash
#这些都是编译过程中需要的安装包
[root@server1 php-5.6.35]# yum install -y libxml2-devel
[root@server1 php-5.6.35]# yum install -y openssl-devel
[root@server1 php-5.6.35]# yum install -y libcurl-devel
[root@server1 php-5.6.35]# yum whatprovides */(jpeglib.h安装名称)当找不到时,进行查找;
[root@server1 php-5.6.35]# yum install -y libjpeg-turbo-devel-1.2.1-1.el6.x86_64
[root@server1 php-5.6.35]# yum install -y libpng-devel-1.2.49-1.el6_2.x86_64
[root@server1 php-5.6.35]# yum install -y freetype-devel
[root@server1 php-5.6.35]# yum install -y freetype-config
[root@server1 php-5.6.35]# yum install -y gmp-devel-4.3.1-7.el6_2.2.x86_64
[root@server1 php-5.6.35]# yum install -y libmcrypt-devel
[root@server1 ~]# ls
libmcrypt-2.5.8-9.el6.x86_64.rpm
libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
[root@server1 php-5.6.35]# yum install -y lib*.rpm 下载
[root@server1 php-5.6.35]# yum install -y net-snmp-devel
[root@server1 php-5.6.35]#./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-gmp --with-gettext --with-pear --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash
[root@server1 php-5.6.35]# make && make install
[root@server1 php-5.6.35]# cd
[root@server1 ~]# cat /etc/passwd | grep nginx # 我们编译的时候,是以nginx用户和nginx组编译php的
[root@server1 ~]# id nginx #没有nginx用户,只有用户创建了才能起来服务
id: nginx: No such user
[root@server1 ~]# useradd nginx # 建立nginx用户
[root@server1 ~]# id nginx
uid=500(nginx) gid=500(nginx) groups=500(nginx)
[root@server1 ~]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# ls
php-fpm.conf.default php.ini
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 etc]# vim php-fpm.conf # 这是php的主配置文件 ,注意,文件里不能写以#开头的注释
pid = run/php-fpm.pid # 打开pid,服务才能运行
[root@server1 etc]# cd /root/php-5.6.35
[root@server1 php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@server1 php-5.6.35]# cd sapi/fpm/
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
[root@server1 fpm]# ll /etc/init.d/php-fpm # 这是启动脚本
-rw-r--r-- 1 root root 2359 Feb 18 09:32 /etc/init.d/php-fpm
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm # 给启动脚本添加可执行权限
[root@server1 fpm]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# lsp
hp-fpm.conf php-fpm.conf.default php.ini
[root@server1 etc]# vim php-fpm.conf
[root@server1 etc]# vim php.ini
936 date.timezone =Asia/Shanghai # 修改时区
[root@server1 etc]# /etc/init.d/php-fpm start # 开启服务
[root@server1 etc]# netstat -antlp
#如果出现以下报错
[root@server1 fpm]# /etc/init.d/php-fpm start
Starting php-fpm [06-Aug-2018 02:08:50] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[06-Aug-2018 02:08:50] ERROR: FPM initialization failed
Failed
解决方案:
<1>查看/usr/local/lnmp/php/etc/php-fpm.conf此配置文件是否有错误,注意,文件里不能写以#开头的注释
<2>[root@server5 etc]# netstat -lntup | grep php #查看php进程,有进程,就杀死进程
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2490/php-fpm
<3>killall php-fpm #杀死进程
3.源码编译nginx
[root@server1 ~]# tar zxf nginx-1.14.0.tar.gz [
root@server1 ~]# cd nginx-1.14.0
[root@server1 nginx-1.14.0]# cd src/core/
[root@server1 core]# vim nginx.h1
4 #define NGINX_VER "nginx/"
[root@server1 core]# cd -
/root/nginx-1.14.0
[root@server1 nginx-1.14.0]# vim auto/cc/gcc # 关闭debug日志
171 # debug
172 #CFLAGS="$CFLAGS -g"
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx \
> --without-http_ssi_module \
> --with-http_stub_status_module \
> --user=nginx --group=nginx \
> --with-threads \
> --with-file-aio #根据报错下载相应的软件,解决依赖性
[root@server1 nginx-1.14.0]# yum install -y pcre-devel
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx --without-http_ssi_module --with-http_stub_status_module --user=nginx --group=nginx --with-threads --with-file-aio # 继续编译
[root@server1 nginx-1.14.0]# make && make install
[root@server1 nginx-1.14.0]# cd /usr/local/lnmp/nginx/
[root@server1 nginx]# ls
conf html logs sbin
[root@server1 nginx]# vim conf/nginx.conf
location / {
root html;
index index.php index.html index.htm; # 把index.php 设置为默认发布目录,如果不改可能会出现403的访问禁止报错
}
# 把php与nginx建立联系
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
[root@server1 nginx]# cd sbin/
[root@server1 sbin]# ls
nginx
[root@server1 sbin]# pwd
/usr/local/lnmp/nginx/sbin
[root@server1 sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
[root@server1 sbin]# nginx -t
[root@server1 sbin]# nginx # 开启nginx
[root@server1 sbin]# netstat -antlp | grep nginx
访问测试 172.25.70.1
[root@server1 sbin]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim index.php # 编写php界面
再次访问
四.论坛搭建(整合mysql,php,nginx)
[root@server1 ~]# ls
Discuz_X3.2_SC_UTF8.zip
[root@server1 ~]# yum install -y unzip # 没有这个命令,就要先下载
[root@server1 ~]# unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/
[root@server1 ~]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# ls
50x.html index.html index.php readme upload utility
[root@server1 html]# mv upload/ bbs
浏览器访问
[root@server1 bbs]# chmod 777 config/ -R
[root@server1 bbs]# chmod 777 data/ -R
[root@server1 bbs]# chmod 777 uc_* -R
重新刷新网页
[root@server1 bbs]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php.ini 1013 pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock 1162 mysql.default_socket =/usr/local/lnmp/mysql/data/mysql.sock 1221 mysqli.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
[root@server1 etc]# /etc/init.d/php-fpm reload
[root@server1 etc]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# chmod 755 data/
[root@server1 mysql]# /etc/init.d/mysqld restart
刷新网页
[root@server1 ~]# cd /usr/local/lnmp/nginx/html/bbs/install/
[root@server1 install]# ls data images include index.php
[root@server1 install]# rm -fr index.php
[root@server1 install]# nginx -s reload
刷新网页
查看添加的用户
[root@server1 install]# mysql -uroot -p
Enter password:
mysql> show databases;
mysql> use discuz; # 进入数据库
mysql> select * from pre_ucenter_pm_members # 查看用户
注:以上操作必须在php服务开启的条件下才能操作