update
This commit is contained in:
parent
3d837597ba
commit
012b0bbde3
36
Dockerfile
36
Dockerfile
@ -1,6 +1,9 @@
|
||||
# 使用Python 3.10作为基础镜像
|
||||
FROM python:3.10-slim
|
||||
|
||||
# 设置环境变量
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
ENV PYTHONDONTWRITEBYTECODE=1
|
||||
|
||||
# 设置时区
|
||||
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
@ -27,25 +30,44 @@ RUN apt-get update \
|
||||
default-libmysqlclient-dev \
|
||||
pkg-config \
|
||||
curl \
|
||||
nano \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 复制项目文件
|
||||
# 安装Python依赖(先于文件复制,利用缓存)
|
||||
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 *.py ./
|
||||
COPY .env* ./
|
||||
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可执行
|
||||
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
|
||||
|
||||
@ -53,4 +75,4 @@ EXPOSE 8000
|
||||
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:
|
||||
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
|
||||
restart: always
|
||||
ports:
|
||||
- "9001:9001"
|
||||
- "9001:8000"
|
||||
env_file:
|
||||
- ./.env
|
||||
# 环境变量可以覆盖.env文件中的值
|
||||
@ -16,15 +23,27 @@ services:
|
||||
- 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}
|
||||
# 这些环境变量会从宿主机的环境变量中读取,如果不存在则使用示例值
|
||||
- DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY:-your_dashscope_api_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:
|
||||
- db
|
||||
volumes:
|
||||
- ./:/app
|
||||
- ./.env:/app/.env:ro # 明确映射.env文件
|
||||
# - ./app:/app/app # 开发时才使用,生产环境建议去掉
|
||||
networks:
|
||||
- ai-dressing-network
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
|
||||
db:
|
||||
image: mysql:8.0
|
||||
@ -43,6 +62,12 @@ services:
|
||||
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||
networks:
|
||||
- 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:
|
||||
mysql-data:
|
||||
|
||||
@ -1,20 +1,52 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 检查.env文件是否存在
|
||||
echo "============= 容器启动 ============="
|
||||
echo "当前工作目录: $(pwd)"
|
||||
echo "目录内容:"
|
||||
ls -la
|
||||
|
||||
# 优先级1: 尝试从.env文件加载
|
||||
if [ -f .env ]; then
|
||||
echo "找到.env文件,加载环境变量..."
|
||||
# 打印文件内容(隐藏敏感信息)
|
||||
echo "文件内容预览(敏感信息已隐藏):"
|
||||
grep -v "KEY\|PASSWORD\|SECRET" .env | cat -n
|
||||
|
||||
# 从.env文件导出所有环境变量
|
||||
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
|
||||
echo ".env文件不存在,使用默认环境变量..."
|
||||
echo ".env文件不存在,环境变量将从Docker环境中读取..."
|
||||
fi
|
||||
|
||||
# 打印重要环境变量,确认已加载(不打印敏感信息)
|
||||
echo "环境变量检查:"
|
||||
# 打印环境变量,确认是否已正确加载
|
||||
echo "============= 环境变量检查 ============="
|
||||
echo "DB_HOST: $DB_HOST"
|
||||
echo "DB_PORT: $DB_PORT"
|
||||
echo "DB_USER: $DB_USER"
|
||||
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 "$@"
|
||||
Loading…
Reference in New Issue
Block a user