• 首页
  • 博客
  • 项目
  • 留言墙
  • 工具集

动态更新

喜欢我的内容的话不妨订阅支持一下 🫶
加入其他 2 位订阅者,每月一封,随时可以取消订阅。

© 2025 Koya. 网站已开源:GitHub   Fork CaliCastle

首页博客项目留言墙工具集
总浏览量 4.3万
最近访客来自 US🇺🇸
  • 前言
  • 准备工作
  • 域名需要准备
  • 服务器
  • docker 代理
  • 部署 laf
  • 1、下载部署脚本
  • 2、指定域名
  • 3、开始部署
  • 部署后配置
  • 修改
  • 修改数据库配置
  • 证书配置
  • 更新域名证书
  • 其他问题
  • 网络问题
  • npm
  • 最后
如何本地部署 laf - k8s学习篇
2024-07-02 11:52:04k8s, serverless

如何本地部署 laf - k8s学习篇

Laf 是一个集函数、数据库、存储为一体的开源云开发平台,自己做的一些项目想生成一个测试环境,所以决定在自己服务器上部署 laf 试一下

1,665次点击9分钟阅读

前言

最近做了几个小程序,没有搭建自己的后台服务,全部使用的 serverless,使用的平台是 laf,laf 是一个和微信云开发一样的 serverless 平台,同样集函数、数据库、存储为一体,一个 MVP 版本的小程序可快速基于 laf 构建,同样的服务,微信云开发每个月要 39 块,而 laf 最小版本大概 13 块,当然现在还有基于 sealos 的 laf,每个月成本更低。

之前的做法是会在 laf 上起两个应用,一个用作 production 环境,一个用于 staging 环境,但这样会有两项应用在计费,最近有一些其他小程序的想法,所以萌生了使用之前空置的一台华为云服务器搭建一个自己的 laf 作为测试环境的想法,说干就干!

Laf 云开发

准备工作

前期需要做一些准备工作

  • 域名
  • 服务器(Ubuntu22.0)
  • docker 代理

域名需要准备

假如 web 控制台域名是 a.b.com
则需要准备:

oss.a.b.com,*.oss.a.b.com,*.site.a.b.com,*.a.b.com,a.b.com,需要将这些域名映射到服务器,同样申请证书需要申请上边这些域名的

服务器

服务器需要特别注意,之前服务器安装了 docker 和 nginx 需要全部清空,就是只需要一台完全干净的服务器就可以,不然会有一些预料之中的错误,类似:

错误

卸载 nginx

docker 代理

docker.io 在 6 月份之后基本就不能访问了,所以需要自己配置代理,可以找还能运行的代理或者基于 cloudflare 的 worker 自己搭建代理,本次是基于 worker 代理的,比较简单直接部署即可,部署后可自定义自己的域名,部署步骤:GO

部署完成可修改 docker 的访问地址为自定义的域名即可

vim /etc/containers/registries.conf

修改后是这样的:

前期准备工作已做完,现在可以开始部署了

部署 laf

1、下载部署脚本

https://github.com/labring/laf/blob/main/deploy/install-on-linux.sh

可通过 wegt 下载,需注意下载完成之后需修改脚本内的 docker.io 为你的代理 docker 地址

2、指定域名

export DOMAIN=laf.a.b.com

3、开始部署

执行 sh install-on-linux.sh

基本上前期都是一键操作的,laf 提供的部署脚本很完善了

图片引用自 laf 论坛

部署后配置

基本上部署是一键的,不需要其他的命令或者操作,部署完成需要一些配置,例如https 和内部的一些配置

修改 runtime-exporter 配置

runtime-exporter 是 laf 的运行时镜像,这个因为使用了 docker.io 的地址,所以部署后肯定会出现 ErrImagePull 类似这样的错误,所以需要手动修改该节点的配置

需要先拉下来 deployment.yaml 配置文件

kubectl get deployment runtime-exporter -o yaml > deployment.yaml -n laf-system

修改 docker.io 为配置的 docker 代理地址后执行:

kubectl apply -f deployment.yaml

可以先删除 runtime-exporter 的 pod,也可以等待执行

kubectl delete pods -l app.kubernetes.io/name=runtime-exporter -n laf-system

这样即可替换

运行完成查看 pod 的状态

kubectl get pods -A

替换完成所有 pod 的运行状态大概是这样的:

此处引用了白夜的部署教程图片
https://forum.laf.run/d/241

修改数据库配置

需要首先映射 mongodb 的端口到宿主机,然后通过 ssh 链接

先获取 mongodb 的密码

