From 857d62db28ac77f3f9fc43d36952aa8eb61cb096 Mon Sep 17 00:00:00 2001 From: dekzter Date: Mon, 3 Mar 2025 17:13:54 -0500 Subject: [PATCH] merged in main --- docker/Dockerfile | 46 +++++++++++++ docker/Dockerfile.alpine | 54 --------------- docker/DockerfileAIO | 68 ------------------- docker/docker-compose.aio.yml | 8 +-- docker/entrypoint.sh | 12 +--- .../src/components/tables/ChannelsTable.js | 4 +- 6 files changed, 53 insertions(+), 139 deletions(-) delete mode 100644 docker/Dockerfile.alpine delete mode 100755 docker/DockerfileAIO diff --git a/docker/Dockerfile b/docker/Dockerfile index ef9799e7..71958406 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,3 +1,44 @@ +FROM python:3.13-slim AS builder + +ENV PATH="/dispatcharrpy/bin:$PATH" \ + VIRTUAL_ENV=/dispatcharrpy \ + DJANGO_SETTINGS_MODULE=dispatcharr.settings \ + PYTHONUNBUFFERED=1 + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + curl \ + gcc \ + git \ + wget && \ + echo "=== setting up nodejs ===" && \ + curl -sL https://deb.nodesource.com/setup_23.x -o /tmp/nodesource_setup.sh && \ + bash /tmp/nodesource_setup.sh && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + nodejs && \ + python -m pip install virtualenv && \ + virtualenv /dispatcharrpy && \ + git clone https://github.com/Dispatcharr/Dispatcharr /app && \ + cd /app && \ + pip install --no-cache-dir -r requirements.txt && \ + pip install --no-cache-dir -r requirements-pytorch.txt && \ + pip install --no-cache-dir -r requirements-sentence-transformers.txt && \ + echo "installing sentence-transformers" && \ + pip install sentence-transformers==3.4.1 && \ + python manage.py collectstatic --noinput || true && \ + cd /app/frontend && \ + npm install && \ + npm run build && \ + find . -maxdepth 1 ! -name '.' ! -name 'build' -exec rm -rf '{}' \; && \ + echo "Aggressively remove build-only packages and caches" && \ + apt-get purge -y \ + curl \ + gcc \ + git \ + nodejs \ + wget + FROM python:3.13-slim ENV PATH="/dispatcharrpy/bin:$PATH" \ @@ -5,6 +46,10 @@ ENV PATH="/dispatcharrpy/bin:$PATH" \ DJANGO_SETTINGS_MODULE=dispatcharr.settings \ PYTHONUNBUFFERED=1 +# Copy the virtual environment and application from the builder stage +COPY --from=builder /dispatcharrpy /dispatcharrpy +COPY --from=builder /app /app + RUN apt-get update && \ apt-get install -y \ curl \ @@ -23,6 +68,7 @@ RUN \ curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg && \ chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg && \ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list && \ + cp /app/docker/nginx.conf /etc/nginx/sites-enabled/default && \ apt-get update && \ apt-get install -y redis diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine deleted file mode 100644 index 0b25212d..00000000 --- a/docker/Dockerfile.alpine +++ /dev/null @@ -1,54 +0,0 @@ -FROM alpine - -ENV PATH="/dispatcharrpy/bin:$PATH" \ - VIRTUAL_ENV=/dispatcharrpy \ - DJANGO_SETTINGS_MODULE=dispatcharr.settings \ - PYTHONUNBUFFERED=1 - -RUN apk add \ - python3 \ - python3-dev \ - gcc \ - musl-dev \ - linux-headers \ - py3-pip \ - ffmpeg \ - streamlink \ - vlc \ - libpq-dev \ - gcc \ - py3-virtualenv \ - uwsgi \ - uwsgi-python \ - nodejs \ - npm \ - git \ - redis - -RUN \ - mkdir /data && \ - virtualenv /dispatcharrpy && \ - git clone https://github.com/Dispatcharr/Dispatcharr /app && \ - cd /app && \ - /dispatcharrpy/bin/pip install --no-cache-dir -r requirements.txt && \ - cd /app/frontend && \ - npm install && \ - npm run build && \ - find . -maxdepth 1 ! -name '.' ! -name 'build' -exec rm -rf '{}' \; && \ - cd /app && \ - python manage.py collectstatic --noinput || true - -# Cleanup -RUN \ - apk del \ - nodejs \ - npm \ - git \ - gcc \ - musl-dev \ - python3-dev \ - linux-headers - -WORKDIR /app - -CMD ["/app/docker/entrypoint.aio.sh"] diff --git a/docker/DockerfileAIO b/docker/DockerfileAIO deleted file mode 100755 index eddba184..00000000 --- a/docker/DockerfileAIO +++ /dev/null @@ -1,68 +0,0 @@ -FROM python:3.10-slim - -ENV API_PORT=5656 - -# Add PostgreSQL repository -RUN apt-get update && apt-get install -y wget gnupg2 && \ - echo "deb http://apt.postgresql.org/pub/repos/apt/ bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \ - wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - - -# Install required packages -RUN apt-get update && apt-get install -y \ - ffmpeg \ - streamlink \ - vlc \ - libpq-dev \ - gcc \ - postgresql-14 \ - postgresql-contrib-14 \ - redis-server \ - npm \ - nodejs \ - && rm -rf /var/lib/apt/lists/* - - - -# Set the working directory -WORKDIR /app - -# Copy requirements.txt from the parent directory -COPY requirements.txt /app/ - -# Install Python dependencies -RUN pip install --no-cache-dir -r /app/requirements.txt - -# Copy the application source code from the parent directory -COPY . /app/ - -# Build frontend react -RUN cd /app/frontend && \ - npm install && \ - npm run build && \ - find . -maxdepth 1 ! -name '.' ! -name 'build' -exec rm -rf '{}' \; && \ - cd /app && \ - python manage.py collectstatic --noinput || true - -# Cleanup -RUN apt-get purge -y \ - nodejs \ - npm \ - gcc \ - && apt-get autoremove -y \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Set environment variables -ENV DJANGO_SETTINGS_MODULE=dispatcharr.settings -ENV PYTHONUNBUFFERED=1 -ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt - -# Copy the entrypoint script -COPY docker/entrypoint.sh /app/entrypoint.sh -RUN chmod +x /app/entrypoint.sh - -# Expose the port -EXPOSE 9191 - -# Command to run the startup script -CMD ["/app/entrypoint.sh"] diff --git a/docker/docker-compose.aio.yml b/docker/docker-compose.aio.yml index 65422811..4b50884b 100644 --- a/docker/docker-compose.aio.yml +++ b/docker/docker-compose.aio.yml @@ -8,12 +8,12 @@ services: ports: - 9191:9191 volumes: - - dispatcharr:/data + - /home/ghost/code/Dispatcharr/docker/entrypoint.sh:/app/docker/entrypoint.sh + # - dispatcharr_db:/app/data/db environment: - - DISPATHCARR_ENV=aio - - DB_ENGINE=sqlite + - DISPATCHARR_ENV=aio - REDIS_HOST=localhost - CELERY_BROKER_URL=redis://localhost:6379/0 volumes: - dispatcharr: + dispatcharr_db: diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 334eb608..0be3f429 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -15,13 +15,9 @@ export POSTGRES_HOST=${POSTGRES_HOST:-localhost} export POSTGRES_PORT=${POSTGRES_PORT:-5432} export PUID=${PUID:-1000} export PGID=${PGID:-1000} -export DJANGO_SUPERUSER_USERNAME=${DEFAULT_USERNAME:-admin} -export DJANGO_SUPERUSER_PASSWORD=${DEFAULT_PASSWORD:-admin} -export DJANGO_SUPERUSER_EMAIL=${DEFAULT_EMAIL:-admin@dispatcharr.local} export PGDATA=${PGDATA:-/app/data/db} export PG_BINDIR="/usr/lib/postgresql/14/bin" - # Echo environment variables for debugging echo_with_timestamp "POSTGRES_DB: $POSTGRES_DB" echo_with_timestamp "POSTGRES_USER: $POSTGRES_USER" @@ -117,13 +113,7 @@ echo_with_timestamp "Running Django commands..." python manage.py collectstatic --noinput || true python manage.py makemigrations --noinput || true python manage.py migrate --noinput || true -echo_with_timestamp "Checking if Django superuser exists..." -if ! python manage.py shell -c "from django.contrib.auth import get_user_model; exit(0) if get_user_model().objects.filter(username='${DJANGO_SUPERUSER_USERNAME}').exists() else exit(1)"; then - echo_with_timestamp "Superuser does not exist. Creating..." - python manage.py createsuperuser --noinput || true -else - echo_with_timestamp "Superuser already exists. Skipping creation." -fi +python manage.py collectstatic --noinput || true # Start Celery echo_with_timestamp "Starting Celery..." diff --git a/frontend/src/components/tables/ChannelsTable.js b/frontend/src/components/tables/ChannelsTable.js index b09d9566..61b90555 100644 --- a/frontend/src/components/tables/ChannelsTable.js +++ b/frontend/src/components/tables/ChannelsTable.js @@ -24,7 +24,7 @@ import { SwapVert as SwapVertIcon, LiveTv as LiveTvIcon, ContentCopy, - Tv as TvIcon, // <-- ADD THIS IMPORT + Tv as TvIcon, // <-- ADD THIS IMPORT } from '@mui/icons-material'; import API from '../../api'; import ChannelForm from '../forms/Channel'; @@ -104,7 +104,7 @@ const ChannelsTable = () => { }; function handleWatchStream(channelNumber) { - showVideo(`/output/stream/${channelNumber}/`); + showVideo(`http://192.168.1.151:5656/output/stream/${channelNumber}/`); } // (Optional) bulk delete, but your endpoint is @TODO