No description
  • TypeScript 97.2%
  • JavaScript 1.1%
  • CSS 0.8%
  • Shell 0.7%
  • PowerShell 0.1%
Find a file
2026-09-16 16:39:59 +08:00
.ai 更新文档和基础功能 2026-09-15 11:00:35 +08:00
.deploy 优化计费逻辑 2026-09-09 17:59:06 +08:00
admin 增加供应商的余额管理功能 2026-09-15 18:02:36 +08:00
server 优化翻译,去掉翻译前面的序号和相关符号 2026-09-16 16:39:59 +08:00
web 完善用量统计功能 2026-09-12 18:30:37 +08:00
.gitattributes 优化前端 2026-08-02 22:01:26 +08:00
.gitignore 处理了发布流程 2026-08-05 14:38:15 +08:00
README.md 处理生产发布脚本 2026-08-23 18:52:09 +08:00
start-dev.cmd 完善计费、文档、关联性测试功能 2026-08-18 17:29:14 +08:00
start-dev.ps1 完善计费、文档、关联性测试功能 2026-08-18 17:29:14 +08:00
start-dev.sh 完善计费、文档、关联性测试功能 2026-08-18 17:29:14 +08:00

Project-Astronomican

AI 图片与视频生成统一接入平台。

目录结构

web/      # 用户端(React + Vite)
admin/    # 管理端(React + Vite)
server/   # 后端(Bun + ElysiaJS + Prisma + PostgreSQL)
.deploy/  # 生产部署脚本、pending / archive seeds

技术栈

模块 技术
web / admin React + TypeScript + Vite
server Bun + ElysiaJS + Prisma
database PostgreSQL

快速开始

1. 数据库

任选其一:

A. Docker(推荐联调)

docker run -d --name astronomican-pg ^
  -e POSTGRES_USER=postgres ^
  -e POSTGRES_PASSWORD=postgres ^
  -e POSTGRES_DB=astronomican ^
  -p 5433:5432 postgres:14

B. 本地 PostgreSQL

createdb astronomican

编辑 server/.env(可从 server/.env.example 复制):

DATABASE_URL="postgresql://postgres:postgres@localhost:5433/astronomican?schema=public"
REDIS_URL="redis://127.0.0.1:6380"
PORT=3000
JWT_SECRET="change-me-in-production"
ADMIN_EMAIL="admin@astronomican.local"
ADMIN_PASSWORD="admin123456"
CORS_ORIGINS="http://localhost:5173,http://localhost:5174"

本地 Postgres 若使用 5432,请把 DATABASE_URL 中的端口与账号密码改成实际值。

Redis(BullMQ 任务唤醒队列)可用 Docker 启动:

docker run -d --name astronomican-redis -p 6380:6379 redis:7-alpine

2. Server

cd server
cp .env.example .env   # Windows 可手动复制后修改 DATABASE_URL
bun install
bun run db:push
bun run db:seed
bun run dev

默认地址:http://localhost:3000
健康检查:http://localhost:3000/health

bun run db:seed 会依次执行 .deploy/archive + .deploy/seeds(管理员、默认汇率、签到配置等)。管理员账号来自 ADMIN_EMAIL / ADMIN_PASSWORD(默认 admin@astronomican.local / admin123456)。

模型、供应商、适配器绑定与计价规则请在 Admin 后台手动添加(可选类型由代码里的 MODEL_DEFINITIONS / PROVIDER_DEFINITIONS 约束)。

3. Web(用户端)

cd web
bun install
bun run dev

默认地址:http://localhost:5173

功能:注册/登录、API Key 管理、模型目录、发起生成、任务查询。

4. Admin(管理端)

cd admin
bun install
bun run dev

默认地址:http://localhost:5174

使用管理员账号登录。功能:用户启用/禁用、模型/供应商/关联配置、任务监控。

生产部署

在仓库根目录用 Git Bash / WSL 执行(会提示输入服务器 SSH 密码一次)。发布包和本地 staging 不携带本地生产 env;脚本优先保留远端 server/.env.production,若远端缺失且本地存在,则通过 SSH 单独传输到临时文件用于恢复。前置:填好 web/admin 的 .env.production。

默认端口:API 19240|worker probe 19241|web 19245|admin 19250。生产 PM2 运行独立的 astronomican-api 和 astronomican-worker 进程;worker 只暴露 probe 端口,不承载业务 API。

发版前准备

  1. Schema 变更:本地 cd server && bun run db:migrate,提交生成的 migration。

  2. 需要灌生产数据:在 .deploy/seeds/ 新增 时间戳_名称.ts,导出:

    import type { PrismaClient } from "@prisma/client";
    export default async function seed(prisma: PrismaClient) { /* ... */ }
    
    • .deploy/seeds/ — 待上线(下次部署会跑)
    • .deploy/archive/ — 已在生产执行过的归档
  3. 没有新 seed 时保持 .deploy/seeds/ 为空即可。

完整发版

./.deploy/deploy.sh

流程:本地构建 web/admin → 生成 release manifest 并扫描 staging、压缩包原始列表和解压内容 → 打包上传 → 服务器 bun install + prisma migrate deploy → 若有 pending seed 则执行 → PM2 重启。成功后脚本会把已跑的 seed 移到 .deploy/archive/,请把这次移动一并 commit。manifest 会记录 commit、操作者、artifact SHA-256、migration/seed 清单。

只修库(不重建前端)

./.deploy/fix-db.sh            # 只 migrate
./.deploy/fix-db.sh --seed     # migrate + pending seeds → 再归档到 archive
./.deploy/fix-db.sh --seed-all # 空库 / 重建库:archive + pending

--seed-all 会从本地 server/.env 指向的数据库导出经过安全过滤的无凭据 config-snapshot.json 一并 bootstrap。

本地空库 bootstrap 仍用:cd server && bun run db:seed。

开放 API 示例

公开对接使用 v2。先在用户端创建 API Key,然后:

# 创建图片任务
curl -X POST http://localhost:3000/v2/images/generations \
  -H "Authorization: Bearer ak_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "a lighthouse in fog",
    "aspect_ratio": "1:1",
    "quality": "medium"
  }'

# 查询任务
curl http://localhost:3000/v2/tasks/task_xxx \
  -H "Authorization: Bearer ak_xxx"

任务状态:QUEUED → PROCESSING → SUCCEEDED / FAILED(另有软失败码 RESULT_UNKNOWN:请求超时但结果未确认)。

火山方舟对接:

  • 图片:images/generations(Seedream 5 Pro / Lite,同步)
  • 视频:contents/generations/tasks(Seedance,异步轮询)

在管理端「供应商」页配置 ark(火山方舟)的 config(apiKey 必填,baseUrl、各模型/接入点 ID 可选)。未配置 apiKey 时请求会直接失败。若控制台使用推理接入点,将模型字段设为 ep-xxxx。