diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9a523c2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,60 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +*.egg-info/ +dist/ +build/ +*.egg + +# Virtual Environment +venv/ +env/ +ENV/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db + +# Git +.git/ +.gitignore + +# Database +*.db +*.sqlite +*.sqlite3 +instance/ + +# Logs +*.log + +# Environment variables +.env +.env.local + +# Node modules (if any) +node_modules/ + +# Cache +.cache/ +.pytest_cache/ + +# Documentation +README.md +docs/ + +# Start script (not needed in container) +start.py +main.py +pyproject.toml +.python-version diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..cc8160d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +# 使用官方Python运行时作为基础镜像 +FROM python:3.11-slim + +# 设置工作目录 +WORKDIR /app + +# 设置环境变量 +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + FLASK_APP=app.py + +# 安装系统依赖 +RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + && rm -rf /var/lib/apt/lists/* + +# 复制依赖文件 +COPY backend/requirements.txt /app/backend/requirements.txt + +# 安装Python依赖 +RUN pip install --no-cache-dir --upgrade pip && \ + pip install --no-cache-dir -r /app/backend/requirements.txt + +# 复制项目文件 +COPY backend/ /app/backend/ +COPY frontend/ /app/frontend/ + +# 创建数据目录 +RUN mkdir -p /app/data + +# 暴露端口 +EXPOSE 5000 + +# 设置工作目录为backend +WORKDIR /app/backend + +# 启动应用 +CMD ["python", "app.py"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b0448fc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,31 @@ +version: '3.8' + +services: + # Flask应用服务 + app: + build: + context: . + dockerfile: Dockerfile + container_name: worklist-app + restart: unless-stopped + ports: + - "5000:5000" + environment: + - FLASK_APP=app.py + - FLASK_ENV=production + - PYTHONUNBUFFERED=1 + - SECRET_KEY=${SECRET_KEY:-your-secret-key-here} + - OPENAI_API_KEY=${OPENAI_API_KEY:-} + volumes: + # 持久化数据库 + - ./data:/app/data + - ./backend/instance:/app/backend/instance + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:5000/"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + +volumes: + data: