已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 教程

标题: 腾讯云SCF镜像部署webman业务

作者: @Ta

时间: 2021-08-25发布,2021-08-25修改

点击: 1581

例子:在webman框架中编写一个发送邮件业务的接口,并且部署到云函数上

腾讯云SCF特点,全局只读,只有/tmp可写

  • 1: 编写代码,修改代码

  • 2: 本地测试运行

  • 3: 编写dockerfile, 推送到腾讯云镜像仓库

  • 4: 构建docker镜像,并且推送到腾讯云镜像仓库

  • 5: 部署到SCF

  • 6: 测试

1: 编写代码,修改代码

1.1 下载webman https://www.workerman.net/doc/webman#/install

1.2 修改 start.php cli启动文件(因为上面说了 全局只读,workerman有一个log日志文件默认写入)

image.png


if(!file_exists(runtime_path().'/logfile')){
    file_put_contents(runtime_path().'/logfile',' ');
}
Worker::$logFile=runtime_path().'/logfile';

1.3 删除 /config/route.php 默认路由(不删除 不存在的路由会报错,无法启动框架)

image.png

1.4 修改 /config/server.php 默认的http监听端口,通过server_listen环境变量传入

image.png

1.5 composer安装 PHPMailer/PHPMailer拓展,并且开始写业务代码

env() 函数来获取 环境变量,包括SCF传入的环境变量

image.png

<?php
namespace app\v1\controller;
use PHPMailer\PHPMailer\PHPMailer;
use support\Request;

/**
 * Class Email
 * <a class="userat" href="#" onclick="atAdd('package',this);return false">@</a><a class="userinfo" href="user.info.0.html">package</a> app\v1\Controller
 */
class Email
{
    public function send(Request $request)
    {
        $mail = new PHPMailer(true);
        $mail->isSMTP();
        $mail->SMTPDebug = 0;
        $mail->CharSet = 'UTF-8';
        $mail->Host = env('V1_Email_Host');                // SMTP服务器
        $mail->SMTPAuth = true;                      // 允许 SMTP 认证
        $mail->Username = env('V1_Email_Username');                // SMTP 用户名  即邮箱的用户名
        $mail->Password = env('V1_Email_Password');             // SMTP 密码  部分邮箱是授权码(例如163邮箱)

        $mail->SMTPSecure = 'ssl';                    // 允许 TLS 或者ssl协议
        $mail->Port = 465;                            // 服务器端口 25 或者465 具体要看邮箱服务器支持
        $mail->isHTML(true);
        $mail->Subject = 'SCF函数发送邮件';
        $mail->Body = '&lt;h1>这里是邮件内容&lt;/h1>' . date('Y-m-d H:i:s');

        $mail->setFrom($mail->Username);  //发件人
        $mail->addAddress($request->get('target'));  // 收件人
        $mail->send();

        return json([
            'code' => 0,
            'msg' => '发送成功'
        ]);
    }
}

2: 本地测试

php start.php start 本地启动框架

image.png

HTTP测试成功

image.png

3:编写dockerfile

image.png

FROM qqfirst/webman

#下面操作都在容器 /app目录下
WORKDIR /app
#复制当前目录文件到 容器/app下
COPY / /app/
# 执行shell composer install
RUN composer install
# 创建 容器 /tmp 可写目录
RUN mkdir -p /tmp
# 删除 /app/runtime 自带运行目录
RUN rm -rf /app/runtime
# 软链接 宿主机的/tmp 可写目录 到 容器/app/runtime目录
RUN ln -s /tmp /app/runtime

# 设置环境变量 默认 config/server.php 配置
ENV server_listen=http://0.0.0.0:9000
ENV SERVER_PROCESS_COUNT=2
#暴露 90000
EXPOSE 9000

CMD ["php","/app/start.php","start"]

4: 开始docker构建

4.1 在这之前,我们去腾讯云 镜像仓库开通一个仓库 scf_webman_mail

image.png

根据仓库提示,我们的完整 命名空间是 ccr.ccs.tencentyun.com/pepper/scf_webman_mail
image.png

4.2 开始docker 构建

docker build -t ccr.ccs.tencentyun.com/pepper/scf_webman_mail  .

image.png

4.3 构建完毕后 推送腾讯仓库。(新机器需要 docker login 登陆,请自己了解腾讯云镜像仓库)

docker push ccr.ccs.tencentyun.com/pepper/scf_webman_mail

image.png

5: 部署到SCF

image.png

点击高级配置,我们调到64Mb最小内存就行,然后20秒超时,然后设置环境变量(配置内容)

image.png

检查下,大概就是这样

image.png

6: HTTP测试

image.png

你看我就说 64Mb内存足够了,运行时间1ms,多亏了workerman框架 拯救了php-fpm的"慢"

image.png

image.png


[隐藏样式|查看源码]


『回复列表(0|隐藏机器人聊天)』

帖子没有回复
回复需要登录

6月28日 18:34 星期六

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1