如何使用 Nginx + Supervisord 部署 Hyperf 專案

surest發表於2021-12-03

前情提要
這裡主要記錄一下一些基本操作記錄
這裡我們使用寶塔皮膚安裝,我們需要從軟體商店中準備如下工具

  • 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小時...加油

相關文章