diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..8859b20b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +FROM node:22-alpine +ARG GIT_REPO=https://github.com/iptv-org/epg.git +ARG GIT_BRANCH=master +ARG WORKDIR=/epg +ENV CRON_SCHEDULE="0 0 * * *" +ENV GZIP=false +ENV MAX_CONNECTIONS=1 +ENV DAYS= +RUN apk update \ + && apk upgrade --available \ + && apk add curl git tzdata bash \ + && npm install -g npm@latest \ + && npm install pm2 -g \ + && mkdir $(echo "${WORKDIR}") -p \ + && cd $WORKDIR \ + && git clone --depth 1 -b $(echo "${GIT_BRANCH} ${GIT_REPO}") . \ + && npm install \ + && mkdir /public +RUN apk del git curl \ + && rm -rf /var/cache/apk/* +COPY pm2.config.js $WORKDIR +WORKDIR $WORKDIR +EXPOSE 3000 +CMD [ "pm2-runtime", "pm2.config.js" ] \ No newline at end of file diff --git a/README.md b/README.md index 29050ffa..69fb91a8 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Tools for downloading the EPG (Electronic Program Guide) for thousands of TV cha - ✨ [Installation](#installation) - 🚀 [Usage](#usage) - 💫 [Update](#update) +- 🐋 [Docker](#docker) - 📺 [Playlists](#playlists) - 🗄 [Database](#database) - 👨‍💻 [API](#api) @@ -146,6 +147,62 @@ And then update all the dependencies: npm install ``` +## Docker + +### Build an image + +```sh +docker build -t iptv-org/epg --no-cache . +``` + +### Create and run container + +```sh +docker run -p 3000:3000 -v /path/to/channels.xml:/epg/channels.xml iptv-org/epg +``` + +By default, the guide will be downloaded every day at 00:00 UTC and saved to the `/epg/public/guide.xml` file inside the container. + +From the outside, it will be available at this link: + +``` +http://localhost:3000/guide.xml +``` + +or + +``` +http://:3000/guide.xml +``` + +### Environment Variables + +To fine-tune the execution, you can pass environment variables to the container as follows: + +```sh +docker run \ +-p 5000:3000 \ +-v /path/to/channels.xml:/epg/channels.xml \ +-e CRON_SCHEDULE="0 0,12 * * *" \ +-e MAX_CONNECTIONS=10 \ +-e GZIP=true \ +-e PROXY="socks5://127.0.0.1:1234" \ +-e DAYS=14 \ +-e TIMEOUT=5 \ +-e DELAY=2 \ +iptv-org/epg +``` + +| Variable | Description | +| --------------- | ------------------------------------------------------------------------------------------------------------------ | +| CRON_SCHEDULE | A [cron expression](https://crontab.guru/) describing the schedule of the guide loadings (default: "0 0 \* \* \*") | +| MAX_CONNECTIONS | Limit on the number of concurrent requests (default: 1) | +| GZIP | Boolean value indicating whether to create a compressed version of the guide (default: false) | +| PROXY | Use the specified proxy | +| DAYS | Number of days for which the guide will be loaded (defaults to the value from the site config) | +| TIMEOUT | Timeout for each request in milliseconds (default: 0) | +| DELAY | Delay between request in milliseconds (default: 0) | + ## Database All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.