update
This commit is contained in:
parent
3d837597ba
commit
012b0bbde3
36
Dockerfile
36
Dockerfile
@ -1,6 +1,9 @@
|
|||||||
# 使用Python 3.10作为基础镜像
|
# 使用Python 3.10作为基础镜像
|
||||||
FROM python:3.10-slim
|
FROM python:3.10-slim
|
||||||
|
|
||||||
|
# 设置环境变量
|
||||||
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1
|
||||||
|
|
||||||
# 设置时区
|
# 设置时区
|
||||||
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||||
@ -27,25 +30,44 @@ RUN apt-get update \
|
|||||||
default-libmysqlclient-dev \
|
default-libmysqlclient-dev \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
curl \
|
curl \
|
||||||
|
nano \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# 设置工作目录
|
# 设置工作目录
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# 复制项目文件
|
# 安装Python依赖(先于文件复制,利用缓存)
|
||||||
COPY requirements.txt .
|
COPY requirements.txt .
|
||||||
|
RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt \
|
||||||
|
&& pip install -i https://mirrors.aliyun.com/pypi/simple/ uvicorn python-multipart python-dotenv
|
||||||
|
|
||||||
|
# 复制项目文件
|
||||||
COPY app app/
|
COPY app app/
|
||||||
COPY *.py ./
|
COPY *.py ./
|
||||||
COPY .env* ./
|
|
||||||
COPY entrypoint.sh .
|
COPY entrypoint.sh .
|
||||||
|
|
||||||
|
# 创建一个默认的.env.example文件
|
||||||
|
RUN echo "# 数据库配置\n\
|
||||||
|
DB_HOST=db\n\
|
||||||
|
DB_PORT=3306\n\
|
||||||
|
DB_USER=ai_user\n\
|
||||||
|
DB_PASSWORD=yourpassword\n\
|
||||||
|
DB_NAME=ai_dressing\n\
|
||||||
|
\n\
|
||||||
|
# 阿里云DashScope配置\n\
|
||||||
|
DASHSCOPE_API_KEY=your_dashscope_api_key\n\
|
||||||
|
\n\
|
||||||
|
# 腾讯云配置\n\
|
||||||
|
QCLOUD_SECRET_ID=your_qcloud_secret_id\n\
|
||||||
|
QCLOUD_SECRET_KEY=your_qcloud_secret_key\n\
|
||||||
|
QCLOUD_COS_REGION=ap-chengdu\n\
|
||||||
|
QCLOUD_COS_BUCKET=your-bucket-name\n\
|
||||||
|
QCLOUD_COS_DOMAIN=https://your-bucket-domain.com\n\
|
||||||
|
" > /app/.env.example
|
||||||
|
|
||||||
# 确保entrypoint.sh可执行
|
# 确保entrypoint.sh可执行
|
||||||
RUN chmod +x /app/entrypoint.sh
|
RUN chmod +x /app/entrypoint.sh
|
||||||
|
|
||||||
# 安装Python依赖
|
|
||||||
RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt \
|
|
||||||
&& pip install -i https://mirrors.aliyun.com/pypi/simple/ uvicorn python-multipart python-dotenv
|
|
||||||
|
|
||||||
# 暴露端口
|
# 暴露端口
|
||||||
EXPOSE 8000
|
EXPOSE 8000
|
||||||
|
|
||||||
@ -53,4 +75,4 @@ EXPOSE 8000
|
|||||||
ENTRYPOINT ["/app/entrypoint.sh"]
|
ENTRYPOINT ["/app/entrypoint.sh"]
|
||||||
|
|
||||||
# 启动命令
|
# 启动命令
|
||||||
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--log-level", "info"]
|
||||||
@ -2,11 +2,18 @@ version: '3.8'
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
app:
|
app:
|
||||||
build: .
|
build:
|
||||||
|
context: .
|
||||||
|
args:
|
||||||
|
- DB_HOST=db
|
||||||
|
- DB_PORT=3306
|
||||||
|
- DB_USER=ai_user
|
||||||
|
- DB_PASSWORD=yourpassword
|
||||||
|
- DB_NAME=ai_dressing
|
||||||
container_name: ai-dressing-app
|
container_name: ai-dressing-app
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "9001:9001"
|
- "9001:8000"
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
# 环境变量可以覆盖.env文件中的值
|
# 环境变量可以覆盖.env文件中的值
|
||||||
@ -16,15 +23,27 @@ services:
|
|||||||
- DB_USER=ai_user
|
- DB_USER=ai_user
|
||||||
- DB_PASSWORD=yourpassword
|
- DB_PASSWORD=yourpassword
|
||||||
- DB_NAME=ai_dressing
|
- DB_NAME=ai_dressing
|
||||||
- DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY}
|
# 这些环境变量会从宿主机的环境变量中读取,如果不存在则使用示例值
|
||||||
- QCLOUD_SECRET_ID=${QCLOUD_SECRET_ID}
|
- DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY:-your_dashscope_api_key}
|
||||||
- QCLOUD_SECRET_KEY=${QCLOUD_SECRET_KEY}
|
- QCLOUD_SECRET_ID=${QCLOUD_SECRET_ID:-your_qcloud_secret_id}
|
||||||
|
- QCLOUD_SECRET_KEY=${QCLOUD_SECRET_KEY:-your_qcloud_secret_key}
|
||||||
|
- QCLOUD_COS_REGION=${QCLOUD_COS_REGION:-ap-chengdu}
|
||||||
|
- QCLOUD_COS_BUCKET=${QCLOUD_COS_BUCKET:-your-bucket-name}
|
||||||
|
- QCLOUD_COS_DOMAIN=${QCLOUD_COS_DOMAIN:-https://your-bucket-domain.com}
|
||||||
|
- PYTHONPATH=/app
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/app
|
- ./.env:/app/.env:ro # 明确映射.env文件
|
||||||
|
# - ./app:/app/app # 开发时才使用,生产环境建议去掉
|
||||||
networks:
|
networks:
|
||||||
- ai-dressing-network
|
- ai-dressing-network
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: mysql:8.0
|
image: mysql:8.0
|
||||||
@ -43,6 +62,12 @@ services:
|
|||||||
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||||
networks:
|
networks:
|
||||||
- ai-dressing-network
|
- ai-dressing-network
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 30s
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
mysql-data:
|
mysql-data:
|
||||||
|
|||||||
@ -1,20 +1,52 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# 检查.env文件是否存在
|
echo "============= 容器启动 ============="
|
||||||
|
echo "当前工作目录: $(pwd)"
|
||||||
|
echo "目录内容:"
|
||||||
|
ls -la
|
||||||
|
|
||||||
|
# 优先级1: 尝试从.env文件加载
|
||||||
if [ -f .env ]; then
|
if [ -f .env ]; then
|
||||||
echo "找到.env文件,加载环境变量..."
|
echo "找到.env文件,加载环境变量..."
|
||||||
|
# 打印文件内容(隐藏敏感信息)
|
||||||
|
echo "文件内容预览(敏感信息已隐藏):"
|
||||||
|
grep -v "KEY\|PASSWORD\|SECRET" .env | cat -n
|
||||||
|
|
||||||
# 从.env文件导出所有环境变量
|
# 从.env文件导出所有环境变量
|
||||||
export $(grep -v '^#' .env | xargs)
|
export $(grep -v '^#' .env | xargs)
|
||||||
|
echo "已从.env加载环境变量"
|
||||||
|
elif [ -f /app/.env ]; then
|
||||||
|
echo "在/app目录下找到.env文件,加载环境变量..."
|
||||||
|
export $(grep -v '^#' /app/.env | xargs)
|
||||||
|
echo "已从/app/.env加载环境变量"
|
||||||
|
elif [ -f .env.docker ]; then
|
||||||
|
echo "找到.env.docker文件,加载环境变量..."
|
||||||
|
export $(grep -v '^#' .env.docker | xargs)
|
||||||
|
echo "已从.env.docker加载环境变量"
|
||||||
else
|
else
|
||||||
echo ".env文件不存在,使用默认环境变量..."
|
echo ".env文件不存在,环境变量将从Docker环境中读取..."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 打印重要环境变量,确认已加载(不打印敏感信息)
|
# 打印环境变量,确认是否已正确加载
|
||||||
echo "环境变量检查:"
|
echo "============= 环境变量检查 ============="
|
||||||
echo "DB_HOST: $DB_HOST"
|
echo "DB_HOST: $DB_HOST"
|
||||||
|
echo "DB_PORT: $DB_PORT"
|
||||||
|
echo "DB_USER: $DB_USER"
|
||||||
echo "DB_NAME: $DB_NAME"
|
echo "DB_NAME: $DB_NAME"
|
||||||
echo "ENVIRONMENT: $ENVIRONMENT"
|
echo "DASHSCOPE_API_KEY是否存在: $(if [ -n "$DASHSCOPE_API_KEY" ]; then echo "是"; else echo "否"; fi)"
|
||||||
|
echo "QCLOUD_SECRET_ID是否存在: $(if [ -n "$QCLOUD_SECRET_ID" ]; then echo "是"; else echo "否"; fi)"
|
||||||
|
|
||||||
|
# 确保Python能找到应用
|
||||||
|
export PYTHONPATH=/app:$PYTHONPATH
|
||||||
|
|
||||||
|
echo "============= Python环境 ============="
|
||||||
|
echo "Python版本: $(python --version)"
|
||||||
|
echo "Python路径: $(which python)"
|
||||||
|
echo "PYTHONPATH: $PYTHONPATH"
|
||||||
|
|
||||||
|
echo "============= 启动应用 ============="
|
||||||
|
echo "执行命令: $@"
|
||||||
|
|
||||||
# 执行原始的命令
|
# 执行原始的命令
|
||||||
exec "$@"
|
exec "$@"
|
||||||
Loading…
Reference in New Issue
Block a user