lnmp分布式部署

柳三千

文章最后更新时间:2022年10月18日已超过773天没有更新。

LNMP工作原理:

  客户端发送请求,Nginx负责接收,如果是静态资源(html、js、css、png等)则自己处理并返回给客户!

  Nginx接收的是动态请求(.php请求文件)则转发到PHP服务端,交由PHP服务端处理!

  PHP接收处理Nginx转发过来动态请求,并返回给Nginx服务端!

  如果请求中包含了 SQL 语句,PHP则会连接mysql服务器,进行增删改查等操作,最终将处理完的数据返回给Nginx,再由Nginx返回给客户端请求!

图片.png

也就是说,在lnmp分布式部署时候,只需要配置Nginx+PHP,PHP+Mysql即可!

最后安装phpMyAdmin来验证效果!

  1、如果phpMyAdmin能成功运行,说明lnmp分布式部署是成功的!

  2、phpMyAdmin安装在实际工作中也是经常能碰到的! 

环境准备:

Nginx
192.168.140.130
PHP
192.168.140.132
Mysql
192.168.140.129

一、Nginx安装

之前文章已经说过怎么源码安装nginx,这边不再详细记录,具体安装请参考这篇文章 --->常用的Web服务源码编译安装


二、安装MySQL

这边主要使用基于glib(半成品包,可以指定配置文件、数据文件路径)包来安装mysql;

对源码编译安装mysql感兴趣的读者,可以参考这篇文章 ---> Mysql5.7源码编译安装

环境清理:

#查看是否自带的mysql
rpm -qa | grep mysql
rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64mariadb-5.5.68-1.el7.x86_64

#删除mariadb
yum remove mariadb
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps
rm -rf /etc/my.cnf

下载参考链接:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.39.tar.gz


创建运行mysql的用户

useradd -r -s /sbin/nologin mysql


创建数据目录、日志目录并授权

#创建数据目录
[root@localhost src]# mkdir -p /data/mysql57/data

#创建日志目录
[root@localhost src]# mkdir -p /data/mysql57/log

#更改目录所有者
[root@localhost src]# chown -R mysql.mysql /data


mysql5.7解压编译安装

#解压mysql5.7
[root@localhost local]# tar zxvf src/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz

#重命名安装目录并进入该目录
[root@localhost local]# mv mysql-5.7.39-linux-glibc2.12-x86_64/ mysql5.7
[root@localhost local]# cd mysql5.7/
[root@localhost mysql5.7]


在安装目录下创建配置文件my.cnf

vim my.cnf
[client]
port=3306
socket=/tmp/mysql57.sock
[mysqld]
socket=/tmp/mysql57.sock
character-set-server=utf8
collation-server=utf8_general_ci
skip-name-resolve
user=mysql
port=3306
basedir=/usr/local/mysql5.7/
datadir=/data/mysql57/data
tmpdir=/tmp
log-error=/data/mysql57/log/mysqld57.log
pid-file=/data/mysql57/mysqld57.pid


Mysql5.7初始化:

#指定了配置文件路径。不指定就会默认/etc/my.cnf,不利于后期的多实例安装

[root@localhost mysql5.7]#/usr/local/mysql5.7/bin/mysqld --defaults-file=/usr/local/mysql5.7/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql5.7/ --datadir=/data/mysql57/data


修改mysql5.7启动脚本:分别修改basedir、datadir、conf的路径


拷贝启动脚本:

[root@localhost mysql5.7]# cp -a ./support-files/mysql.server /etc/init.d/mysql57


启动mysql5.7

[root@localhost mysql5.7]#/etc/init.d/mysql57 start


查看临时密码:

[root@localhost mysql5.7]# cat /data/mysql57/log/mysqld57.log  | grep password
2022-09-23T05:25:47.783251Z 1 [Note] A temporary password is generated for root@localhost: nd>phWNwB7YS
2022-09-23T05:35:41.498538Z 0 [Note] Shutting down plugin 'sha256_password'
2022-09-23T05:35:41.498540Z 0 [Note] Shutting down plugin 'mysql_native_password'


