Spaces:
Runtime error
Runtime error
Update Dockerfile
Browse files- Dockerfile +117 -115
Dockerfile
CHANGED
|
@@ -1,116 +1,118 @@
|
|
| 1 |
-
# Dockerfile
|
| 2 |
-
|
| 3 |
-
#ARG PROXY_ADDR="http://host.docker.internal:7890" Linxux 下使用 host.docker.internal 可能会有问题,建议使用实际的代理地址
|
| 4 |
-
FROM python:3.10-slim-bookworm AS builder
|
| 5 |
-
|
| 6 |
-
ARG DEBIAN_FRONTEND=noninteractive
|
| 7 |
-
ARG PROXY_ADDR
|
| 8 |
-
|
| 9 |
-
RUN if [ -n "$PROXY_ADDR" ]; then \
|
| 10 |
-
printf 'Acquire::http::Proxy "%s";\nAcquire::https::Proxy "%s";\n' "$PROXY_ADDR" "$PROXY_ADDR" > /etc/apt/apt.conf.d/99proxy; \
|
| 11 |
-
fi && \
|
| 12 |
-
apt-get update && \
|
| 13 |
-
apt-get install -y --no-install-recommends curl \
|
| 14 |
-
&& apt-get clean && rm -rf /var/lib/apt/lists/* && \
|
| 15 |
-
if [ -n "$PROXY_ADDR" ]; then rm -f /etc/apt/apt.conf.d/99proxy; fi
|
| 16 |
-
|
| 17 |
-
ENV HTTP_PROXY=${PROXY_ADDR}
|
| 18 |
-
ENV HTTPS_PROXY=${PROXY_ADDR}
|
| 19 |
-
|
| 20 |
-
ENV POETRY_HOME="/opt/poetry"
|
| 21 |
-
ENV POETRY_VERSION=1.8.3
|
| 22 |
-
RUN curl -sSL https://install.python-poetry.org | python3 - --version ${POETRY_VERSION}
|
| 23 |
-
ENV PATH="${POETRY_HOME}/bin:${PATH}"
|
| 24 |
-
|
| 25 |
-
WORKDIR /app_builder
|
| 26 |
-
COPY pyproject.toml poetry.lock ./
|
| 27 |
-
RUN poetry config virtualenvs.create false --local && \
|
| 28 |
-
poetry install --no-root --no-dev --no-interaction --no-ansi
|
| 29 |
-
|
| 30 |
-
FROM python:3.10-slim-bookworm
|
| 31 |
-
|
| 32 |
-
ARG DEBIAN_FRONTEND=noninteractive
|
| 33 |
-
ARG PROXY_ADDR
|
| 34 |
-
|
| 35 |
-
ENV HTTP_PROXY=${PROXY_ADDR}
|
| 36 |
-
ENV HTTPS_PROXY=${PROXY_ADDR}
|
| 37 |
-
|
| 38 |
-
# 步骤 1: 安装所有系统依赖。
|
| 39 |
-
# Playwright 的依赖也在这里一并安装。
|
| 40 |
-
RUN \
|
| 41 |
-
if [ -n "$PROXY_ADDR" ]; then \
|
| 42 |
-
printf 'Acquire::http::Proxy "%s";\nAcquire::https::Proxy "%s";\n' "$PROXY_ADDR" "$PROXY_ADDR" > /etc/apt/apt.conf.d/99proxy; \
|
| 43 |
-
fi && \
|
| 44 |
-
apt-get update && \
|
| 45 |
-
apt-get install -y --no-install-recommends \
|
| 46 |
-
libatk1.0-0 libatk-bridge2.0-0 libcups2 libdbus-1-3 libdrm2 libgbm1 libgtk-3-0 libnspr4 libnss3 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxrandr2 libxrender1 libxtst6 ca-certificates fonts-liberation libasound2 libpangocairo-1.0-0 libpango-1.0-0 libu2f-udev \
|
| 47 |
-
supervisor curl \
|
| 48 |
-
&& \
|
| 49 |
-
# 清理工作
|
| 50 |
-
apt-get clean && \
|
| 51 |
-
rm -rf /var/lib/apt/lists/* && \
|
| 52 |
-
if [ -n "$PROXY_ADDR" ]; then rm -f /etc/apt/apt.conf.d/99proxy; fi
|
| 53 |
-
|
| 54 |
-
RUN groupadd -r appgroup && useradd -r -g appgroup -s /bin/bash -d /app appuser
|
| 55 |
-
|
| 56 |
-
WORKDIR /app
|
| 57 |
-
|
| 58 |
-
# 步骤 2: 复制 Python 包和可执行文件。
|
| 59 |
-
# 这是关键的顺序调整:在使用 playwright 之前先把它复制进来。
|
| 60 |
-
COPY --from=builder /usr/local/lib/python3.10/site-packages/ /usr/local/lib/python3.10/site-packages/
|
| 61 |
-
COPY --from=builder /usr/local/bin/ /usr/local/bin/
|
| 62 |
-
COPY --from=builder /opt/poetry/bin/poetry /usr/local/bin/poetry
|
| 63 |
-
|
| 64 |
-
# 复制应用代码
|
| 65 |
-
COPY . .
|
| 66 |
-
|
| 67 |
-
# 步骤 3: 现在 Python 模块已存在,可以安全地运行这些命令。
|
| 68 |
-
# 注意:我们不再需要 `playwright install-deps`,因为依赖已在上面的 apt-get 中安装。
|
| 69 |
-
RUN camoufox fetch && \
|
| 70 |
-
python -m playwright install firefox
|
| 71 |
-
|
| 72 |
-
# 创建目录和设置权限
|
| 73 |
-
RUN mkdir -p /app/logs && \
|
| 74 |
-
mkdir -p /app/auth_profiles/active && \
|
| 75 |
-
mkdir -p /app/auth_profiles/saved && \
|
| 76 |
-
mkdir -p /app/certs && \
|
| 77 |
-
mkdir -p /app/browser_utils/custom_scripts && \
|
| 78 |
-
mkdir -p /home/appuser/.cache/ms-playwright && \
|
| 79 |
-
mkdir -p /home/appuser/.mozilla && \
|
| 80 |
-
chown -R appuser:appgroup /app && \
|
| 81 |
-
chown -R appuser:appgroup /home/appuser
|
| 82 |
-
|
| 83 |
-
COPY supervisord.conf /etc/supervisor/conf.d/app.conf
|
| 84 |
-
|
| 85 |
-
# 修复 camoufox 缓存逻辑
|
| 86 |
-
RUN mkdir -p /var/cache/camoufox && \
|
| 87 |
-
if [ -d /root/.cache/camoufox ]; then cp -a /root/.cache/camoufox/* /var/cache/camoufox/; fi && \
|
| 88 |
-
mkdir -p /app/.cache && \
|
| 89 |
-
ln -s /var/cache/camoufox /app/.cache/camoufox
|
| 90 |
-
|
| 91 |
-
RUN python update_browserforge_data.py
|
| 92 |
-
|
| 93 |
-
# 清理代理环境变量
|
| 94 |
-
ENV HTTP_PROXY=""
|
| 95 |
-
ENV HTTPS_PROXY=""
|
| 96 |
-
|
| 97 |
-
EXPOSE 2048
|
| 98 |
-
EXPOSE 3120
|
| 99 |
-
|
| 100 |
-
USER appuser
|
| 101 |
-
ENV HOME=/app
|
| 102 |
-
ENV PLAYWRIGHT_BROWSERS_PATH=/home/appuser/.cache/ms-playwright
|
| 103 |
-
|
| 104 |
-
ENV PYTHONUNBUFFERED=1
|
| 105 |
-
|
| 106 |
-
ENV PORT=8000
|
| 107 |
-
ENV DEFAULT_FASTAPI_PORT=2048
|
| 108 |
-
ENV DEFAULT_CAMOUFOX_PORT=9222
|
| 109 |
-
ENV STREAM_PORT=3120
|
| 110 |
-
ENV SERVER_LOG_LEVEL=INFO
|
| 111 |
-
ENV DEBUG_LOGS_ENABLED=false
|
| 112 |
-
ENV AUTO_CONFIRM_LOGIN=true
|
| 113 |
-
ENV SERVER_PORT=2048
|
| 114 |
-
ENV INTERNAL_CAMOUFOX_PROXY=""
|
| 115 |
-
|
|
|
|
|
|
|
| 116 |
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/app.conf"]
|
|
|
|
| 1 |
+
# Dockerfile
|
| 2 |
+
|
| 3 |
+
#ARG PROXY_ADDR="http://host.docker.internal:7890" Linxux 下使用 host.docker.internal 可能会有问题,建议使用实际的代理地址
|
| 4 |
+
FROM python:3.10-slim-bookworm AS builder
|
| 5 |
+
|
| 6 |
+
ARG DEBIAN_FRONTEND=noninteractive
|
| 7 |
+
ARG PROXY_ADDR
|
| 8 |
+
|
| 9 |
+
RUN if [ -n "$PROXY_ADDR" ]; then \
|
| 10 |
+
printf 'Acquire::http::Proxy "%s";\nAcquire::https::Proxy "%s";\n' "$PROXY_ADDR" "$PROXY_ADDR" > /etc/apt/apt.conf.d/99proxy; \
|
| 11 |
+
fi && \
|
| 12 |
+
apt-get update && \
|
| 13 |
+
apt-get install -y --no-install-recommends curl \
|
| 14 |
+
&& apt-get clean && rm -rf /var/lib/apt/lists/* && \
|
| 15 |
+
if [ -n "$PROXY_ADDR" ]; then rm -f /etc/apt/apt.conf.d/99proxy; fi
|
| 16 |
+
|
| 17 |
+
ENV HTTP_PROXY=${PROXY_ADDR}
|
| 18 |
+
ENV HTTPS_PROXY=${PROXY_ADDR}
|
| 19 |
+
|
| 20 |
+
ENV POETRY_HOME="/opt/poetry"
|
| 21 |
+
ENV POETRY_VERSION=1.8.3
|
| 22 |
+
RUN curl -sSL https://install.python-poetry.org | python3 - --version ${POETRY_VERSION}
|
| 23 |
+
ENV PATH="${POETRY_HOME}/bin:${PATH}"
|
| 24 |
+
|
| 25 |
+
WORKDIR /app_builder
|
| 26 |
+
COPY pyproject.toml poetry.lock ./
|
| 27 |
+
RUN poetry config virtualenvs.create false --local && \
|
| 28 |
+
poetry install --no-root --no-dev --no-interaction --no-ansi
|
| 29 |
+
|
| 30 |
+
FROM python:3.10-slim-bookworm
|
| 31 |
+
|
| 32 |
+
ARG DEBIAN_FRONTEND=noninteractive
|
| 33 |
+
ARG PROXY_ADDR
|
| 34 |
+
|
| 35 |
+
ENV HTTP_PROXY=${PROXY_ADDR}
|
| 36 |
+
ENV HTTPS_PROXY=${PROXY_ADDR}
|
| 37 |
+
|
| 38 |
+
# 步骤 1: 安装所有系统依赖。
|
| 39 |
+
# Playwright 的依赖也在这里一并安装。
|
| 40 |
+
RUN \
|
| 41 |
+
if [ -n "$PROXY_ADDR" ]; then \
|
| 42 |
+
printf 'Acquire::http::Proxy "%s";\nAcquire::https::Proxy "%s";\n' "$PROXY_ADDR" "$PROXY_ADDR" > /etc/apt/apt.conf.d/99proxy; \
|
| 43 |
+
fi && \
|
| 44 |
+
apt-get update && \
|
| 45 |
+
apt-get install -y --no-install-recommends \
|
| 46 |
+
libatk1.0-0 libatk-bridge2.0-0 libcups2 libdbus-1-3 libdrm2 libgbm1 libgtk-3-0 libnspr4 libnss3 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxrandr2 libxrender1 libxtst6 ca-certificates fonts-liberation libasound2 libpangocairo-1.0-0 libpango-1.0-0 libu2f-udev \
|
| 47 |
+
supervisor curl \
|
| 48 |
+
&& \
|
| 49 |
+
# 清理工作
|
| 50 |
+
apt-get clean && \
|
| 51 |
+
rm -rf /var/lib/apt/lists/* && \
|
| 52 |
+
if [ -n "$PROXY_ADDR" ]; then rm -f /etc/apt/apt.conf.d/99proxy; fi
|
| 53 |
+
|
| 54 |
+
RUN groupadd -r appgroup && useradd -r -g appgroup -s /bin/bash -d /app appuser
|
| 55 |
+
|
| 56 |
+
WORKDIR /app
|
| 57 |
+
|
| 58 |
+
# 步骤 2: 复制 Python 包和可执行文件。
|
| 59 |
+
# 这是关键的顺序调整:在使用 playwright 之前先把它复制进来。
|
| 60 |
+
COPY --from=builder /usr/local/lib/python3.10/site-packages/ /usr/local/lib/python3.10/site-packages/
|
| 61 |
+
COPY --from=builder /usr/local/bin/ /usr/local/bin/
|
| 62 |
+
COPY --from=builder /opt/poetry/bin/poetry /usr/local/bin/poetry
|
| 63 |
+
|
| 64 |
+
# 复制应用代码
|
| 65 |
+
COPY . .
|
| 66 |
+
|
| 67 |
+
# 步骤 3: 现在 Python 模块已存在,可以安全地运行这些命令。
|
| 68 |
+
# 注意:我们不再需要 `playwright install-deps`,因为依赖已在上面的 apt-get 中安装。
|
| 69 |
+
RUN camoufox fetch && \
|
| 70 |
+
python -m playwright install firefox
|
| 71 |
+
|
| 72 |
+
# 创建目录和设置权限
|
| 73 |
+
RUN mkdir -p /app/logs && \
|
| 74 |
+
mkdir -p /app/auth_profiles/active && \
|
| 75 |
+
mkdir -p /app/auth_profiles/saved && \
|
| 76 |
+
mkdir -p /app/certs && \
|
| 77 |
+
mkdir -p /app/browser_utils/custom_scripts && \
|
| 78 |
+
mkdir -p /home/appuser/.cache/ms-playwright && \
|
| 79 |
+
mkdir -p /home/appuser/.mozilla && \
|
| 80 |
+
chown -R appuser:appgroup /app && \
|
| 81 |
+
chown -R appuser:appgroup /home/appuser
|
| 82 |
+
|
| 83 |
+
COPY supervisord.conf /etc/supervisor/conf.d/app.conf
|
| 84 |
+
|
| 85 |
+
# 修复 camoufox 缓存逻辑
|
| 86 |
+
RUN mkdir -p /var/cache/camoufox && \
|
| 87 |
+
if [ -d /root/.cache/camoufox ]; then cp -a /root/.cache/camoufox/* /var/cache/camoufox/; fi && \
|
| 88 |
+
mkdir -p /app/.cache && \
|
| 89 |
+
ln -s /var/cache/camoufox /app/.cache/camoufox
|
| 90 |
+
|
| 91 |
+
RUN python update_browserforge_data.py
|
| 92 |
+
|
| 93 |
+
# 清理代理环境变量
|
| 94 |
+
ENV HTTP_PROXY=""
|
| 95 |
+
ENV HTTPS_PROXY=""
|
| 96 |
+
|
| 97 |
+
EXPOSE 2048
|
| 98 |
+
EXPOSE 3120
|
| 99 |
+
|
| 100 |
+
USER appuser
|
| 101 |
+
ENV HOME=/app
|
| 102 |
+
ENV PLAYWRIGHT_BROWSERS_PATH=/home/appuser/.cache/ms-playwright
|
| 103 |
+
|
| 104 |
+
ENV PYTHONUNBUFFERED=1
|
| 105 |
+
|
| 106 |
+
ENV PORT=8000
|
| 107 |
+
ENV DEFAULT_FASTAPI_PORT=2048
|
| 108 |
+
ENV DEFAULT_CAMOUFOX_PORT=9222
|
| 109 |
+
ENV STREAM_PORT=3120
|
| 110 |
+
ENV SERVER_LOG_LEVEL=INFO
|
| 111 |
+
ENV DEBUG_LOGS_ENABLED=false
|
| 112 |
+
ENV AUTO_CONFIRM_LOGIN=true
|
| 113 |
+
ENV SERVER_PORT=2048
|
| 114 |
+
ENV INTERNAL_CAMOUFOX_PROXY=""
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
|
| 118 |
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/app.conf"]
|