day51 LNMP实际的部署个个服务

day51 LNMP的实际的部署

前言

实际的部署的过程中,去了解通信

慢慢的爱你,慢慢的感受部署的乐趣

开始进入话题

部署LNMP

  1. 一台web-7机器上,安装nginx,php,mysql
  2. 指定的是安装php-7版本,需要找到依赖,去浏览器上找就好
  3. 以后你看到一个代码
yum install -y php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd

执行后吗,找不到这些包,缺少yum源,又不知道怎么找到这些源

吧这个代码,复制到搜索引擎里
yum install -y php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd

看有没有人写了类似教程。。

部署nginx和PHP/的安装

1.创建nginx的运行的环境,准备一个新的机器,去测试部署的LNMP
设置运行的用户
grouadd -g 666 www
useradd -u 666 -g 666 -M -s /sbin/nologin  www

2,设置nginx的官方的库
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF

3.安装,启动nginx
清除缓存,下载nginx, 开启以及开机自启动

yum clean all  
yum install nignx -y
systemctl start nginx 
systemctl enable nignx 

4.部署php7版本,以及安装PHP7连接MySQL的驱动,

#写在旧的php7的环境,以免导致的冲突
yum remove php-mysql-5.4 php php-fpm php-common -y

#安装第三方epel源
#其实就是下载2个, yum的repo文件的仓库
#这两个都是用于centos安装一些额外的rpm包的仓库。

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

# 如果这个命令执行失败,安装不了这个rpm怎么办
#这个,不就是一个https提供的一个静态的资源吗?
我可以用N多种的方法去下载这个资源,放到linux里面rpm去安装。

-在Windows中,下载好了,放到Linux里安装即可
如果你网络环境正常的话,你直接执行下属命令,去官网安装php-7就ok了

# 安装php7版本的依赖
yum install -y php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml  php71w-fpm  php71w-mysqlnd  php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb php71w-json php71w-pecl-apcu php71w-pecl-apcu-devel

自定义的yum的仓库

你不需要依赖外网的yum仓库,可能导致该仓库无法访问,下载软件失败。。

大公司,会自建yum仓库

防止出现网络问题,自建了yum仓库,本地yum仓库

你可以去阿里云上,部署一个在线的yum仓库。。

# 先准备以个lnmp所有的rpm包,以及他们所需要的依赖
#准备一个minomal最小话安装的机器
# 只下载对应的软件包,以及依赖,到指定的目录。rpm,但不安装。
yum install --donwloadonly --downloaddir=/your_rpm/   xxxxxxx

# 如果是本地的rpm包的安装
# 针对LNMP涉及的RPM包。rsync,nfs等

[root@web-7 yum.repos.d]# ls local-rpm/ | wc -l
160

# 自建yum仓库
yum install createrepo -y

[root@web-7 yum.repos.d]# createrepo /etc/yum.repos.d/local-rpm/
Spawning worker 0 with 40 pkgs
Spawning worker 1 with 40 pkgs
Spawning worker 2 with 40 pkgs
Spawning worker 3 with 40 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete


[root@web-7 /etc/yum.repos.d]#
cat > /etc/yum.repos.d/local-rpm.repo  <<EOF
[local-rpm]
name=local yum repo
baseurl=file:///etc/yum.repos.d/local-rpm/
enabled=1
gpgcheck=0
EOF

# 最终的仓库源如下
# 我当前的yum源目录,只有一个repo文件,只读这个本地yum仓库
[root@web-7 yum.repos.d]# ls
bakrepo  local-rpm  local-rpm.repo


#指定仓库安装
yum install --enablerepo=local-rpm php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml  php71w-fpm  php71w-mysqlnd  php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb php71w-json php71w-pecl-apcu php71w-pecl-apcu-devel

到此我们的本地的yum仓库就把php的环境安装好了

修改php的配置的文件

先部署基础的环境,不断地修改,支持fastcgi高新能协议的php进程的运行

1. 修改PHP-fpm配置的文件,修改php-fpm进程的运行的用户,改为和nginx一样。

[root@web-7 /]# grep -E '^(user|group)' /etc/php-fpm.d/www.conf 
user = apache
group = apache

# 改为www用户
[root@web-7 ~]#sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf 
[root@web-7 ~]#sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf 
[root@web-7 ~]#grep -E '^(user|group)' /etc/php-fpm.d/www.conf 
user = www
group = www

# 尝试启动php进程

[root@web-7 /]# systemctl start php-fpm
[root@web-7 /]# systemctl enable php-fpm
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.

# 查看后端进程的端口
[root@web-7 /]# netstat -tunlp | grep php
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1835/php-fpm: maste 

部署数据库(mariadb)

