g2 / Dockerfile
partybobo's picture
Upload 33 files
e2ee662 verified
Raw
History Blame Contribute Delete
2.39 kB
# --- Stage 1: Go Builder ---
# 使用官方的 Go 镜像作为构建环境
FROM golang:1.22-alpine AS builder-go
# 设置工作目录
WORKDIR /src
# 复制 Go 项目的模块文件并下载依赖
COPY golang/go.mod ./
RUN go mod download
# 复制 Go 项目的源代码
COPY golang/ .
# 编译 Go 应用。CGO_ENABLED=0 创建一个静态链接的二进制文件,更适合容器环境
# -o 指定输出文件名和路径
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /go_app_binary .
# --- Stage 2: Final Image ---
# 使用你原来的 Python 基础镜像
FROM python:3.11-slim
# 设置主工作目录
WORKDIR /app
# 安装 Supervisor 和你的 Python 依赖
# 将 supervisor 添加到 apt-get install 列表中
RUN apt-get update && apt-get install -y --no-install-recommends \
supervisor \
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 xvfb \
&& rm -rf /var/lib/apt/lists/*
# 从 Go 构建阶段复制编译好的二进制文件到最终镜像中
COPY --from=builder-go /go_app_binary .
# 复制 Python 项目的 requirements.txt 并安装依赖
COPY camoufox-py/requirements.txt ./camoufox-py/requirements.txt
RUN pip install --no-cache-dir -r ./camoufox-py/requirements.txt
# 运行 camoufox fetch
# 注意:如果 camoufox 需要在项目根目录运行,需要调整 WORKDIR 或命令路径
RUN camoufox fetch
# 复制 Python 项目的所有文件
COPY camoufox-py/ .
# 为了保持目录结构清晰,我们把它放到 camoufox-py 子目录中
# WORKDIR /app/camoufox-py
# COPY camoufox-py/ .
# WORKDIR /app
# 上面的注释是一种替代方案,但当前方案更简单
# 复制 Supervisor 的配置文件
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# 容器启动时,运行 Supervisor
# 它会根据 supervisord.conf 的配置来启动你的 Python 和 Go 应用
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
# 暴露端口:
# - 5345 供容器内的浏览器页面连接本地 WS(固定)
# - 7860 作为 Hugging Face Spaces 的默认外部端口(平台也会通过 $PORT 注入)
EXPOSE 5345 7860