Docker下开发Hyperf3.0项目,部署优化

369 阅读2分钟

通过 Supervisord 实现守护进程启动和重启 Hyperf 3.0 项目

docker容器中 apk安装 Supervisor

docker容器中 apk安装 Supervisor

  1. 打开终端,并登录到您的Docker容器中:

进入hyperf容器

docker attach hyperf
  1. 运行以下命令来更新包列表和安装Supervisor:
apk update apk
add supervisor
  1. 安装完成后,您可以使用以下命令来检查Supervisor是否已成功安装:
supervisord --version
  1. 安装完以后会生成文件 /etc/supervisord.conf 默认配置文件。
  2. 根据 /etc/supervisord.conf 中最后一行:files = /etc/supervisor.d/*.ini ;

要配置Supervisor,需要在/etc/supervisor.d/中创建一个.ini后缀的配置文件: 如果没有supervisor.d文件夹,需要新建文件夹:

mkdir -p /etc/supervisor.d
touch /etc/supervisor.d/hyperf.ini
vi /etc/supervisor.d/hyperf.ini

并在其中定义要管理的进程。以下是一个我写的配置文件hyperf.ini:

# 新建一个应用并设置一个名称,这里设置为 hyperf
[program:hyperf]

# 设置命令在指定的目录内执行
directory=/hyperf-skeleton/lgb-hf-online

# 这里为您要管理的项目的启动命令
command=php bin/hyperf.php start

# 以哪个用户来运行该进程
user=root

# supervisor启动时自动启动该应用
autostart=true

# 进程退出后自动重启进程
autorestart=true

# 进程持续运行多久才认为是启动成功
startsecs=1

# 重试次数
startretries=3

# stderr 标准输出日志输出位置
stderr_logfile=/hyperf-skeleton/lgb-hf-online/runtime/stderr.log

# stdout 标准错误日志输出位置
stdout_logfile=/hyperf-skeleton/lgb-hf-online/runtime/stdout.log

其中,[program:hyperf]是进程的名称,command是要运行的命令,directory是命令所在的目录,autostart表示是否自动启动进程,autorestart表示进程是否在退出后自动重启,redirect_stderr表示是否将标准错误重定向到标准输出。

  1. 保存配置文件后,您可以使用以下命令启动Supervisor:
supervisorctl status # 查看进程状态
supervisorctl start hyperf # 启动进程
supervisorctl stop hyperf # 停止进程
supervisorctl restart hyperf # 重启进程
supervisorctl update 重新加载配置文件
supervisorctl reload 重新启动所有程序

这样,就成功在Docker容器中安装了Supervisor,并配置了要管理的进程。

关闭 Supervisor

  1. 检查Supervisor进程的状态,可以运行以下命令:

    supervisorctl status
    

    这将显示Supervisor管理的进程的状态。

  2. 停止所有Supervisor管理的进程,可以运行以下命令:

    supervisorctl stop all
    

    这将停止所有由Supervisor管理的进程。

  3. 检查Supervisor进程的状态,确保所有进程都已停止:

    supervisorctl status
    

    如果所有进程都显示为停止状态,说明Supervisor已成功关闭。

    卸载 (docker apk 安装的 Supervisor,如何卸载)

sock位置:file=/run/supervisord.sock ; the path to the socket file

log位置:logfile=/var/log/supervisord.log ; main log file; default $CWD/supervisord.log

pid位置:supervisord.pid

  1. 首先,停止Supervisor服务:supervisorctl stop all

  2. apk del supervisor 卸载Supervisor

  3. 删除Supervisor的配置文件和日志文件,

    rm -rf /run/supervisord.sock
    rm -rf /var/log/supervisord.log
    rm -rf /etc/supervisord.pid