1)实验准备
服务器分配
主机 | ip | 角色 |
---|---|---|
host1 | 192.168.20.113 | nginx |
host2 | 192.168.20.101 | php |
host3 | 192.168.20.135 | mysql |
2)操作部分
host1源码安装nginx
1 useradd -M -u 777 -s /sbin/nologin nginx
2 tar -zxf nginx-1.15.4.tar.gz
3 cd nginx-1.15.4/
5 yum -y install gcc gcc-c++ pcre-devel zlib-devel openssl-devel
6 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
7 make
8 make install
9 ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
host2 源码安装php
10 yum -y install gd libxml2-devel libjpeg-devel libpng-devel
11 tar -zxf php-7.2.0.tar.gz
12 cd php-7.2.0/
13 ./configure --prefix=/usr/local/php --with-gd --with-zlib --with-pdo-mysql=mysqlnd --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/usr/local/php --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib
14 make -j8 && make install
15 cp php.ini-development /usr/local/php/php.ini
16 vim /usr/local/php.ini
修改192行 short_open_tag = On
18 cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
19 chmod +x /etc/init.d/php-fpm
20 cd /usr/local/php/etc/
21 cp php-fpm.conf{.default,}
22 vim php-fpm.conf
17行取消注释 打开pid文件
48行取消注释并修改 emergency_restart_threshold = 30 表示子进程故障退出的时候,经过规定的重启时间间隔后,php会启动多少个子程序
56行取消注释并修改 emergency_restart_interval = 1 子程序故障退出后重启的时间间隔
62行取消注释并修改 process_control_timeout = 20 表示子进程等待master发送信号的超时时间
69行取消注释 并修改为50 process.max = 50 表示可以fork出的最多子进程数量
85行1取消注释并修改 rlimit_files = 65536 表示master程序能打开的文件最大数量 默认值
90行取消注释并修改 rlimit_core = 65536 表示master能打开的文件数量 最大值
100行取消注释 events.mechanism = epoll 表示php使用的模型
#SIGSEGV是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号
#SIGBUS是指硬件故障或内存不足时发送的信号
25 cd /usr/local/php/etc/php-fpm.d/
26 cp www.conf.default www.conf
27 ln -s /usr/local/php/bin/* /usr/bin/
28 ln -s /usr/local/php/sbin/* /usr/sbin/
host3源码安装mysql
需要先卸载本机已有的mysql或者mariadb
36 yum -y install bison cmake ncurses-devel
37 tar -zxf mysql-5.5.22.tar.gz
38 cd mysql-5.5.22/
39 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
40 make && make install
41 useradd -M -s /sbin/nologin mysql
42 chown -R mysql:mysql /usr/local/mysql/
43 ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18
44 cd support-files/
45 cp my-large.cnf /etc/my.cnf
46 cp mysql.server /etc/init.d/mysqld
47 vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
48 chmod +x /etc/init.d/mysqld
49 /usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --user=mysql
53 ln -s /usr/local/mysql/bin/* /usr/bin/
54 /etc/init.d/mysqld start
55 mysqladmin -uroot password 123456
配置nfs服务(nfs服务放在php主机上)
host2和host3都添加nginx用户,且uid和host1相同
# useradd -M -u 777 -s /sbin/nologin nginx
host1 host2 host3均创建/www作为nfs的输出目录 并设置属主属组
# mkdir /www
# chown -R nginx:nginx /www
配置nfs配置文件
# vim /etc/exports
/www 192.168.20.0/24(rw,no_root_squash,sync)
启动nfs服务
# systemctl start nfs
在host1上查看nfs输出目录
# showmount -e 192.168.20.101
Export list for 192.168.20.101:
/www 192.168.20.0/24
host1 和host3都挂载nfs的输出目录
# mount -t nfs 192.168.20.101:/www /www
修改nginx配置文件
# vim /usr/local/nginx/conf/nginx.conf
44行,默认location里,网页根目录改为/www
45行,默认的location里,在index.html前边加上index.php
65-71行的location取消注释 修改如下
location ~ \.php$ {
root /www; #网页目录改为/www
fastcgi_pass 192.168.20.101:9000; #改为host2的ip
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf; #修改为fastcgi.conf
}
修改php配置文件
# vim /usr/local/php/etc/php-fpm.d/www.conf
23-24行,用户和组,改为nginx
user = nginx
group = nginx
36行 监听地址和端口改为自己的ip listen = 192.168.20.101:9000
47-49行取消注释并修改
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
62行取消注释并修改 listen.allowed_clients = 192.168.20.113 如果有多个,用逗号间隔,这里写nginx的ip
注意96行: pm = dynamic,
107行 pm.max_children = 50
112行 pm.start_servers = 20
117行 pm.min_spare_servers = 5
122行 pm.max_spare_servers = 35
127行取消注释 pm.process_idle_timeout = 10s;
启动nginx和php
host1 启动nginx
# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# nginx
host2启动php
# /etc/init.d/php-fpm start
Starting php-fpm done
测试nginx与php的整合是否OK
在host1上编辑网页文件
# vim /www/test1.php
<?php
phpinfo();
?>
访问测试
# firefox 127.0.0.1/test1.php
可以看到php页面,证明nginx与php连接没有问题
测试php与mysql连接是否OK
host3授权php主机进行连接
# mysql -uroot -p123456
mysql> grant all on *.* to 'root'@'192.168.20.101' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
host1上编辑测试页面
# vim /www/test2.php
<?php
$con = new mysqli('192.168.20.135','root','123456','test');
if(!$con)
die("connect error:".mysqli_connect_error());
else
echo "success connect mysql\n";
?>
如果能看到下面的页面,证明没有问题
在LNMP平台上进行应用的安装(这里安装discuz论坛)
在host1上操作,如下
# unzip ComsenzDiscuz-DiscuzX-master.zip
# cp -r DiscuzX/upload/ /www
# chmod -R 777 /www/upload/
# firefox 127.0.0.1/upload/install/index.php
具体安装页面如下图操作
至此,LNMP分离部署完成