Files
green_classroom/Dockerfile
2025-08-17 02:52:45 +08:00

74 lines
2.3 KiB
Docker

# 使用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"]