重置密码:

[root@localhost mysql5.7]# ./bin/mysql -S /tmp/mysql57.sock -uroot -p '临时密码'
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.39
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye


三、安装PHP

依赖包安装:

yum -y install gcc gcc-c++ openssl readline-devel openssl-devel curl-devel curl libjpeg-devel libjpeg gd-devel gd libxslt-devel libxslt bzip2-devel bzip2 sqlite-devel autoconf oniguruma-devel

以上依赖包出现无法下载安装情况,请更换使用阿里源---> Centos7更换阿里源


安装libzip

直接使用迅雷下载,参考链接:https://libzip.org/download/libzip-1.3.2.tar.gz


上传服务器,解压编译安装:

[root@localhost src]# tar zxvf libzip-1.3.2.tar.gz 
[root@localhost src]#cd libzip-1.3.2

[root@localhost src]# ./configure && make && make install

[root@localhost libzip-1.3.2]# whereis libzip
libzip: /usr/local/lib/libzip.so /usr/local/lib/libzip.la /usr/local/lib/libzip.a
[root@localhost libzip-1.3.2]# export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"


PHP源码包导入服务器,解压进入编译安装

下载参考链接:https://www.php.net/distributions/php-7.4.32.tar.gz

[root@localhost memcached-3.1.5]# cd /usr/local/src/php-7.4.32

[root@localhost php-7.4.32]#  ./configure --prefix=/usr/local/php7 \
--with-config-file-path=/etc \
--enable-fpm --disable-debug \
--disable-rpath --enable-shared \
--enable-soap --with-openssl \
--enable-bcmath --with-iconv \
--with-bz2 --enable-calendar \
--with-curl --enable-exif  \
--enable-ftp --enable-gd \
--with-jpeg --with-zlib-dir \
--with-freetype --with-gettext \
--enable-mbstring --enable-pdo \
--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
--with-readline --enable-shmop --enable-simplexml \
--enable-sockets --with-zip \--enable-mysqlnd-compression-support \
--with-pear --enable-pcntl --enable-posix

[root@localhost php-7.4.32]#make && make install

#拷贝配置文件
[root@localhost php-7.4.32]# cp -a php.ini-development /usr/local/php7/etc/php.ini

#拷贝启动脚本并授权
[root@localhost php-7.4.32]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@localhost php-7.4.32]# chmod +x /etc/init.d/php-fpm 

#拷贝配置文件
[root@localhost php-7.4.32]# cd /usr/local/php7/etc/
[root@localhost etc]# cp -a php-fpm.conf.default php-fpm.conf
[root@localhost etc]# cp -a php-fpm.d/www.conf.default php-fpm.d/

建立软链接:
[root@localhost etc]# ln -s /usr/local/php7/bin/* /usr/local/bin/
[root@localhost etc]# ln -s /usr/local/php7/sbin/* /usr/local/sbin/
[root@localhost etc]# php -v
PHP 7.4.32 (cli) (built: Oct 10 2022 04:04:28) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

启动php-fpm
[root@localhost etc]# /etc/init.d/php-fpm start
Starting php-fpm  done

[root@localhost etc]# netstat -pltun | grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      93401/php-fpm: mast 
tcp        0      0 192.168.140.132:9000    0.0.0.0:*               LISTEN      23499/php-fpm: mast 

[root@localhost etc]# ps aux | grep php
root      23499  0.0  0.3 240004  6824 ?        Ss   02:54   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nginx     23500  0.0  0.3 240004  6240 ?        S    02:54   0:00 php-fpm: pool www
nginx     23501  0.0  0.4 240004  7944 ?        S    02:54   0:00 php-fpm: pool www
nginx     23502  0.0  0.3 240004  6240 ?        S    02:54   0:00 php-fpm: pool www
nginx     23503  0.0  0.3 240004  6240 ?        S    02:54   0:00 php-fpm: pool www
nginx     23504  0.0  0.3 240004  6240 ?        S    02:54   0:00 php-fpm: pool www
root      93401  0.0  0.3 231176  6620 ?        Ss   04:53   0:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
nobody    93402  0.0  0.3 231176  6120 ?        S    04:53   0:00 php-fpm: pool www
nobody    93403  0.0  0.3 231176  6120 ?        S    04:53   0:00 php-fpm: pool www
root      93426  0.0  0.0 112812   980 pts/0    S+   04:54   0:00 grep --color=auto php


