FROM ubuntu:latest # Configurar el entorno para instalación sin interacción ENV DEBIAN_FRONTEND=noninteractive # Crear usuario y grupo icecast2 (sin privilegios) RUN useradd -m -d /home/icecast2 -s /bin/bash icecast2 # Instalar dependencias del sistema RUN apt update && apt install -y --no-install-recommends \ python3 python3-pip ffmpeg liquidsoap icecast2 socat curl gettext vim\ && rm -rf /var/lib/apt/lists/* # Descargar e instalar la última versión de yt-dlp manualmente RUN curl -L https://github.com/yt-dlp/yt-dlp/releases/download/2025.03.27/yt-dlp_linux -o /usr/local/bin/yt-dlp \ && chmod a+rx /usr/local/bin/yt-dlp # Crear carpetas necesarias y dar permisos adecuados RUN mkdir -p \ /config \ /var/lib/radio-data \ /usr/local/icecast/logs \ /app \ /var/log/liquidsoap \ /var/lib/bot \ && chown -R icecast2:icecast2 \ /config \ /var/lib/radio-data \ /usr/local/icecast/logs \ /app \ /var/log/liquidsoap \ /var/lib/bot \ && chmod -R 755 \ /config \ /var/lib/radio-data \ /usr/local/icecast/logs \ /app \ /var/log/liquidsoap \ /var/lib/bot RUN for f in /etc/icecast2/web/*.xsl; do \ realpath=$(realpath "$f"); \ dest="/usr/share/icecast2/web/$(basename "$f")"; \ if [ "$(realpath "$dest")" = "$realpath" ]; then \ echo "Skipping $f, already points to real file"; \ else \ cp "$realpath" "$dest"; \ fi; \ done && \ chmod -R a+rX /usr/share/icecast2/web RUN mkdir -p /var/lib/radio-data/music /var/lib/radio && \ ln -sf /var/lib/radio-data/music /var/lib/radio/music # Copiar y instalar dependencias de Python COPY requirements.txt /app/requirements.txt RUN pip install --no-cache-dir --break-system-packages -r /app/requirements.txt # Copiar configuraciones al contenedor COPY config/icecast.xml /config/icecast.xml COPY config/liquidsoap.liq /config/liquidsoap.liq COPY config/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh # Copiar el bot y sus plugins COPY bot.py /app/bot.py COPY plugins /app/plugins # Definir directorio de trabajo WORKDIR /app # Crear directorio para el socket y asignar permisos correctos RUN mkdir -p /run/liquidsoap && \ chown -R icecast2:icecast2 /run/liquidsoap && \ chmod 777 /run/liquidsoap # Cambiar a usuario sin privilegios USER icecast2 # Exponer puertos necesarios para Icecast EXPOSE 8000 # Ejecutar el entrypoint CMD ["sh", "/entrypoint.sh"]