myircbot/Dockerfile
2025-05-29 22:58:53 +02:00

87 lines
2.4 KiB
Docker

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"]