现在web云函数并没有单独给出 custom runtime,这里我们使用 Go1环境 进行部署。理论上我们可以使用任一环境
此方法也适用于其他编译语言
部署主要分两步
- 构建部署文件
- 通过yml 部署应用
这里我们通过一个现有项目进行演示 身份数字管控平台
https://github.com/VineFiner/ciam-hello.git
创建部署文件
这里整体意思是得到需要部署的二进制文件
可以编写自己部署语言的构建 Dockerfile
# 构建,# Build image docker build -t scf_app . -f ./SCF/CustomRuntime/Dockerfile.build # 创建,提取容器 docker create --name extract scf_app # 复制,容器内,内容 docker cp extract:/staging ./install # 删除,提取容器 docker rm -f extract # 删除镜像 # docker image rm scf_app
这里我们使用 Docker 来构建部署文件
- 首先构建镜像。
docker build -t scf_app . -f ./SCF/CustomRuntime/Dockerfile.build
指定镜像名称 scf_app
,指定 Dockerfile
文件路径
- 创建容器
docker create --name extract scf_app
指定容器名称 extract
- 将容器内构建好的文件复制到本地
install
目录
docker cp extract:/staging ./install
- 查看文件
cd install
[vine@VM-8-15-centos install]$ ls libBlocksRuntime.so libicuucswift.so.65 Public libdispatch.so libswift_Concurrency.so Resources libFoundation.so libswiftCore.so Run libicudataswift.so.65 libswiftDispatch.so libicui18nswift.so.65 libswiftGlibc.so [vine@VM-8-15-centos install]$
通过 Serverless Framework
进行部署
现在我们把上一步构建的内容部署到云函数
######### 函数部署 ############### # 创建启动文件 touch ./install/scf_bootstrap && chmod +x ./install/scf_bootstrap # 写入启动内容 cat > ./install/scf_bootstrap<<EOF #!/usr/bin/env bash # export LD_LIBRARY_PATH=/opt/swift/usr/lib:${LD_LIBRARY_PATH} ./Run serve --env production --hostname 0.0.0.0 --port 9000 EOF # 压缩文件夹 # zip --symlinks -r app-0.0.1.zip ./install/* # 删除 yaml 文件 rm -rf serverless.yml # 创建 yaml 文件 slsplus parse --output --auto-create --sls-options='{"component":"scf","name":"${env:INSTANCE_NAME}","org":"${env:TENCENT_APP_ID}","app":"${env:APP_NAME}","inputs":{"name":"${env:APP_NAME}","region":"${env:REGION}","runtime":"${env:RUNTIME}","type":"web","src":{"src":"./install","exclude":[".env"]},"memorySize":64,"environment":{"variables":{"CIAM_CLIENTID":"${env:CIAM_CLIENTID}","CIAM_CLIENTSECRET":"${env:CIAM_CLIENTSECRET}","CIAM_USERDOMAMIN":"${env:CIAM_USERDOMAMIN}","CIAM_REDIRECTURI":"${env:CIAM_REDIRECTURI}","CAIM_LOGOUTREDIRECTURL":"${env:CAIM_LOGOUTREDIRECTURL}"}},"events":[{"apigw":{"parameters":{"serviceName":"ciam_hello_serverless","description":"ciam hello","endpoints":[{"function":{"isIntegratedResponse":true},"method":"ANY","path":"/"}],"protocols":["http","https"],"environment":"release"}}}]}}' && cat serverless.yml # 添加环境变量 # cp SCF/Template/env .env # 部署 sls deploy --force --debug # END
首先我们需要创建启动文件
# 创建启动文件 touch ./install/scf_bootstrap && chmod +x ./install/scf_bootstrap # 写入启动内容 cat > ./install/scf_bootstrap<<EOF #!/usr/bin/env bash # export LD_LIBRARY_PATH=/opt/swift/usr/lib:${LD_LIBRARY_PATH} ./Run serve --env production --hostname 0.0.0.0 --port 9000 EOF
查看文件如下
[vine@VM-8-15-centos install]$ ls libBlocksRuntime.so libicuucswift.so.65 Public libdispatch.so libswift_Concurrency.so Resources libFoundation.so libswiftCore.so Run libicudataswift.so.65 libswiftDispatch.so scf_bootstrap libicui18nswift.so.65 libswiftGlibc.so [vine@VM-8-15-centos install]$
然后创建 yml 文件
对于 yml 文件配置信息,我们可以查看
https://github.com/serverless-components/tencent-scf/blob/master/docs/configure.md
- 安装 serverless 环境
pnpm install -g serverless
因为
Xcode
对yml
编辑不是很友好,创建出来的 yml 文件格式不对。导致部署失败. 这里我们使用slsplus
进行创建
个人建议使用这种方法创建,不会出现莫名错误
- 安装方式如下
npm install -g @slsplus/cli
json
和yml
对比图如下
- 使用
slsplus
进行创建
# 创建 yaml 文件 slsplus parse --output --auto-create --sls-options='{"component":"scf","name":"${env:INSTANCE_NAME}","org":"${env:TENCENT_APP_ID}","app":"${env:APP_NAME}","inputs":{"name":"${env:APP_NAME}","region":"${env:REGION}","runtime":"${env:RUNTIME}","type":"web","src":{"src":"./install","exclude":[".env"]},"memorySize":64,"environment":{"variables":{"CIAM_CLIENTID":"${env:CIAM_CLIENTID}","CIAM_CLIENTSECRET":"${env:CIAM_CLIENTSECRET}","CIAM_USERDOMAMIN":"${env:CIAM_USERDOMAMIN}","CIAM_REDIRECTURI":"${env:CIAM_REDIRECTURI}","CAIM_LOGOUTREDIRECTURL":"${env:CAIM_LOGOUTREDIRECTURL}"}},"events":[{"apigw":{"parameters":{"serviceName":"ciam_hello_serverless","description":"ciam hello","endpoints":[{"function":{"isIntegratedResponse":true},"method":"ANY","path":"/"}],"protocols":["http","https"],"environment":"release"}}}]}}' && cat serverless.yml
完成时我们可以看到我们创建的 serverless.yml 文件
最后进行部署
# 添加环境变量 # cp SCF/Template/env .env # 部署 sls deploy --force --debug # END
- 因为我们的
yml
文件里面有一些需要配置,这里我们使用 env 进行配置
cp SCF/Template/env .env
- 对于文件夹部署,有时间会丢失权限,这里我们添加参数
force
# 部署 sls deploy --force --debug
最后我们扫码授权就可以部署成功了。
原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/212478.html