# --------------------------------------------------------------------------- # "THE GOD MONOLITH" - V11 (Full Stack: Rust + Chrome + Compilers) # --------------------------------------------------------------------------- FROM python:3.11-bookworm # 1. CRITICAL: Unlock Pip & Non-Interactive ENV PIP_BREAK_SYSTEM_PACKAGES=1 ENV DEBIAN_FRONTEND=noninteractive # 2. Install "The Kitchen Sink" # - cargo/pkg-config/libssl-dev: REQUIRED for AIOStreams (Rust/Crypto) # - chromium/driver: REQUIRED for FlareSolverr # - nginx/supervisor: Infrastructure USER root RUN apt-get update && apt-get install -y \ nginx-full \ build-essential \ python3-dev \ libffi-dev \ libssl-dev \ cargo \ pkg-config \ chromium \ chromium-driver \ supervisor \ curl \ wget \ git \ libicu-dev \ libsqlite3-0 \ socat \ xvfb \ && rm -rf /var/lib/apt/lists/* # 3. Environment Variables (Force FlareSolverr to use System Chrome) ENV CHROME_BIN=/usr/bin/chromium ENV CHROMIUM_DRIVER=/usr/bin/chromedriver ENV FLARESOLVERR_BROWSER_EXECUTABLE_PATH=/usr/bin/chromium ENV FLARESOLVERR_BROWSER_ARGS="--no-sandbox --disable-setuid-sandbox --disable-dev-shm-usage --disable-gpu" ENV PUID=1000 ENV PGID=1000 # 4. Install FlareSolverr WORKDIR /app RUN git clone https://github.com/FlareSolverr/FlareSolverr.git flaresolverr \ && cd flaresolverr \ && pip install --no-cache-dir -r requirements.txt # 5. Install AIOStreams (Now succeeds because 'cargo' is present) WORKDIR /app RUN git clone https://github.com/Viren070/AIOStreams.git aiostreams \ && cd aiostreams \ && pip install --no-cache-dir -r requirements.txt # 6. Install Prowlarr WORKDIR /app RUN curl -L -o Prowlarr.tar.gz 'https://prowlarr.servarr.com/v1/update/master/updatefile?os=linux&runtime=netcore&arch=x64' \ && tar -xvzf Prowlarr.tar.gz \ && rm Prowlarr.tar.gz # 7. Create Directories RUN mkdir -p /var/log/supervisor /var/lib/nginx/body /var/lib/nginx/fastcgi /var/lib/nginx/proxy /var/lib/nginx/scgi /var/lib/nginx/uwsgi /data/prowlarr /run /etc/nginx /etc/supervisor/conf.d # 8. NGINX CONFIG RUN cat <<'EOF' > /etc/nginx/nginx.conf worker_processes 1; daemon off; pid /run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; server { listen 7860; server_name localhost; # AIOStreams (Main) location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # Prowlarr (Backend) location /prowlarr { proxy_pass http://127.0.0.1:9696; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } } } EOF # 9. SUPERVISOR CONFIG RUN cat <<'EOF' > /etc/supervisor/conf.d/supervisord.conf [supervisord] nodaemon=true logfile=/var/log/supervisor/supervisord.log pidfile=/run/supervisord.pid [program:nginx] command=/usr/sbin/nginx autostart=true autorestart=true [program:flaresolverr] command=python3 /app/flaresolverr/src/flaresolverr.py directory=/app/flaresolverr environment=LOG_LEVEL="info",LOG_HTML="false",PORT="8191",HOST="0.0.0.0" autostart=true autorestart=true [program:aiostreams] command=python3 main.py directory=/app/aiostreams environment=PORT="3000",HOST="0.0.0.0" autostart=true autorestart=true [program:prowlarr] command=/app/Prowlarr/Prowlarr -nobrowser -data=/data/prowlarr directory=/app/Prowlarr environment=PROWLARR__GENERAL__URLBASE="/prowlarr" autostart=true autorestart=true EOF # 10. Fix Permissions RUN chown -R 1000:1000 /app /data /var/log/supervisor /var/lib/nginx /var/log/nginx /etc/nginx /run /etc/supervisor # 11. Launch USER 1000 EXPOSE 7860 CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]