PHP全栈工程师实战经验(运维篇)

php工程师在工作中经常遇到环境配置问题,本文主要通过Centos7 中的yum对环境Nginx+Php+MySQL环境的搭建与配置,希望给看到这篇文章的同学节省一些时间。同时也能为还不清楚如何搭建环境的同学提供一个搭建的思路。文章中的技术要点不是很全面,可根据思路自己拓展技术点。

PHP全栈工程师实战经验(运维篇)

  • linux服务器(CentOS 7)
    • 查看IP地址
    • SSH 免密登录
    • 查看linux是什么操作系统
    • yum管理
      • 软件包仓库升级
    • Nginx
      • 安装
      • 管理nginx服务
      • Nginx 自定义Server
      • 如何访问PHP文件
    • 防火墙 firewalld
    • MySQL
      • 安装
    • php
      • 查看 php 命令位置
      • php71 yum源
      • 安装
      • php 版本信息
      • php 版本切换
      • php 配置文件问题
      • 安装 php-fpm
      • php 服务管理
      • php 扩展安装
      • php 连接数据库并查询数据库数据
    • 按关键字批量杀死进程

linux服务器(CentOS 7)

查看IP地址

ip addr

新安装好的 Centos7 系统用上面的命令查看ip地址,先用ssh root@ip地址的+输入密码的方式登录
PHP全栈工程师实战经验(运维篇)_第1张图片

SSH 免密登录

ssh-keygen -t rsa

在home目录下执行 ssh-keygen -t rsa 一路回车,在home/root 下生成了 .ssh 文件夹。目录下有 id_rsa id_rsa.pub 两个文件。实现免密登录需要本地的公钥放在服务器上的 authorized_keys 文件中。如果.ssh 目录下没有 authorized_keys 文件手动创建一个。注意 authorized_keys 文件的权限必须是600,如果权限不对会影响登录。

cd .ssh
touch authorized_keys
chmod 600 authorized_keys 

我以我自己的电脑操作,在本地机的home下和服务器上同样的操作执行 ssh-keygen -t rsa 一路回车,也生成id_rsa id_rsa.pub 两个文件。

将本地的 id_rsa.pub 文件中的内容复制到服务器上的 authorized_keys 文件中。

此时,exit 在本地退出服务器的 ssh 连接。再执行 ssh root@ip 地址登录已不需要输入密码。
在这里插入图片描述

如果还觉得比较麻烦可以在本地 .ssh 目录下创建一个 config 文件。配置如下:

# Host 自定义连接服务器名称
Host Serv5
# HostName 连接服务器IP
HostName 10.211.55.34
# Port 服务器 ssh 对外开放的端口
Port 22
# 登录服务器的用户
User root
# 本地服务器密钥文件地址
IdentityFile ~/.ssh/id_rsa

我们只需要在本地执行 ssh Serv5 便可登录远程服务器
在这里插入图片描述

查看linux是什么操作系统

cat /etc/redhat-release
在这里插入图片描述

yum管理

当我们想查询是否有 php71 软件包的时候,我们会执行 yum search php71,此时得到的结果也许是 警告:没有匹配 php71 的软件包。所有我们第一件事要做的就是软件包的升级。
PHP全栈工程师实战经验(运维篇)_第2张图片

软件包仓库升级

安装 epel-release 已是最新版本无须任何处理,但还是找不到 php71 的软件包
yum install -y epel-release
PHP全栈工程师实战经验(运维篇)_第3张图片

Nginx安装源:rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
PHP安装源: rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
在这里插入图片描述

执行 yum makecache 将服务器软件信息保存在本地,提高搜索安装效率。
在这里插入图片描述

搜索php71相关的软件包 yum search php71
PHP全栈工程师实战经验(运维篇)_第4张图片

Nginx

安装

新安装的系统没有yum仓库镜像来安装nginx,会有如下提示:
PHP全栈工程师实战经验(运维篇)_第5张图片

默认情况Centos7中没有Nginx的安装源,Nginx官网提供了Centos的源地址:

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

执行完上面的添加源命令,在执行yum install -y nginx 便会安装。下图便是nginx的安装目录和版本信息。
在这里插入图片描述

管理nginx服务

# 开机启动
systemctl enable nginx.service
# 开启
systemctl start nginx.service
# 停止
systemctl stop nginx.service
# 重启
systemctl restart nginx.service
# 平滑重启
systemctl reload nginx.service

启动nginx服务器
在这里插入图片描述

此时我们在浏览器中访问服务器的ip,无法访问。是应为服务器防火墙开启且没有开放80端口。

Nginx 自定义Server

nginx -t 查看 nginx 的配置问题
在这里插入图片描述
进入 /etc/nginx/conf.d 复制 default.conf 为 myhost.conf
配置 myhost.conf
PHP全栈工程师实战经验(运维篇)_第6张图片

本地配置hosts指向服务器IP,10.211.55.35 www.myhost.me
这是浏览器访问 www.myhost.me 应该能能访问nginx欢迎页。然而页面提示 403
PHP全栈工程师实战经验(运维篇)_第7张图片

403 Forbidden 参考资料:https://blog.csdn.net/onlysunnyboy/article/details/75270533

在这里插入图片描述

如何访问PHP文件