# 使用自建的yum仓库

# 准备好已经建好的yum仓库

# 注意这个是来自epel仓库的数据
yum install mariadb mariadb-server -y 

#启动mysql

MySQL快速的入门

1. 基本的数据查看sql的语句,用于部署好产品以后,去数据库里面检查动态的数据

2. 数据是放在mysql数据库管理的软件中,需要sql语句去查询。

3. 这个不是磁盘上的数据文件, /www/media

什么是本地进程的套接字

就是客户端与服务端进行连接的桥梁

会用就ok

# 启动mysql后 程序的运行有2种状态提供一个socket的端点提供访问

提供访问的方式1

大家都很熟悉的 ip:port 172.16.1.7:3306

就可以基于网络进行访问

mysql -uroot -pchaoge666 -h172.16.1.7


第二种本地进程套接字文件基于内存的通道通信,速度快

叫做socket的文件,基于这种的方式,连接摸一个进程,

启动在/var/log/mysql/mysql.sock

当前的机器访问172.16.1.7

在本地访问 mysql -uroot -pchaoge666

1. 启动服务
systemctl start mariadb

# 该服务提供了两种连接的方式,网络socket,和本地的套接字

# 查看端口的情况------------这是全部的端口
[root@web-7 yum.repos.d]# netstat -tunlp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1276/master         
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1835/php-fpm: maste 
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2225/mysqld         
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      732/rpcbind         
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1422/nginx: master  
tcp        0      0 0.0.0.0:22999           0.0.0.0:*               LISTEN      1024/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1276/master         
tcp6       0      0 :::111                  :::*                    LISTEN      732/rpcbind         
tcp6       0      0 :::80                   :::*                    LISTEN      1422/nginx: master  
tcp6       0      0 :::22999                :::*                    LISTEN      1024/sshd           
udp        0      0 0.0.0.0:905             0.0.0.0:*                           732/rpcbind         
udp        0      0 0.0.0.0:111             0.0.0.0:*                           732/rpcbind         
udp6       0      0 :::905                  :::*                                732/rpcbind         
udp6       0      0 :::111                  :::*                                732/rpcbind         
[root@web-7 yum.repos.d]# 


# 这是mariadb 服务也就是mysql服务 ----3306端口
[root@web-7 yum.repos.d]# netstat -tunlp  | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2225/mysqld         


# 这是本地套接字的文件的目录
[root@web-7 yum.repos.d]# ls /var/lib/mysql/mysql.sock -l
srwxrwxrwx 1 mysql mysql 0 Apr 21 22:11 /var/lib/mysql/mysql.sock

光速入门mysql的sql语句

# 先登录,默认的mysql的连接的方式

mysql -u没有空格用户名 -p没有空格的密码  -h没有空格的主机地址

# 如下空密码,登录mysql
[root@web-7 yum.repos.d]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 退出mysql的命令
MariaDB [(none)]> exit
Bye

1.修改密码,默认密码是空密码
3 这是改密码的完整的命令,通过passwd指令,指定新的密码

mysqladmin -uroot -p   password 'yzk666'
完毕之后,密码就被修改了
此时账户的密码是
root
yzk666

#查看登陆的两种的方式,1基于网路socket连接
# -u, --user=name     User for login if not current user.
# -p, --password[=name] 
# -h, --host=name     Connect to host.
# -P, --port=#        Port number to use for connection

[root@web-7 ~]#mysql -uroot -pyzk666 -hlocalhost -P3306


# 还有一种是基于本地的套接字的文件
mysql -uroot -pyzk666 -S/var/lib/mysql/mysql.sock

# 改完mysql密码以后,登录歇息基本的sql的语句
# 默认你在本地执行mysql连接,无需要指定地址的信息,默认基本上是3306的端口

mysql -uroot -pyzk666

#查看数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

#查看当前数据库的用户的信息,有多少个用户

# 切换进入数据库
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> 

#查看当前数据库下有多少张数据表
MariaDB [mysql]> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
24 rows in set (0.00 sec)


# 查看数据表的结构信息
MariaDB [mysql]> desc user;

# 查看表中,指定字段的信息
MariaDB [mysql]> select Host,User,Password from user;
+-----------+------+-------------------------------------------+
| Host      | User | Password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *8D45A1DAD603EDC2980B51D2C900E6BCFE6E13A8 |
| web-7     | root |                                           |
| 127.0.0.1 | root |                                           |
| ::1       | root |                                           |
| localhost |      |                                           |
| web-7     |      |                                           |
+-----------+------+-------------------------------------------+
6 rows in set (0.00 sec)

大文件夹
	- 文件中的文件
	- 文件中的文件
	- 文件中的文件
	- 文件中的文件
	- 文件中的文件

