Перевод checker и docs на контейнеры

This commit is contained in:
2025-11-23 01:40:42 +08:00
parent bdbd9f9e57
commit 448eada6e9
5 changed files with 58 additions and 99 deletions

View File

@@ -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) > Исходный код: [git.axenov.dev/IPTV](https://git.axenov.dev/IPTV)
> Telegram-канал: [@iptv_aggregator](https://t.me/iptv_aggregator) > Telegram-канал: [@iptv_aggregator](https://t.me/iptv_aggregator)
> Обсуждение: [@iptv_aggregator_chat](https://t.me/iptv_aggregator_chat) > Обсуждение: [@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` -- окружение для развёртывания: это имена директорий и/или префиксы имён конфигов, которые будут проброшены в контейнеры; * `IPTV_ENV` окружение для развёртывания: это имена директорий и/или префиксы имён конфигов, которые будут проброшены в контейнеры;
* `KEYDB_UID`, `KEYDB_GID` -- ID пользователя/группы для разрешения владельца файлов и директорий keydb; * `KEYDB_UID`, `KEYDB_GID` ID пользователя/группы для разрешения владельца файлов и директорий keydb;
* `KEYDB_PORT` -- порт keydb, который будет проброшен на хост. * `KEYDB_PORT` порт keydb, который будет проброшен на хост.
* `KEYDB_USERNAME`, `KEYDB_PASSWORD` -- реквизиты доступа к keydb; * `KEYDB_USERNAME`, `KEYDB_PASSWORD` реквизиты доступа к keydb;
* `CHECKER_DB` -- БД keydb для хранения кеша проверенных плейлистов; * `CHECKER_DB` БД keydb для хранения кеша проверенных плейлистов;
* `CHECKER_TTL` -- время жизни кеша проверенных плейлистов; * `CHECKER_TTL` время жизни кеша проверенных плейлистов;
* `CHECKER_WAIT` -- кол-во секунд между запусками iptvc; * `CHECKER_WAIT` кол-во секунд между запусками iptvc;
* `CHECKER_INIFILE` -- путь к файлу списка плейлистов внутри контейнера; * `CHECKER_INIFILE` путь к файлу списка плейлистов внутри контейнера;
* `CHECKER_TAGFILE` -- путь к файлу списка тегов внутри контейнера. * `CHECKER_TAGFILE` путь к файлу списка тегов внутри контейнера.
## Reverse-proxy ## Reverse-proxy

View File

@@ -1,5 +1,7 @@
name: m3u-su
networks: networks:
iptv: m3u-su-network:
driver: bridge driver: bridge
x-common-attributes: &common-attributes x-common-attributes: &common-attributes
@@ -12,14 +14,28 @@ x-common-attributes: &common-attributes
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro - /etc/timezone:/etc/timezone:ro
networks: networks:
- iptv - m3u-su-network
services: 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: keydb:
<<: *common-attributes <<: *common-attributes
container_name: iptv-keydb container_name: m3u-su-keydb
image: eqalpha/keydb:latest image: eqalpha/keydb:latest
pull_policy: always
user: ${KEYDB_UID}:${KEYDB_GID} user: ${KEYDB_UID}:${KEYDB_GID}
entrypoint: ["sh", "/entrypoint.sh"] entrypoint: ["sh", "/entrypoint.sh"]
volumes: volumes:
@@ -31,11 +47,12 @@ services:
web: web:
<<: *common-attributes <<: *common-attributes
container_name: iptv-web container_name: m3u-su-web
build: build:
context: .
dockerfile: dockerfile.web.${IPTV_ENV} dockerfile: dockerfile.web.${IPTV_ENV}
environment: environment:
- PHP_IDE_CONFIG=serverName=iptv.local - PHP_IDE_CONFIG=serverName=m3u-su.local
volumes: volumes:
- ./docker/php/${IPTV_ENV}/www.conf:/usr/local/etc/php-fpm.d/www.conf:ro - ./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 - ./docker/php/${IPTV_ENV}/php.ini:/usr/local/etc/php/conf.d/php.ini:ro
@@ -47,41 +64,26 @@ services:
checker: checker:
<<: *common-attributes <<: *common-attributes
container_name: iptv-checker container_name: m3u-su-checker
build: image: git.axenov.dev/iptv/iptvc:latest
dockerfile: ./dockerfile.checker pull_policy: always
command: ["check", "--repeat", "0", "--every", "${CHECKER_WAIT:-60}"]
environment: environment:
- CACHE_ENABLED=true - CACHE_ENABLED=true
# - CACHE_HOST=localhost - CACHE_HOST=m3u-su-keydb
- CACHE_HOST=iptv-keydb
- CACHE_PORT=${KEYDB_PORT:-6379} - CACHE_PORT=${KEYDB_PORT:-6379}
- CACHE_USERNAME=${KEYDB_USERNAME} - CACHE_USERNAME=${KEYDB_USERNAME}
- CACHE_PASSWORD=${KEYDB_PASSWORD} - CACHE_PASSWORD=${KEYDB_PASSWORD}
- CACHE_DB=${CHECKER_DB:-0} - CACHE_DB=${CHECKER_DB:-0}
- CACHE_TTL=${CHECKER_TTL:-1800} - 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: volumes:
- ./docker/checker/entrypoint.sh:/entrypoint.sh - ./playlists/playlists.ini:/app/playlists.ini
- ./iptvc/:/app/ - ./playlists/channels.json:/app/channels.json
- ./playlists/playlists.ini:${CHECKER_INIFILE:-/app/playlists.ini}
- ./playlists/channels.json:${CHECKER_TAGFILE:-/app/channels.json}
depends_on: depends_on:
- keydb - keydb
nginx: docs:
<<: *common-attributes <<: *common-attributes
container_name: iptv-nginx container_name: m3u-su-docs
image: nginx:latest image: git.axenov.dev/iptv/m3u-su-docs:latest
volumes: pull_policy: always
- ./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

View File

@@ -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

View File

@@ -1,5 +1,5 @@
server { server {
server_name iptv.local; server_name m3u-su.local;
listen 80; listen 80;
index index.html index.php; index index.html index.php;
# access_log /var/log/nginx/access.log; # access_log /var/log/nginx/access.log;
@@ -22,14 +22,14 @@ server {
} }
location ^~ /docs/ { location ^~ /docs/ {
alias /usr/share/nginx/html/doc-files/; proxy_pass http://docs:80/;
index index.html; proxy_set_header Host $host;
# access_log /var/log/nginx/docs_access.log; proxy_set_header X-Real-IP $remote_addr;
error_log /var/log/nginx/docs_error.log warn; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location ~* \.(?:js|css|png|jpg|jpeg|gif|ico|svg)$ { proxy_set_header X-Forwarded-Proto $scheme;
expires 1y; proxy_read_timeout 300;
add_header Cache-Control "public"; proxy_connect_timeout 300;
} proxy_send_timeout 300;
} }
location / { location / {
@@ -48,6 +48,8 @@ server {
fastcgi_hide_header X-Powered-By; fastcgi_hide_header X-Powered-By;
fastcgi_read_timeout 300; fastcgi_read_timeout 300;
proxy_read_timeout 300; proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
include fastcgi_params; include fastcgi_params;
location ~* \.(jpg|jpeg|gif|css|png|ttf|woff|svg|js|ico)$ { location ~* \.(jpg|jpeg|gif|css|png|ttf|woff|svg|js|ico)$ {
access_log off; access_log off;

View File

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