部署方式
Starlens 可以在本地开发环境运行,也可以部署到 Docker 或 Node.js 自托管环境。部署前需要准备 PostgreSQL 数据库、GitHub OAuth 应用和加密密钥。如果要启用 AI,还需要配置至少一个 AI Provider。
本地开发
- 准备 Node.js、pnpm 和 PostgreSQL。
- 在仓库根目录创建
.env,写入数据库连接串和 GitHub OAuth 配置。 - 安装依赖后执行数据库迁移。
- 启动 Web 应用并访问本地地址。
常用命令:
corepack pnpm install
corepack pnpm db:migrate:local
corepack pnpm dev
推荐 .env 模板:
AUTH_SECRET="replace-with-random-secret"
NEXTAUTH_URL="http://localhost:3000"
AUTH_GITHUB_ID="github-client-id"
AUTH_GITHUB_SECRET="github-client-secret"
DATABASE_URL="postgres://starlens:starlens@localhost:54329/starlens_dev"
TOKEN_ENCRYPTION_SECRET="replace-with-random-32-byte-secret"
SYSTEM_AI_API_KEY=""
SYSTEM_AI_BASE_URL=""
SYSTEM_AI_MODEL=""
SYSTEM_AI_PROVIDER_TYPE="openai_compatible"
SYSTEM_AI_ENABLED="true"
SYSTEM_AI_FALLBACK_MODEL=""
SYSTEM_AI_EXTRA_HEADERS=""
本地 GitHub OAuth 回调地址应配置为:
http://localhost:3000/api/auth/callback/github
Node.js 自托管
自托管适合希望完全控制运行环境和数据库的场景。你可以把 Web 应用部署到自己的服务器,并连接自管 PostgreSQL。
基础流程:
- 在服务器准备 Node.js、pnpm 和数据库连接。
- 配置生产环境变量。
- 构建应用。
- 运行 Next.js 服务,并通过反向代理暴露 HTTPS 域名。
corepack pnpm install --frozen-lockfile
corepack pnpm build
corepack pnpm --filter @starlens/web start
反向代理需要转发 HTTPS 请求到 Next.js 服务,并保持 NEXTAUTH_URL 与公网域名一致。建议在代理层开启 HTTPS、HTTP/2、压缩和基础访问日志。
Docker 自托管
仓库内提供 Docker 部署配置,适合 1Panel、OpenResty 和自管 PostgreSQL 的服务器。默认宿主机端口使用 3333,容器内仍使用 Next.js 默认的 3000。
准备生产环境变量:
cp deploy/.env.production.example deploy/.env.production
至少填写:
| 变量 | 说明 |
|---|---|
NEXTAUTH_URL | 对外访问地址,例如 https://starlens.example.com |
DATABASE_URL | PostgreSQL 连接串;1Panel 同网络容器可使用 1Panel-postgresql:5432 |
AUTH_SECRET | NextAuth 会话密钥 |
AUTH_GITHUB_ID | GitHub OAuth Client ID |
AUTH_GITHUB_SECRET | GitHub OAuth Client Secret |
TOKEN_ENCRYPTION_SECRET | GitHub token、AI key 和额外 header 的加密密钥 |
启动前先执行迁移:
docker compose -f deploy/docker-compose.yml --profile migrate run --rm starlens-migrate
启动 Web 服务:
docker compose -f deploy/docker-compose.yml up -d --build starlens-web
服务默认暴露在:
http://服务器地址:3333
如果前面有 OpenResty 或 1Panel 网站反代,代理目标应指向 127.0.0.1:3333,并把 NEXTAUTH_URL 改成最终 HTTPS 域名。GitHub OAuth App 的回调地址必须同步改为:
{NEXTAUTH_URL}/api/auth/callback/github
OpenResty 与 HTTPS
1Panel/OpenResty 场景下可以复用仓库里的反代模板:
cp deploy/openresty-starlens.conf.example /opt/1panel/www/conf.d/starlens.example.com.conf
docker exec 1Panel-openresty nginx -t
docker exec 1Panel-openresty nginx -s reload
正式域名上线前,需要在 Cloudflare 创建 DNS 记录:
A starlens <SERVER_PUBLIC_IP>
DNS 生效后,推荐用 Let’s Encrypt/acme.sh 签发免费证书并自动续期:
DOMAIN=starlens.example.com PUBLIC_IP=<SERVER_PUBLIC_IP> bash deploy/issue-letsencrypt.sh
acme.sh 会安装 cron 任务自动续期。证书路径生成后,在 OpenResty 配置中启用 HTTPS server,并把 HTTP 站点的 / 访问改为 301 跳转到 HTTPS。
数据库迁移
Starlens 使用 Drizzle 管理 PostgreSQL schema。首次上线或 schema 变更后执行:
corepack pnpm db:migrate
本地开发可以使用:
corepack pnpm db:migrate:local
Neon 环境可以使用:
corepack pnpm db:migrate:neon
迁移前建议确认目标 DATABASE_URL 指向正确环境,避免把开发迁移误打到生产库。
DBA 脚本(管理员操作)
部分数据库变更属于 DBA 级操作(创建角色、行级安全策略),需要 CREATEROLE 权限,应用迁移用户不具备。这类操作独立放在 apps/web/dba/ 目录,由数据库超管在首次部署或环境初始化时执行一次,不随 drizzle-kit migrate 自动运行。
当前包含:
0006_ai_readonly_role_and_rls.sql—— 为 AI Agent 的自由 SQL 检索工具建立starlens_ai_readonly只读角色和 RLS 策略。对应的 drizzle 迁移0006已置为空操作占位,仅维持迁移序号一致。
执行方式(用数据库超管账号,脚本幂等可重复执行):
# 生产 / 自托管(PostgreSQL 在容器内)
docker cp apps/web/dba/0006_ai_readonly_role_and_rls.sql <pg容器>:/tmp/0006.sql
docker exec <pg容器> psql -U <超管用户> -d <库名> -v ON_ERROR_STOP=1 -f /tmp/0006.sql
# 本地开发
psql -U postgres -d starlens_dev -v ON_ERROR_STOP=1 \
-f apps/web/dba/0006_ai_readonly_role_and_rls.sql
新环境部署顺序:先用超管执行 dba/ 下的脚本,再跑 drizzle 迁移,最后启动 Web 服务。若跳过 DBA 脚本,应用本身可正常启动,但 AI Agent 的自由 SQL 检索功能会因角色不存在而报错。
AI 功能启用
AI 功能不是启动 Web 应用的硬依赖。上线后可以在设置页创建用户级 AI Provider,也可以通过环境变量提供系统级默认 Provider。
启用前确认:
- Provider 的 API Key 可用。
- Base URL 包含正确协议和路径。
- 模型 ID 是真实可调用的模型 ID。
- 如果使用网关,额外 header 已正确配置。
- 设置页中的 Provider 验证结果为
success。
CLI / Agent / MCP 接入
CLI、Agent Skill、HTTP tools 和 MCP 不需要单独部署公网服务。它们通过个人 API Token 调用当前 Starlens 站点。
Agent runtime 示例:
STARLENS_SKILL_FILE="/path/to/starlens/skills/starlens/SKILL.md"
STARLENS_TOKEN="stl_xxx"
STARLENS_API_BASE_URL="https://your-starlens.example.com"
本地 MCP 示例:
STARLENS_TOKEN="stl_xxx" \
STARLENS_API_BASE_URL="https://your-starlens.example.com" \
corepack pnpm mcp:start
如果 API 部署在内网,Agent runtime、CLI 或 IDE 所在机器必须能访问 STARLENS_API_BASE_URL。
部署检查
- GitHub OAuth 回调地址需要和线上域名一致。
- 数据库迁移需要在首次上线前执行。
- 如果启用 AI 功能,需要在设置页配置对应 Provider。
- 如果要给 CLI 使用,需要在 Tokens 页面创建个人 API Token。
/api/sync能成功触发同步;首次导入按页续跑,刷新页面或重试后仍能从已完成页继续,并在 GitHub 速率限制内完成。/api/search能返回当前用户的数据,且不会返回其他用户仓库。- Token 撤销后,旧 Bearer Token 不能继续访问 API。
- 生产环境不要暴露
.env、数据库连接串或 AI API Key。