按照下面的php部分安装成功并启动php-fpm服务后配置:开启红框部分代码。便访问成功。
root /workspace/myhost 被定义了两次,所以可以将两处合并到最上面的红色字体部分。
PHP全栈工程师实战经验(运维篇)_第8张图片

访问效果:
在这里插入图片描述

防火墙 firewalld

# 添加端口   --permanent永久生效,没有此参数重启后失效
firewall-cmd --zone=public --add-port=80/tcp --permanent    
# 重新载入
firewall-cmd --reload

开放 80 端口重新载入防火墙配置规则,再刷新浏览器成功访问。
PHP全栈工程师实战经验(运维篇)_第9张图片
CentOS7防火墙参考资料:https://blog.csdn.net/simplexingfupeng/article/details/84561290

MySQL

安装

参考资料:https://blog.csdn.net/simplexingfupeng/article/details/84580511

php

查看 php 命令位置

在这里插入图片描述
都没有找到php的安装位置,进行安装

php71 yum源

rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

安装

执行 yum install -y php71
PHP全栈工程师实战经验(运维篇)_第10张图片
PHP全栈工程师实战经验(运维篇)_第11张图片
安装完成之后我们执行 whereis phpwhich php 都没有信息。我们需要查询 whereis php71which php71 的信息。

php 版本信息

php71 -v 我们每次都需要执行 php71 然后加参数,我们可以加一个链接后用 php -v 查看 php 版本。
PHP全栈工程师实战经验(运维篇)_第12张图片

php 版本切换

https://blog.csdn.net/simplexingfupeng/article/details/79456166

php 配置文件问题

php --ini 红框框起来的便是 php 的配置文件
PHP全栈工程师实战经验(运维篇)_第13张图片

安装 php-fpm

yum search php71 查到 fpm 信息并执行命令 yum install -y php71-php-fpm 安装
PHP全栈工程师实战经验(运维篇)_第14张图片

执行 yum install -y php71-php-fpm 并安装成功
PHP全栈工程师实战经验(运维篇)_第15张图片

php 服务管理

启动php服务 :systemctl start php71-php-fpm
停止php服务 :systemctl stop php71-php-fpm
重启php服务 :systemctl restart php71-php-fpm
查看php进程 :ps -ef | grep php
PHP全栈工程师实战经验(运维篇)_第16张图片

php 扩展安装

以 swoole 扩展为例:
查询 yum search php71 | grep swoole
PHP全栈工程师实战经验(运维篇)_第17张图片

安装 yum install -y php71-php-pecl-swoole
查看扩展是否安装 php -m | grep swoole
在这里插入图片描述
安装 redis gd bcmath 等扩展都是按照此方法安装。

php 连接数据库并查询数据库数据

安装 php-mysql 扩展

yum install -y php71-php-pecl-mysql
# 重启php服务
systemctl restart php71-php-fpm

代码实践:https://blog.csdn.net/simplexingfupeng/article/details/84583650

按关键字批量杀死进程

在服务器上操作上,如果我们要停止服务器的进程,只需执行 php 服务管理中的停止 php 服务即可。假如我们又开启了 php-WebSocket 进程服务器。按照 swoole 官网的文档新建swoole服务。


$server = new swoole_websocket_server("127.0.0.1", 9502);

$server->on('open', function($server, $req) {
    echo "connection open: {$req->fd}\n";
});

$server->on('message', function($server, $frame) {
    echo "received message: {$frame->data}\n";
    $server->push($frame->fd, json_encode(["hello", "world"]));
});

$server->on('close', function($server, $fd) {
    echo "connection close: {$fd}\n";
});

$server->start();

在任意位置新建 swoole-server.php 文件
后台启动服务 php swoole-server.php &
查看swoole服务进程 ps -ef | grep php
PHP全栈工程师实战经验(运维篇)_第18张图片
此时我们看到 php 的 swoole-server.php 进程。加入我们按照停止php服务器的方式停止我们看一下截图:
PHP全栈工程师实战经验(运维篇)_第19张图片
php 进程被杀死了,swoole-server.php 服务还在,完全没有按照我们的设想结束进程。我们再重新启动php服务。
当然我们可以根据进程号 id 一个一个 kill 掉。这里主要说明按照关键字批量杀死进程。

PHP全栈工程师实战经验(运维篇)_第20张图片

根据上图我们连续执行的一系列的命令,进行说明。

# 查看 php 的进程
ps -ef | grep php
# 查看 swoole 的进程
ps -ef | grep swoole
# 查看 swoole 的进程并排除 grep 执行的进程
ps -ef | grep swoole | grep -v grep
# 打印要杀死的进程id
ps -ef | grep swoole | grep -v grep | awk '{print "kill -9 " $2}'
# 杀死指定进程
ps -ef | grep swoole | grep -v grep | awk '{print "kill -9 " $2}'|sh
# 查看 swoole 的进程并排除 grep 执行的进程
ps -ef | grep swoole | grep -v grep
# 查看 swoole 的进程
ps -ef | grep swoole
# 查看 php 的进程
ps -ef | grep php

命令执行完毕后我们能够分析出,swoole 进程已被全部杀死,php进程正常运行。真正操作中,只需执行中间最长的一行代码,把 swoole 换成你想 kill 掉的进程。

你可能感兴趣的:(Linux,PHP,CentOS7)