74 lines
2.3 KiB
Docker
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"]
|