四、PHP+Nginx关联

 工作原理:Nginx第一时间接收到用户的请求,只要是php的请求都转发到PHP服务器,交由PHP服务器处理!

Nginx服务器配置

#创建nginx的系统用户
[root@localhost html]# useradd -r -s /sbin/nologin nginx
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
     location ~ \.php$ {
            root           /www;#这个是PHP的目录,php的文件要放置该目录下
            fastcgi_pass   192.168.140.132:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

运行用户设置为nginx系统用户

图片.png


PHP服务配置:

创建nginx系统用户
[root@localhost html]# useradd -r -s /sbin/nologin nginx

#创建放置php的文件目录,并设置目录所有者为nginx
[root@localhost ~]# mkdir /www
[root@localhost ~]# chown -R nginx:nginx /www/

#修改配置文件:
[root@localhost ~]# vim /usr/local/php7/etc/php-fpm.d/www.conf
user = nginx
group = nginx

#php服务器的地址
listen = 192.168.140.132:9000
#进程的管理方式 dynamic为动态管理 static为静态管理
pm = dynamic

#静态方式下开启的php-fpm进程数量,在动态方式下他限定php-fpm的最大进程数(这里要注意pm.max_spare_servers的值只能小于等于pm.max_children)
pm.max_children = 120

#动态方式下的起始php-fpm进程数量
pm.start_servers = 20

#动态方式空闲状态下的最小php-fpm进程数量
pm.min_spare_servers = 10

#动态方式空闲状态下的最大php-fpm进程数量
pm.max_spare_servers = 30

#保存之后重新加载配置文件
[root@localhost ~]# /etc/init.d/php-fpm reload
Reload service php-fpm  done



#新建一个测试php文件
[root@localhost ~]# vim /www/test.php

<html>
<h1>welcome to php !</h1>
<?php
phpinfo();
?>
</html>


最终结果测试:

图片.png


五、Mysql+PHP

  工作原理:需要查询数据相关的操作,都是由PHP连接数据,执行相对应的mysql语句完成的,所以Mysql需要授权,允许PHP服务器远程连接Mysql!

mysql> create user php@'192.168.140.132' identified by "123456";
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to php@192.168.140.132;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------------+-------------------------------------------+
| user          | host            | authentication_string                     |
+---------------+-----------------+-------------------------------------------+
| root          | localhost       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| mysql.session | localhost       | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost       | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| php           | 192.168.140.132 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+---------------+-----------------+-------------------------------------------+
4 rows in set (0.00 sec)


php测试连接mysql:

测试文件:

[root@localhost www]# cat test.php 
<html>
<h1>welcome to php !</h1>
<?php
$con = new mysqli('192.168.140.129','php','123456');
if(!$con)
  die("connect error:".mysqli_connect_error());
else
  echo "connet mysql server ok!\n";
phpinfo();
?>


最终效果:

图片.png


六、phpMyAdmin安装

  phpmyadmin的压缩包包含动、静态资源,也就是说动态资源得放在PHP服务器上,静态资源放在Nginx服务器上!

两种方式实现:

  1、一台服务器搭建NFS服务,把网页动、静态资源都放在NFS挂载出去的目录上,这样PHP和Nginx都可以同时读取网页资源的文件!

  2、静态资源放在Nginx,动态资源放在PHP上,但是phpmyadmin的动静态资源文件繁杂,不好分辨,为了省事,直接在Nginx和PHP服务器上各拷贝一份phpmyadmin的解压包!

Nginx服务器操作:

 上传安装包到Nginx的html目录下并解压

[root@localhost html]# tar zxvf phpmyadmin.tar.gz
[root@localhost html]#cd phpmyadmin
[root@localhost html]chown -R nginx:nginx /usr/local/nginx/

        

PHP服务器操作:

[root@localhost ~]# cd /www/
[root@localhost www]# ls
phpmyadmin  phpmyadmin.tar.gz  test.php
[root@localhost www]# tar zxvf phpmyadmin.tar.gz
[root@localhost www]# cd phpmyadmin
[root@localhost libraries]# pwd
/www/phpmyadmin/libraries
#告诉phpmyadmin的mysql地址是哪一个!       
[root@localhost libraries]# vim config.default.php
$cfg['Servers'][$i]['host'] = 'Mysql的地址';

图片.png


最终效果:

图片.png

图片.png


PHP拓展:

php添加memcache模块

下载参考链接:

http://pecl.php.net/package/memcache

http://pecl.php.net/package/memcached

phpize是用来拓展php新模块的,通过phpize可以建立php的外挂模块

autoconf是一个用于生成shell脚本的工具,可以自动配置软件源代码以适应多种类似POSIX的系统,为了让你的软件包在所有的不同系统上都可以进行编译。

yum install autoconf


源码包导入系统,解压进入源码编译

[root@localhost memcache-8.0]# yum install autoconf

[root@localhost src]# tar zxvf memcache-8.0.tgz 
[root@localhost src]# cd memcache-8.0
[root@localhost memcache-8.0]# ls
cloudbuild.yaml  config.m4   CREDITS  Dockerfile   LICENSE       README  tests
config9.m4       config.w32  docker   example.php  memcache.php  src
[root@localhost memcache-8.0]# /usr/local/php/bin/phpize 
Configuring for:
PHP Api Version:         20190902
Zend Module Api No:      20190902
Zend Extension Api No:   320190902

[root@localhost memcache-8.0]# ll
total 664
drwxr-xr-x 2 root root     54 Oct 10 02:20 autom4te.cache
drwxr-xr-x 2 root root    241 Oct 10 02:14 build
-rw-rw-r-- 1 root root    372 Dec  6  2020 cloudbuild.yaml
-rw-rw-r-- 1 root root   4545 Dec  6  2020 config9.m4
-rw-r--r-- 1 root root   1649 Oct 10 02:20 config.h.in
-rw-rw-r-- 1 root root     67 Dec  6  2020 config.m4
-rwxr-xr-x 1 root root 454377 Oct 10 02:20 configure
-rw-r--r-- 1 root root   5082 Oct 10 02:20 configure.ac
-rw-rw-r-- 1 root root   1081 Dec  6  2020 config.w32
-rw-rw-r-- 1 root root     32 Dec  6  2020 CREDITS
drwxr-xr-x 2 root root     39 Oct 10 02:14 docker
-rw-rw-r-- 1 root root    247 Dec  6  2020 Dockerfile
-rw-rw-r-- 1 root root    509 Dec  6  2020 example.php
-rw-rw-r-- 1 root root   3208 Dec  6  2020 LICENSE
-rw-rw-r-- 1 root root  29064 Dec  6  2020 memcache.php
-rw-rw-r-- 1 root root   5975 Dec  6  2020 README
-rw-r--r-- 1 root root 127055 Oct 10 02:20 run-tests.php
drwxr-xr-x 2 root root    299 Oct 10 02:14 src
drwxr-xr-x 2 root root   4096 Oct 10 02:14 tests

[root@localhost memcache-8.0]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@localhost memcache-8.0]# make && make install


