# Use the official Alpine image as the base FROM docker.io/library/alpine:latest@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715 # Switch to root user to install dependencies USER root # Install Tor, Nyx, Python, and pip RUN apk update && apk upgrade && \ apk add tor nyx python3 py3-pip && \ rm -rf /var/cache/apk/* # Create a virtual environment and install Python dependencies RUN python3 -m venv /venv ENV PATH="/venv/bin:$PATH" RUN pip install --no-cache-dir fastapi uvicorn requests pysocks # Create Tor data directory and set permissions RUN mkdir -p /var/lib/tor && \ chown 1000:1000 /var/lib/tor && \ chmod 700 /var/lib/tor # Configure torrc RUN echo "SocksPort 0.0.0.0:9050" >> /etc/tor/torrc && \ echo "ControlPort 9051" >> /etc/tor/torrc && \ echo "CookieAuthentication 1" >> /etc/tor/torrc && \ echo "Log notice stdout" >> /etc/tor/torrc && \ echo "DataDirectory /var/lib/tor" >> /etc/tor/torrc # Set permissions for torrc RUN chmod 644 /etc/tor/torrc && chown 1000:1000 /etc/tor/torrc # Create app directory and copy the FastAPI app RUN mkdir -p /app COPY app.py /app/app.py # Verify app.py exists, is readable, and contains the expected content RUN ls -la /app && \ cat /app/app.py && \ chmod 644 /app/app.py && \ chown 1000:1000 /app/app.py # Expose ports (9050 for Tor SOCKS, 7860 for FastAPI) EXPOSE 9050 7860 # Switch to non-root user (Hugging Face runs as UID 1000) USER 1000 # Start Tor in the background and run FastAPI CMD sh -c "tor -f /etc/tor/torrc & sleep 10 && /venv/bin/uvicorn --app-dir /app app:app --host 0.0.0.0 --port 7860"