# Docker 部署指南

## 环境准备
- Ubuntu 22.04（或你的服务器环境）
- 已安装 Docker 与 Docker Compose（或宝塔 Docker 管理器）
- 域名与宝塔 Nginx（可选，用于反向代理与 SSL）

## 端口与目录
- 服务端口：`57777`（容器与宿主机均使用 57777）
- 数据持久化：`./data:/app/data`（SQLite 数据库）
- 静态资源挂载：`./static:/app/static:ro`（前端文件可直接热更新）

## 项目结构
- `Dockerfile`：镜像构建
- `docker-compose.yml`：编排与端口/挂载
- `app/`：后端 FastAPI
- `static/`：前端资源
- `data/`：数据库（运行时生成）

## Gitea 流程（示例）
1. 在 Gitea 创建仓库，推送本项目代码
2. 服务器拉取：
   - `git clone https://your-gitea/owner/repo.git /opt/product-query`
   - `cd /opt/product-query`
3. 启动：
   - `docker compose up --build -d`
4. 验证：
   - `curl http://127.0.0.1:57777/health` 返回 `{"status":"ok"}`
   - 浏览器打开 `http://SERVER_IP:57777/`

## 宝塔面板（可选）
- 网站 → 添加站点 → 绑定域名
- 反向代理：目标 `http://127.0.0.1:57777`
- SSL：申请 Let’s Encrypt 并开启强制 HTTPS

## 更新前端与后端
- 前端：修改 `static/` 文件后，容器会直接读取（因挂载为只读给容器）
- 后端：修改 `app/` 或依赖后：
  - `docker compose up --build -d`
- 如构建缓存异常：
  - `docker compose build --no-cache && docker compose up -d`

## 数据与备份
- 数据库文件位于宿主机 `./data/products.db`
- 建议每日备份该文件；导出可直接复制或后续加 `/export` 接口

## 常见问题
- 502 或无法访问：确认容器已启动且端口映射为 `57777:57777`
- 中文显示乱码：仅限命令行输出，页面显示正常；确保浏览器编码为 UTF-8

## 一键命令汇总
- 首次部署：
```
cd /opt/product-query
docker compose up --build -d
```
- 更新部署：
```
git pull
docker compose up --build -d
```

## 安全建议
- 宿主仅开放 80/443；`57777` 可通过回环访问并由 Nginx 反代对外
- 上传导入大小可在 Nginx/面板调整；建议限制文件类型为 Excel（`.xlsx/.xls`）

## 国内部署加速（腾讯云）
- Docker Hub 拉取加速：
  - 编辑 `/etc/docker/daemon.json`：
  ```json
  {
    "registry-mirrors": [
      "https://mirror.ccs.tencentyun.com",
      "https://hub-mirror.c.163.com",
      "https://docker.mirrors.ustc.edu.cn"
    ]
  }
  ```
  - 重启 Docker：`systemctl restart docker`
- Python 依赖加速：镜像内已默认配置 `pip` 使用腾讯云源 `https://mirrors.cloud.tencent.com/pypi/simple`
- 预构建镜像：
  - 在本地构建并推送到腾讯云 TCR（容器镜像服务）：
  ```bash
  docker build -t ccr.ccs.tencentyun.com/<namespace>/<repo>:v1 .
  docker login ccr.ccs.tencentyun.com
  docker push ccr.ccs.tencentyun.com/<namespace>/<repo>:v1
  ```
  - 服务器直接拉取镜像并运行，跳过远端构建：
  ```bash
  docker pull ccr.ccs.tencentyun.com/<namespace>/<repo>:v1
  docker compose up -d
  ```


---
如需将 Compose 改为读取 `.env`（例如 `PORT`、令牌等），我可以补充 `.env.example` 与 `docker-compose.yml` 的 `env_file` 配置。当前方案保持简洁，端口固定为 57777。 
