如何使用 Nginx + Supervisord 部署 Hyperf 项目

前情提要
这里主要记录一下一些基本操作记录
这里我们使用宝塔面板安装,我们需要从软件商店中准备如下工具

  • Nginx
  • PHP8 + Swoole4
  • Supervisor 管理器 2.2
  • iterm2

拉取代码

我们这里用的是 coding

cd /www/wwwroot
git clone git@e.coding.net:dotdotbear/kwh/project.git
cd project

# composer 配置 aliyun
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer
# composer 安装 vendor 包
composer install -vvv
# 出现异常 ? 或
composer install -vvv --ignore-platform-reqs

# 或许这个地方,会出现类似的问题: putenv() has been disabled for security reasons
# 进入php管理界面,打开禁用函数 删除对应函数即可

# 配置 Env 配置
cp .env.example .env

Supervisord 安装与配置

基本上,在宝塔中已经提供了基础的 Supervisord 服务。可以直接使用它

常用命令

  • supervisorctl status // [当前运行服务状态]
  • supervisorctl stop service_name // [停止服务]
  • supervisorctl start service_name // [启动服务]
  • supervisorctl restart service_name // [重启服务]
  • supervisorctl reload // [重载配置文件并重启]
  • supervisorctl reread // [读取当前运行配置和 program 配置文件的差异]
  • supervisorctl update // [重载配置文件并重启]

启动配置

[program:hyperf]
command=/www/server/php/80/bin/php bin/hyperf.php start
directory=/www/wwwroot/hyperf-project/
autorestart=true
startsecs=3
startretries=3
stdout_logfile=/www/server/panel/plugin/supervisor/log/hyperf.out.log
stderr_logfile=/www/server/panel/plugin/supervisor/log/hyperf.err.log
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
user=root
priority=999
numprocs=1
process_name=%(program_name)s_%(process_num)02d

Hyperf 常用函数

获取 Driver 队列

/**
 * 获取一个队列实例
 * DateTime: 2021/11/30 9:34 上午
 */
public static function getDriver($driver = 'default')
{
    return ApplicationContext::getContainer()->get(DriverFactory::class)->get($driver);
}

获取 Logger 实例

/**
 * 获取 Logger 实例
 * DateTime: 2021/12/3 9:47 上午
 * @param string $name
 * @return LoggerInterface
 */
public static function get(string $name = 'default'): LoggerInterface
{
    return ApplicationContext::getContainer()->get(LoggerFactory::class)->get($name, $name);
}

获取 Redis 实例

public static function get($app = 'default')
{
    $container = ApplicationContext::getContainer();
    $redis = $container->get(RedisFactory::class)->get($app);
    return $redis;
}

其他问题

如何修改宝塔默认 PHP 版本

ln -sf /www/server/php/74/bin/php /usr/bin/php

putenv() has been disabled for security reasons

进入 php 管理界面,打开禁用函数, 删除即可

或者进入对应 php 版本,查看 disable_functions

版本问题 ?

安装 PHP8 且 安装 > Swoole4

可以使用自定义 php 版本执行

/www/server/php/74/bin/php bin/hyperf.php start
/www/server/php/80/bin/php bin/hyperf.php start

composer 问题 ?

# 显示下载情况
composer install -vvv

# 忽略版本问题
omposer install -vvv --ignore-platform-reqs

# 重新加载 composer 映射文件
composer dump

swoole 问题 ?

  • php.ini 配置

    swoole.use_shortname = ‘Off’

参考文章

本作品采用《CC 协议》,转载必须注明作者和本文链接
每天3小时...加油
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

你会被宝塔坑死

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!