mysql的数据库中
	数据表
	数据表
	数据表
	数据表

你学会了基本的mysql的语句
查看你部署的产品,写到数据库中的数据,你看看有没有

部署nginx代理php的后端

部署nignx,能把请求转发给后端的php

nginx 接收到关于php的动态的请求,转发给php-fpm

需要用到的参数fastcgi_pass
语法如下

用法1. 转发给ip:port 的形式
fastcgi_pass localhost:9000;

用法2. 转发给unix socket本地进程的套接字
fastcgi_pass unix:/tmp/fastcgi.socket;

#具体的修改nginx配置如下

server{
	listen 80;
	server_name www.yzk.com;
    # 动态请求处理
    # 遇见以.php结尾的请求就进入到这里的location
    location ~ \.php$ {
   		 # 如果要找具体的后端代码,在/code/去找
        root /code;
        # 会吧请求转发给后端的php-fpm进行加工
        fastcgi_pass 127.0.0.1:9000;
        # 默认的首页文件名字是index.php
        fastcgi_index index.php;
        # 转发的参数,
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
	
	}


}

准备php测试代码,检查nignx和php是否可以正常的结合工作

1.确保php-fpm进程的存在
[root@web-7 conf.d]# netstat -tunlp | grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1835/php-fpm: maste 

2.进入刚才nginx中的设置的目录,php的代码的目录
mkdir -p /code
cd /code
chown -R www.www /code

创建一个测试数据,创建phpinfo页面
cat > /code/test-phpinfo.php <<EOF
<?php
phpinfo();
echo "welcome to yuchaoit.cn"
?>
EOF

最后来访问测试nginx是否可以把请求转发个php

确保是没问题的

1. 用户访问php的请求 www.yzk.com/test-phpinfo.php 

2.该请求进入nginx虚拟主机location匹配上php结尾读取该设置,寻找test-phpinfo.php的文件

3.找到这个代码的文件,nginx转发给后端的php-fpm进程
fastcgi_pass转发

4.该请求是读取了一个加载php代码的文件,返回执行的结果

5.nginx动态转发这个结果返回给用户端的浏览器

彻底的玩明白,php的动态的请求的处理

我们现在不是在做php解释型语言的网站

  1. 准备好静态的资源,gif,png,jpg等,nginx去处理
  2. php的特点是,解释型语言,网站的源码,说白了也就是一堆文件
  3. 这些PHP的文件,必须交给php-fpm进程去读取
# 转化为nginx的配置
[root@web-7 code]# cat /etc/nginx/conf.d/php.conf 
server{
	listen 80;
	server_name www.yzk.com;
    # 动态请求处理
    # 遇见以.php结尾的请求就进入到这里的location

location ~* \.(jpg|gif|png){
	root /www/static/;

	}
    location ~ \.php$ {
   		 # 如果要找具体的后端代码,在/code/去找
        root /code;
        # 会吧请求转发给后端的php-fpm进行加工
        fastcgi_pass 127.0.0.1:9000;
        # 默认的首页文件名字是index.php
        fastcgi_index index.php;
        # 转发的参数,
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
	
	}

}


# 准备一个静态数据
mkdir -p /www/static/
wget -O /www/static/caixukun.jpg  http://yuchaoit.cn/data/cai.jpg


# 准备一些动态数据
mkdir -p /code
cat > /code/index.php <<EOF
<?php
phpinfo();
echo "welcome to yuchaoit.cn"
?>
EOF

# 重启nginx
nginx -s reload

# 重启php-fpm(默认就是fastcgi协议了,不用你管,你只需要知道,在nginx哪里,设置为fastcgi_pass 127.0.0.1:9000;即可!!!)
systemctl restart php-fpm
client 请求的url
↓
nginx(虚拟主机),具体怎么配置,把请求发个后端的php-fpm即可
↓
php-fpm(找到你要执行的代码文件)

测试php连接mysql是否正常

[root@web-7 /code]#cat test-mysql.php 
<?php

    $server="127.0.0.1";
    $mysql_user="root";
    $mysql_pwd="密码";


    // 创建数据库连接
    $conn=mysqli_connect($server,$mysql_user,$mysql_pwd);

    // 检测连通性
    if($conn){
        echo "mysql successful by yuchaoit.cn \n";
    }else {
        die( "Connection failed:  "  .  mysqli_connect_error());
    }

?>

完成产品的部署

在一个支持lnmp的机器上部署2个网站的产品

基于多域名的虚拟的主机,更加的贴近生产
posted @ 2025-04-21 22:11  国家一级冲浪yzk  阅读(21)  评论(0)    收藏  举报