diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b0bff04 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,73 @@ +# 使用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"]