Compare commits

1 Commits

Author SHA1 Message Date
102c108074 WIP 2025-05-06 11:36:10 +08:00
14 changed files with 1571 additions and 73 deletions

14
.gitignore vendored
View File

@@ -1,9 +1,11 @@
/.idea /.idea/
/.vscode /.vscode/
downloaded/ /iptvc/
/svc-* /web/
/tools /playlists/
/tmp /tools/
/.profile/
/tmp/
*.log *.log
.env .env

View File

@@ -19,24 +19,23 @@
``` ```
git clone https://git.axenov.dev/IPTV/docker.git iptv git clone https://git.axenov.dev/IPTV/docker.git iptv
cp .env.example .env cp .env.example .env
git clone https://git.axenov.dev/IPTV/svc-main.git git clone https://git.axenov.dev/IPTV/web.git
cp svc-main/.env.example svc-main/.env cp web/.env.example web/.env
docker exec -it iptv-php composer i docker exec -it iptv-main composer i
docker compose up -d --build docker compose up -d --build
``` ```
### Описание переменных окружения ### Описание переменных окружения
* `IPTV_ENV` -- окружение для развёртывания: это имена директорий и/или префиксы имён конфигов, которые будут проброшены в контейнеры; * `IPTV_ENV` -- окружение для развёртывания: это имена директорий и/или префиксы имён конфигов, которые будут проброшены в контейнеры;
* `REDIS_UID`, `REDIS_GID` -- ID поьзователя/группы для разрешения владельца файлов и директорий keydb; * `REDIS_UID`, `REDIS_GID` -- ID пользователя/группы для разрешения владельца файлов и директорий keydb;
* `REDIS_PORT` -- порт keydb, который будет проброшен на хост. * `REDIS_PORT` -- порт keydb, который будет проброшен на хост.
### Reverse-proxy ### Reverse-proxy
На сервере опционально можно настроить реверс-прокси до контейнера веб-сервиса, например, чтобы настроить доступ по доменному имени, изменить порт, подключить SSL-сертификаты или др. На сервере опционально можно настроить реверс-прокси до контейнера веб-сервиса, например, чтобы настроить доступ по доменному имени, изменить порт, подключить SSL-сертификаты или др.
### Apache #### Apache
Если на сервере, на котором запускаются контейнеры, стоит apache2, то, чтобы использовать его как реверс-прокси, нужно: Если на сервере, на котором запускаются контейнеры, стоит apache2, то, чтобы использовать его как реверс-прокси, нужно:
@@ -85,7 +84,7 @@ $ # для подгрузки включенных модулей выполни
$ sudo systemctl restart apache2 $ sudo systemctl restart apache2
``` ```
### Nginx #### Nginx
``` ```
$ sudo nano /etc/nginx/sites-available/iptv.conf $ sudo nano /etc/nginx/sites-available/iptv.conf

View File

@@ -19,7 +19,8 @@ services:
keydb: keydb:
<<: *common-attributes <<: *common-attributes
container_name: iptv-keydb container_name: iptv-keydb
image: eqalpha/keydb:latest build:
dockerfile: docker/keydb/dockerfile
user: "${REDIS_UID}:${REDIS_GID}" user: "${REDIS_UID}:${REDIS_GID}"
volumes: volumes:
- ./docker/keydb/keydb.conf:/etc/keydb/keydb.conf - ./docker/keydb/keydb.conf:/etc/keydb/keydb.conf
@@ -28,32 +29,50 @@ services:
ports: ports:
- "${REDIS_PORT:-6379}:6379" - "${REDIS_PORT:-6379}:6379"
php: php-main:
<<: *common-attributes <<: *common-attributes
container_name: iptv-php container_name: iptv-main
environment: environment:
- PHP_IDE_CONFIG=serverName=iptv.local - PHP_IDE_CONFIG=serverName=iptv.local
build: build:
dockerfile: docker/php/${IPTV_ENV}/dockerfile dockerfile: docker/php/${IPTV_ENV}/dockerfile.main
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
- ./log/php:/var/log/php:rw - ./log/php:/var/log/php:rw
- ./svc-main:/var/www:rw - ./web:/var/www:rw
depends_on:
- keydb
php-cron:
<<: *common-attributes
container_name: iptv-cron
environment:
- PHP_IDE_CONFIG=serverName=iptv.local
build:
dockerfile: docker/php/${IPTV_ENV}/dockerfile.cron
volumes:
- ./docker/php/${IPTV_ENV}/cron_entrypoint.sh:/entrypoint.sh
- ./docker/php/${IPTV_ENV}/cron_jobs:/etc/cron.d/iptv_jobs
- ./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
- ./log/php:/var/log/php:rw
- ./web:/var/www:rw
depends_on: depends_on:
- keydb - keydb
nginx: nginx:
<<: *common-attributes <<: *common-attributes
container_name: iptv-nginx container_name: iptv-nginx
image: nginx:latest build:
dockerfile: docker/nginx/dockerfile
volumes: volumes:
- ./docker/nginx/vhost.conf:/etc/nginx/conf.d/default.conf:ro - ./docker/nginx/vhost.conf:/etc/nginx/conf.d/default.conf:ro
- ./log/nginx:/var/log/nginx:rw - ./log/nginx:/var/log/nginx:rw
- ./svc-main:/var/www:ro - ./web:/var/www:ro
ports: ports:
- "8080:80" - "8080:80"
links: links:
- php - php-main
depends_on: depends_on:
- php - php-main

1
docker/keydb/dockerfile Normal file
View File

@@ -0,0 +1 @@
FROM eqalpha/keydb:latest AS iptv-keydb

