From 448eada6e9f47f4df0d01257f1e45e0c0d42af29 Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Sun, 23 Nov 2025 01:40:42 +0800 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20ch?= =?UTF-8?q?ecker=20=D0=B8=20docs=20=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=82?= =?UTF-8?q?=D0=B5=D0=B9=D0=BD=D0=B5=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 ++++++++-------- compose.yml | 64 +++++++++++++++++++----------------- docker/checker/entrypoint.sh | 30 ----------------- docker/nginx/vhost.conf | 20 ++++++----- dockerfile.checker | 15 --------- 5 files changed, 58 insertions(+), 99 deletions(-) delete mode 100755 docker/checker/entrypoint.sh delete mode 100644 dockerfile.checker diff --git a/README.md b/README.md index 2323792..6909d59 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -# Инфраструктурный слой проекта iptv.axenov.dev +# Инфраструктурный слой проекта m3u.su -Docker-окружение для работы проекта iptv.axenov.dev. +Docker-окружение для работы проекта m3u.su. -> **Веб-сайт:** [iptv.axenov.dev](https://iptv.axenov.dev) -> **Зеркало:** [m3u.su](https://m3u.su) +> **Веб-сайт:** [m3u.su](https://m3u.su) +> **Документация:** [m3u.su/docs](https://m3u.su/docs) > Исходный код: [git.axenov.dev/IPTV](https://git.axenov.dev/IPTV) > Telegram-канал: [@iptv_aggregator](https://t.me/iptv_aggregator) > Обсуждение: [@iptv_aggregator_chat](https://t.me/iptv_aggregator_chat) -> Дополнительные сведения: [git.axenov.dev/IPTV/.profile](https://git.axenov.dev/IPTV/.profile) +> Бот: [@iptv_aggregator_bot](https://t.me/iptv_aggregator_bot) ## Использованный стек @@ -38,15 +38,15 @@ wget -O - https://git.axenov.dev/IPTV/iptv-docker/raw/branch/master/iptv | bash ## Описание переменных окружения -* `IPTV_ENV` -- окружение для развёртывания: это имена директорий и/или префиксы имён конфигов, которые будут проброшены в контейнеры; -* `KEYDB_UID`, `KEYDB_GID` -- ID пользователя/группы для разрешения владельца файлов и директорий keydb; -* `KEYDB_PORT` -- порт keydb, который будет проброшен на хост. -* `KEYDB_USERNAME`, `KEYDB_PASSWORD` -- реквизиты доступа к keydb; -* `CHECKER_DB` -- БД keydb для хранения кеша проверенных плейлистов; -* `CHECKER_TTL` -- время жизни кеша проверенных плейлистов; -* `CHECKER_WAIT` -- кол-во секунд между запусками iptvc; -* `CHECKER_INIFILE` -- путь к файлу списка плейлистов внутри контейнера; -* `CHECKER_TAGFILE` -- путь к файлу списка тегов внутри контейнера. +* `IPTV_ENV` — окружение для развёртывания: это имена директорий и/или префиксы имён конфигов, которые будут проброшены в контейнеры; +* `KEYDB_UID`, `KEYDB_GID` — ID пользователя/группы для разрешения владельца файлов и директорий keydb; +* `KEYDB_PORT` — порт keydb, который будет проброшен на хост. +* `KEYDB_USERNAME`, `KEYDB_PASSWORD` — реквизиты доступа к keydb; +* `CHECKER_DB` — БД keydb для хранения кеша проверенных плейлистов; +* `CHECKER_TTL` — время жизни кеша проверенных плейлистов; +* `CHECKER_WAIT` — кол-во секунд между запусками iptvc; +* `CHECKER_INIFILE` — путь к файлу списка плейлистов внутри контейнера; +* `CHECKER_TAGFILE` — путь к файлу списка тегов внутри контейнера. ## Reverse-proxy diff --git a/compose.yml b/compose.yml index a2b630f..0778fad 100644 --- a/compose.yml +++ b/compose.yml @@ -1,5 +1,7 @@ +name: m3u-su + networks: - iptv: + m3u-su-network: driver: bridge x-common-attributes: &common-attributes @@ -12,14 +14,28 @@ x-common-attributes: &common-attributes - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: - - iptv + - m3u-su-network services: + nginx: + <<: *common-attributes + container_name: m3u-su-nginx + image: nginx:latest + pull_policy: always + volumes: + - ./docker/nginx/vhost.conf:/etc/nginx/conf.d/default.conf:ro + - ./log/nginx:/var/log/nginx:rw + - ./web:/var/www:ro + ports: + - 8080:80 + depends_on: + - web keydb: <<: *common-attributes - container_name: iptv-keydb + container_name: m3u-su-keydb image: eqalpha/keydb:latest + pull_policy: always user: ${KEYDB_UID}:${KEYDB_GID} entrypoint: ["sh", "/entrypoint.sh"] volumes: @@ -31,11 +47,12 @@ services: web: <<: *common-attributes - container_name: iptv-web + container_name: m3u-su-web build: + context: . dockerfile: dockerfile.web.${IPTV_ENV} environment: - - PHP_IDE_CONFIG=serverName=iptv.local + - PHP_IDE_CONFIG=serverName=m3u-su.local volumes: - ./docker/php/${IPTV_ENV}/www.conf:/usr/local/etc/php-fpm.d/www.conf:ro - ./docker/php/${IPTV_ENV}/php.ini:/usr/local/etc/php/conf.d/php.ini:ro @@ -47,41 +64,26 @@ services: checker: <<: *common-attributes - container_name: iptv-checker - build: - dockerfile: ./dockerfile.checker + container_name: m3u-su-checker + image: git.axenov.dev/iptv/iptvc:latest + pull_policy: always + command: ["check", "--repeat", "0", "--every", "${CHECKER_WAIT:-60}"] environment: - CACHE_ENABLED=true - # - CACHE_HOST=localhost - - CACHE_HOST=iptv-keydb + - CACHE_HOST=m3u-su-keydb - CACHE_PORT=${KEYDB_PORT:-6379} - CACHE_USERNAME=${KEYDB_USERNAME} - CACHE_PASSWORD=${KEYDB_PASSWORD} - CACHE_DB=${CHECKER_DB:-0} - CACHE_TTL=${CHECKER_TTL:-1800} - - CHECKER_WAIT=${CHECKER_WAIT:-60} - - CHECKER_INIFILE=${CHECKER_INIFILE:-/app/playlists.ini} - - CHECKER_TAGFILE=${CHECKER_TAGFILE:-/app/channels.json} volumes: - - ./docker/checker/entrypoint.sh:/entrypoint.sh - - ./iptvc/:/app/ - - ./playlists/playlists.ini:${CHECKER_INIFILE:-/app/playlists.ini} - - ./playlists/channels.json:${CHECKER_TAGFILE:-/app/channels.json} + - ./playlists/playlists.ini:/app/playlists.ini + - ./playlists/channels.json:/app/channels.json depends_on: - keydb - nginx: + docs: <<: *common-attributes - container_name: iptv-nginx - image: nginx:latest - volumes: - - ./docker/nginx/vhost.conf:/etc/nginx/conf.d/default.conf:ro - - ./log/nginx:/var/log/nginx:rw - - ./web:/var/www:ro - - ./docs/site:/usr/share/nginx/html/doc-files:ro - ports: - - 8080:80 - links: - - web - depends_on: - - web + container_name: m3u-su-docs + image: git.axenov.dev/iptv/m3u-su-docs:latest + pull_policy: always diff --git a/docker/checker/entrypoint.sh b/docker/checker/entrypoint.sh deleted file mode 100755 index 8067d3a..0000000 --- a/docker/checker/entrypoint.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -echo "CHECKER_WAIT=$CHECKER_WAIT" -echo "CHECKER_INIFILE=$CHECKER_INIFILE" -echo "CHECKER_TAGFILE=$CHECKER_TAGFILE" -binary="$PWD/bin/iptvc" - -if [ ! -f "$binary" ]; then - echo "Downloading latest iptvc..." - wget https://git.axenov.dev/IPTV/iptvc/releases/download/latest/linux_amd64.zip - [ ! -d "$PWD/bin" ] && mkdir "$PWD/bin" - unzip -o linux_amd64.zip -d "$PWD/bin" - rm -rf linux_amd64.zip -fi - -if [ ! -f "$binary" ]; then - echo "Not found: $binary" - exit 1 -fi - -$binary version - -args="check -i $CHECKER_INIFILE -t $CHECKER_TAGFILE" -while true; do - echo - echo "Running: $binary $args" - $binary $args - echo "Waiting $CHECKER_WAIT seconds" - sleep $CHECKER_WAIT -done diff --git a/docker/nginx/vhost.conf b/docker/nginx/vhost.conf index 8d0080d..b8c90a8 100644 --- a/docker/nginx/vhost.conf +++ b/docker/nginx/vhost.conf @@ -1,5 +1,5 @@ server { - server_name iptv.local; + server_name m3u-su.local; listen 80; index index.html index.php; # access_log /var/log/nginx/access.log; @@ -22,14 +22,14 @@ server { } location ^~ /docs/ { - alias /usr/share/nginx/html/doc-files/; - index index.html; - # access_log /var/log/nginx/docs_access.log; - error_log /var/log/nginx/docs_error.log warn; - location ~* \.(?:js|css|png|jpg|jpeg|gif|ico|svg)$ { - expires 1y; - add_header Cache-Control "public"; - } + proxy_pass http://docs:80/; + 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_read_timeout 300; + proxy_connect_timeout 300; + proxy_send_timeout 300; } location / { @@ -48,6 +48,8 @@ server { fastcgi_hide_header X-Powered-By; fastcgi_read_timeout 300; proxy_read_timeout 300; + proxy_connect_timeout 300; + proxy_send_timeout 300; include fastcgi_params; location ~* \.(jpg|jpeg|gif|css|png|ttf|woff|svg|js|ico)$ { access_log off; diff --git a/dockerfile.checker b/dockerfile.checker deleted file mode 100644 index f33ea93..0000000 --- a/dockerfile.checker +++ /dev/null @@ -1,15 +0,0 @@ -FROM alpine:3.21 AS iptvc-compiler - -RUN apk --no-cache add \ - bash \ - tzdata \ - go \ - make \ - libc6-compat - -RUN mkdir /app && \ - chmod 777 /app - -WORKDIR /app - -ENTRYPOINT ["/entrypoint.sh"]