Vapor 部署到腾讯云serverless 打包脚本

444 阅读2分钟

虽然腾讯云serverless支持docker上传,但是docker每次冷启动十几秒的速度实在让人无法接受。

今天我们基于serverless的go环境进行部署Vapor

原理

因为go环境是基于Linux centos7的,所以我们的包只要能运行在centos7上就行了。

swift环境

go环境是预置环境不能直接安装Swift环境,所以正常打包是无法在go环境运行的,swift build 有个参数

#可以直接打包swift的环境依赖
swift build --static-swift-stdlib

这样我们打包出来的二进制文件就可以直接在centos直接运行了。

脚本 & 打包

好了,现在简单的思路已经厘清了,我们开始吧

#!/bin/bash

#可以直接通过参数输入项目目录,也可以直接在项目目录直接运行脚本
if [ -n "$1" -a -d "$1" ]
then
  cd $1
fi

if [ ! -e "Package.swift" ]
then
  echo "该目录不是vapor项目目录"
  exit -1
fi

# 当前目录
echo $PWD

echo "更新依赖"
swift package resolve

############## 构建可执行二进制文件 ##########
echo "构建"
# 构建
docker run --rm \
-v "$PWD:/workspace" \
-w /workspace \
swift:5.5.2-centos7  \
/bin/bash -cl "swift build -c release --static-swift-stdlib && \
       rm -rf .build/install && mkdir -p .build/install && \
       cp -P .build/release/Run .build/install/  "


############## 函数部署 ###################
# 创建启动文件
touch  .build/install/scf_bootstrap && chmod +x .build/install/scf_bootstrap

#复制 Public Resources .env .env.production
if [ -d Public ]; then
  cp -r Public .build/install/
fi

cp -r Resources .build/install/

if [ -e .env ]; then
  cp .env .build/install/
fi

if [ -e .env.production ]; then
  cp .env.production .build/install/
fi


# 写入启动内容
cat > .build/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

echo "打包"
cd .build/install && zip sfc_code.zip -r * .[^.]*

# 打开文件夹(macos)
open .
# END

脚本下载

可以直接通过参数输入项目目录(第一个参数),也可以直接在项目目录直接运行脚本

部署

打包完我们接下来进行部署

image.png

image.png

这里把我们刚才打包出来的 sfc_code.zip 上传

image.png 然后把内存设置为最小的64M,对于Vapor应用足以。

然后点击完成就可以了。

完成

好了,今天的教程就到这里了。

ubuntu

对应ubuntu的环境,我们也可以按这里原理可以直接省去在ubuntu部署swift环境的步骤。

Vapor问答论坛

我用Vapor + Leaf 开发了一个Vapor问答论坛,如果大家有Vapor开发上的问题可以直接在论坛上面来提问。 vapor问答论坛

vapor.farambi.top