Skip to content
LolipopJPublic

About

What did I do & say?

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Repository files navigation

Timeline

前置准备

本项目基于 Bun 开发,服务端依赖于 PostgreSQL 数据库。

分别复制 client/configs/client.example.ts 和 server/configs/server.example.ts 为 client/configs/client.ts 和 server/configs/server.ts,配置您的客户端和服务端。

服务端配置 server/configs/server.ts 需填写连接到 PostgreSQL 数据库的配置信息:

export const serverConfig: ServerConfig = {
  database: {
    user: 'your_postgresql_user',
    password: 'your_postgresql_password',
    host: '127.0.0.1',
    port: 5432,
    database: 'timeline',
  },
}

其中,数据库需要手动创建。例如使用 psql 工具创建名为 timeline 的数据库:

CREATE DATABASE timeline;

开发环境下将使用添加 _dev 后缀名的数据库。因此,如果您需要进行二次开发,还应当创建名为 timeline_dev 的数据库:

CREATE DATABASE timeline_dev;

配置项目

管理员用户

当您以管理员用户登录到站点时,您可以访问所有服务端路由,看到您设为私密的时间线项。配置管理员用户:

export const serverConfig: ServerConfig = {
  admin: {
    secretKey: 'change_this_field_to_your_secret_key',
    accounts: [
      {
        username: 'admin_username',
        password: 'admin_password',
      },
    ],
  },
}

假设您的站点域名为 www.timeline.com,访问 www.timeline.com?login 即可唤起登录窗口,输入账号 admin_username 和密码 admin_password 即可以管理员身份登录到站点。

如果想退出登录,可以访问 www.timeline.com?logout,或手动清除站点的 Cookies。

同步 Bilibili 收藏夹

添加需要同步的 Bilibili 收藏夹:

export const serverConfig: ServerConfig = {
  services: [
    {
      type: SyncServiceType.BILIBILI_COLLECTION,
      id: 'MyBilibiliCollections',
      label: 'My Bilibili Collections',
      mediaId: '75618059',
    },
  ],
}

同步 Bilibili 作品

添加需要同步的 Bilibili 用户上传的创作:

export const serverConfig: ServerConfig = {
  services: [
    {
      type: SyncServiceType.BILIBILI_WORK,
      id: 'MyBilibiliWorks',
      label: 'My Bilibili Works',
      userId: '15487659',
    },
  ],
}

同步站点订阅

添加需要同步的站点 Feed:

export const serverConfig: ServerConfig = {
  services: [
    {
      type: SyncServiceType.FEED,
      id: 'MyBlog',
      label: 'My Blog Articles',
      syntax: 'atom',
      url: 'https://blog.example.com/atom.xml',
    },
  ],
}

同步 Github 议题的评论

需要提供 Github Personal Access Token(在此创建):

export const serverConfig: ServerConfig = {
  githubPersonalAccessToken: 'ghp_yourGithubPersonalAccessToken',
}

添加需要同步评论的 Issue:

export const serverConfig: ServerConfig = {
  services: [
    {
      type: SyncServiceType.GITHUB_ISSUE_COMMENT,
      id: 'GithubIssueComments',
      label: 'My Github Issue Comments',
      owner: 'github_repo_owner',
      repo: 'github_repo_name',
      issueNumber: 1,
    },
  ],
}

同步 QQ 空间说说

同步 QQ 空间说说依赖 ffmpeg 对视频文件进行切片,请确保系统运行内存足够,避免异常跳出。

添加需要同步的 QQ 空间,例如:

export const serverConfig: ServerConfig = {
  services: [
    {
      type: SyncServiceType.QZONE_TALK,
      id: 'MyQQZone',
      label: 'My QQ Zone',
      qqNumber: '408550000',
      from: new Date('2018-01-01'),
    },
  ],
}

访问接口 /qzone-login 要求您以管理员身份登录站点。

为了获取请求 QQ 空间说说接口所需的登录态信息,您需要访问服务端的 /qzone-login?qqNumber=${qqNumber} 路由,扫码并登录到 QQ 空间。确认登录后,重启服务端或是等待下一次事务即可同步说说。

其它配置项

export const serverConfig: ServerConfig = {
  /** 服务端监听端口 */
  listeningPort: 4000,
  /** 同步 Timeline 信息的 Cron 规则;这里表示每小时的 0 和 30 分钟执行一次同步操作 */
  syncInterval: '*/30 * * * *',
}

项目部署

请确保 Node.js >= 22.12.0。

安装依赖

项目依赖于 Bun 工具包:

npm install -g bun

在仓库根目录执行下面的命令安装依赖:

bun install --frozen-lockfile

客户端部署

编译构建客户端静态资源:

bun run build:client

构建后的静态资源存放在 client/out 目录。

预览编译后的客户端:

bun run start:client

服务端部署

服务端源码部署需要保留 monorepo 的相对布局:根 package.json、bun.lock、bunfig.toml、tsconfig.base.json、scripts/prepare.ts、所有 workspace 的 package.json、server/src 和 packages/contracts/src。客户端源码和 client/out 可以省略。先在目标平台执行:

bun install --production --frozen-lockfile --filter '@timeline/server...'

安装后完整保留根 node_modules/.bun 和各 workspace 的依赖链接,注入 server/configs/server.ts,挂载或保留 server/.static、server/.temporary。ffmpeg 在目标平台下载,不能将 Windows 二进制复制到 Linux。生产或 CI 安装跳过 Husky,ffmpeg-static 的安装脚本仍会执行。

启动服务端生产环境:

bun run start:server

若需要在启动时对所有同步服务执行一次全量同步(忽略上次同步时间,仅受各服务 from 字段约束),可设置 FULL_SYNC=true 环境变量,全量同步完成后仍会按 syncInterval 正常进行增量同步:

FULL_SYNC=true bun run start:server

项目开发

项目使用 Bun Workspaces:client 为 Next.js 静态客户端,server 为 Elysia 服务端,packages/contracts 为无框架依赖的接口契约。两端仅通过 @timeline/contracts 共享枚举和 HTTP DTO,不引用对方源码。安装入口和锁文件均在根目录。

同时启动两端可运行 bun run dev。也可以在 client 或 server 目录执行 bun run dev;服务端从自己的目录运行,持久化目录仍为 server/.static、server/.temporary。客户端只需 client/configs/client.ts,其内容是公开构建输入,修改 API 地址后需要重新构建。

客户端开发

启动客户端,默认监听 localhost:3000。

bun run dev:client

检查客户端代码质量(不自动修改文件):

bun run lint:client

自动修复可修复的客户端问题:

bun run lint:client:fix

服务端开发

启动服务端,默认监听 localhost:4000:

bun run dev:server

检查服务端和契约代码质量:

bun run lint:server

自动修复可修复的服务端和契约问题:

bun run lint:server:fix

About

What did I do & say?

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Used by

Contributors

Languages