kubectl get secrets -n laf-system mongodb-conn-credential -o jsonpath='{.data.password}' | base64 --decode

映射端口到宿主机

kubectl port-forward mongodb-mongodb-0 27017:27017 -n laf-system

通过 mongodb compass链接数据库

数据库的链接是 mongodb://root:你的密码@127.0.0.1:27017/sys_db?authSource=admin&replicaSet=mongodb-mongodb&w=majority

链接 mongodb

这里需要注意,因为服务器配置了不能通过密码只能使用 ssh key 的方式,这里选择SSH Identity File

链接mongodb成功

这里需要修改 runtime collection 中的 image 字段

需要修改为之前设置的 docker 代理地址,不然新建应用会启不起来

证书配置

其他基本配置完成,现在还需要一个 https 证书,证书一般有两种方式,laf 部署脚本中有安装 cert-manager,我们可以通过 cert-manager 来管理集群的证书,还有一种是直接在手动替换 ingress 的 tls 也就是 laf 使用的网关来完成

cert-manager 部署一直遇到问题,我想使用的是 acme 完成证书的自动更新,但是一直遇到网络问题

网络报错

所以我通过直接使用 acme 签名证书然后修改 tls 来解决的(后来也知道了该网络问题是因为集群内的 DNS 解析有问题导致的),也就是上述脚本的形式,可查看马老板的回复:https://github.com/labring/laf/issues/88

acme 证书申请

需注意这里需要同时申请 oss.a.com

我就是忘了申请,导致云存储访问有问题

证书安装

导入k8s

查看 ingress

kubectl get ingress --all-namespaces

这个下面的节点都需要手动替换,已创建的应用可删除重新创建

可通过替换配置文件修改 tls 字段

替换 tls 之后,可通过查看 ingress 查看节点端口是否已更新

kubectl get ingress --all-namespaces

修改数据库

这里同样需要修改数据库中的 tls 字段

修改 Region collection 中的 gatewayConf 中 tls 字段

wildcardCertificateSecretName: laf-cert-secret

这里名字需要与前边导入的 secret name 保持一致

更新域名证书

域名证书的更新同样和创建一样的步骤,唯一的区别是需要手动修改 tls

需要先把证书转为base64,然后更新 secret 的形式来完成域名证书的更新

  • 先转 base64
base64 -w 0 /root/.acme.sh/laf.a.com_ecc/fullchain.cer
base64 -w 0 /root/.acme.sh/laf.a.com_ecc/laf.marryto.me.key
  • 获取现有的 secret
kubectl get secret laf-cert-secret -n laf-system -o yaml > laf-cert-secret.yaml
  • 编辑 YAML 文件:tls 字段更新新的 base 编码

验证更新:

kubectl get secret laf-cert-secret -n laf-system -o yaml

其他问题

前边有提到有遇到过集群内访问外网失败问题,最开始是以为间歇性的,后来通过开启测试节点 ping 相应域名发现是集群内访问外网有问题导致的

网络问题

开一个测试节点

kubectl run -it --rm test-dns --image=busybox --restart=Never

执行 ping www.baidu.com 和 ping 39.156.66.10(外部IP,baidu的某一个节点),发现域名无法解析,IP能够Ping通,才找到问题

查了一下网上的解决方案,都是通过修改/etc/resolv.con的方式解决的,我试了下并未解决,后来看到一个取巧的方法,直接修改集群内的 dns 配置,遂试了一下

修改 DNS 配置

kubectl -n kube-system edit cm coredns

将 forward 修改为 8.8.8.8 也就是谷歌的 dns 服务器,然后解决了。。。

最后记得修改完成需要重启 dns 节点

重启 DNS pod

kubectl get pod -n kube-system | grep coredns |awk '{system("kubectl delete pod "$1" -n kube-system")}'

npm 安装问题

这里的 npm 安装问题一部分是网络问题,还有一部分和上边的集群 dns 问题比较相关,因为集群无法访问外网导致 npm 安装失败,最开始以为是 npmjs 网络问题导致的,后来测试节点 ping npm才发现是自己集群 dns 解析问题

npm 安装失败

这还是设置了NPM_INSTALL_FLAGS

需注意,npm还是要设置一下

后来修改了集群 dns 之后安装才成功

npm 安装成功

最后

到此我们的部署已全部完成,部署工程中基本没啥问题,部署后的配置到时遇到了很大的问题,总结起来基本上是两类问题:网络和k8s,还是需要熟悉k8s的各种操作才能玩转,至于网络问题只是一堵墙罢了。

可以开心的玩转自己的 laf 了。