131 lines
3.3 KiB
Markdown
131 lines
3.3 KiB
Markdown
# 次元取景器
|
||
|
||
> 为 Coser 和摄影师打造的二次元取景地发现与分享平台
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
├── clients/ # 用户端 — uni-app Vue3 (HBuilderX 项目 + Pinia)
|
||
├── server/ # 服务端 — Python (FastAPI + SQLAlchemy 2.x)
|
||
│ └── app/admin/ # 管理端 — sqladmin(挂载在 FastAPI 上)
|
||
├── docker-compose.yml
|
||
└── docs.md # 产品功能规划文档
|
||
```
|
||
|
||
## 技术栈
|
||
|
||
| 层级 | 技术 |
|
||
|------|------|
|
||
| 用户端 | uni-app Vue3 (HBuilderX) · Pinia · 高德地图 |
|
||
| 服务端 | FastAPI · SQLAlchemy 2.x · Alembic · PostgreSQL + PostGIS · Redis |
|
||
| 管理端 | sqladmin(基于 FastAPI) |
|
||
| 存储 | MinIO(S3 兼容) |
|
||
| 容器 | Docker Compose(Nginx / PostgreSQL / Redis / MinIO) |
|
||
|
||
## Docker Compose 一次部署
|
||
|
||
项目已支持一次启动后端、管理端、用户端和基础设施:
|
||
|
||
```bash
|
||
docker-compose up -d --build
|
||
```
|
||
|
||
默认访问地址:
|
||
|
||
- 用户端 H5:http://localhost:5173
|
||
- 管理前端:http://localhost:5174
|
||
- 后端 API:http://localhost:5173/api
|
||
- API 文档:http://localhost:5173/docs
|
||
|
||
除 Nginx 网关外,后端、PostgreSQL、Redis、MinIO 和前端静态容器都只在 Docker 内部网络通信,不绑定宿主机端口。
|
||
|
||
默认数据库、Redis、MinIO 和端口可以通过环境变量覆盖,常用变量如下:
|
||
|
||
```bash
|
||
POSTGRES_USER=shiran
|
||
POSTGRES_PASSWORD=zxh2488252513
|
||
POSTGRES_DB=ciyuan_viewfinder
|
||
CLIENT_WEB_PORT=5173
|
||
ADMIN_WEB_PORT=5174
|
||
MINIO_ROOT_USER=minioadmin
|
||
MINIO_ROOT_PASSWORD=minioadmin
|
||
SECRET_KEY=change-me-before-production
|
||
TENCENT_MAP_KEY=
|
||
```
|
||
|
||
后端容器启动时会执行应用内启动迁移逻辑。用户端 H5 和管理前端会在镜像构建阶段生成静态文件,并由 nginx 托管。
|
||
|
||
## 本地开发
|
||
|
||
### 1. 启动基础设施
|
||
|
||
```bash
|
||
docker-compose up -d postgres redis minio
|
||
```
|
||
|
||
这会启动 PostgreSQL(含 PostGIS)、Redis 和 MinIO。
|
||
|
||
### 2. 启动服务端
|
||
|
||
```bash
|
||
cd server
|
||
|
||
# 创建虚拟环境
|
||
python -m venv .venv
|
||
# Windows
|
||
.venv\Scripts\activate
|
||
# macOS/Linux
|
||
# source .venv/bin/activate
|
||
|
||
# 安装依赖
|
||
pip install -r requirements.txt
|
||
|
||
# 复制并编辑环境变量
|
||
cp .env.example .env
|
||
|
||
# 执行数据库迁移
|
||
alembic upgrade head
|
||
|
||
# 启动开发服务器
|
||
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
||
```
|
||
|
||
API 文档:http://localhost:8000/docs
|
||
管理后台:http://localhost:8000/admin
|
||
|
||
### 3. 启动用户端 HBuilderX
|
||
|
||
使用 HBuilderX 打开 `clients/` 目录,安装 Pinia 依赖后运行:
|
||
|
||
```bash
|
||
cd clients
|
||
npm install
|
||
```
|
||
|
||
然后在 HBuilderX 中选择 运行 → 运行到浏览器 / 运行到小程序模拟器。
|
||
|
||
也可以构建 H5:
|
||
|
||
```bash
|
||
cd clients
|
||
npm install
|
||
npm run build:h5
|
||
```
|
||
|
||
## 功能阶段
|
||
|
||
| 阶段 | 内容 |
|
||
|------|------|
|
||
| **MVP(阶段 1)** | 登录注册、地图发现、地点详情、上传地点、我的 |
|
||
| **阶段 2** | 评论评分、标签筛选、搜索 |
|
||
| **阶段 3** | 约拍广场、报名匹配、站内私信 |
|
||
| **阶段 4** | 活动发布与报名 |
|
||
| **阶段 5** | 商业化(推广位、会员) |
|
||
|
||
## 开发约定
|
||
|
||
- 服务端 API 前缀:`/api/v1/`
|
||
- 所有 UGC 内容需审核(`audit_status`:pending → approved / rejected)
|
||
- 前端统一请求封装,自动携带 Token、统一错误处理
|
||
- 管理端使用 RBAC(admin / moderator / user)
|