简介
最近有个想法,就是给树莓派上搭建很多接口服务,比如查询天气,查询微博热搜什么的,之前是想把程序打包成一个容器去部署,后来觉得这样做是不是有点麻烦,所以就决定使用openfaas了,因为是接口服务,所以openfaas很适合,之后只要写很多很多function就可以了,本地是docker swarm集群,所以就直接在swarm集群是搭建了
关于网关
目前的架构是这样子的用户访问域名dns解析到cloudflare cdn 之后到我的frp服务器,之后到我的路由器frp客户端,之后流量到我树莓派集群的traefik网关,然后到容器
部署
首先clone代码
git clone https://github.com/openfaas/faas.git
cd faas
为了减少因为网络原因造成镜像不能下载,所以提前下载镜像到本地,然后重新tag push到本地的镜像仓库
cat docker-compose.armhf.yml|grep image
image: openfaas/gateway:0.18.17-armhf
image: openfaas/basic-auth-plugin:0.18.17-armhf
image: openfaas/faas-swarm:0.8.5-armhf
image: nats-streaming:0.17.0
image: openfaas/queue-worker:0.11.2
image: prom/prometheus:v2.11.0
image: prom/alertmanager:v0.18.0
重新tag
docker tag openfaas/gateway:0.18.17-armhf reg.bboysoul.cn:5000/openfaas-gateway:0.18.17-armhf
docker tag openfaas/basic-auth-plugin:0.18.17-armhf reg.bboysoul.cn:5000/openfaas-basic-auth-plugin:0.18.17-armhf
docker tag openfaas/faas-swarm:0.8.5-armhf reg.bboysoul.cn:5000/openfaas-faas-swarm:0.8.5-armhf
docker tag nats-streaming:0.17.0 reg.bboysoul.cn:5000/nats-streaming:0.17.0
docker tag openfaas/queue-worker:0.11.2 reg.bboysoul.cn:5000/openfaas-queue-worker:0.11.2
docker tag prom/prometheus:v2.11.0 reg.bboysoul.cn:5000/prom-prometheus:v2.11.0
docker tag prom/alertmanager:v0.18.0 reg.bboysoul.cn:5000/prom-alertmanager:v0.18.0
push
docker push reg.bboysoul.cn:5000/openfaas-gateway:0.18.17-armhf
docker push reg.bboysoul.cn:5000/openfaas-basic-auth-plugin:0.18.17-armhf
docker push reg.bboysoul.cn:5000/openfaas-faas-swarm:0.8.5-armhf
docker push reg.bboysoul.cn:5000/nats-streaming:0.17.0
docker push reg.bboysoul.cn:5000/openfaas-queue-worker:0.11.2
docker push reg.bboysoul.cn:5000/prom-prometheus:v2.11.0
docker push reg.bboysoul.cn:5000/prom-alertmanager:v0.18.0
之后修改compose文件中的镜像名字,配置网关,配置网络
vim docker-compose.armhf.yml
接着使用部署脚本部署
./deploy_stack.sh
这个脚本会自动创建两个secrets
secrets:
basic-auth-user:
external: true
basic-auth-password:
external: true
三个config
configs:
prometheus_config:
file: ./prometheus/prometheus.yml
prometheus_rules:
file: ./prometheus/alert.rules.yml
alertmanager_config:
file: ./prometheus/alertmanager.yml
最后要值得注意的是,因为是在树莓派上部署,所以创建stack命令最好加上--resolve-image never
所以把deploy_stack.sh最后的命令改为
docker stack deploy func --compose-file $composefile --resolve-image never
部署一个函数
创建完成集群之后我们就可以去部署一个函数
首先安装faas-cli
curl -sSL https://cli.openfaas.com | sudo sh
登陆
echo -n a2c8e90a775ea8bxz063a3e8vc88991sdb6b4a00b994ba9bd8fsae93d145e6aa | faas-cli login --username=admin --password-stdin --gateway http://faas.bboysoul.cn/
查看可以使用的语言
faas-cli new --list
之后创建一个函数,我使用的是py3
faas-cli new weather --lang python3-armhf
编译
faas-cli build -f ./weather.yml
重新tag
docker tag weather:latest reg.bboysoul.cn:5000/weather:v1.0
推送
docker push reg.bboysoul.cn:5000/weather:v1.0
编辑yaml文件
vim weather.yml
修改使用的镜像之后运行函数
faas-cli deploy -f ./weather.yml --gateway http://faas.bboysoul.cn/ -l traefik.http.services.weather.loadbalancer.server.port=5917
如果没有什么问题的话你就可以访问你的函数了
http://域名/function/函数名
重置密码
如果你想查看或者重置密码可以看下面
https://docs.openfaas.com/deployment/troubleshooting/#i-forgot-my-gateway-password
目前我集群上拥有的函数
查看天气
https://faas.bboysoul.cn/function/weather
查看微博
https://faas.bboysoul.cn/function/weibo
欢迎关注我的博客www.bboy.app
Have Fun