Files
2026-moving-helper/README.md
T

186 lines
3.4 KiB
Markdown
Raw Normal View History

2026-04-19 12:13:07 +02:00
# Moving Helper Scaffold
这是一个面向可信家庭内网环境的小型工具项目,目前阶段只完成了基础脚手架:
- FastAPI
- Jinja2
- SQLAlchemy
- SQLite
- pytest / FastAPI TestClient
- Docker / Docker Compose
当前还不是完整业务应用,现阶段重点是把运行方式、工程结构、配置和基础测试打稳,后续再继续补 CRUD、图片、搜索等能力。
## 项目结构
```text
.
├── app
│ ├── __init__.py
│ ├── config.py
│ ├── db.py
│ ├── main.py
│ ├── models.py
│ ├── static
│ │ └── style.css
│ └── templates
│ ├── base.html
│ └── boxes.html
├── data
├── tests
│ ├── conftest.py
│ └── test_app.py
├── docker-compose.yml
├── Dockerfile
├── README.md
├── requirements.txt
└── .gitignore
```
## 当前已接好的基础能力
- FastAPI 应用入口:`app/main.py`
- Jinja2 模板渲染
- 静态文件挂载:`/static`
- `/` 自动重定向到 `/boxes`
- SQLite 数据库连接
- SQLAlchemy Base / Session
- 启动时自动建表
- 基础自动化测试
## 轻量配置
项目通过环境变量支持下面几个配置项:
- `DATABASE_URL`
- `HOST`
- `PORT`
默认值:
- `DATABASE_URL=sqlite:///./data/app.db`
- `HOST=0.0.0.0`
- `PORT=10000`
本地开发和 Docker 运行都可以直接使用这些默认值,也可以按需覆盖。
## 本地开发模式
推荐使用本地 Python `venv` 开发和调试。
### 1. 创建虚拟环境
```bash
python3 -m venv .venv
source .venv/bin/activate
```
### 2. 安装依赖
```bash
pip install -r requirements.txt
```
### 3. 启动开发服务器
```bash
uvicorn app.main:app --reload --host 0.0.0.0 --port 10000
```
访问:
```text
http://localhost:10000
```
本地开发默认会使用:
```text
./data/app.db
```
如果你想临时改端口或数据库路径,也可以这样运行:
```bash
PORT=10000 DATABASE_URL=sqlite:///./data/app.db uvicorn app.main:app --reload --host 0.0.0.0 --port 10000
```
## Docker 部署模式
Docker / Compose 是这个项目面向长期运行环境的方式。
### 启动
```bash
docker compose up --build
```
访问:
```text
http://localhost:10000
```
### 运行说明
- 默认暴露 `10000` 端口
- `restart: unless-stopped`,适合长期运行
- 容器内应用以用户 `1000:1000` 运行
- SQLite 数据文件保存在宿主机 `./data/app.db`
- 容器重建不会丢失数据库数据
### 数据持久化与备份
`docker-compose.yml` 会将宿主机目录:
```text
./data
```
挂载到容器内:
```text
/app/data
```
因此数据库文件通常位于:
```text
./data/app.db
```
备份时直接复制这个 SQLite 文件即可。
## 测试
这个项目已经接入了最基础的测试设施:
- `pytest`
- `FastAPI TestClient`
运行测试:
```bash
pytest
```
测试会使用独立的测试数据库文件,不会污染本地开发使用的 `data/app.db`
当前测试覆盖:
- 应用可正常启动
- `/` 会重定向到 `/boxes`
- `/boxes` 可正常返回 `200`
- 测试数据库与真实开发数据库隔离
## 当前阶段未实现
这一轮仍然没有开始做完整业务功能,下面这些内容后续再补:
- Box / Item 完整 CRUD
- 图片上传与处理
- 搜索
- 登录 / 鉴权
- 复杂前端样式
- 前后端分离