----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/src/memcache-8.0/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.
#记住这个路径,非常重要
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/
[root@localhost memcache-8.0]# vim /usr/local/php/etc/php.ini #添加以下两行
extension="memcache.so";
extension_dir="/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/"

#重启php-fpm服务
[root@localhost memcache-8.0]# /etc/init.d/php-fpm stop
Gracefully shutting down php-fpm . done

[root@localhost memcache-8.0]# /etc/init.d/php-fpm start
Starting php-fpm  done


最终效果:

图片.png


PHP添加memcached模块

yum install libmemcached libmemcached-devel zlib zlib-devel libevent-devel
[root@localhost src]# tar zxvf memcached-3.1.5.tgz 

[root@localhost src]# cd memcached-3.1.5
[root@localhost memcached-3.1.5]# ls
ChangeLog   fastlz   memcached-api.php          php_memcached.c          php_memcached_server.h   tests
config.m4   g_fmt.c  memcached.ini              php_memcached.h          php_memcached_session.c
config.w32  g_fmt.h  php_libmemcached_compat.c  php_memcached_private.h  php_memcached_session.h
CREDITS     LICENSE  php_libmemcached_compat.h  php_memcached_server.c   README.markdown

[root@localhost memcached-3.1.5]# /usr/local/php/bin/phpize 
Configuring for:
PHP Api Version:         20190902
Zend Module Api No:      20190902
Zend Extension Api No:   320190902

