Files
selfrelease 51feae55ba feat(backend): Phase 0 项目骨架完成 — 后端/前端/数据库/Docker
- 后端:FastAPI + SQLAlchemy + Alembic,7 张核心表迁移成功
- 前端:Next.js 16 + TailwindCSS 4 + 三端布局(投资人/创始人/Admin)
- 数据库:PostgreSQL 16,7 张核心实体表(tenants/users/companies/monthly_reports/health_scores/risk_events/audit_logs)
- Docker:docker-compose.yml + 前后端 Dockerfile
- 测试:健康检查 4 个测试全部 GREEN
- 文档:README/run.md/AGENTS.md/docs 体系完整
2026-07-18 21:50:15 +08:00

180 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# run.md — 运维手册
## 1. 技术栈
| 层 | 技术 | 版本 |
|---|---|---|
| 前端 | Next.js + React + TypeScript | 15.x / 19.x / 5.x |
| UI | TailwindCSS 4.x + shadcn/ui + lucide + recharts + sonner | — |
| 后端 | Python 3.12 + FastAPI 0.115.x | — |
| ORM | SQLAlchemy 2.x + Alembic | — |
| 数据库 | PostgreSQL 16 + PgVector | — |
| 缓存 | Redis 7.x | — |
| AI | Ollama(本地推理)+ LangChain | — |
| 包管理 | pnpm(前端)+ uv(后端) | — |
| 部署 | Docker Compose | — |
## 2. 首次准备
```bash
# [Native] 安装依赖
brew install pnpm uv docker ollama
# [Native] 拉取 AI 模型
ollama pull qwen2.5:7b
# [Docker] 启动基础设施
docker compose up -d postgres redis ollama
# [Native] 后端
cd backend
uv sync
cp ../.env.example ../.env
uv run alembic upgrade head
uv run uvicorn app.main:app --reload --port 8000
# [Native] 前端
cd frontend
pnpm install
pnpm dev
```
## 3. 基础设施启停
```bash
# [Docker] 启动
docker compose up -d postgres redis ollama
# [Docker] 停止
docker compose stop postgres redis ollama
# [Docker] 查看状态
docker compose ps
# [Docker] 查看日志
docker compose logs -f postgres
docker compose logs -f redis
```
## 4. 应用启停
```bash
# [Native] 后端启动
cd backend && uv run uvicorn app.main:app --reload --port 8000
# [Native] 后端停止
Ctrl+C
# [Native] 前端启动
cd frontend && pnpm dev
# [Native] 前端停止
Ctrl+C
# [Docker] 全部启动
docker compose up -d
# [Docker] 全部停止
docker compose down
```
## 5. DB 命令
```bash
# [Docker] 进入 psql
docker compose exec postgres psql -U postgres -d aiportpilot
# [Native] 创建迁移
cd backend && uv run alembic revision --autogenerate -m "description"
# [Native] 执行迁移
cd backend && uv run alembic upgrade head
# [Native] 回滚一个版本
cd backend && uv run alembic downgrade -1
# [Native] 查看当前版本
cd backend && uv run alembic current
# [Docker] 备份数据库
docker compose exec postgres pg_dump -U postgres aiportpilot > backup_$(date +%Y%m%d).sql
# ⚠️ [Docker] 恢复数据库(危险!会覆盖现有数据)
# docker compose exec -T postgres psql -U postgres -d aiportpilot < backup_20250718.sql
```
## 6. 排错
| 问题 | 排查 |
|---|---|
| 后端启动失败 | 检查 `.env` 配置、PostgreSQL 是否运行 |
| 前端 API 401 | 检查 token 是否过期、`frontend/.env.local` 的 API URL |
| AI 解析超时 | 检查 Ollama 是否运行、模型是否已拉取 |
| 数据库连接失败 | `docker compose ps` 检查 PostgreSQL 状态 |
| 迁移冲突 | `alembic history` 检查,手动解决后重新生成 |
## 7. 端口表
| 服务 | 端口 | 说明 |
|---|---|---|
| Next.js | 3000 | 前端 dev server |
| FastAPI | 8000 | 后端 API server |
| PostgreSQL | 5432 | 数据库 |
| Redis | 6379 | 缓存 |
| Ollama | 11434 | 本地 AI 推理 |
## 8. 环境变量
`.env.example`,关键项:
```env
# 数据库
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/aiportpilot
# Redis
REDIS_URL=redis://localhost:6379/0
# JWT
JWT_SECRET_KEY=change-me-in-production
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_TTL_MINUTES=120
JWT_REFRESH_TOKEN_TTL_DAYS=7
# AI
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=qwen2.5:7b
# 前端
NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1
```
## 9. 部署备份
```bash
# [Docker] 全量备份(数据库 + 文件)
docker compose exec postgres pg_dump -U postgres aiportpilot > backups/db_$(date +%Y%m%d_%H%M).sql
# [Native] 代码备份(Git
git tag backup-$(date +%Y%m%d)
git push origin --tags
# ⚠️ [Docker] 恢复(危险!先停止应用)
# docker compose stop backend frontend
# docker compose exec -T postgres psql -U postgres -d aiportpilot < backups/db_20250718.sql
# docker compose start backend frontend
```
## 10. FAQ
**Q: 如何切换 AI 模型?**
A: 修改 `.env``OLLAMA_MODEL`,然后 `ollama pull <model_name>`
**Q: 如何添加新企业行业选项?**
A: 修改 `backend/app/core/enums.py` 中的 `Industry` 枚举,执行迁移。
**Q: 如何调整健康度权重?**
A: 修改 `backend/app/services/health_calculator.py` 中的权重配置。
**Q: 前端如何切换投资人/创始人端?**
A: 路由组自动隔离:`/` → 投资人端,`/founder` → 创始人端,`/admin` → Admin 端。