自部署总览
FeedLog 支持三种部署方式:Docker、Vercel 和 Cloudflare Workers。三种方式运行同一个应用,产品功能相同。不同平台的运行环境、文件存储方式和数据库迁移时机有所不同。
本文帮助你选择部署平台,并确认启动 FeedLog 所需的最低配置。各平台的完整部署步骤保留在代码仓库中,与对应版本一起维护。
部署前的准备
FeedLog 需要一个安装了 vector 扩展的 PostgreSQL 17 或更高版本数据库。文件存储、邮件、AI 和 OAuth 都是可选服务,可以后续配置。根据部署平台,配置生效时可能需要重启应用或重新部署。
相似反馈检测依赖 vector 扩展。Neon 和 Supabase 可以在各自的控制台中启用该扩展。使用其他数据库服务时,请在部署 FeedLog 前对数据库执行以下语句:
CREATE EXTENSION IF NOT EXISTS vector;如果没有安装该扩展,数据库迁移会在创建包含 vector 字段的表时失败,部署日志会显示迁移错误。
选择部署平台
| Docker | Vercel | Cloudflare Workers | |
|---|---|---|---|
| PostgreSQL | 由你提供;仓库自带的 Compose 文件也可以启动一个数据库 | 由你提供,并且需要通过公网访问 | 由你提供,通过 Hyperdrive 绑定连接 |
| 文件上传 | S3 兼容存储或本地文件系统 | Vercel Blob | R2 存储桶 |
| 迁移时机 | 容器启动时 | 构建时 | 全新安装首次收到请求时 |
| 适用情况 | 需要完整控制基础设施 | 希望减少平台配置,并使用按分支创建的预览部署 | 希望在 Cloudflare 网络上运行无服务器部署 |
Docker 是自部署的默认推荐方式。如果应用、数据库和上传文件都需要保留在你控制的基础设施上,可以选择 Docker。它可以运行在 Linux 主机、NAS,以及 Coolify、Dokploy 等基于 Docker 的平台上。仓库中的 compose.yml 会同时启动应用和一个已启用 vector 的 PostgreSQL 数据库,因此只有 Docker 不要求你单独准备数据库。
仓库自带的 Compose 文件只配置了单个副本、默认 PostgreSQL 密码,并将端口发布到宿主机。用于生产环境前,请检查并调整这些设置。
Vercel 需要的平台专有配置最少。它会识别项目使用的框架,并提供 HTTPS 和按分支创建的预览部署。PostgreSQL 数据库需要自行准备。Vercel 应用市场提供 Neon 和 Supabase,两者都支持 vector 扩展。
Cloudflare Workers 通过 Cloudflare 的无服务器网络运行 FeedLog。它需要配置平台专用的绑定:数据库连接由 POSTGRES Hyperdrive 绑定提供,不使用 DATABASE_URL;文件存储由 R2 绑定提供,不使用 S3 凭据。
各平台的完整说明位于代码仓库中: Docker 部署 · Vercel 部署 · Cloudflare Workers 部署
必填配置
Docker 和 Vercel 需要三个环境变量。Cloudflare Workers 使用 POSTGRES Hyperdrive 绑定代替 DATABASE_URL,另外两项作为 Worker Secret 配置。
| 变量 | 作用 |
|---|---|
DATABASE_URL | PostgreSQL 连接字符串。Cloudflare Workers 不设置此变量,改为配置 POSTGRES Hyperdrive 绑定 |
BETTER_AUTH_SECRET | 用于保护会话和 cookie。值至少包含 32 个随机字符。后续修改会使所有现有会话失效 |
SYSTEM_ADMIN_EMAILS | 以逗号分隔的邮箱地址。对应账号创建时,会成为默认工作区的所有者。请在注册账号前配置 |
docker run -d --name feedlog -p 3000:3000 \
-e DATABASE_URL="postgresql://user:password@host:5432/feedlog" \
-e BETTER_AUTH_SECRET="$(openssl rand -hex 32)" \
-e SYSTEM_ADMIN_EMAILS="[email protected]" \
ghcr.io/linkcraftstudio/feedlog:latestvercel env add DATABASE_URL
vercel env add BETTER_AUTH_SECRET # Generate with: openssl rand -hex 32
vercel env add SYSTEM_ADMIN_EMAILS# Bind Hyperdrive as POSTGRES in wrangler.toml; DATABASE_URL is not used.
wrangler secret put BETTER_AUTH_SECRET # Generate with: openssl rand -hex 32
wrangler secret put SYSTEM_ADMIN_EMAILS在默认认证设置下,如果没有配置 OAuth,FeedLog 会自动启用邮箱和密码登录。
注册前配置 SYSTEM_ADMIN_EMAILS
FeedLog 会在创建账号时检查 SYSTEM_ADMIN_EMAILS。如果新账号的邮箱在列表中,FeedLog 会将该账号作为所有者加入默认工作区。
账号已经存在后再向列表添加其邮箱,不会改变该账号的角色。重启应用也不会再次执行这项检查。
账号已经存在时
不需要直接修改数据库。请向 SYSTEM_ADMIN_EMAILS 添加另一个邮箱,并按部署平台的流程让配置生效,然后使用该邮箱注册新账号。这个邮箱不能在当前实例中注册过。列表中的每个邮箱都会在对应账号创建时获得所有者权限,不限于第一个邮箱。
数据库迁移时机
三个平台执行数据库迁移的阶段不同,因此迁移失败会出现在不同位置:
- **Docker:**容器启动时执行迁移。全新安装通常会增加约五秒启动时间。如果迁移失败,容器无法完成启动;请在容器日志中查看迁移错误。
- **Vercel:**构建期间执行迁移,早于 Nuxt 构建步骤。迁移失败会终止本次部署,此前的部署继续提供服务。
- **Cloudflare Workers:**全新数据库首次收到请求时会打开
/setup页面。该页面执行迁移,并在表结构就绪后跳转到应用。vector扩展必须提前安装,因为/setup无法安装数据库扩展。
后续版本的迁移方式参见升级与备份。
后续配置
邀请用户前,建议先检查可选的外部服务,并准备升级和备份流程。
配置外部服务介绍 OAuth、邮件、文件存储和 AI,以及未配置各项服务时的行为。如果没有配置邮件服务,收件人不会收到密码重置和状态变更通知邮件。
升级与备份介绍如何部署新版本、何时执行迁移,以及升级前需要备份的内容。