# Инфраструктурный слой проекта iptv.axenov.dev
> **Адрес**: https://iptv.axenov.dev
> **FAQ**: https://iptv.axenov.dev/faq
> **Исходный код**: https://git.axenov.dev/IPTV
Содержит docker-окружение для запуска проекта iptv.axenov.dev.
## Использованный стек
* [docker compose](https://docs.docker.com/compose/)
* [php8.3-fpm](https://www.php.net/releases/8.3/ru.php)
* [nginx](https://nginx.org/ru/)
* [keydb](https://docs.keydb.dev/docs/)
* bash
## Установка и настройка
```
git clone https://git.axenov.dev/IPTV/docker.git iptv
cp .env.example .env
git clone https://git.axenov.dev/IPTV/svc-main.git
cp svc-main/.env.example svc-main/.env
docker exec -it iptv-php composer i
docker compose up -d --build
```
### Описание переменных окружения
* `IPTV_ENV` -- окружение для развёртывания: это имена директорий и/или префиксы имён конфигов, которые будут проброшены в контейнеры;
* `REDIS_UID`, `REDIS_GID` -- ID поьзователя/группы для разрешения владельца файлов и директорий keydb;
* `REDIS_PORT` -- порт keydb, который будет проброшен на хост.
### 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) для подробностей.