# Инфраструктурный слой проекта iptv.axenov.dev Docker-окружение для работы проекта iptv.axenov.dev. > **Веб-сайт:** [iptv.axenov.dev](https://iptv.axenov.dev) > **Зеркало:** [m3u.su](https://m3u.su) > Исходный код: [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) ## Использованный стек * [docker compose](https://docs.docker.com/compose/) * [php8.4-fpm](https://www.php.net/releases/8.4/ru.php) * [nginx](https://nginx.org/ru/) * [keydb](https://docs.keydb.dev/docs/) * [iptvc](https://git.axenov.dev/IPTV/iptvc) * bash ## Установка и настройка ``` wget -O - https://git.axenov.dev/IPTV/iptv-docker/raw/branch/master/iptv | bash -s - init ``` ## Cкрипт [`iptv`](./iptv) Это инструмент, который позволяет быстро управлять локальной средой `lis-docker`: * инициализировать с нуля, как в примере выше; * управлять образами и контейнерами среды. > Управление средой не всегда удобно через команды git и docker, поэтому рекомендуется использовать `./iptv`. Набери `./iptv help` для справки по использованию. При доработке используй [линтер](https://www.shellcheck.net): `shellcheck -s bash iptv` ## Описание переменных окружения * `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 На сервере опционально можно настроить реверс-прокси до контейнера веб-сервиса, например, чтобы настроить доступ по доменному имени, изменить порт, подключить SSL-сертификаты или др. ### Apache Если на сервере, на котором запускаются контейнеры, стоит apache2, то, чтобы использовать его как реверс-прокси, нужно: ``` $ sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests $ sudo nano /etc/apache2/sites-available/iptv.conf ``` ``` # example.com заменить на свой адрес ServerName example.com # обязательно без SSL: ProxyPreserveHost On ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ # обязательно для SSL: # RewriteEngine on # RewriteCond %{SERVER_NAME} =example.com # RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] # обязательно для SSL: # # # ServerName example.com # ProxyPreserveHost On # ProxyPass / http://localhost:8080/ # ProxyPassReverse / http://localhost:8080/ # сертификаты можно получить через certbot # SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem # SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Include /etc/letsencrypt/options-ssl-apache.conf # # # Ctrl+O # Enter # Ctrl+X ``` ```shell $ sudo a2ensite iptv $ # для подгрузки включенных модулей выполнить именно restart, а не reload $ sudo systemctl restart apache2 ``` ### Nginx ``` $ sudo nano /etc/nginx/sites-available/iptv.conf ``` ``` # example.com заменить на свой адрес server { listen 80; listen [::]:80; server_name example.com; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { proxy_pass http://127.0.0.1:8080; } } # Ctrl+O # Enter # Ctrl+X ``` ```shell $ sudo ln -s /etc/nginx/sites-available/iptv.conf /etc/nginx/sites-enabled/iptv.conf $ sudo systemctl reload apache2 ``` ## Лицензия Исходный код распространяется на условиях лицензии MIT. См. файл [LICENSE](LICENSE) для подробностей.