# 使用Python 3.12官方镜像 FROM python:3.12-slim # 设置环境变量 ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV DJANGO_SETTINGS_MODULE=green_classroom.settings # 设置工作目录 WORKDIR /app # 安装系统依赖 RUN apt-get update && apt-get install -y \ gcc \ g++ \ libpq-dev \ curl \ wget \ gnupg \ unzip \ && rm -rf /var/lib/apt/lists/* # 安装Chrome和ChromeDriver RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list \ && apt-get update \ && apt-get install -y google-chrome-stable \ && rm -rf /var/lib/apt/lists/* # 下载ChromeDriver RUN CHROME_VERSION=$(google-chrome --version | awk '{print $3}' | awk -F'.' '{print $1}') \ && wget -q "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_VERSION}" -O /tmp/chromedriver_version \ && CHROMEDRIVER_VERSION=$(cat /tmp/chromedriver_version) \ && wget -q "https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip" -O /tmp/chromedriver.zip \ && unzip /tmp/chromedriver.zip -d /usr/local/bin/ \ && rm /tmp/chromedriver.zip /tmp/chromedriver_version \ && chmod +x /usr/local/bin/chromedriver # 复制requirements.txt COPY requirements.txt . # 安装Python依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制项目文件 COPY . . # 创建必要的目录 RUN mkdir -p /app/data/logs /app/data/static /app/data/media # 收集静态文件 RUN python manage.py collectstatic --noinput # 暴露端口 EXPOSE 8000 # 创建启动脚本 RUN echo '#!/bin/bash\n\ if [ "$1" = "celery" ]; then\n\ exec celery -A green_classroom worker --loglevel=info\n\ elif [ "$1" = "celery-beat" ]; then\n\ exec celery -A green_classroom beat --loglevel=info\n\ elif [ "$1" = "flower" ]; then\n\ exec celery -A green_classroom flower\n\ elif [ "$1" = "gunicorn" ]; then\n\ exec gunicorn green_classroom.asgi:application -b 0.0.0.0:8000 --worker-class uvicorn.workers.UvicornWorker --workers 2\n\ else\n\ exec python manage.py runserver 0.0.0.0:8000\n\ fi' > /app/entrypoint.sh && chmod +x /app/entrypoint.sh # 设置入口点 ENTRYPOINT ["/app/entrypoint.sh"] CMD ["runserver"]