以 ☁Emo 这个Hyperf项目为例。
部署环境为:Ubuntu20.04 Nginx(1.18) PHP(7.4) Swoole(4.8) Hyperf(2.2)
在运行前确保代码没问题,可现在项目根目录运行 php bin/hyperf.php start 确保项目能启动。
因为服务器之前没有运行过Hyperf项目,所以报了Swoole不存在,直接使用pecl安装即可
pecl install swoole
确保项目能运行起来后,开始部署:
首先安装下supervisor
sudo apt-get install supervisor
根据官方的文档操作时发现在第二步就和现在不一致了,我安装后项目路径是在 etc/supervisor
可能是系统不一样的问题;因此出现不一样的问题,就只把官方文档作为参考了;
在查看原来的配置文件,发现会自动加载conf.d目录下的以.conf
结尾的配置,所以我们直接在这个目录下新建个文件
# 新建一个应用并设置一个名称,这里设置为 emo
[program:emo]
# 设置命令在指定的目录内执行
directory=项目地址
# 这里为您要管理的项目的启动命令
command=php ./bin/hyperf.php start
# 以哪个用户来运行该进程
user=root
# supervisor 启动时自动该应用
autostart=true
# 进程退出后自动重启进程
autorestart=true
# 进程持续运行多久才认为是启动成功
startsecs=1
# 重试次数
startretries=3
# stderr 日志输出位置
stderr_logfile=项目地址/runtime/stderr.log
# stdout 日志输出位置
stdout_logfile=项目地址/runtime/stdout.log
保存后目录结构为如下:
在执行这个配置前,请记得先去项目目录下运行一次启动项目,因为我们配置里定义的日志文件,确保目录可写!
接下来启动配置:
sudo supervisord -c /etc/supervisor/supervisord.conf
启动后可通过以下命令查看状态:
sudo supervisorctl status
其他操作命令:
# 启动 hyperf 应用
supervisorctl start hyperf
# 重启 hyperf 应用
supervisorctl restart hyperf
# 停止 hyperf 应用
supervisorctl stop hyperf
# 查看所有被管理项目运行状态
supervisorctl status
# 重新加载配置文件
supervisorctl update
# 重新启动所有程序
supervisorctl reload
Hyperf项目已经启动,可以通过curl调用接口尝试是否可访问;
接下来配置Nginx通过反代理端口的方式暴露端口,如果你还没安装nginx可通过以下命令安装:
sudo apt-get install nginx
如果你已经安装,进入到Nginx的配置下,新建一个配置,配置内容如下:(官方文档)
upstream hyperf {
# Hyperf HTTP Server 的 IP 及 端口
server 127.0.0.1:9501;
}
server {
# 监听端口
listen 80;
# 绑定的域名,填写您的域名
server_name emo_server.abigeater.com;
location / {
# 将客户端的 Host 和 IP 信息一并转发到对应节点
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 转发Cookie,设置 SameSite
proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
# 执行代理访问真实服务器
proxy_pass http://hyperf;
}
#静态文件路径
location /static {
alias /项目路径/resource/music;
}
}
主要修改的地方是转发的本地端口以及访问域名,因为我将静态资源文件放到Hyperf的项目下,所以我在下面使用了静态路径指向,如果不需要可以注释掉。
最后执行一下sudo nginx -t
确定配置文件正确,再重启一下nginx即可生效。
sudo nginx -s reload
则服务端部署完毕。
之后修改了服务端代码重启下supervisor即可:
supervisorctl restart 项目名
自动化部署实例 ---> Github推送代码后利用Actions部署到服务器