- внедрён iptvc - скорректированы докерфайлы - php8.3 => 8.4 - переписан скрипт iptv - скорректирован композ и енвы
138 lines
5.4 KiB
Markdown
138 lines
5.4 KiB
Markdown
# Инфраструктурный слой проекта 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 заменить на свой адрес
|
||
|
||
<VirtualHost example.com:80>
|
||
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]
|
||
</VirtualHost>
|
||
|
||
# обязательно для SSL:
|
||
#<IfModule mod_ssl.c>
|
||
#<VirtualHost example.com:443>
|
||
# 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
|
||
#</VirtualHost>
|
||
#</IfModule>
|
||
|
||
# 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) для подробностей.
|