1
docker/nginx/dockerfile Normal file
View File

@@ -0,0 +1 @@
FROM nginx:latest AS iptv-nginx

View File

@@ -20,7 +20,7 @@ server {
} }
location ~ \.php$ { location ~ \.php$ {
try_files $uri /index.php =404; try_files $uri /index.php =404;
fastcgi_pass php:9000; fastcgi_pass php-main:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php; fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

View File

@@ -0,0 +1,17 @@
#!/bin/bash
echo "Current pwd: $(pwd)"
for file in "/etc/cron.d/iptv_jobs" "/var/www/iptv-cli"; do
if [ ! -f "$file" ]; then echo "Not found: $file" && exit 1; fi
done;
echo "Importing crontab /etc/cron.d/iptv_jobs:"
echo "======================="
cat /etc/cron.d/iptv_jobs
echo "======================="
crontab -n /etc/cron.d/iptv_jobs || exit 2
echo "Running cron with /etc/cron.d/iptv_jobs"
crontab /etc/cron.d/iptv_jobs
touch /var/log/cron.log
cron -L 15 && tail -fn 1 /var/log/cron.log

5
docker/php/dev/cron_jobs Normal file
View File

@@ -0,0 +1,5 @@
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
PHP_IDE_CONFIG=serverName=iptv.local
* * * * * /var/www/iptv-cli check:ini --count 5 --order random

View File

@@ -1,21 +0,0 @@
FROM php:8.3-fpm
RUN apt update && \
apt upgrade -y && \
apt install -y git unzip 7zip
# https://pecl.php.net/package/xdebug
# https://pecl.php.net/package/redis
RUN pecl channel-update pecl.php.net && \
pecl install xdebug-3.4.1 redis && \
docker-php-ext-enable redis && \
mkdir -p /var/run/php && \
mkdir -p /var/log/php && \
chmod -R 777 /var/log/php
COPY --from=composer /usr/bin/composer /usr/local/bin/composer
EXPOSE 9000
WORKDIR /var/www
CMD composer install
ENTRYPOINT php-fpm

View File

@@ -0,0 +1,44 @@
FROM php:8.4-fpm AS iptv-img-base
RUN apt update && \
apt upgrade -y && \
apt install -y \
git \
unzip \
7zip \
cron \
zlib1g-dev \
imagemagick \
libpng-dev \
libjpeg-dev
# https://pecl.php.net/package/xdebug
# https://pecl.php.net/package/redis
RUN pecl channel-update pecl.php.net && \
pecl install \
xdebug-3.4.1 \
redis-6.1.0
RUN docker-php-ext-enable redis && \
docker-php-ext-configure gd --with-jpeg && \
docker-php-ext-install gd && \
docker-php-ext-configure pcntl --enable-pcntl && \
docker-php-ext-install pcntl
RUN mkdir -p /var/run/php && \
mkdir -p /var/log/php && \
chmod -R 777 /var/log/php
COPY --from=composer /usr/bin/composer /usr/local/bin/composer
RUN git config --global --add safe.directory /var/www
EXPOSE 9000
WORKDIR /var/www
CMD ["composer", "install"]
################################################################
FROM iptv-img-base AS iptv-img-cron
ENTRYPOINT ["/entrypoint.sh"]

View File

@@ -0,0 +1,44 @@
FROM php:8.4-fpm AS iptv-img-base
RUN apt update && \
apt upgrade -y && \
apt install -y \
git \
unzip \
7zip \
cron \
zlib1g-dev \
imagemagick \
libpng-dev \
libjpeg-dev
# https://pecl.php.net/package/xdebug
# https://pecl.php.net/package/redis
RUN pecl channel-update pecl.php.net && \
pecl install \
xdebug-3.4.1 \
redis-6.1.0
RUN docker-php-ext-enable xdebug redis && \
docker-php-ext-configure gd --with-jpeg && \
docker-php-ext-install gd && \
docker-php-ext-configure pcntl --enable-pcntl && \
docker-php-ext-install pcntl
RUN mkdir -p /var/run/php && \
mkdir -p /var/log/php && \
chmod -R 777 /var/log/php
COPY --from=composer /usr/bin/composer /usr/local/bin/composer
RUN git config --global --add safe.directory /var/www
EXPOSE 9000
WORKDIR /var/www
CMD ["composer", "install"]
################################################################
FROM iptv-img-base AS iptv-img-main
ENTRYPOINT ["php-fpm", "--nodaemonize"]

View File

@@ -1,5 +1,5 @@
[PHP] [PHP]
error_reporting = E_ALL error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
expose_php = Off expose_php = Off
file_uploads = Off file_uploads = Off
max_execution_time=-1 max_execution_time=-1

View File

@@ -11,11 +11,12 @@ pm.max_requests = 50
pm.status_path = /status pm.status_path = /status
ping.path = /ping ping.path = /ping
ping.response = pong ping.response = pong
access.log = /var/log/php/$pool.access.log access.log = /var/www/$pool.access.log
;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{milli}d %{kilo}M %C%%" ;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{milli}d %{kilo}M %C%%"
; chroot = /var/www ; chroot = /var/www
; chdir = /var/www ; chdir = /var/www
php_flag[display_errors] = on php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/php/$pool.error.log php_admin_value[error_log] = /var/www/$pool.error.log
php_admin_flag[log_errors] = on php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 512M php_admin_value[memory_limit] = 512M
php_admin_value[error_reporting] = E_ALL & ~E_NOTICE & ~E_DEPRECATED

1438
iptv

File diff suppressed because it is too large Load Diff