OpenPanel 是一个简洁又强大的统计分析平台,Zeabur 是一个支持混合云的自动化部署平台。 最近团队分享了通过 Zeabur 来部署 OpenPanel 使用的体验,然而现有的模版有点问题,很多小伙伴尝试时都出错了。

这篇文章就详细的记录一下,如何解决碰到的问题,成功开始使用。

首先要说明的是,感谢这个模版的作者无私奉献,让大家能便捷的进行部署。 过程中遇到的错误,很可能是后续更新过程中发生了变化,并非是模版写的不好。

下面直接开始。按顺序记录碰到的问题和解决方式。


0. 开始部署

选择了可能出问题最多的可用区:华为云上海(因为国内镜像问题),输入模版要求的一个管理邮箱,点击部署。

1. 服务镜像拉取失败

在测试时(25年11月11日晚九点)默认情况下所有服务都拉取失败了。

应该是默认配置的地址都被墙了。

解决:先把常用的服务(Caddy, Redis, Postgres, Clickhouse)更换为自带的镜像源,在设置里选择后保存,稍等下会自动重新部署。UI更新会延迟一下,不要着急,服务状态多切换看看。

change-image-source

为什么先换这几个呢?因为官方提供的源里有,直接选择就行。

2. PG 更换镜像后崩溃

看日志发现是挂载硬盘有问题,如下图。一般碰到问题都先看下日志,能确认到底是哪个步骤出问题了。

disk-error

解决:尝试重新挂载无效,备份整个环境变量后直接删了,重新部署一个PG(有官方模版),版本改为 14 保持一致。完成后把环境变量覆盖回去。

3. Clickhouse 没有给镜像

解决:其实官方是有给的,模版里带的版本号有点老,把弹框里版本号那一栏清空就有了。列表里选个最近的就行。

4. 更新 OpenPanel 的镜像

前面四个常用服务都更新镜像后,应该能正常跑起来了。这时候发现 OP(OpenPanel) 的三个服务官方源里没有提供。 可能是因为不太常见。

解决:找个国内能用的镜像源,比如 docker.1ms.run,在里面搜索 OP 服务的镜像名称,然后把地址粘贴过来,保存。等会就自动重新部署了。

replace-op-image

OP 的三个服务:api,dashboard 和 worker 都如此更新。

5. 绑定访问域名

项目有 Caddy 作为统一的流量入口,所以把域名绑定在这个服务下面。

注意:国内大陆的可用区需要通过 ICP 备案的域名,否则无法访问。完成后记得修改该服务环境变量中的 OPENPANEL_PUBLIC_URL 为该域名。

这个域名就是部署完后,访问控制台的域名。统计端点是子路径 /api 。

6. OP-api 服务更新后崩溃

依然是查看日志,发现是解析 URL 时出错了。虽然上一步中已经有全局的环境变量,但经过测试发现没读取到。

解决:直接把 api 服务的环境变量中包含 OPENPANEL_PUBLIC_URL 的全部修改为前面绑定域名的硬编码。保存后重启服务。

replace-public-url

7. 访问控制台报错 500

这里有点小坑,分别查看日志后发现,请求还没有转发到 dashboard 服务上。 查看 Caddy 服务的配置文件,应该是没有读取到环境变量,也需要把引用改成硬编码。

解决:在 Caddy 服务设置页的 配置,Open Config Editor 打开的配置文件中替换如下,保存后重启服务。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
:80 {
  encode gzip
  log {
    format json
  }


  # API endpoints - handle_path strips /api prefix automatically
  handle_path /api* {
    reverse_proxy api.zeabur.internal:3000 {
      header_up Host {upstream_hostport}
      header_up X-Real-IP {remote_host}
      header_up X-Forwarded-For {remote_host}
      header_up X-Forwarded-Proto {scheme}
    }
  }

  # All other requests go to dashboard
  reverse_proxy dashboard.zeabur.internal:3000 {
    header_up Host {upstream_hostport}
    header_up X-Real-IP {remote_host}
    header_up X-Forwarded-For {remote_host}
    header_up X-Forwarded-Proto {scheme}
  }
}

两个服务的子域名是 zeabur 自动生成的,可以在对应服务的网络设置中检查确认下。

8. 访问正常

现在重新访问绑定的域名,就可以正常使用啦。撒花🎉

第一个注册的账号是管理员账户。后续如果要发送邀请邮件,需要在环境变量中补充 RESEND_API_KEY。 更多诸如此类的细节可参考官方的自托管文档


后记:群里讨论这个部署问题的时候,也提到了租赁服务器和按量付费的两种模式。 前者在量大的时候价格更优惠,但容易造成浪费。后者在前期很便宜灵活,但使用量上来后价格很高。 个人认为这两种模式的混合使用应该是未来的趋势。

比如我们的实践中,就把除了 Clickhouse 外的其他服务都部署在一台服务器上,而数据库单独按量付费。 这样做的好处就是,既节省了成本,又能在流量爆发时让数据库自动扩容,也方便单独备份维护。

最后感叹一下开源和 Zeabur 这样的服务,真是让新世界触手可及,感谢你们的奉献🫡