MVTON / Dockerfile
tejani's picture
Upload 2 files
d2ac649 verified
# 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"