原因:
backend/src/database/init.js在启动时会读取并执行schema-postgres.sqlmigrate-postgres.js是一个独立的迁移脚本,需要手动执行- 当前项目的自动初始化流程使用的是
schema-postgres.sql
表结构文件:
backend/src/database/schema-postgres.sql ← 这个是标准
初始化命令:
cd backend
node src/database/init.js关键差异:
schema-postgres.sql: 使用SERIAL(INTEGER 自增)migrate-postgres.js: 使用BIGSERIAL(BIGINT 自增)
建议:
- 新部署使用
schema-postgres.sql(通过init.js自动执行) - 如需迁移现有数据,可以手动运行
migrate-postgres.js
DB_CLIENT=postgres
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5432
POSTGRES_DB=mingri_lvtu
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres# 选项1:StepFun(推荐)
STEPFUN_API_KEY=your_key_here
# 选项2:DeepSeek(可选)
DEEPSEEK_API_KEY=your_key_here说明:
- AI 群聊功能需要
STEPFUN_API_KEY或DEEPSEEK_API_KEY至少一个 - 代码逻辑:优先使用 DeepSeek,如果没有则使用 StepFun
- 位置:
backend/src/services/deepseek.js第 20-25 行
const useStepFun = !DEEPSEEK_API_KEY && STEPFUN_API_KEY;
if (!DEEPSEEK_API_KEY && !STEPFUN_API_KEY) {
throw new Error('缺少 DEEPSEEK_API_KEY 或 STEPFUN_API_KEY 环境变量');
}AMAP_WEB_SERVICE_KEYS=key1,key2用途:
- 地理编码(地址 → 坐标)
- 逆地理编码(坐标 → 地址)
- 仅在数据导入脚本中使用
影响范围:
backend/src/database/regeocode-all-posts.jsbackend/src/database/fix-saved-record-city.jsbackend/src/database/run-xhs-slim-full-pipeline.jsbackend/src/database/run-xhs-unified-pipeline.js
不影响:
- 前端地图显示(前端使用自己的高德 Key)
- 用户发布帖子
- AI 群聊功能
- 基础服务启动
# 后端不需要配置
# 前端硬编码:SECONDME_CLIENT_ID = '1fd10355-ad04-43b1-a479-5a868b505130'说明:
- SecondMe 配置完全在前端(
frontend/src/js/services.js) - 后端只提供代理接口(
backend/src/routes/secondme.js) - 不影响基础功能启动
XHS_IMAGES_ROOT=D:/path/to/xhs/images
XHS_CSV_PATH=D:/path/to/xhs/data.csv
XHS_TRAVEL_INTEL_OUTPUT_DIR=./backend/output
# ... 其他 XHS_ 开头的配置用途:仅用于数据导入脚本 不影响:服务启动和核心功能
代码分析:
// backend/src/index.js 第 48-50 行
const defaultXhsImagesRoot = path.resolve(__dirname, '../../../MediaCrawler/data/xhs/images')
const xhsImagesRoot = process.env.XHS_IMAGES_ROOT || defaultXhsImagesRoot
app.use('/xhs-images', express.static(xhsImagesRoot))- 仅影响
/xhs-images/*静态文件路由 - 如果目录不存在,访问该路由会返回 404
- 不会导致服务启动失败
# 即使目录不存在,服务也能正常启动
# 只是访问 http://localhost:3001/xhs-images/xxx 会返回 404- 数据导入脚本:
import-xhs-posts.js、import-xhs-slim-csv.js - 前端访问小红书图片:
/xhs-images/<note_id>/<image_file>
- 新用户:注释掉或删除
XHS_IMAGES_ROOT配置 - 有数据用户:确保路径存在且可访问
- Docker 部署:如需使用,需要挂载 volume
初始化流程:
docker-compose up -d- 创建空的 PostgreSQL 数据库
- 数据库名:
mingri_lvtu
cd backend
node src/database/init.js- 读取
schema-postgres.sql - 创建 13 个表
- 插入默认测试用户(ID: 53, username: 'test')
npm run dev- 应用会自动调用
initDatabase() - 如果表已存在,会跳过创建
默认数据:
- 仅包含 1 个测试用户(ID: 53)
- 其他表为空
- 用户可以立即开始发布内容
可选数据导入: 如果需要导入小红书数据(可选):
# 需要先配置 XHS_CSV_PATH 和 XHS_IMAGES_ROOT
node backend/src/database/import-xhs-posts.js# 数据库(必需)
DB_CLIENT=postgres
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5432
POSTGRES_DB=mingri_lvtu
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
# AI 服务(至少一个)
STEPFUN_API_KEY=your_stepfun_key_here
# 或
# DEEPSEEK_API_KEY=your_deepseek_key_here# 高德地图(仅数据导入脚本需要)
# AMAP_WEB_SERVICE_KEYS=key1,key2
# 小红书数据(仅数据导入脚本需要)
# XHS_IMAGES_ROOT=D:/path/to/xhs/images
# XHS_CSV_PATH=D:/path/to/xhs/data.csv
# DeepSeek(如果已配置 StepFun 则不需要)
# DEEPSEEK_API_KEY=your_deepseek_key_here# 1. 启动数据库
docker-compose up -d
# 2. 初始化表结构(首次必须)
cd backend
node src/database/init.js
# 3. 启动后端
npm run dev
# 4. 启动前端(新终端)
cd frontend
npm run dev# 检查数据库
docker exec <容器名> psql -U postgres -d mingri_lvtu -c "\dt"
# 检查后端
curl http://localhost:3001/health
# 检查前端
# 浏览器访问 http://localhost:5173- 表结构:使用
schema-postgres.sql(通过init.js自动执行) - 必需 API:
STEPFUN_API_KEY或DEEPSEEK_API_KEY(至少一个) - 可选 API:
AMAP_WEB_SERVICE_KEYS(仅数据导入需要) - 图片目录:
XHS_IMAGES_ROOT不是必需,不影响启动 - 初始化:空库启动,只需执行
init.js创建表结构 - SecondMe:完全可选,前端配置,不影响后端启动
更新时间:2026-03-20 文档版本:v1.0