Prow_larr / Dockerfile
void0028's picture
Update Dockerfile
7b6cf5c verified
Raw History Blame Contribute Delete
4.26 kB
# ---------------------------------------------------------------------------
# "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"]