php工程师在工作中经常遇到环境配置问题,本文主要通过Centos7 中的yum对环境Nginx+Php+MySQL环境的搭建与配置,希望给看到这篇文章的同学节省一些时间。同时也能为还不清楚如何搭建环境的同学提供一个搭建的思路。文章中的技术要点不是很全面,可根据思路自己拓展技术点。
ip addr
新安装好的 Centos7 系统用上面的命令查看ip地址,先用ssh root@ip地址的+输入密码的方式登录
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
便可登录远程服务器
当我们想查询是否有 php71 软件包的时候,我们会执行 yum search php71
,此时得到的结果也许是 警告:没有匹配 php71 的软件包
。所有我们第一件事要做的就是软件包的升级。
安装 epel-release 已是最新版本无须任何处理,但还是找不到 php71 的软件包
yum install -y epel-release
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
新安装的系统没有yum仓库镜像来安装nginx,会有如下提示:
默认情况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的安装目录和版本信息。
# 开机启动
systemctl enable nginx.service
# 开启
systemctl start nginx.service
# 停止
systemctl stop nginx.service
# 重启
systemctl restart nginx.service
# 平滑重启
systemctl reload nginx.service
此时我们在浏览器中访问服务器的ip,无法访问。是应为服务器防火墙开启且没有开放80端口。
nginx -t
查看 nginx 的配置问题
进入 /etc/nginx/conf.d
复制 default.conf 为 myhost.conf
配置 myhost.conf
本地配置hosts指向服务器IP,10.211.55.35 www.myhost.me
这是浏览器访问 www.myhost.me 应该能能访问nginx欢迎页。然而页面提示 403
403 Forbidden 参考资料:https://blog.csdn.net/onlysunnyboy/article/details/75270533
按照下面的php部分安装成功并启动php-fpm服务后配置:开启红框部分代码。便访问成功。
root /workspace/myhost
被定义了两次,所以可以将两处合并到最上面的红色字体部分。
# 添加端口 --permanent永久生效,没有此参数重启后失效
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重新载入
firewall-cmd --reload
开放 80 端口重新载入防火墙配置规则,再刷新浏览器成功访问。
CentOS7防火墙参考资料:https://blog.csdn.net/simplexingfupeng/article/details/84561290
参考资料:https://blog.csdn.net/simplexingfupeng/article/details/84580511
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
执行 yum install -y php71
安装完成之后我们执行 whereis php
和 which php
都没有信息。我们需要查询 whereis php71
和 which php71
的信息。
php71 -v
我们每次都需要执行 php71 然后加参数,我们可以加一个链接后用 php -v
查看 php 版本。
https://blog.csdn.net/simplexingfupeng/article/details/79456166
yum search php71
查到 fpm 信息并执行命令 yum install -y php71-php-fpm
安装
执行 yum install -y php71-php-fpm
并安装成功
启动php服务 :systemctl start php71-php-fpm
停止php服务 :systemctl stop php71-php-fpm
重启php服务 :systemctl restart php71-php-fpm
查看php进程 :ps -ef | grep php
以 swoole 扩展为例:
查询 yum search php71 | grep swoole
安装 yum install -y php71-php-pecl-swoole
查看扩展是否安装 php -m | grep swoole
安装 redis gd bcmath 等扩展都是按照此方法安装。
安装 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 的 swoole-server.php 进程。加入我们按照停止php服务器的方式停止我们看一下截图:
php 进程被杀死了,swoole-server.php 服务还在,完全没有按照我们的设想结束进程。我们再重新启动php服务。
当然我们可以根据进程号 id 一个一个 kill 掉。这里主要说明按照关键字批量杀死进程。
根据上图我们连续执行的一系列的命令,进行说明。
# 查看 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 掉的进程。