[root@localhost memcached-3.1.5]# ll
total 888
drwxr-xr-x 2 root root      54 Oct 10 02:47 autom4te.cache
drwxr-xr-x 2 root root     241 Oct 10 02:47 build
-rw-r--r-- 1  501 games  12047 Dec  3  2019 ChangeLog
-rw-r--r-- 1 root root    2274 Oct 10 02:47 config.h.in
-rw-r--r-- 1  501 games  15022 Dec  3  2019 config.m4
-rwxr-xr-x 1 root root  480935 Oct 10 02:47 configure
-rw-r--r-- 1 root root    5082 Oct 10 02:47 configure.ac
-rw-r--r-- 1  501 games   1502 Dec  3  2019 config.w32
-rw-r--r-- 1  501 games     59 Dec  3  2019 CREDITS
drwxr-xr-x 2 root root      53 Oct 10 02:46 fastlz
-rw-r--r-- 1  501 games   2297 Dec  3  2019 g_fmt.c
-rw-r--r-- 1  501 games   1181 Dec  3  2019 g_fmt.h
-rw-r--r-- 1  501 games   3218 Dec  3  2019 LICENSE
-rw-r--r-- 1  501 games   7223 Dec  3  2019 memcached-api.php
-rw-r--r-- 1  501 games   6496 Dec  3  2019 memcached.ini
-rw-r--r-- 1  501 games   2702 Dec  3  2019 php_libmemcached_compat.c
-rw-r--r-- 1  501 games   1707 Dec  3  2019 php_libmemcached_compat.h
-rw-r--r-- 1  501 games 136038 Dec  3  2019 php_memcached.c
-rw-r--r-- 1  501 games   1878 Dec  3  2019 php_memcached.h
-rw-r--r-- 1  501 games   6596 Dec  3  2019 php_memcached_private.h
-rw-r--r-- 1  501 games  24349 Dec  3  2019 php_memcached_server.c
-rw-r--r-- 1  501 games   1473 Dec  3  2019 php_memcached_server.h
-rw-r--r-- 1  501 games  14272 Dec  3  2019 php_memcached_session.c
-rw-r--r-- 1  501 games   1607 Dec  3  2019 php_memcached_session.h
-rw-r--r-- 1  501 games   1875 Dec  3  2019 README.markdown
-rw-r--r-- 1 root root  127055 Oct 10 02:47 run-tests.php
drwxr-xr-x 2 root root    4096 Oct 10 02:46 tests

[root@localhost memcached-3.1.5]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@localhost memcached-3.1.5]# make && make install

----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/src/memcached-3.1.5/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.
#记住这个路径,非常重要
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/

[root@localhost memcached-3.1.5]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/
memcached.so  memcache.so  opcache.a  opcache.so

[root@localhost memcached-3.1.5]# vim /usr/local/php/etc/php.ini #添加以下两行
extension="memcached.so";
extension_dir="/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/"

#重新加载配置文件:
[root@localhost memcached-3.1.5]# /etc/init.d/php-fpm reload
Reload service php-fpm  done


最终效果图:

图片.png

文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码