115 lines
3.7 KiB
Docker

# Use ubuntu:22.04 as the base image
FROM ubuntu:22.04
# Set working directory
WORKDIR /app
# Set timezone and non-interactive frontend for apt
ARG DEBIAN_FRONTEND=noninteractive
ARG TZ=Europe/Minsk
ENV TZ=${TZ} LANG=C.UTF-8 LC_ALL=C.UTF-8
# Install necessary system packages for Playwright, GeoIP, Xvfb, and VNC
RUN apt-get update && apt-get install -y --no-install-recommends \
# From user example
vim lsof unzip wget ca-certificates \
# From existing Dockerfile, kept for completeness
libgeoip1 \
dbus-x11 \
xvfb \
xserver-common \
xauth \
x11-xkb-utils \
xfonts-base \
procps \
libgl1-mesa-dri \
x11vnc \
fluxbox \
libnss3 libnspr4 libdbus-1-3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2 \
libgtk-3-0 libx11-xcb1 fonts-liberation tzdata \
xauth util-linux x11-xserver-utils \
curl \
&& \
# Configure timezone
ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata && \
rm -rf /var/lib/apt/lists/*
# Add build-time argument for VNC password
ARG VNC_PASSWORD="vncpassword"
# Set up VNC password from build argument
RUN mkdir -p /root/.vnc && \
x11vnc -storepasswd "${VNC_PASSWORD}" /root/.vnc/passwd
# Install Miniconda
RUN wget --no-check-certificate https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && \
bash /tmp/miniconda.sh -b -p /opt/conda && \
rm /tmp/miniconda.sh
ENV PATH="/opt/conda/bin:$PATH"
# Create conda environment and configure it
RUN conda init bash && \
conda config --set always_yes yes && \
conda tos accept --override-channels --channel defaults && \
conda create -n camo python=3.11 -y
# Install Python dependencies in conda environment
COPY requirements.txt .
RUN conda run -n camo pip install --no-cache-dir -r requirements.txt
# Install Playwright browsers for version 1.49
RUN conda run -n camo playwright install --with-deps
# Pre-download and cache Camoufox to speed up startup
RUN conda run -n camo camoufox fetch
# Copy the server script into the image
COPY camoufox_server.py .
# Create directory for extensions and copy them
RUN mkdir /app/extensions
COPY google_sign_in_popup_blocker-1.0.2.xpi /app/extensions/
COPY spoof_timezone-0.3.4.xpi /app/extensions/
COPY youtube_ad_auto_skipper-0.6.0.xpi /app/extensions/
# Expose the default port Camoufox might use (adjust if needed)
# This is informational; the actual port mapping is in docker-compose.
EXPOSE 12345
# Expose VNC port
EXPOSE 5900
# Copy the wrapper script and make it executable
COPY start_camoufox.sh /app/
RUN chmod +x /app/start_camoufox.sh && \
sed -i 's/\r$//' /app/start_camoufox.sh
# Configure Xvfb resolution via build arguments
ARG RESOLUTION="1920x1080x24"
ENV XVFB_RES="${RESOLUTION}" \
DISPLAY=":99" \
XAUTHORITY="/tmp/.Xauth"
# Create Xauth setup (mcookie installed in previous apt-get)
RUN touch /tmp/.Xauth && \
chmod 644 /tmp/.Xauth && \
echo "#!/bin/bash" > /init_x11.sh && \
echo "xauth add \$DISPLAY . \$(mcookie)" >> /init_x11.sh && \
echo "xhost +local:" >> /init_x11.sh && \
chmod +x /init_x11.sh
# Proper ENTRYPOINT using shell form
#ENTRYPOINT ["/bin/bash", "-c", "source /init_x11.sh && exec xvfb-run --auto-servernum --server-args \"-screen 0 ${XVFB_RES} ${XVFB_ARGS}\" /app/start_camoufox.sh"]
ENTRYPOINT ["/bin/bash", "-c", "\
rm -f /tmp/.X99-lock && \
Xvfb :99 -screen 0 ${XVFB_RES} -ac & \
export DISPLAY=:99 && \
sleep 1 && \
touch /tmp/.Xauth && \
xauth add :99 . $(mcookie) && \
xhost +local: && \
source /init_x11.sh && \
exec /app/start_camoufox.sh \"$@\"", "camoufox-entrypoint"]