一.LNMP基本架构
L(linux)N(nginx)M(mysql)P(php)
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
二.lnmp架构的优点
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务。Nginx用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多。
作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm 描述了成功并且美妙的使用经验。 Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)。
Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。
三.实现mysql,php,nginx的源码编译
1.mysql的源码编译
[root@server1 ~]# ls # 先获取软件包
cmake-2.8.12.2-4.el6.x86_64.rpm # cmake是编译器
mysql-boost-5.7.17.tar.gz
[root@server1 ~]# tar zxf mysql-boost-5.7.17.tar.gz
[root@server1 ~]# ls
cmake-2.8.12.2-4.el6.x86_64.rpm
mysql-5.7.17 mysql-boost-5.7.17.tar.gz
[root@server1 ~]# yum install -y cmake-2.8.12.2-4.el6.x86_64.rpm
[root@server1 ~]# yum install -y gcc gcc-c++ ncurses-devel 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
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=all
-DWITH_BOOST=boost/boost_1_59_0/
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]# 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 mysql]# pwd
/usr/local/lnmp/mysql
[root@server1 mysql]# chown -R mysql.mysql /usr/local/lnmp/mysql # 修改用户名和组名
[root@server1 mysql]# vim ~/.bash_profile # 设置环境变量,方便登陆
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
[root@server1 mysql]# source /root/.bash_profile # 检测语法
[root@server1 mysql]# mysql # 输入mysql,然后按tab键,可以加载出来,说明,文件已经生效
[root@server1 mysql]# mysqld --initialize --user=mysql # 初始化,生成临时登陆密码
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
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-2.7.6-14.el6.x86_64
[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 install -y libjpeg-turbo-devel-1.2.1-1.el6.x86_64
[root@server1 php-5.6.35]# yum install -y 2:libpng-devel-1.2.49-1.el6_2.x86_64
[root@server1 php-5.6.35]# yum install -y freetype-devel-2.3.11-14.el6_3.1.x86_64
[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 1:net-snmp-devel-5.5-49.el6.x86_64
[root@server1 ~]#./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]# 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
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]# 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 或者 netstat -ntlp
[root@server1 sbin]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim index.php # 编写php界面
<?php
phpinfo()
?>
四.论坛搭建(整合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;