This commit is contained in:
aaron 2025-03-21 17:09:40 +08:00
parent 7bd63eefc5
commit ab39576a45
8 changed files with 269 additions and 1 deletions

60
.dockerignore Normal file
View File

@ -0,0 +1,60 @@
# Git
.git
.gitignore
# 环境文件(避免泄露敏感信息)
.env
.env.example
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# 虚拟环境
venv/
ENV/
env/
# IDE相关
.idea/
.vscode/
*.swp
*.swo
.DS_Store
# Docker相关
Dockerfile
docker-compose.yml
.dockerignore
# 日志文件
logs/
*.log
# 数据文件
data/
*.sqlite3
# 其他
README.md
LICENSE
*.md

21
.env Normal file
View File

@ -0,0 +1,21 @@
# DashScope API密钥
DASHSCOPE_API_KEY=sk-caa199589f1c451aaac471fad2986e28
# 服务器配置
HOST=127.0.0.1
PORT=9001
DEBUG=True
# 腾讯云配置
QCLOUD_SECRET_ID=AKIDxnbGj281iHtKallqqzvlV5YxBCrPltnS
QCLOUD_SECRET_KEY=ta6PXTMBsX7dzA7IN6uYUFn8F9uTovoU
QCLOUD_COS_REGION=ap-chengdu
QCLOUD_COS_BUCKET=aidress-1311994147
QCLOUD_COS_DOMAIN=https://aidress-1311994147.cos.ap-chengdu.myqcloud.com
# 数据库配置
DB_HOST=gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com
DB_PORT=27469
DB_USER=root
DB_PASSWORD=Aa#223388
DB_NAME=aidress

19
.env.docker Normal file
View File

@ -0,0 +1,19 @@
# 数据库配置
DB_HOST=db
DB_PORT=3306
DB_USER=ai_user
DB_PASSWORD=yourpassword
DB_NAME=ai_dressing
# 阿里云百炼平台配置
DASHSCOPE_API_KEY=your_dashscope_api_key
# 腾讯云配置
QCLOUD_SECRET_ID=your_qcloud_secret_id
QCLOUD_SECRET_KEY=your_qcloud_secret_key
# 应用配置
APP_NAME=AI-Dressing
APP_DESCRIPTION=基于阿里百炼平台的AI试衣服务
APP_VERSION=0.1.0
DEBUG=False

2
.gitignore vendored
View File

@ -1,5 +1,5 @@
# 环境变量
.env
# .env
# Python
__pycache__/

35
Dockerfile Normal file
View File

@ -0,0 +1,35 @@
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 设置环境变量
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1
# 安装系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libssl-dev \
libffi-dev \
default-libmysqlclient-dev \
pkg-config \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 复制项目文件
COPY . /app/
# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt
# 创建非root用户运行应用
RUN adduser --disabled-password --gecos '' appuser
RUN chown -R appuser:appuser /app
USER appuser
# 暴露端口
EXPOSE 9001
# 启动命令
CMD ["uvicorn", "run:app", "--host", "0.0.0.0", "--port", "9001"]

View File

@ -86,6 +86,76 @@ python run.py
服务将在 http://localhost:9001 启动,您可以访问 http://localhost:9001/docs 查看 API 文档。
## Docker 部署
本项目支持使用 Docker 进行部署,提供了完整的 Docker 配置文件。
### 前提条件
- 安装 [Docker](https://docs.docker.com/get-docker/)
- 安装 [Docker Compose](https://docs.docker.com/compose/install/)
### 使用 Docker 部署
1. **配置环境变量**
复制 `.env.docker` 文件为 `.env`,并填写您的 API 密钥:
```bash
cp .env.docker .env
```
编辑 `.env` 文件,填入您的 API 密钥和其他配置。
2. **构建并启动服务**
```bash
docker-compose up -d
```
这将启动两个容器:
- `ai-dressing-app`:运行 FastAPI 应用程序
- `ai-dressing-db`:运行 MySQL 数据库
3. **初始化数据库**
应用启动后,执行迁移以创建数据库表:
```bash
docker-compose exec app python3 create_migration.py upgrade
```
4. **访问服务**
服务将在 `http://localhost:9001` 启动,您可以访问 `http://localhost:9001/docs` 查看 API 文档。
### Docker 环境管理
- **查看日志**
```bash
docker-compose logs -f app # 查看应用日志
docker-compose logs -f db # 查看数据库日志
```
- **重启服务**
```bash
docker-compose restart app
```
- **停止服务**
```bash
docker-compose down # 停止所有服务
```
- **停止并删除数据卷**
```bash
docker-compose down -v # 谨慎使用,这将删除数据库中的所有数据
```
## API 文档
启动服务后,访问以下地址查看自动生成的 API 文档:

49
docker-compose.yml Normal file
View File

@ -0,0 +1,49 @@
version: '3.8'
services:
app:
build: .
container_name: ai-dressing-app
restart: always
ports:
- "9001:9001"
environment:
- DB_HOST=db
- DB_PORT=3306
- DB_USER=ai_user
- DB_PASSWORD=yourpassword
- DB_NAME=ai_dressing
- DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY}
- QCLOUD_SECRET_ID=${QCLOUD_SECRET_ID}
- QCLOUD_SECRET_KEY=${QCLOUD_SECRET_KEY}
depends_on:
- db
volumes:
- ./:/app
networks:
- ai-dressing-network
db:
image: mysql:8.0
container_name: ai-dressing-db
restart: always
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_USER=ai_user
- MYSQL_PASSWORD=yourpassword
- MYSQL_DATABASE=ai_dressing
volumes:
- mysql-data:/var/lib/mysql
- ./mysql-init:/docker-entrypoint-initdb.d
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
- ai-dressing-network
volumes:
mysql-data:
networks:
ai-dressing-network:
driver: bridge

14
mysql-init/01-init.sql Normal file
View File

@ -0,0 +1,14 @@
-- 创建数据库
CREATE DATABASE IF NOT EXISTS ai_dressing CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户并授权
CREATE USER IF NOT EXISTS 'ai_user'@'%' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON ai_dressing.* TO 'ai_user'@'%';
FLUSH PRIVILEGES;
-- 选择数据库
USE ai_dressing;
-- 初始化顺序保证表不会因外键约束而创建失败
-- 注意这里不需要创建表因为应用会使用Alembic自动创建
-- 这个文件主要用于确保数据库和用户设置正确