XiaBee's Studio.

10 分钟内搭建自己的 Oss-Insight-lite

字数统计: 1.1k阅读时长: 4 min
2023/06/30

背景

之前贵司做了一个 OSS Insight ,是一个针对开源软件项目的可视化和分析平台。它提供了对开源项目的全面分析和可视化展示,帮助用户了解项目的活跃度、贡献者、代码质量、依赖关系等信息。

后来又推出了个人的 lite 版,ossinsight-lite ,有点酷炫,而且里面教了大家如何白嫖 tidbcloud 来搭建自己的 ossinsght。这里我就做个搬运工,顺便记录一下踩坑过程。

image-20230630165118505

准备工作

需要有一下三个服务的账户:

  1. Github 账户:用于fork并运行您自己的数据流水线,以获取您在GitHub上的活动记录;
  2. TiDB Serverless 账户:免费的云数据库,用于免费存储个人数据;
  3. Vercel 账户:用于部署前端看板

创建云数据库

Reference: https://github.com/pingcap/ossinsight-lite/blob/main/docs/setup/database.md

创建 Serverless 集群

进入 tidbcloud,创建一个 Serverless 集群(富哥想创建付费集群当我没说)

image-20230630220026636

等待几分钟,创建完成后大概长这样:

image-20230630172831319

记录登录信息

点击右上角 Connect 按钮,找到云数据库的端点、端口、用户名、密码等信息,这是 root用户的信息,之后如果按照官方文档操作应该使用这个账户就可以了。

image-20230630173209367

但是如果你想创建一个独立的非 root 用户,请往下看。

创建用户注意事项

如果你不想想官方文档一样使用 root 用户登录,而是创建一个专属的数据库用户的话,需要注意以下事项:

用户名前缀固定

TiDBCloud Serverless 共享存储卷,不通租户用户名前缀实现空间隔离,因此我们不能完全自定义用户名,需要有特定的用户名前缀。

image-20230630221045803

https://docs.pingcap.com/tidbcloud/select-cluster-tier#user-name-prefix

比如我的 root 用户名为44Kz3Lonut9UUp2.root (随便举例,非真实用户),我想创建一个 xiabee 用户,就应该创建为 44Kz3Lonut9UUp2.xiabee

1
create user '44Kz3Lonut9UUp2.xiabee'@'%' identified by 'password';

image-20230630221525926

用户创建成功

密码设置

如果你的 GitHub Action 中遇到以下报错:

1
/usr/local/lib/ruby/3.2.0/uri/rfc2396_parser.rb:176:in `split': bad URI(is not URI?): mysql2://xxxxxxxxxxxx.xiabee.github:###############@gateway01.ap-southeast-1.prod.aws.tidbcloud.com:4000/github_repos (URI::InvalidURIError)

那很可能是因为 TiDB 用户的密码中包含了特殊字符,如果遇到这种情况应该在 SECRET 填入密码时使用 url 编码;或者设置一个不包含特殊字符的密码。

详细内容参考这篇 issue

image-20230630222726938

用户授权

最终在 Github Action 里面要创建两个库,一个是 github_personal,一个是 github_repos,我们登录的用户需要有这两个库的写权限。

1
2
GRANT ALL ON github_personal.* TO '44Kz3Lonut9UUp2.xiabee'@'%';
GRANT ALL ON github_repos.* TO '44Kz3Lonut9UUp2.xiabee'@'%';

接下来应该可以顺利运行 Github Action

设置 Github Action

Reference: https://github.com/pingcap/ossinsight-lite/blob/main/docs/setup/repo-and-action.md

设置 Action 分为三步:

  1. Fork ossinsight-lite repository
  2. Setup GitHub Action secrets
  3. Enable and run workflow

Fork 仓库

image-20230630225059011

设置 Action Secrets

Settings :arrow_right: Secrets and variables :arrow_right: Action

image-20230630225803899

设置一个名为 DATABASE_URL 的环境变量,其值为

1
mysql://<user>:<password>@<host>:<port>
点击展开示例 如果你的 TiDB 连接凭证信息如下:
  host: 'gateway01.us-west-2.prod.aws.tidbcloud.com',
  port: 4000,
  user: '4Budszs5sxiUZ65.root',
  password: 'Us1h2MRraVB4zfpU',
  ssl_ca: /etc/ssl/cert.pem
那么 DATABASE_URL 的值应该设置为
  mysql://4Budszs5sxiUZ65.root:Us1h2MRraVB4zfpU@gateway01.us-west-2.prod.aws.tidbcloud.com:4000
  

开启 workflow

允许 workflow 运行

WeChat1d9b20fbc06b9243273dc8fb51967a1e

第一次开启时需要手动运行

image-20230630230909496

问题处理

部署 Vecel

通过 Vecel 部署我们的前端 dashboard

导入项目

进入 Vecel 控制台,创建项目

image-20230630231733963

部署刚刚 Fork 的那个仓库:ossinsight-lite

image-20230630232010050

直接 Deploy,项目会在几秒内失败,因为我们还没有配置凭证信息。但是没有关系,继续往后走

image-20230630232141642

创建 TiDBCloud 集成

进入 TiDBCloud 集成主页,选择项目之后一路 continue 即可

image-20230630232414840

集成后如下:

image-20230630232715305

重新部署 Vecel

image-20230630232804146

等待几分钟,待其运行完毕。

image-20230630233238615

设置自定义域名

image-20230630233431061

最终效果

  • 完整效果如 背景 所示
  • 当然也可以直接引用进 markdown 里面

image-20230630233505413

参考文档

https://github.com/pingcap/ossinsight-lite

CATALOG
  1. 1. 背景
    1. 1.1. 准备工作
  2. 2. 创建云数据库
    1. 2.1. 创建 Serverless 集群
    2. 2.2. 记录登录信息
    3. 2.3. 创建用户注意事项
      1. 2.3.1. 用户名前缀固定
      2. 2.3.2. 密码设置
      3. 2.3.3. 用户授权
  3. 3. 设置 Github Action
    1. 3.1. Fork 仓库
    2. 3.2. 设置 Action Secrets
    3. 3.3. 开启 workflow
    4. 3.4. 问题处理
  4. 4. 部署 Vecel
    1. 4.1. 导入项目
    2. 4.2. 创建 TiDBCloud 集成
    3. 4.3. 重新部署 Vecel
    4. 4.4. 设置自定义域名
  5. 5. 最终效果
  6. 6. 参考文档