improvements

This commit is contained in:
Zimovskii Anatolii 2022-11-14 22:12:31 +03:00
parent 03b3f8ed30
commit 165b38f95a
Signed by: stam
GPG Key ID: 9911D9EF664EEE14
126 changed files with 4509 additions and 216 deletions

View File

@ -0,0 +1,93 @@
name: EpicMorg EcoSystem Gitlab Runner Images
on:
# push:
# branches:
# - 'master'
schedule:
- cron: '4 5 * * 2,4,6'
jobs:
build-glr-main-images:
name: Build EpicMorg Gitlab Runner Main Images
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: Log into registry
run: echo "${{ secrets.DOCKER_SERVER_KEY }}" | docker login -u "${{ secrets.DOCKER_SERVER_LOGIN }}" --password-stdin
- name: Test Make
run: make
- name: "Build and Deploy Gitlab Runner Main Image:"
run: cd linux/ecosystem/gitlab/runner/latest && pwd && make build && make deploy
##################################################################################
build-glr-other-images:
name: Build EpicMorg Gitlab Runner Oter Images
runs-on: ubuntu-22.04
needs: build-tca-main-images
steps:
- uses: actions/checkout@v3
- name: Log into registry
run: echo "${{ secrets.DOCKER_SERVER_KEY }}" | docker login -u "${{ secrets.DOCKER_SERVER_LOGIN }}" --password-stdin
- name: Test Make
run: make
- name: "Build and Deploy Gitlab Runner amxX SDK Image:"
run: cd linux/ecosystem/gitlab/runner/amxx-sdk && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner Android SDK Image:"
run: cd linux/ecosystem/gitlab/runner/android-sdk && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner Atlassian SDK Image:"
run: cd linux/ecosystem/gitlab/runner/atlassian-sdk && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner dotNet SDK Image:"
run: cd linux/ecosystem/gitlab/runner/dotnet-sdk && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner node12 Image:"
run: cd linux/ecosystem/gitlab/runner/node12 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner node14 Image:"
run: cd linux/ecosystem/gitlab/runner/node14 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner node15 Image:"
run: cd linux/ecosystem/gitlab/runner/node15 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner node16 Image:"
run: cd linux/ecosystem/gitlab/runner/node16 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner node17 Image:"
run: cd linux/ecosystem/gitlab/runner/node17 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner node18 Image:"
run: cd linux/ecosystem/gitlab/runner/node18 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner php7.2 Image:"
run: cd linux/ecosystem/gitlab/runner/php7.2 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner php7.3 Image:"
run: cd linux/ecosystem/gitlab/runner/php7.3 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner php7.4 Image:"
run: cd linux/ecosystem/gitlab/runner/php7.4 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner php8.0 Image:"
run: cd linux/ecosystem/gitlab/runner/php8.0 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner php8.1 Image:"
run: cd linux/ecosystem/gitlab/runner/php8.1 && pwd && make build && make deploy
- name: "Build and Deploy Gitlab Runner Steam SDK Image:"
run: cd linux/ecosystem/gitlab/runner/steam-sdk && pwd && make build && make deploy
##################################################################################
- name: Cleanup
run: make docker-clean

View File

@ -42,6 +42,9 @@ jobs:
- name: "Build and Deploy Python 3.11 Main Image:" - name: "Build and Deploy Python 3.11 Main Image:"
run: cd linux/ecosystem/epicmorg/python/main/3.11 && pwd && make build && make deploy run: cd linux/ecosystem/epicmorg/python/main/3.11 && pwd && make build && make deploy
- name: "Build and Deploy Python 3.12 Main Image:"
run: cd linux/ecosystem/epicmorg/python/main/3.12 && pwd && make build && make deploy
################################################################################## ##################################################################################
build-python-develop-images: build-python-develop-images:
@ -78,6 +81,9 @@ jobs:
- name: "Build and Deploy Python 3.11 Develop Image:" - name: "Build and Deploy Python 3.11 Develop Image:"
run: cd linux/ecosystem/epicmorg/python/develop/3.11 && pwd && make build && make deploy run: cd linux/ecosystem/epicmorg/python/develop/3.11 && pwd && make build && make deploy
- name: "Build and Deploy Python 3.12 Develop Image:"
run: cd linux/ecosystem/epicmorg/python/develop/3.12 && pwd && make build && make deploy
################################################################################## ##################################################################################
- name: Cleanup - name: Cleanup

View File

@ -81,6 +81,9 @@ jobs:
- name: "Build and Deploy TeamCity Agent php8.0 Image:" - name: "Build and Deploy TeamCity Agent php8.0 Image:"
run: cd linux/ecosystem/teamcity/agent/php8.0 && pwd && make build && make deploy run: cd linux/ecosystem/teamcity/agent/php8.0 && pwd && make build && make deploy
- name: "Build and Deploy TeamCity Agent php8.1 Image:"
run: cd linux/ecosystem/teamcity/agent/php8.1 && pwd && make build && make deploy
- name: "Build and Deploy TeamCity Agent Steam SDK Image:" - name: "Build and Deploy TeamCity Agent Steam SDK Image:"
run: cd linux/ecosystem/teamcity/agent/steam-sdk && pwd && make build && make deploy run: cd linux/ecosystem/teamcity/agent/steam-sdk && pwd && make build && make deploy

View File

@ -1,12 +1,17 @@
## Changelog # Changelog
### 2022 ## 2023
* `jan`
-------------------------------------------------------------------
## 2022
* `dec`
* `nov` * `nov`
* added `php8.1`, `apache2 + php8.1` and `teamcity agent + php8.1` images * added `php8.1`, `apache2 + php8.1` and `teamcity agent + php8.1` images
* build and ci fixes * build and `ci` fixes
* added `gitlab-runner` images * added `gitlab-runner` images
* updated `nextcloud`, `nginx` and `postgres` images * updated `nextcloud`, `nginx` and `postgres` images
* added `nginx` with `http3` and `quic` support * added `nginx` with `http3` and `quic` support
* fixed `GitHub Actions` and `Makefile` * fixed `GitHub Actions` and `Makefile`
* updated `base` images
* `oct` * `oct`
* just fixes * just fixes
* `sep` * `sep`
@ -39,6 +44,7 @@
* fixed `apache2` * fixed `apache2`
* added `php8` support * added `php8` support
* extended `testrail` releases with `active directory` and `ldap` auth support. * extended `testrail` releases with `active directory` and `ldap` auth support.
-------------------------------------------------------------------
### 2021 ### 2021
* `december` * `december`
* added `git-lfs`, `lazygit`, bumped versions of nginx, jira, conflunce and bitbucket. * added `git-lfs`, `lazygit`, bumped versions of nginx, jira, conflunce and bitbucket.
@ -98,7 +104,7 @@
* updated `nginx`. and reworked `php` image, now it based in splitted php-image. yay. * updated `nginx`. and reworked `php` image, now it based in splitted php-image. yay.
* updated `teamcity agent` image. * updated `teamcity agent` image.
------------------------------------------------------------------- -------------------------------------------------------------------
### 2020 ## 2020
* `december` * `december`
* added mattermost * added mattermost
* fixed some images * fixed some images
@ -192,6 +198,8 @@
* switched `qbittorrent` images to `edge` * switched `qbittorrent` images to `edge`
* switched final `balancer` image to `edge` * switched final `balancer` image to `edge`
* reduced containers size by switching to `debian-slim` base-image. * reduced containers size by switching to `debian-slim` base-image.
-------------------------------------------------------------------
## 2019
* 12/13/2019 * 12/13/2019
* updated `teamcity agent`. added `php 7.3` support. * updated `teamcity agent`. added `php 7.3` support.
* fixed `nginx` image. * fixed `nginx` image.

View File

@ -1,4 +1,4 @@
VERSION = "2022.09.09" VERSION = "2022.11.14"
AUTHOR = "EpicMorg" AUTHOR = "EpicMorg"
MODIFIED = "STAM" MODIFIED = "STAM"
DOCKER_SCAN_SUGGEST = false DOCKER_SCAN_SUGGEST = false
@ -48,10 +48,10 @@ docker-clean:
docker system prune -af docker system prune -af
images: images:
# make docker-clean
make advanced-images make advanced-images
make ecosystem-images make ecosystem-images
# make docker-clean # make docker-clean
# make docker-clean
advanced-images: advanced-images:
@echo "=======================================" @echo "======================================="
@ -89,8 +89,7 @@ advanced-zabbix-images:
cd `pwd`/linux/advanced/zabbix/latest/snmptraps && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/latest/snmptraps && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/latest/web-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/latest/web-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/latest/web-pgsql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/latest/web-pgsql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/3.0/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/3.0/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/3.0/java-gateway && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/3.0/java-gateway && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/3.0/proxy-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/3.0/proxy-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/3.0/proxy-sqlite3 && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/3.0/proxy-sqlite3 && pwd && make build && make deploy
@ -99,8 +98,7 @@ advanced-zabbix-images:
cd `pwd`/linux/advanced/zabbix/3.0/snmptraps && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/3.0/snmptraps && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/3.0/web-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/3.0/web-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/3.0/web-pgsql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/3.0/web-pgsql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/4.0/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/4.0/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/4.0/java-gateway && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/4.0/java-gateway && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/4.0/proxy-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/4.0/proxy-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/4.0/proxy-sqlite3 && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/4.0/proxy-sqlite3 && pwd && make build && make deploy
@ -109,8 +107,7 @@ advanced-zabbix-images:
cd `pwd`/linux/advanced/zabbix/4.0/snmptraps && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/4.0/snmptraps && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/4.0/web-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/4.0/web-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/4.0/web-pgsql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/4.0/web-pgsql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.0/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.0/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.0/agent2 && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.0/agent2 && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.0/java-gateway && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.0/java-gateway && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.0/proxy-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.0/proxy-mysql && pwd && make build && make deploy
@ -120,8 +117,7 @@ advanced-zabbix-images:
cd `pwd`/linux/advanced/zabbix/5.0/snmptraps && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.0/snmptraps && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.0/web-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.0/web-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.0/web-pgsql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.0/web-pgsql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.2/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.2/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.2/agent2 && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.2/agent2 && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.2/java-gateway && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.2/java-gateway && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.2/proxy-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.2/proxy-mysql && pwd && make build && make deploy
@ -131,8 +127,7 @@ advanced-zabbix-images:
cd `pwd`/linux/advanced/zabbix/5.2/snmptraps && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.2/snmptraps && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.2/web-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.2/web-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.2/web-pgsql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.2/web-pgsql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.4/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.4/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.4/agent2 && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.4/agent2 && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.4/java-gateway && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.4/java-gateway && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.4/proxy-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.4/proxy-mysql && pwd && make build && make deploy
@ -142,8 +137,7 @@ advanced-zabbix-images:
cd `pwd`/linux/advanced/zabbix/5.4/snmptraps && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.4/snmptraps && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.4/web-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.4/web-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/5.4/web-pgsql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/5.4/web-pgsql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.0/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.0/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.0/agent2 && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.0/agent2 && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.0/java-gateway && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.0/java-gateway && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.0/proxy-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.0/proxy-mysql && pwd && make build && make deploy
@ -153,8 +147,7 @@ advanced-zabbix-images:
cd `pwd`/linux/advanced/zabbix/6.0/snmptraps && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.0/snmptraps && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.0/web-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.0/web-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.0/web-pgsql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.0/web-pgsql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.2/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.2/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.2/agent2 && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.2/agent2 && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.2/java-gateway && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.2/java-gateway && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.2/proxy-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.2/proxy-mysql && pwd && make build && make deploy
@ -164,18 +157,16 @@ advanced-zabbix-images:
cd `pwd`/linux/advanced/zabbix/6.2/snmptraps && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.2/snmptraps && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.2/web-mysql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.2/web-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.2/web-pgsql && pwd && make build && make deploy cd `pwd`/linux/advanced/zabbix/6.2/web-pgsql && pwd && make build && make deploy
# cd `pwd`/linux/advanced/zabbix/6.4/agent && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.4/agent && pwd && make build && make deploy # cd `pwd`/linux/advanced/zabbix/6.4/agent2 && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.4/agent2 && pwd && make build && make deploy # cd `pwd`/linux/advanced/zabbix/6.4/java-gateway && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.4/java-gateway && pwd && make build && make deploy # cd `pwd`/linux/advanced/zabbix/6.4/proxy-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.4/proxy-mysql && pwd && make build && make deploy # cd `pwd`/linux/advanced/zabbix/6.4/proxy-sqlite3 && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.4/proxy-sqlite3 && pwd && make build && make deploy # cd `pwd`/linux/advanced/zabbix/6.4/server-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.4/server-mysql && pwd && make build && make deploy # cd `pwd`/linux/advanced/zabbix/6.4/server-pgsql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.4/server-pgsql && pwd && make build && make deploy # cd `pwd`/linux/advanced/zabbix/6.4/snmptraps && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.4/snmptraps && pwd && make build && make deploy # cd `pwd`/linux/advanced/zabbix/6.4/web-mysql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.4/web-mysql && pwd && make build && make deploy # cd `pwd`/linux/advanced/zabbix/6.4/web-pgsql && pwd && make build && make deploy
cd `pwd`/linux/advanced/zabbix/6.4/web-pgsql && pwd && make build && make deploy
advanced-nextcloud-images: advanced-nextcloud-images:
cd `pwd`/linux/advanced/nextcloud/pure/14 && pwd && make build && make deploy cd `pwd`/linux/advanced/nextcloud/pure/14 && pwd && make build && make deploy
@ -189,6 +180,7 @@ advanced-nextcloud-images:
cd `pwd`/linux/advanced/nextcloud/pure/22 && pwd && make build && make deploy cd `pwd`/linux/advanced/nextcloud/pure/22 && pwd && make build && make deploy
cd `pwd`/linux/advanced/nextcloud/pure/23 && pwd && make build && make deploy cd `pwd`/linux/advanced/nextcloud/pure/23 && pwd && make build && make deploy
cd `pwd`/linux/advanced/nextcloud/pure/24 && pwd && make build && make deploy cd `pwd`/linux/advanced/nextcloud/pure/24 && pwd && make build && make deploy
cd `pwd`/linux/advanced/nextcloud/pure/25 && pwd && make build && make deploy
advanced-nextcloud-patched-images: advanced-nextcloud-patched-images:
cd `pwd`/linux/advanced/nextcloud/patched/14 && pwd && make build && make deploy cd `pwd`/linux/advanced/nextcloud/patched/14 && pwd && make build && make deploy
@ -215,6 +207,7 @@ ecosystem-images:
make ecosystem-vk2discord-images make ecosystem-vk2discord-images
make ecosystem-postgres-images make ecosystem-postgres-images
make ecosystem-teamcity-agent-images make ecosystem-teamcity-agent-images
make ecosystem-gitlab-runner-images
make ecosystem-nginx-images make ecosystem-nginx-images
make ecosystem-vscode-server-images make ecosystem-vscode-server-images
@ -230,6 +223,7 @@ ecosystem-pyhton-images-main:
cd `pwd`/linux/ecosystem/epicmorg/python/main/3.9 && pwd && make build && make deploy cd `pwd`/linux/ecosystem/epicmorg/python/main/3.9 && pwd && make build && make deploy
cd `pwd`/linux/ecosystem/epicmorg/python/main/3.10 && pwd && make build && make deploy cd `pwd`/linux/ecosystem/epicmorg/python/main/3.10 && pwd && make build && make deploy
cd `pwd`/linux/ecosystem/epicmorg/python/main/3.11 && pwd && make build && make deploy cd `pwd`/linux/ecosystem/epicmorg/python/main/3.11 && pwd && make build && make deploy
cd `pwd`/linux/ecosystem/epicmorg/python/main/3.12 && pwd && make build && make deploy
ecosystem-pyhton-images-develop: ecosystem-pyhton-images-develop:
cd `pwd`/linux/ecosystem/epicmorg/python/develop/2.7 && pwd && make build && make deploy cd `pwd`/linux/ecosystem/epicmorg/python/develop/2.7 && pwd && make build && make deploy
@ -239,6 +233,7 @@ ecosystem-pyhton-images-develop:
cd `pwd`/linux/ecosystem/epicmorg/python/develop/3.9 && pwd && make build && make deploy cd `pwd`/linux/ecosystem/epicmorg/python/develop/3.9 && pwd && make build && make deploy
cd `pwd`/linux/ecosystem/epicmorg/python/develop/3.10 && pwd && make build && make deploy cd `pwd`/linux/ecosystem/epicmorg/python/develop/3.10 && pwd && make build && make deploy
cd `pwd`/linux/ecosystem/epicmorg/python/develop/3.11 && pwd && make build && make deploy cd `pwd`/linux/ecosystem/epicmorg/python/develop/3.11 && pwd && make build && make deploy
cd `pwd`/linux/ecosystem/epicmorg/python/develop/3.12 && pwd && make build && make deploy
ecosystem-debian-images: ecosystem-debian-images:
make ecosystem-debian-squeeze-images make ecosystem-debian-squeeze-images
@ -443,6 +438,9 @@ ecosystem-teamcity-agent-images:
cd `pwd`/linux/ecosystem/teamcity/agent/php8.0 && pwd && make build && make deploy cd `pwd`/linux/ecosystem/teamcity/agent/php8.0 && pwd && make build && make deploy
cd `pwd`/linux/ecosystem/teamcity/agent/steam-sdk && pwd && make build && make deploy cd `pwd`/linux/ecosystem/teamcity/agent/steam-sdk && pwd && make build && make deploy
ecosystem-gitlab-runner-images:
cd `pwd`/linux/ecosystem/gitlab/runner/latest && pwd && make build && make deploy
ecosystem-nginx-images: ecosystem-nginx-images:
cd `pwd`/linux/ecosystem/nginx/latest/mainline/main && pwd && make build && make deploy cd `pwd`/linux/ecosystem/nginx/latest/mainline/main && pwd && make build && make deploy
cd `pwd`/linux/ecosystem/nginx/latest/mainline/php && pwd && make build && make deploy cd `pwd`/linux/ecosystem/nginx/latest/mainline/php && pwd && make build && make deploy
@ -502,7 +500,12 @@ bundle-teamcity:
@echo "===== Building TeamCity images =====" @echo "===== Building TeamCity images ====="
@echo "=======================================" @echo "======================================="
make advanced-teamcity-server-images make advanced-teamcity-server-images
make ecosystem-teamcity-agent-images
bundle-gitlab:
@echo "======================================="
@echo "===== Building GitLab images ====="
@echo "======================================="
make ecosystem-gitlab-runner-images
bundle-atlassian: bundle-atlassian:
@echo "=======================================" @echo "======================================="

View File

@ -26,6 +26,7 @@ A collection of docker images for production use. This repo contains 2 types of
| ` ` | [![GHA](https://img.shields.io/github/workflow/status/EpicMorg/docker-scripts/EpicMorg%20EcoSystem%20TeamCity%20Agents%20Images?label=TeamCity%20Agents%20Images&logo=TeamCity%20Agents%20Images&style=flat-square)](https://github.com/EpicMorg/docker-scripts/actions/workflows/epicmorg.base.images.teamcity.agents.yml) | ` ` | [![GHA](https://img.shields.io/github/workflow/status/EpicMorg/docker-scripts/EpicMorg%20EcoSystem%20TeamCity%20Agents%20Images?label=TeamCity%20Agents%20Images&logo=TeamCity%20Agents%20Images&style=flat-square)](https://github.com/EpicMorg/docker-scripts/actions/workflows/epicmorg.base.images.teamcity.agents.yml)
| ` ` | [![GHA](https://img.shields.io/github/workflow/status/EpicMorg/docker-scripts/EpicMorg%20EcoSystem%20Testrail%20Images?label=Testrail%20Images&logo=Testrail%20Images&style=flat-square)](https://github.com/EpicMorg/docker-scripts/actions/workflows/epicmorg.base.images.testrail.yml) | ` ` | [![GHA](https://img.shields.io/github/workflow/status/EpicMorg/docker-scripts/EpicMorg%20EcoSystem%20Testrail%20Images?label=Testrail%20Images&logo=Testrail%20Images&style=flat-square)](https://github.com/EpicMorg/docker-scripts/actions/workflows/epicmorg.base.images.testrail.yml)
| ` ` | [![GHA](https://img.shields.io/github/workflow/status/EpicMorg/docker-scripts/EpicMorg%20EcoSystem%20Web%20Images?label=Web%20Images&logo=Web%20Images&style=flat-square)](https://github.com/EpicMorg/docker-scripts/actions/workflows/epicmorg.base.images.web.yml) | ` ` | [![GHA](https://img.shields.io/github/workflow/status/EpicMorg/docker-scripts/EpicMorg%20EcoSystem%20Web%20Images?label=Web%20Images&logo=Web%20Images&style=flat-square)](https://github.com/EpicMorg/docker-scripts/actions/workflows/epicmorg.base.images.web.yml)
| ` ` | [![GHA](https://img.shields.io/github/workflow/status/EpicMorg/docker-scripts/EpicMorg%20EcoSystem%20Gitlab%20Runner%20Images?label=Gitlab%20Runner%20Images&logo=Gitlab%20Runner%20Images&style=flat-square)](https://github.com/EpicMorg/docker-scripts/actions/workflows/epicmorg.base.images.giltab.runners.yml)
# Few popular products [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/B0B81CUI4) # Few popular products [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/B0B81CUI4)

View File

@ -117,6 +117,22 @@ RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selectio
RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue -P /usr/bin ${P4_DOWNLOAD_URL} && \ RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue -P /usr/bin ${P4_DOWNLOAD_URL} && \
chmod +x /usr/bin/p4 chmod +x /usr/bin/p4
##################################################################
# dumb init
##################################################################
ENV DUMB_INIT_VERSION=1.2.5
RUN wget -q --no-check-certificate -c https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_x86_64 --random-wait -O /usr/bin/dumb-init && \
chmod +x /usr/bin/dumb-init && \
dumb-init --version
##################################################################
# grab gosu for easy step-down from root
##################################################################
ENV GOSU_VER 1.14
RUN wget -q --no-check-certificate -c https://github.com/tianon/gosu/releases/download/${GOSU_VER}/gosu-amd64 --random-wait -O /usr/local/bin/gosu && \
chmod +x /usr/local/bin/gosu && \
gosu --version
################################################################## ##################################################################
# Generate ssl key # Generate ssl key
################################################################## ##################################################################

View File

@ -135,6 +135,22 @@ RUN wget -c https://cli.github.com/packages/githubcli-archive-keyring.gpg -O /et
RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue -P /usr/bin ${P4_DOWNLOAD_URL} && \ RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue -P /usr/bin ${P4_DOWNLOAD_URL} && \
chmod +x /usr/bin/p4 chmod +x /usr/bin/p4
##################################################################
# dumb init
##################################################################
ENV DUMB_INIT_VERSION=1.2.5
RUN wget -q --no-check-certificate -c https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_x86_64 --random-wait -O /usr/bin/dumb-init && \
chmod +x /usr/bin/dumb-init && \
dumb-init --version
##################################################################
# grab gosu for easy step-down from root
##################################################################
ENV GOSU_VER 1.14
RUN wget -q --no-check-certificate -c https://github.com/tianon/gosu/releases/download/${GOSU_VER}/gosu-amd64 --random-wait -O /usr/local/bin/gosu && \
chmod +x /usr/local/bin/gosu && \
gosu --version
################################################################## ##################################################################
# Generate ssl key # Generate ssl key
################################################################## ##################################################################

View File

@ -135,6 +135,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################
@ -154,6 +155,22 @@ RUN wget -c https://cli.github.com/packages/githubcli-archive-keyring.gpg -O /et
RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue -P /usr/bin ${P4_DOWNLOAD_URL} && \ RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue -P /usr/bin ${P4_DOWNLOAD_URL} && \
chmod +x /usr/bin/p4 chmod +x /usr/bin/p4
##################################################################
# dumb init
##################################################################
ENV DUMB_INIT_VERSION=1.2.5
RUN wget -q --no-check-certificate -c https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_x86_64 --random-wait -O /usr/bin/dumb-init && \
chmod +x /usr/bin/dumb-init && \
dumb-init --version
##################################################################
# grab gosu for easy step-down from root
##################################################################
ENV GOSU_VER 1.14
RUN wget -q --no-check-certificate -c https://github.com/tianon/gosu/releases/download/${GOSU_VER}/gosu-amd64 --random-wait -O /usr/local/bin/gosu && \
chmod +x /usr/local/bin/gosu && \
gosu --version
################################################################## ##################################################################
# Generate ssl key # Generate ssl key
################################################################## ##################################################################

View File

@ -150,6 +150,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################
@ -191,6 +192,22 @@ RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue
echo "lazygit version:" && \ echo "lazygit version:" && \
lazygit --version lazygit --version
##################################################################
# dumb init
##################################################################
ENV DUMB_INIT_VERSION=1.2.5
RUN wget -q --no-check-certificate -c https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_x86_64 --random-wait -O /usr/bin/dumb-init && \
chmod +x /usr/bin/dumb-init && \
dumb-init --version
##################################################################
# grab gosu for easy step-down from root
##################################################################
ENV GOSU_VER 1.14
RUN wget -q --no-check-certificate -c https://github.com/tianon/gosu/releases/download/${GOSU_VER}/gosu-amd64 --random-wait -O /usr/local/bin/gosu && \
chmod +x /usr/local/bin/gosu && \
gosu --version
################################################################## ##################################################################
# Generate ssl key # Generate ssl key
################################################################## ##################################################################

View File

@ -151,6 +151,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################
@ -192,6 +193,23 @@ RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue
echo "lazygit version:" && \ echo "lazygit version:" && \
lazygit --version lazygit --version
##################################################################
# dumb init
##################################################################
ENV DUMB_INIT_VERSION=1.2.5
RUN wget -q --no-check-certificate -c https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_x86_64 --random-wait -O /usr/bin/dumb-init && \
chmod +x /usr/bin/dumb-init && \
dumb-init --version
##################################################################
# grab gosu for easy step-down from root
##################################################################
ENV GOSU_VER 1.14
RUN wget -q --no-check-certificate -c https://github.com/tianon/gosu/releases/download/${GOSU_VER}/gosu-amd64 --random-wait -O /usr/local/bin/gosu && \
chmod +x /usr/local/bin/gosu && \
gosu --version
################################################################## ##################################################################
# Generate ssl key # Generate ssl key
################################################################## ##################################################################

View File

@ -150,6 +150,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################
@ -191,6 +192,22 @@ RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue
echo "lazygit version:" && \ echo "lazygit version:" && \
lazygit --version lazygit --version
##################################################################
# dumb init
##################################################################
ENV DUMB_INIT_VERSION=1.2.5
RUN wget -q --no-check-certificate -c https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_x86_64 --random-wait -O /usr/bin/dumb-init && \
chmod +x /usr/bin/dumb-init && \
dumb-init --version
##################################################################
# grab gosu for easy step-down from root
##################################################################
ENV GOSU_VER 1.14
RUN wget -q --no-check-certificate -c https://github.com/tianon/gosu/releases/download/${GOSU_VER}/gosu-amd64 --random-wait -O /usr/local/bin/gosu && \
chmod +x /usr/local/bin/gosu && \
gosu --version
################################################################## ##################################################################
# Generate ssl key # Generate ssl key
################################################################## ##################################################################

View File

@ -150,6 +150,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################
@ -191,6 +192,22 @@ RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue
echo "lazygit version:" && \ echo "lazygit version:" && \
lazygit --version lazygit --version
##################################################################
# dumb init
##################################################################
ENV DUMB_INIT_VERSION=1.2.5
RUN wget -q --no-check-certificate -c https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_x86_64 --random-wait -O /usr/bin/dumb-init && \
chmod +x /usr/bin/dumb-init && \
dumb-init --version
##################################################################
# grab gosu for easy step-down from root
##################################################################
ENV GOSU_VER 1.14
RUN wget -q --no-check-certificate -c https://github.com/tianon/gosu/releases/download/${GOSU_VER}/gosu-amd64 --random-wait -O /usr/local/bin/gosu && \
chmod +x /usr/local/bin/gosu && \
gosu --version
################################################################## ##################################################################
# Generate ssl key # Generate ssl key
################################################################## ##################################################################

View File

@ -0,0 +1,148 @@
FROM epicmorg/python:3.12
ARG DEBIAN_FRONTEND=noninteractive
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
##################################################################
# ARGuments
##################################################################
ENV BuildDocker true
ENV GOPATH=/go
ENV PATH="${GOPATH}/bin:${PATH}"
ARG BUILDS_DIR=/builds
ARG SRC_DIR=${BUILDS_DIR}/src
ARG EXPORT_DIR=${BUILDS_DIR}/export
ARG NINJA_ARCH=linux
ARG NINJA_VERSION=latest
ARG NINJA_RELEASE_URL=https://api.github.com/repos/ninja-build/ninja/releases/${NINJA_VERSION}
##################################################################
# Files and folders
##################################################################
RUN mkdir -p ${SRC_DIR} ${EXPORT_DIR} ${PRE_DIR}
##################################################################
# Version
##################################################################
RUN python3 --version
RUN pip3 --version
RUN python --version
RUN pip --version
##################################################################
# installing
##################################################################
RUN apt-get update && \
apt install -y --allow-unauthenticated --allow-downgrades \
build-essential \
autoconf-archive \
gnu-standards \
cmake \
libunwind-dev \
golang \
at \
autopkgtest \
gcc-multilib \
g++-multilib \
libxkbcommon-dev \
zlib1g-dev \
libfreetype6-dev \
libegl1-mesa-dev \
libgles2-mesa-dev \
libgbm-dev \
uuid-dev \
nvidia-cg-toolkit \
nvidia-cg-dev \
libavcodec-dev \
libsdl2-dev \
libsdl-image1.2-dev \
libxml2-dev \
yasm \
devscripts \
automake \
libtool \
autotools-dev \
dpkg-dev \
fakeroot \
checkinstall \
dh-make \
zlib1g \
zlib1g-dev \
libssl-dev \
libxslt-dev \
libgd-dev \
libpcre3-dev \
libgeoip-dev \
libkrb5-dev \
libperl-dev \
krb5-user \
luajit \
liblua5.1-0-dev \
libmaxminddb-dev \
libpam0g-dev \
libldap2-dev \
libavformat-dev \
libavfilter-dev \
libswscale-dev \
libavcodec-dev \
libz-dev \
libhiredis-dev \
libzip-dev \
libcrypto++-dev \
libbz2-dev \
libvpx-dev \
libvpx6 \
tcl \
g++ \
gcc \
libc6-dev \
make \
pkg-config \
golang \
golang-go \
python-dev \
python3-all-dev \
g++-multilib \
autoconf \
automake \
libtool \
gdb \
strace
##################################################################
# GO compillers
##################################################################
RUN printf "\n--------------------------------\n$(go version)\n--------------------------------\n\n"
##################################################################
# Get NINJA binary
##################################################################
RUN curl -s ${NINJA_RELEASE_URL} | jq -r ".assets[] | select(.name | test(\"${NINJA_ARCH}\")) | .browser_download_url" > /tmp/ninja-url.txt && \
cat /tmp/ninja-url.txt && \
cd /tmp && \
wget -q -c --input-file=/tmp/ninja-url.txt && \
unzip -o /tmp/ninja-linux.zip -d /bin && \
printf "\n--------------------------------\nninja version: $(ninja --version)\n--------------------------------\n\n"
##################################################################
# Version
##################################################################
RUN python3 --version
RUN pip3 --version
RUN python --version
RUN pip --version
##################################################################
# update locales
##################################################################
RUN locale-gen
##################################################################
# cleanup
##################################################################
RUN apt-get purge policykit-1 -y && \
apt-get clean -y && \
apt-get autoclean -y && \
rm -rfv /var/lib/apt/lists/* && \
rm -rfv /tmp/* && \
rm -rfv /var/cache/apt/archives/*.deb

View File

@ -0,0 +1,19 @@
all: app
app:
make build
make deploy
make clean
build:
docker-compose build --compress --parallel --progress plain
deploy:
docker-compose push
clean:
docker container prune -f
docker image prune -f
docker network prune -f
docker volume prune -f
docker system prune -af

View File

@ -0,0 +1,6 @@
version: '3.9'
services:
app:
image: "epicmorg/python:3.11-develop"
build:
context: .

View File

@ -200,6 +200,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################

View File

@ -204,6 +204,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################

View File

@ -1,4 +1,4 @@
FROM python:3.11-rc-bullseye FROM python:3.11-bullseye
ARG DEBIAN_FRONTEND=noninteractive ARG DEBIAN_FRONTEND=noninteractive
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org" LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
@ -195,6 +195,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################

View File

@ -0,0 +1,258 @@
FROM python:3.12-rc-bullseye
ARG DEBIAN_FRONTEND=noninteractive
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
##################################################################
# prepare system
##################################################################
RUN for i in $(seq 1 8); do mkdir -p "/usr/share/man/man${i}"; done
##################################################################
# sources list
##################################################################
RUN rm -rfv /etc/apt/sources.list
RUN rm -rfv /etc/locale.gen
COPY etc/apt/trusted.gpg.d/deb-multimedia-keyring.gpg /etc/apt/trusted.gpg.d/deb-multimedia-keyring.gpg
COPY etc/apt/apt.conf.d/99-no-check-valid-until /etc/apt/apt.conf.d/99-no-check-valid-until
COPY etc/apt/sources.list /etc/apt/sources.list
COPY etc/locale.gen /etc/locale.gen
RUN apt-get update && \
apt-get upgrade -y && \
apt-get dist-upgrade -y
##################################################################
# installing utils
##################################################################
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get install -y --allow-unauthenticated \
apt-transport-https \
apt-utils \
gnupg \
gnupg1 \
gnupg2 \
aptitude \
bash \
binutils \
console-cyrillic \
ca-certificates \
locales \
software-properties-common \
sudo
RUN apt-key adv --keyserver keyserver.ubuntu.com --refresh-keys
RUN apt-key list | grep "expired: " | sed -ne 's|pub .*/\([^ ]*\) .*|\1|gp' | xargs -n1 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
RUN update-ca-certificates
##################################################################
# perforce client binary
##################################################################
ENV P4_VERSION=r22.1
ENV P4_DOWNLOAD_URL=http://filehost.perforce.com/perforce/${P4_VERSION}/bin.linux26x86_64/p4
##################################################################
# 7z official binary
##################################################################
ENV SZ_VERSION=7z2200
ENV SZ_DOWNLOAD_URL=https://www.7-zip.org/a/${SZ_VERSION}-linux-x64.tar.xz
##################################################################
# LazyGit official binary
##################################################################
ENV LZGIT_VERSION=0.34
ENV LZGIT_DOWNLOAD_URL=https://github.com/jesseduffield/lazygit/releases/download/v${LZGIT_VERSION}/lazygit_${LZGIT_VERSION}_Linux_x86_64.tar.gz
##################################################################
# update lists
##################################################################
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get update
##################################################################
# installing utils
##################################################################
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get install -y --allow-unauthenticated \
bzip2 \
cmatrix \
cmatrix-xfont \
cron \
curl \
clzip \
dos2unix \
ffmpeg \
fontconfig \
git \
git-extras \
git-flow \
git-cvs \
git-doc \
git-email \
git-mediawiki \
git-crypt \
git-lfs \
git-ftp \
gnupg \
gnupg2 \
graphicsmagick \
gzip \
htop \
iftop \
iotop \
iperf \
iperf3 \
iputils-ping \
jq \
kmod \
libxml2-dev \
libxml2-utils \
lbzip2 \
libsvn-java \
locales \
lsb-release \
lsof \
lynx \
lzma \
lzip \
lzop \
mc \
mercurial \
nano \
nload \
nmap \
openssl \
perl \
procps \
pbzip2 \
plzip \
p7zip-full \
p7zip-rar \
rsync \
rar \
screenfetch \
smbclient \
subversion \
telnet \
tmux \
tree \
util-linux \
uuid-runtime \
unrar \
xz-utils \
wget \
zip \
tini \
libzip4 \
acl \
aptitude \
sudo \
cvs \
python3-pip \
python3-all \
python-all \
rclone \
logrotate \
subversion-tools \
pev
##################################################################
# installing fs-tools
##################################################################
#RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
# apt-get install -y --allow-unauthenticated \
# btrfs-progs \
# exfat-utils \
# e2fsprogs \
# f2fs-tools \
# dosfstools \
# hfsutils \
# hfsprogs \
# jfsutils \
# mdadm \
# util-linux \
# cryptsetup \
# lvm2 \
# nilfs-tools \
# ntfs-3g \
# reiser4progs \
# reiserfsprogs \
# udftools \
# xfsprogs \
# xfsdump
##################################################################
# git-lfs official binary
##################################################################
#RUN curl -s https://packagecloud.io/github/git-lfs/gpgkey | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/git-lfs.gpg --import && \
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6B05F25D762E3157 && \
rm -rfv /etc/apt/sources.list.d/github_git-lfs.list
COPY etc/apt/sources.list.d/github_git-lfs.list /etc/apt/sources.list.d/github_git-lfs.list
RUN apt-get update && \
apt-get install -y --allow-unauthenticated \
git \
git-lfs && \
git --version && \
git-lfs install --skip-repo && \
git-lfs --version
##################################################################
# gh official binary
##################################################################
RUN wget -c https://cli.github.com/packages/githubcli-archive-keyring.gpg -O /etc/apt/trusted.gpg.d/githubcli-archive-keyring.gpg && \
chmod go+r /etc/apt/trusted.gpg.d/githubcli-archive-keyring.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/trusted.gpg.d/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list && \
apt-get update && \
apt-get install -y --allow-unauthenticated \
gh && \
gh --version
##################################################################
# Install p4client
##################################################################
RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue -P /usr/bin ${P4_DOWNLOAD_URL} && \
chmod +x /usr/bin/p4
##################################################################
# Install 7z official binary
##################################################################
RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue -O /tmp/7z.tar.xz ${SZ_DOWNLOAD_URL} && \
mkdir -p /tmp/7z && \
tar -xf /tmp/7z.tar.xz -C /tmp/7z && \
chmod +x /tmp/7z/7zz && \
mv -fv /tmp/7z/7zz /usr/bin/ && \
7zz | head -4 && \
7z | head -4
##################################################################
# Install LazyGit official binary
##################################################################
RUN wget --no-check-certificate -nv --random-wait --retry-connrefused --continue -O /tmp/lazygit.tar.xz ${LZGIT_DOWNLOAD_URL} && \
mkdir -p /tmp/lazygit && \
tar -zxvf /tmp/lazygit.tar.xz -C /tmp/lazygit && \
chmod +x /tmp/lazygit/lazygit && \
mv -fv /tmp/lazygit/lazygit /usr/bin/ && \
echo "lazygit version:" && \
lazygit --version
##################################################################
# Generate ssl key
##################################################################
#RUN openssl dhparam -out /etc/ssl/dhparam.pem 4096
##################################################################
# update locales
##################################################################
RUN locale-gen
##################################################################
# cleanup
##################################################################
RUN apt-get purge policykit-1 -y && \
apt-get clean -y && \
apt-get autoclean -y && \
rm -rfv /var/lib/apt/lists/* && \
rm -rfv /tmp/* && \
rm -rfv /var/cache/apt/archives/*.deb

View File

@ -0,0 +1,19 @@
all: app
app:
make build
make deploy
make clean
build:
docker-compose build --compress --parallel --progress plain
deploy:
docker-compose push
clean:
docker container prune -f
docker image prune -f
docker network prune -f
docker volume prune -f
docker system prune -af

View File

@ -0,0 +1,6 @@
version: '3.9'
services:
app:
image: "epicmorg/python:3.12"
build:
context: .

View File

@ -0,0 +1 @@
Acquire::Check-Valid-Until no;

View File

@ -0,0 +1,22 @@
#main
deb http://httpredir.debian.org/debian/ bullseye main contrib non-free
deb-src http://httpredir.debian.org/debian/ bullseye main contrib non-free
deb http://httpredir.debian.org/debian/ bullseye-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ bullseye-updates main contrib non-free
deb http://httpredir.debian.org/debian/ bullseye-backports main contrib non-free
deb-src http://httpredir.debian.org/debian/ bullseye-backports main contrib non-free
deb http://httpredir.debian.org/debian/ bullseye-backports-sloppy main contrib non-free
deb-src http://httpredir.debian.org/debian/ bullseye-backports-sloppy main contrib non-free
deb http://httpredir.debian.org/debian/ bullseye-proposed-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ bullseye-proposed-updates main contrib non-free
#security
deb http://security.debian.org/debian-security/ bullseye-security/updates main contrib non-free
deb-src http://security.debian.org/debian-security/ bullseye-security/updates main contrib non-free
deb http://httpredir.debian.org/debian-security/ bullseye-security/updates main contrib non-free
deb-src http://httpredir.debian.org/debian-security/ bullseye-security/updates main contrib non-free

View File

@ -0,0 +1,2 @@
deb https://packagecloud.io/github/git-lfs/debian/ bullseye main
deb-src https://packagecloud.io/github/git-lfs/debian/ bullseye main

View File

@ -0,0 +1,12 @@
en_GB.UTF-8 UTF-8
en_GB ISO-8859-1
en_GB.ISO-8859-15 ISO-8859-15
en_US.UTF-8 UTF-8
en_US ISO-8859-1
en_US.ISO-8859-15 ISO-8859-15
ru_RU.UTF-8 UTF-8
ru_RU.KOI8-R KOI8-R
ru_RU ISO-8859-5
ru_RU.CP1251 CP1251
ru_UA.UTF-8 UTF-8
ru_UA KOI8-U

View File

@ -0,0 +1,496 @@
aa_DJ.UTF-8 UTF-8
aa_DJ ISO-8859-1
aa_ER UTF-8
aa_ER@saaho UTF-8
aa_ET UTF-8
af_ZA.UTF-8 UTF-8
af_ZA ISO-8859-1
agr_PE UTF-8
ak_GH UTF-8
am_ET UTF-8
an_ES.UTF-8 UTF-8
an_ES ISO-8859-15
anp_IN UTF-8
ar_AE.UTF-8 UTF-8
ar_AE ISO-8859-6
ar_BH.UTF-8 UTF-8
ar_BH ISO-8859-6
ar_DZ.UTF-8 UTF-8
ar_DZ ISO-8859-6
ar_EG.UTF-8 UTF-8
ar_EG ISO-8859-6
ar_IN UTF-8
ar_IQ.UTF-8 UTF-8
ar_IQ ISO-8859-6
ar_JO.UTF-8 UTF-8
ar_JO ISO-8859-6
ar_KW.UTF-8 UTF-8
ar_KW ISO-8859-6
ar_LB.UTF-8 UTF-8
ar_LB ISO-8859-6
ar_LY.UTF-8 UTF-8
ar_LY ISO-8859-6
ar_MA.UTF-8 UTF-8
ar_MA ISO-8859-6
ar_OM.UTF-8 UTF-8
ar_OM ISO-8859-6
ar_QA.UTF-8 UTF-8
ar_QA ISO-8859-6
ar_SA.UTF-8 UTF-8
ar_SA ISO-8859-6
ar_SD.UTF-8 UTF-8
ar_SD ISO-8859-6
ar_SS UTF-8
ar_SY.UTF-8 UTF-8
ar_SY ISO-8859-6
ar_TN.UTF-8 UTF-8
ar_TN ISO-8859-6
ar_YE.UTF-8 UTF-8
ar_YE ISO-8859-6
ayc_PE UTF-8
az_AZ UTF-8
az_IR UTF-8
as_IN UTF-8
ast_ES.UTF-8 UTF-8
ast_ES ISO-8859-15
be_BY.UTF-8 UTF-8
be_BY CP1251
be_BY@latin UTF-8
bem_ZM UTF-8
ber_DZ UTF-8
ber_MA UTF-8
bg_BG.UTF-8 UTF-8
bg_BG CP1251
bhb_IN.UTF-8 UTF-8
bho_IN UTF-8
bho_NP UTF-8
bi_VU UTF-8
bn_BD UTF-8
bn_IN UTF-8
bo_CN UTF-8
bo_IN UTF-8
br_FR.UTF-8 UTF-8
br_FR ISO-8859-1
br_FR@euro ISO-8859-15
brx_IN UTF-8
bs_BA.UTF-8 UTF-8
bs_BA ISO-8859-2
byn_ER UTF-8
ca_AD.UTF-8 UTF-8
ca_AD ISO-8859-15
ca_ES.UTF-8 UTF-8
ca_ES ISO-8859-1
ca_ES@euro ISO-8859-15
ca_ES@valencia UTF-8
ca_FR.UTF-8 UTF-8
ca_FR ISO-8859-15
ca_IT.UTF-8 UTF-8
ca_IT ISO-8859-15
ce_RU UTF-8
chr_US UTF-8
cmn_TW UTF-8
crh_UA UTF-8
cs_CZ.UTF-8 UTF-8
cs_CZ ISO-8859-2
csb_PL UTF-8
cv_RU UTF-8
cy_GB.UTF-8 UTF-8
cy_GB ISO-8859-14
da_DK.UTF-8 UTF-8
da_DK ISO-8859-1
de_AT.UTF-8 UTF-8
de_AT ISO-8859-1
de_AT@euro ISO-8859-15
de_BE.UTF-8 UTF-8
de_BE ISO-8859-1
de_BE@euro ISO-8859-15
de_CH.UTF-8 UTF-8
de_CH ISO-8859-1
de_DE.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
de_IT.UTF-8 UTF-8
de_IT ISO-8859-1
de_LI.UTF-8 UTF-8
de_LU.UTF-8 UTF-8
de_LU ISO-8859-1
de_LU@euro ISO-8859-15
doi_IN UTF-8
dsb_DE UTF-8
dv_MV UTF-8
dz_BT UTF-8
el_GR.UTF-8 UTF-8
el_GR ISO-8859-7
el_GR@euro ISO-8859-7
el_CY.UTF-8 UTF-8
el_CY ISO-8859-7
en_AG UTF-8
en_AU.UTF-8 UTF-8
en_AU ISO-8859-1
en_BW.UTF-8 UTF-8
en_BW ISO-8859-1
en_CA.UTF-8 UTF-8
en_CA ISO-8859-1
en_DK.UTF-8 UTF-8
en_DK.ISO-8859-15 ISO-8859-15
en_DK ISO-8859-1
en_GB.UTF-8 UTF-8
en_GB ISO-8859-1
en_GB.ISO-8859-15 ISO-8859-15
en_HK.UTF-8 UTF-8
en_HK ISO-8859-1
en_IE.UTF-8 UTF-8
en_IE ISO-8859-1
en_IE@euro ISO-8859-15
en_IL UTF-8
en_IN UTF-8
en_NG UTF-8
en_NZ.UTF-8 UTF-8
en_NZ ISO-8859-1
en_PH.UTF-8 UTF-8
en_PH ISO-8859-1
en_SC.UTF-8 UTF-8
en_SG.UTF-8 UTF-8
en_SG ISO-8859-1
en_US.UTF-8 UTF-8
en_US ISO-8859-1
en_US.ISO-8859-15 ISO-8859-15
en_ZA.UTF-8 UTF-8
en_ZA ISO-8859-1
en_ZM UTF-8
en_ZW.UTF-8 UTF-8
en_ZW ISO-8859-1
eo UTF-8
es_AR.UTF-8 UTF-8
es_AR ISO-8859-1
es_BO.UTF-8 UTF-8
es_BO ISO-8859-1
es_CL.UTF-8 UTF-8
es_CL ISO-8859-1
es_CO.UTF-8 UTF-8
es_CO ISO-8859-1
es_CR.UTF-8 UTF-8
es_CR ISO-8859-1
es_CU UTF-8
es_DO.UTF-8 UTF-8
es_DO ISO-8859-1
es_EC.UTF-8 UTF-8
es_EC ISO-8859-1
es_ES.UTF-8 UTF-8
es_ES ISO-8859-1
es_ES@euro ISO-8859-15
es_GT.UTF-8 UTF-8
es_GT ISO-8859-1
es_HN.UTF-8 UTF-8
es_HN ISO-8859-1
es_MX.UTF-8 UTF-8
es_MX ISO-8859-1
es_NI.UTF-8 UTF-8
es_NI ISO-8859-1
es_PA.UTF-8 UTF-8
es_PA ISO-8859-1
es_PE.UTF-8 UTF-8
es_PE ISO-8859-1
es_PR.UTF-8 UTF-8
es_PR ISO-8859-1
es_PY.UTF-8 UTF-8
es_PY ISO-8859-1
es_SV.UTF-8 UTF-8
es_SV ISO-8859-1
es_US.UTF-8 UTF-8
es_US ISO-8859-1
es_UY.UTF-8 UTF-8
es_UY ISO-8859-1
es_VE.UTF-8 UTF-8
es_VE ISO-8859-1
et_EE.UTF-8 UTF-8
et_EE ISO-8859-1
et_EE.ISO-8859-15 ISO-8859-15
eu_ES.UTF-8 UTF-8
eu_ES ISO-8859-1
eu_ES@euro ISO-8859-15
eu_FR.UTF-8 UTF-8
eu_FR ISO-8859-1
eu_FR@euro ISO-8859-15
fa_IR UTF-8
ff_SN UTF-8
fi_FI.UTF-8 UTF-8
fi_FI ISO-8859-1
fi_FI@euro ISO-8859-15
fil_PH UTF-8
fo_FO.UTF-8 UTF-8
fo_FO ISO-8859-1
fr_BE.UTF-8 UTF-8
fr_BE ISO-8859-1
fr_BE@euro ISO-8859-15
fr_CA.UTF-8 UTF-8
fr_CA ISO-8859-1
fr_CH.UTF-8 UTF-8
fr_CH ISO-8859-1
fr_FR.UTF-8 UTF-8
fr_FR ISO-8859-1
fr_FR@euro ISO-8859-15
fr_LU.UTF-8 UTF-8
fr_LU ISO-8859-1
fr_LU@euro ISO-8859-15
fur_IT UTF-8
fy_NL UTF-8
fy_DE UTF-8
ga_IE.UTF-8 UTF-8
ga_IE ISO-8859-1
ga_IE@euro ISO-8859-15
gd_GB.UTF-8 UTF-8
gd_GB ISO-8859-15
gez_ER UTF-8
gez_ER@abegede UTF-8
gez_ET UTF-8
gez_ET@abegede UTF-8
gl_ES.UTF-8 UTF-8
gl_ES ISO-8859-1
gl_ES@euro ISO-8859-15
gu_IN UTF-8
gv_GB.UTF-8 UTF-8
gv_GB ISO-8859-1
ha_NG UTF-8
hak_TW UTF-8
he_IL.UTF-8 UTF-8
he_IL ISO-8859-8
hi_IN UTF-8
hif_FJ UTF-8
hne_IN UTF-8
hr_HR.UTF-8 UTF-8
hr_HR ISO-8859-2
hsb_DE.UTF-8 UTF-8
hsb_DE ISO-8859-2
ht_HT UTF-8
hu_HU.UTF-8 UTF-8
hu_HU ISO-8859-2
hy_AM UTF-8
hy_AM.ARMSCII-8 ARMSCII-8
ia_FR UTF-8
id_ID.UTF-8 UTF-8
id_ID ISO-8859-1
ig_NG UTF-8
ik_CA UTF-8
is_IS.UTF-8 UTF-8
is_IS ISO-8859-1
it_CH.UTF-8 UTF-8
it_CH ISO-8859-1
it_IT.UTF-8 UTF-8
it_IT ISO-8859-1
it_IT@euro ISO-8859-15
iu_CA UTF-8
ja_JP.UTF-8 UTF-8
ja_JP.EUC-JP EUC-JP
ka_GE.UTF-8 UTF-8
ka_GE GEORGIAN-PS
kab_DZ UTF-8
kk_KZ.UTF-8 UTF-8
kk_KZ PT154
kk_KZ.RK1048 RK1048
kl_GL.UTF-8 UTF-8
kl_GL ISO-8859-1
km_KH UTF-8
kn_IN UTF-8
ko_KR.UTF-8 UTF-8
ko_KR.EUC-KR EUC-KR
kok_IN UTF-8
ks_IN UTF-8
ks_IN@devanagari UTF-8
ku_TR.UTF-8 UTF-8
ku_TR ISO-8859-9
kw_GB.UTF-8 UTF-8
kw_GB ISO-8859-1
ky_KG UTF-8
lb_LU UTF-8
lg_UG.UTF-8 UTF-8
lg_UG ISO-8859-10
li_BE UTF-8
li_NL UTF-8
lij_IT UTF-8
ln_CD UTF-8
lo_LA UTF-8
lt_LT.UTF-8 UTF-8
lt_LT ISO-8859-13
lv_LV.UTF-8 UTF-8
lv_LV ISO-8859-13
lzh_TW UTF-8
mag_IN UTF-8
mai_IN UTF-8
mai_NP UTF-8
mfe_MU UTF-8
mg_MG.UTF-8 UTF-8
mg_MG ISO-8859-15
mhr_RU UTF-8
mi_NZ.UTF-8 UTF-8
mi_NZ ISO-8859-13
miq_NI UTF-8
mjw_IN UTF-8
mk_MK.UTF-8 UTF-8
mk_MK ISO-8859-5
ml_IN UTF-8
mn_MN UTF-8
mni_IN UTF-8
mr_IN UTF-8
ms_MY.UTF-8 UTF-8
ms_MY ISO-8859-1
mt_MT.UTF-8 UTF-8
mt_MT ISO-8859-3
my_MM UTF-8
nan_TW UTF-8
nan_TW@latin UTF-8
nb_NO.UTF-8 UTF-8
nb_NO ISO-8859-1
nds_DE UTF-8
nds_NL UTF-8
ne_NP UTF-8
nhn_MX UTF-8
niu_NU UTF-8
niu_NZ UTF-8
nl_AW UTF-8
nl_BE.UTF-8 UTF-8
nl_BE ISO-8859-1
nl_BE@euro ISO-8859-15
nl_NL.UTF-8 UTF-8
nl_NL ISO-8859-1
nl_NL@euro ISO-8859-15
nn_NO.UTF-8 UTF-8
nn_NO ISO-8859-1
nr_ZA UTF-8
nso_ZA UTF-8
oc_FR.UTF-8 UTF-8
oc_FR ISO-8859-1
om_ET UTF-8
om_KE.UTF-8 UTF-8
om_KE ISO-8859-1
or_IN UTF-8
os_RU UTF-8
pa_IN UTF-8
pa_PK UTF-8
pap_AW UTF-8
pap_CW UTF-8
pl_PL.UTF-8 UTF-8
pl_PL ISO-8859-2
ps_AF UTF-8
pt_BR.UTF-8 UTF-8
pt_BR ISO-8859-1
pt_PT.UTF-8 UTF-8
pt_PT ISO-8859-1
pt_PT@euro ISO-8859-15
quz_PE UTF-8
raj_IN UTF-8
ro_RO.UTF-8 UTF-8
ro_RO ISO-8859-2
ru_RU.UTF-8 UTF-8
ru_RU.KOI8-R KOI8-R
ru_RU ISO-8859-5
ru_RU.CP1251 CP1251
ru_UA.UTF-8 UTF-8
ru_UA KOI8-U
rw_RW UTF-8
sa_IN UTF-8
sah_RU UTF-8
sat_IN UTF-8
sc_IT UTF-8
sd_IN UTF-8
sd_IN@devanagari UTF-8
se_NO UTF-8
sgs_LT UTF-8
shn_MM UTF-8
shs_CA UTF-8
si_LK UTF-8
sid_ET UTF-8
sk_SK.UTF-8 UTF-8
sk_SK ISO-8859-2
sl_SI.UTF-8 UTF-8
sl_SI ISO-8859-2
sm_WS UTF-8
so_DJ.UTF-8 UTF-8
so_DJ ISO-8859-1
so_ET UTF-8
so_KE.UTF-8 UTF-8
so_KE ISO-8859-1
so_SO.UTF-8 UTF-8
so_SO ISO-8859-1
sq_AL.UTF-8 UTF-8
sq_AL ISO-8859-1
sq_MK UTF-8
sr_ME UTF-8
sr_RS UTF-8
sr_RS@latin UTF-8
ss_ZA UTF-8
st_ZA.UTF-8 UTF-8
st_ZA ISO-8859-1
sv_FI.UTF-8 UTF-8
sv_FI ISO-8859-1
sv_FI@euro ISO-8859-15
sv_SE.UTF-8 UTF-8
sv_SE ISO-8859-1
sv_SE.ISO-8859-15 ISO-8859-15
sw_KE UTF-8
sw_TZ UTF-8
szl_PL UTF-8
ta_IN UTF-8
ta_LK UTF-8
tcy_IN.UTF-8 UTF-8
te_IN UTF-8
tg_TJ.UTF-8 UTF-8
tg_TJ KOI8-T
th_TH.UTF-8 UTF-8
th_TH TIS-620
the_NP UTF-8
ti_ER UTF-8
ti_ET UTF-8
tig_ER UTF-8
tk_TM UTF-8
tl_PH.UTF-8 UTF-8
tl_PH ISO-8859-1
tn_ZA UTF-8
to_TO UTF-8
tpi_PG UTF-8
tr_CY.UTF-8 UTF-8
tr_CY ISO-8859-9
tr_TR.UTF-8 UTF-8
tr_TR ISO-8859-9
ts_ZA UTF-8
tt_RU UTF-8
tt_RU@iqtelif UTF-8
ug_CN UTF-8
uk_UA.UTF-8 UTF-8
uk_UA KOI8-U
unm_US UTF-8
ur_IN UTF-8
ur_PK UTF-8
uz_UZ.UTF-8 UTF-8
uz_UZ ISO-8859-1
uz_UZ@cyrillic UTF-8
ve_ZA UTF-8
vi_VN UTF-8
wa_BE.UTF-8 UTF-8
wa_BE ISO-8859-1
wa_BE@euro ISO-8859-15
wae_CH UTF-8
wal_ET UTF-8
wo_SN UTF-8
xh_ZA.UTF-8 UTF-8
xh_ZA ISO-8859-1
yi_US.UTF-8 UTF-8
yi_US CP1255
yo_NG UTF-8
yue_HK UTF-8
yuw_PG UTF-8
zh_CN.UTF-8 UTF-8
zh_CN.GB18030 GB18030
zh_CN.GBK GBK
zh_CN GB2312
zh_HK.UTF-8 UTF-8
zh_HK BIG5-HKSCS
zh_SG.UTF-8 UTF-8
zh_SG.GBK GBK
zh_SG GB2312
zh_TW.UTF-8 UTF-8
zh_TW.EUC-TW EUC-TW
zh_TW BIG5
zu_ZA.UTF-8 UTF-8
zu_ZA ISO-8859-1

View File

@ -195,6 +195,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################

View File

@ -195,6 +195,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################

View File

@ -195,6 +195,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################

View File

@ -195,6 +195,7 @@ RUN apt-get update && \
git \ git \
git-lfs && \ git-lfs && \
git --version && \ git --version && \
git-lfs install --skip-repo && \
git-lfs --version git-lfs --version
################################################################## ##################################################################

View File

View File

@ -0,0 +1,75 @@
FROM epicmorg/debian:bullseye-develop
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
ENV GITLAB_RUNNER_HOME=/opt/gitlab-runner
ENV GITLAB_RUNNER_CONF=/etc/gitlab-runner
ENV GIT_SSH_VARIANT=ssh
RUN mkdir -p ${GITLAB_RUNNER_HOME} ${GITLAB_RUNNER_CONF} ${GITLAB_RUNNER_CONF}/certs && \
chmod -R 700 /etc/gitlab-runner
##################################################################
# docker setup
##################################################################
#Install packages
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - && \
echo 'deb https://download.docker.com/linux/debian bullseye test' > /etc/apt/sources.list.d/docker.list && \
echo 'deb https://download.docker.com/linux/debian bullseye nightly' >> /etc/apt/sources.list.d/docker.list && \
apt-cache policy docker-ce && \
apt-get update && \
apt-get install -y --no-install-recommends --allow-unauthenticated \
docker-ce \
docker-ce-cli \
containerd.io systemd && \
systemctl disable docker && \
docker --version
COPY run-docker.sh /services/run-docker.sh
RUN chmod +x /services/run-docker.sh && \
sync
##################################################################
# docker compose setup
##################################################################
#Install packages
RUN export DOCKER_COMPOSE_VERSION=`curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r` && \
echo "Latest compose is: ${DOCKER_COMPOSE_VERSION}" && \
curl -SL https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose && \
chmod +x /usr/local/bin/docker-compose && \
docker-compose --version
##################################################################
# gitlab runner setup
##################################################################
COPY install-gitlab-runner.sh /tmp/install-gitlab-runner.sh
RUN cd /tmp && \
chmod +x /tmp/install-gitlab-runner.sh && \
bash /tmp/install-gitlab-runner.sh && \
# useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash && \
usermod -aG docker gitlab-runner && \
cat /etc/passwd && \
gitlab-runner --version
##################################################################
# cleaninig up
##################################################################
RUN apt clean -y && \
apt-get clean all && \
apt autoclean -y && \
rm -rfv /var/lib/apt/lists/* && \
rm -rfv /var/cache/apt/archives/*.deb && \
rm -rfv /tmp/*
#Final config
STOPSIGNAL SIGQUIT
VOLUME ["${GITLAB_RUNNER_CONF}", "${GITLAB_RUNNER_HOME}", "/var/lib/docker"]
WORKDIR ${GITLAB_RUNNER_HOME}
# Add image configuration and scripts
COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh
RUN chmod 755 /usr/bin/docker-entrypoint.sh
ENTRYPOINT ["/usr/bin/dumb-init", "docker-entrypoint.sh"]
CMD ["run", "--user=gitlab-runner", "--working-directory=${GITLAB_RUNNER_HOME}"]

View File

@ -0,0 +1,19 @@
all: app
app:
make build
make deploy
# make clean
build:
docker-compose build --compress --parallel --progress plain
deploy:
docker-compose push
#clean:
# docker container prune -f
# docker image prune -f
# docker network prune -f
# docker volume prune -f
# docker system prune -af

View File

@ -0,0 +1,6 @@
version: '3.9'
services:
app:
image: "epicmorg/gitlab-runner:latest"
build:
context: .

View File

@ -0,0 +1,22 @@
#!/bin/bash
# gitlab-runner data directory
DATA_DIR="/etc/gitlab-runner"
CONFIG_FILE=${CONFIG_FILE:-$DATA_DIR/config.toml}
# custom certificate authority path
CA_CERTIFICATES_PATH=${CA_CERTIFICATES_PATH:-$DATA_DIR/certs/ca.crt}
LOCAL_CA_PATH="/usr/local/share/ca-certificates/ca.crt"
update_ca() {
echo "Updating CA certificates..."
cp "${CA_CERTIFICATES_PATH}" "${LOCAL_CA_PATH}"
update-ca-certificates --fresh >/dev/null
}
if [ -f "${CA_CERTIFICATES_PATH}" ]; then
# update the ca if the custom ca is different than the current
cmp --silent "${CA_CERTIFICATES_PATH}" "${LOCAL_CA_PATH}" || update_ca
fi
# launch gitlab-runner passing all arguments
exec gitlab-runner "$@"

View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -eEo pipefail
wget --no-check-certificate -c https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_amd64.deb --random-wait -O /tmp/gitlab-runner.deb
dpkg -i "/tmp/gitlab-runner.deb"
apt-get update
apt-get -f install -y
rm -rfv /var/lib/apt/lists/*
rm -rfv "/tmp/gitlab-runner.deb"

View File

@ -0,0 +1,7 @@
#!/bin/bash
if [ "$DOCKER_IN_DOCKER" = "start" ] ; then
rm /var/run/docker.pid 2>/dev/null
service docker start
echo "Docker daemon started"
fi

View File

@ -0,0 +1,2 @@
NGINX_VERSION=latest
NGINX_DOWNLOAD_URL=http://nginx.org/download/nginx-1.23.2.tar.gz

View File

@ -0,0 +1,255 @@
##################################################################
# Set Global ARG to build process
##################################################################
ARG NGINX_VERSION
##################################################################
# Start build process
##################################################################
FROM epicmorg/debian:bullseye-develop AS builder
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
##################################################################
# ARGuments
##################################################################
ENV BuildDocker true
ARG BUILDS_DIR=/builds
ARG SRC_DIR=${BUILDS_DIR}/src
ARG EXPORT_DIR=${BUILDS_DIR}/export
ARG PRE_DIR=${BUILDS_DIR}/pre
ARG NGINX_SRC_DIR=${SRC_DIR}/nginx
ARG NGINX_VERSION
ARG NGINX_DOWNLOAD_URL
ARG LUAJIT_INC=/usr/local/include/luajit-2.1
ARG LUAJIT_LIB=/usr/local/lib
##################################################################
# Files and folders
##################################################################
RUN mkdir -p ${PRE_DIR} ${NGINX_SRC_DIR} /usr/lib/nginx
ADD pre/luajit2-description-pak ${PRE_DIR}
ADD pre/nginx-description-pak ${PRE_DIR}
ADD pre/ip2location-description-pak ${PRE_DIR}
##################################################################
# IP2Location support for prod nginx module
##################################################################
RUN cd ${SRC_DIR} && \
git clone https://github.com/chrislim2888/IP2Location-C-Library.git ip2 && \
cp -fv ${PRE_DIR}/ip2location-description-pak ${SRC_DIR}/ip2/description-pak && \
cd ${SRC_DIR}/ip2 && \
ls -las && \
autoreconf -i -v --force && \
aclocal && \
automake --gnu --add-missing && \
autoconf && \
autoreconf -i -v --force && \
./configure && \
ls -las && \
make clean && \
make && \
make -C data convert && \
make check && \
ls -las && \
fakeroot checkinstall -D --pakdir=${EXPORT_DIR} --maintainer="EpicMorg, developer@epicm.org" --pkgname=ip2-custom --conflicts=ip2 --install=yes -y && \
ln -s /usr/local/lib/libIP2Location.so /usr/lib/libIP2Location.so && \
ln -s /usr/local/lib/libIP2Location.so.1 /usr/lib/libIP2Location.so.1 && \
ln -s /usr/local/lib/libIP2Location.so.2 /usr/lib/libIP2Location.so.2 && \
ln -s /usr/local/lib/libIP2Location.so /lib/libIP2Location.so && \
ln -s /usr/local/lib/libIP2Location.so.1 /lib/libIP2Location.so.1 && \
ln -s /usr/local/lib/libIP2Location.so.2 /lib/libIP2Location.so.2 && \
ln -s /lib/x86_64-linux-gnu/libcrypto.so.1.1 /lib/x86_64-linux-gnu/libcrypto.so.1 && \
dpkg --force-all -i ${EXPORT_DIR}/*.deb
##################################################################
# luaJIT 2 support for prod nginx module
##################################################################
RUN cd ${SRC_DIR} && \
git clone https://github.com/openresty/luajit2.git luajit2 && \
cp -fv ${PRE_DIR}/luajit2-description-pak ${SRC_DIR}/luajit2/description-pak && \
cd ${SRC_DIR}/luajit2 && \
make && \
make install && \
fakeroot checkinstall -D --pakdir=${EXPORT_DIR} --maintainer="EpicMorg, developer@epicm.org" --pkgname=luajit2-custom --conflicts=luajit2 --install=no -y
##################################################################
# nginx preparing
##################################################################
RUN wget -qO - ${NGINX_DOWNLOAD_URL} | tar -zxv --strip-components=1 -C ${NGINX_SRC_DIR} && \
cd ${NGINX_SRC_DIR} && \
git clone https://github.com/openresty/headers-more-nginx-module.git http-headers-more-filter && \
git clone https://github.com/sto/ngx_http_auth_pam_module.git http-auth-pam && \
git clone https://github.com/arut/nginx-dav-ext-module.git http-dav-ext && \
git clone https://github.com/openresty/echo-nginx-module.git http-echo && \
git clone https://github.com/aperezdc/ngx-fancyindex.git http-fancyindex && \
git clone https://github.com/slact/nchan.git nchan && \
git clone https://github.com/msva/nginx-upload-progress-module.git http-uploadprogress && \
# git clone https://github.com/masterzen/nginx-upload-progress-module.git http-uploadprogress && \
git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module http-subs-filter && \
git clone https://github.com/grahamedgecombe/nginx-ct.git ssl-ct && \
# git clone https://github.com/stnoonan/spnego-http-auth-nginx-module.git spnego-http-auth-nginx-module && \
git clone https://github.com/leev/ngx_http_geoip2_module http-geoip2 && \
git clone https://github.com/flavioribeiro/nginx-audio-track-for-hls-module.git nginx-audio-track-for-hls-module && \
git clone https://github.com/chrislim2888/ip2location-nginx.git ip2location-nginx && \
git clone https://github.com/kaltura/nginx-vod-module.git nginx-vod-module && \
git clone https://github.com/vozlt/nginx-module-vts.git nginx-module-vts && \
git clone https://github.com/evanmiller/mod_zip.git mod-zip && \
git clone https://github.com/alibaba/nginx-http-user-agent.git nginx-http-user-agent && \
git clone https://github.com/youzee/nginx-unzip-module.git nginx-unzip-module && \
git clone https://github.com/vladbondarenko/ngx_webp.git ngx-webp && \
git clone https://github.com/openresty/xss-nginx-module.git xss-nginx-module && \
git clone https://github.com/openresty/set-misc-nginx-module.git set-misc-nginx-module && \
git clone https://github.com/arut/nginx-rtmp-module.git rtmp && \
git clone https://github.com/kvspb/nginx-auth-ldap.git http-auth-ldap && \
git clone https://github.com/simplresty/ngx_devel_kit.git http-ndk && \
git clone https://github.com/chrislim2888/IP2Location-C-Library.git ip2location-c-7.0.0 && \
git clone https://github.com/itoffshore/nginx-upstream-fair.git http-upstream-fair && \
git clone https://github.com/yaoweibin/nginx_upstream_check_module.git nginx-upstream-check-module && \
git clone https://github.com/openresty/lua-nginx-module http-lua
##################################################################
# nginx compilling
##################################################################
RUN cd ${NGINX_SRC_DIR} && \
./configure \
--sbin-path=/usr/sbin/nginx \
--prefix=/usr/share/nginx \
--conf-path=/etc/nginx/nginx.conf \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--lock-path=/var/lock/nginx.lock \
--pid-path=/run/nginx.pid \
--modules-path=/usr/lib/nginx/modules \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--with-cc-opt='-I/usr/local/include/luajit-2.1 -g -O2 -lz -fstack-protector-strong -Wformat -Wno-error=date-time -Wno-error=implicit-fallthrough= -Wno-error=cast-function-type -Wno-error=format-security -Wno-error=implicit-function-declaration -Wno-error=deprecated-declarations -Wno-error=unused-result -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -lz -fPIC -L/usr/local/lib' \
--with-file-aio \
--with-compat \
--with-debug \
--with-threads \
--with-pcre-jit \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_auth_request_module \
--with-http_v2_module \
--with-http_dav_module \
--with-http_slice_module \
--with-http_addition_module \
--with-http_flv_module \
--with-http_geoip_module=dynamic \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module=dynamic \
--with-http_mp4_module \
--with-http_perl_module=dynamic \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_sub_module \
--with-http_xslt_module=dynamic \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--add-dynamic-module=http-headers-more-filter \
--add-dynamic-module=http-auth-pam \
--add-dynamic-module=http-dav-ext \
--add-dynamic-module=http-ndk \
--add-dynamic-module=http-echo \
--add-dynamic-module=http-fancyindex \
--add-dynamic-module=nchan \
--add-dynamic-module=http-uploadprogress \
--add-dynamic-module=http-subs-filter \
--add-dynamic-module=ssl-ct \
--add-dynamic-module=http-geoip2 \
# --add-dynamic-module=spnego-http-auth-nginx-module \
--add-dynamic-module=http-auth-ldap \
# --add-dynamic-module=nginx-audio-track-for-hls-module \
--add-dynamic-module=ip2location-nginx \
--add-dynamic-module=nginx-vod-module \
# --add-dynamic-module=nginx-module-vts \
--add-dynamic-module=mod-zip \
--add-dynamic-module=nginx-http-user-agent \
--add-dynamic-module=nginx-unzip-module \
--add-dynamic-module=ngx-webp \
--add-dynamic-module=set-misc-nginx-module \
--add-dynamic-module=rtmp \
--add-dynamic-module=http-upstream-fair \
--add-dynamic-module=nginx-upstream-check-module \
--add-dynamic-module=http-lua && \
cp -fv ${PRE_DIR}/nginx-description-pak ${NGINX_SRC_DIR}/description-pak && \
fakeroot checkinstall -D --pakdir=/builds/export --maintainer="EpicMorg, developer@epicm.org" --pkgname=nginx-custom --install=no -y && \
apt clean -y && \
apt autoclean -y && \
rm -rfv /var/lib/apt/lists/* && \
rm -rfv /var/cache/apt/archives/*.deb
##################################################################
##################################################################
##################################################################
FROM epicmorg/debian:bullseye
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
##################################################################
# LDAP Fix
##################################################################
RUN echo "TLS_REQCERT never" >> /etc/ldap/ldap.conf
##################################################################
# Installing nginx from deb
##################################################################
ADD pre/ngninx.pre.tar.gz /
COPY --from=builder /builds/export /tmp/deb
RUN apt-get update && \
apt-get install -y --allow-unauthenticated \
geoip-database \
geoip-bin \
libgeoip1 \
libmaxminddb0 \
libgd3 \
libxslt1.1 && \
dpkg --force-all -i /tmp/deb/*.deb && \
ln -s /usr/local/lib/libIP2Location.so /usr/lib/libIP2Location.so && \
ln -s /usr/local/lib/libIP2Location.so.1 /usr/lib/libIP2Location.so.1 && \
ln -s /usr/local/lib/libIP2Location.so.2 /usr/lib/libIP2Location.so.2 && \
ln -s /usr/local/lib/libIP2Location.so.3 /usr/lib/libIP2Location.so.3 && \
ln -s /usr/local/lib/libIP2Location.so.4 /usr/lib/libIP2Location.so.4 && \
ln -s /usr/local/lib/libIP2Location.so.5 /usr/lib/libIP2Location.so.5 && \
ln -s /usr/local/lib/libIP2Location.so /lib/libIP2Location.so && \
ln -s /usr/local/lib/libIP2Location.so.1 /lib/libIP2Location.so.1 && \
ln -s /usr/local/lib/libIP2Location.so.2 /lib/libIP2Location.so.2 && \
ln -s /usr/local/lib/libIP2Location.so.3 /lib/libIP2Location.so.3 && \
ln -s /usr/local/lib/libIP2Location.so.4 /lib/libIP2Location.so.4 && \
ln -s /usr/local/lib/libIP2Location.so.5 /lib/libIP2Location.so.5 && \
ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log && \
ln -sf /etc/ssl/dhparam.pem /etc/nginx/dhparam.pem && \
apt clean -y && \
apt autoclean -y && \
rm -rf /var/lib/apt/lists/* && \
rm -rf /var/cache/apt/archives/*.deb && \
rm -rf /tmp/deb/* && \
rm -rf /builds/* && \
rm -rf /valve/*
#healthcheck. good practice
HEALTHCHECK --interval=2m --timeout=3s CMD curl -f http://localhost:80/ || exit 1
# Add image configuration and scripts
COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh
RUN chmod 755 /usr/bin/docker-entrypoint.sh
#Final config
VOLUME ["/var/cache/nginx"]
EXPOSE 80 443
ENTRYPOINT ["tini", "-s", "--", "docker-entrypoint.sh"]
CMD ["docker-entrypoint.sh"]

View File

@ -0,0 +1,19 @@
all: app
app:
make build
make deploy
make clean
build:
docker-compose build --compress --parallel --progress plain
deploy:
docker-compose push
clean:
docker container prune -f
docker image prune -f
docker network prune -f
docker volume prune -f
docker system prune -af

View File

@ -0,0 +1,30 @@
# Compose example
```yml
version: '3.7'
services:
balancer:
image: epicmorg/balancer
restart: unless-stopped
ports:
- "0.0.0.0:80:80"
- "0.0.0.0:443:443"
volumes:
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
- /etc/letsencrypt:/etc/letsencrypt
- nginx:/etc/nginx
- nginx-usr:/usr/share/nginx/html
- /var/lib/nginx
# extra_hosts:
# - "example.com:192.168.0.11"
depends_on:
- websites
tmpfs:
- /tmp
volumes:
nginx:
external: true
nginx-usr:
external: true
```

View File

@ -0,0 +1,9 @@
version: '3.9'
services:
app:
image: "epicmorg/nginx:${NGINX_VERSION}"
build:
context: .
args:
NGINX_VERSION: ${NGINX_VERSION}
NGINX_DOWNLOAD_URL: ${NGINX_DOWNLOAD_URL}

View File

@ -0,0 +1,16 @@
#!/bin/bash
if [[ -z "${FIX_WWW_DATA}" ]]; then
echo "[nginx] env FIX_WWW_DATA is not set. Skipping..."
elif [ "${FIX_WWW_DATA}" == "false" ]; then
echo "[nginx] env FIX_WWW_DATA is set to false. Skipping..."
elif [ "${FIX_WWW_DATA}" == "true" ]; then
echo "[nginx] Changing permissions for /var/www path. Dont worry, please wait."
chown www-data:www-data /var/www -R
echo "[nginx] Done"
else
echo "[nginx] env FIX_WWW_DATA is set to strange value. Skipping..."
fi
echo "[nginx] Starting up"
nginx -g 'daemon off;'

View File

@ -0,0 +1 @@
Custom build of ip2location lib by EpicMorg.

View File

@ -0,0 +1 @@
Custom build of luajit2 for Nginx module, by EpicMorg.

View File

@ -0,0 +1 @@
Custom build of Nginx with some modules by EpicMorg.

View File

@ -0,0 +1,2 @@
NGINX_VERSION=latest
NGINX_DOWNLOAD_URL=http://nginx.org/download/nginx-1.23.2.tar.gz

View File

@ -0,0 +1,263 @@
##################################################################
# Set Global ARG to build process
##################################################################
ARG NGINX_VERSION
##################################################################
# Start build process
##################################################################
FROM epicmorg/debian:bullseye-develop AS builder
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
##################################################################
# ARGuments
##################################################################
ENV BuildDocker true
ARG BUILDS_DIR=/builds
ARG SRC_DIR=${BUILDS_DIR}/src
ARG EXPORT_DIR=${BUILDS_DIR}/export
ARG P4API_DIR=${SRC_DIR}/p4api
ARG P4PHP_DIR=${SRC_DIR}/p4php
ARG MAKE_DIR=${SRC_DIR}/p4php-7.4
ARG P4API_VER=r20.1
ARG P4API_URL=http://filehost.perforce.com/perforce/${P4API_VER}/bin.linux26x86_64/p4api.tgz
ARG P4PHP_VER=r20.1
ARG P4PHP_URL=http://filehost.perforce.com/perforce/${P4PHP_VER}/bin.tools/p4php-php7.tgz
ARG PHP_MODULE_PATH=/usr/lib/php/20190902
##################################################################
# Files and folders
##################################################################
RUN mkdir -p ${BUILDS_DIR} ${SRC_DIR} ${EXPORT_DIR} ${MAKE_DIR} ${P4API_DIR} ${P4PHP_DIR}
##################################################################
# Installing PHP7
##################################################################
#installing php repo
#Install base packages
RUN apt-get update && \
apt-get install -y --allow-unauthenticated \
libmemcached-dev \
smbclient libsmbclient libsmbclient-dev \
php7.4 \
php7.4-dev \
php7.4-fpm \
php7.4-cli \
php7.4-cgi
##################################################################
# preparing p4src
##################################################################
RUN wget -qO - ${P4API_URL} | tar -zxv --strip-components=1 -C ${P4API_DIR} && \
wget -qO - ${P4API_URL} | tar -zxv --strip-components=1 -C ${MAKE_DIR} && \
wget -qO - ${P4PHP_URL} | tar -zxv --strip-components=1 -C ${P4PHP_DIR} && \
wget -qO - ${P4PHP_URL} | tar -zxv --strip-components=1 -C ${MAKE_DIR} && \
cd ${P4API_DIR} && \
ls -las && \
cd ${P4PHP_DIR} && \
ls -las && \
cd ${MAKE_DIR} && \
ls -las && \
cd ${SRC_DIR} && \
ls -las
##################################################################
# compilling p4src
##################################################################
RUN cd ${MAKE_DIR} && \
ls -las && \
phpize && \
./configure --with-perforce=${P4API_DIR} && \
make && \
make test && \
make install && \
cp ${PHP_MODULE_PATH}/perforce.so ${EXPORT_DIR}
##################################################################
# compilling smbclient
##################################################################
RUN pecl install smbclient && \
cp ${PHP_MODULE_PATH}/smbclient.so ${EXPORT_DIR}
##################################################################
##################################################################
##################################################################
FROM epicmorg/nginx:${NGINX_VERSION}
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
##################################################################
# Installing php fpm for nginx from deb
##################################################################
ARG PHP_MODULE_PATH=/usr/lib/php/20190902
ARG PHP_VER=7.4
ARG PHP_DIR=/etc/php/${PHP_VER}
ARG P4_PHP_INI=${PHP_DIR}/mods-available/perfroce.ini
ARG SMB_PHP_INI=${PHP_DIR}/mods-available/smbclient.ini
##################################################################
# Installing PHP7
##################################################################
#Install base packages
RUN apt-get update && \
apt-get install -y --allow-unauthenticated \
php7.4 \
php7.4-dev \
php7.4-fpm \
php7.4-cli \
php7.4-cgi \
php-pear \
php7.4-gmp \
php7.4-snmp \
php7.4-ldap \
php7.4-mail \
php7.4-soap \
php7.4-mysql \
php7.4-memcached \
php7.4-memcache \
php7.4-igbinary \
php7.4-interbase \
php7.4-curl \
php7.4-gd \
php7.4-intl \
php7.4-zip \
php7.4-bcmath \
php7.4-imap \
php7.4-pspell \
php7.4-sqlite3 \
php7.4-tidy \
php7.4-xmlrpc \
php7.4-xml \
php7.4-mbstring \
php7.4-apcu \
php7.4-common \
php7.4-json \
php7.4-readline \
php7.4-enchant \
php7.4-ssh2 \
php7.4-oauth \
php7.4-gmagick \
php7.4-gnupg \
php7.4-redis \
smbclient libsmbclient \
# php-smbclient \
php7.4-yaml \
php7.4-geoip \
sendmail && \
update-alternatives --set php /usr/bin/php7.4 && \
phpenmod \
snmp \
gmp \
calendar \
ldap \
curl \
exif \
ftp \
fileinfo \
gd \
geoip \
gnupg \
iconv \
imap \
json \
mbstring \
memcached \
mysqli \
mysqlnd \
oauth \
pdo_mysql \
pdo_sqlite \
phar \
posix \
readline \
redis \
simplexml \
sockets \
sqlite3 \
ssh2 \
tokenizer \
xml \
xmlreader \
xmlrpc \
xmlwriter \
xsl \
yaml && \
ln -sf /etc/ssl/dhparam.pem /etc/php/dhparam.pem && \
php -v
##################################################################
# Installing IOnCube addon
##################################################################
ADD https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz /tmp/ioncube.tar.gz
RUN tar -C /tmp -xvf /tmp/ioncube.tar.gz && \
cp /tmp/ioncube/ioncube_loader_lin_7.4.so ${PHP_MODULE_PATH} && \
# echo "zend_extension = ${PHP_MODULE_PATH}/ioncube_loader_lin_7.4.so" >> ${PHP_DIR}/apache2/php.ini && \
echo "zend_extension = ${PHP_MODULE_PATH}/ioncube_loader_lin_7.4.so" >> ${PHP_DIR}/cgi/php.ini && \
echo "zend_extension = ${PHP_MODULE_PATH}/ioncube_loader_lin_7.4.so" >> ${PHP_DIR}/cli/php.ini && \
echo "zend_extension = ${PHP_MODULE_PATH}/ioncube_loader_lin_7.4.so" >> ${PHP_DIR}/fpm/php.ini && \
php -m && \
php -v
##################################################################
# Installing P4 addon
##################################################################
COPY --from=builder /builds/export/perforce.so ${PHP_MODULE_PATH}
RUN echo "extension=perforce.so" > ${P4_PHP_INI} && \
ln -sf ${P4_PHP_INI} ${PHP_DIR}/cgi/conf.d/perforce.ini && \
ln -sf ${P4_PHP_INI} ${PHP_DIR}/cli/conf.d/perforce.ini && \
ln -sf ${P4_PHP_INI} ${PHP_DIR}/fpm/conf.d/perforce.ini && \
php -m && \
php -v
##################################################################
# Installing smbclient addon
##################################################################
COPY --from=builder /builds/export/smbclient.so ${PHP_MODULE_PATH}
RUN echo "extension=smbclient.so" > ${SMB_PHP_INI} && \
ln -sf ${SMB_PHP_INI} ${PHP_DIR}/cgi/conf.d/smbclient.ini && \
ln -sf ${SMB_PHP_INI} ${PHP_DIR}/cli/conf.d/smbclient.ini && \
ln -sf ${SMB_PHP_INI} ${PHP_DIR}/fpm/conf.d/smbclient.ini && \
php -m && \
php -v
##################################################################
# Installing Composer addon
##################################################################
RUN cd /tmp && \
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
php composer-setup.php --install-dir=/usr/local/bin --filename=composer && \
rm /tmp/composer-setup.php
##################################################################
# cleaninig up
##################################################################
RUN apt clean -y && \
apt autoclean -y && \
rm -rfv /var/lib/apt/lists/* && \
rm -rfv /var/cache/apt/archives/*.deb && \
rm -rfv /tmp/deb/* && \
rm -rfv /tmp/ioncube/* && \
rm -rfv /tmp/composer-setup.php && \
rm -rfv /tmp/ioncube.tar.gz
#healthcheck. good practice
HEALTHCHECK --interval=2m --timeout=3s CMD curl -f http://localhost:80/ || exit 1
# Add image configuration and scripts
COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh
RUN chmod 755 /usr/bin/docker-entrypoint.sh
#Final config
VOLUME ["/var/cache/nginx"]
EXPOSE 80 443
ENTRYPOINT ["tini", "-s", "--", "docker-entrypoint.sh"]
CMD ["docker-entrypoint.sh"]

View File

@ -0,0 +1,19 @@
all: app
app:
make build
make deploy
make clean
build:
docker-compose build --compress --parallel --progress plain
deploy:
docker-compose push
clean:
docker container prune -f
docker image prune -f
docker network prune -f
docker volume prune -f
docker system prune -af

View File

@ -0,0 +1,30 @@
# Compose example
```yml
version: '3.7'
services:
balancer:
image: epicmorg/balancer
restart: unless-stopped
ports:
- "0.0.0.0:80:80"
- "0.0.0.0:443:443"
volumes:
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
- /etc/letsencrypt:/etc/letsencrypt
- nginx:/etc/nginx
- nginx-usr:/usr/share/nginx/html
- /var/lib/nginx
# extra_hosts:
# - "example.com:192.168.0.11"
depends_on:
- websites
tmpfs:
- /tmp
volumes:
nginx:
external: true
nginx-usr:
external: true
```

View File

@ -0,0 +1,9 @@
version: '3.9'
services:
app:
image: "epicmorg/nginx:${NGINX_VERSION}-php"
build:
context: .
args:
NGINX_VERSION: ${NGINX_VERSION}
NGINX_DOWNLOAD_URL: ${NGINX_DOWNLOAD_URL}

View File

@ -0,0 +1,16 @@
#!/bin/bash
if [[ -z "${FIX_WWW_DATA}" ]]; then
echo "[nginx] env FIX_WWW_DATA is not set. Skipping..."
elif [ "${FIX_WWW_DATA}" == "false" ]; then
echo "[nginx] env FIX_WWW_DATA is set to false. Skipping..."
elif [ "${FIX_WWW_DATA}" == "true" ]; then
echo "[nginx] Changing permissions for /var/www path. Dont worry, please wait."
chown www-data:www-data /var/www -R
echo "[nginx] Done"
else
echo "[nginx] env FIX_WWW_DATA is set to strange value. Skipping..."
fi
echo "[nginx] Starting up"
nginx -g 'daemon off;'

View File

@ -0,0 +1,2 @@
NGINX_VERSION=latest
NGINX_DOWNLOAD_URL=http://nginx.org/download/nginx-1.23.2.tar.gz

View File

@ -0,0 +1,131 @@
##################################################################
# Set Global ARG to build process
##################################################################
ARG NGINX_VERSION
##################################################################
# Start build process
##################################################################
FROM epicmorg/nginx:${NGINX_VERSION}
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
ARG NGINX_RTMP_MODULE_VERSION=1.2.1
##################################################################
# Clear sources.list.d
##################################################################
RUN rm -rfv /etc/apt/sources.list.d/*
##################################################################
# sid sources list
##################################################################
RUN rm -rfv /etc/apt/sources.list
COPY sources.list.d/sources.sid.list /etc/apt/sources.list
RUN apt update
##################################################################
# installing utils
##################################################################
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get update && \
apt-get install -y --allow-unauthenticated \
libpcre3-dev \
librtmp1 \
libtheora0 \
libvorbis-dev \
libmp3lame0 \
libx264-dev \
libx265-dev
##################################################################
# stretch sources list + libvpx
##################################################################
RUN rm -rfv /etc/apt/sources.list
COPY sources.list.d/sources.stretch.list /etc/apt/sources.list
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get update && \
apt-get install -y --allow-unauthenticated \
libvpx4
##################################################################
# buster sources list + libvpx
##################################################################
RUN rm -rfv /etc/apt/sources.list
COPY sources.list.d/sources.buster.list /etc/apt/sources.list
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get update && \
apt-get install -y --allow-unauthenticated \
libvpx5
##################################################################
# sid sources list + libvpx
##################################################################
RUN rm -rfv /etc/apt/sources.list
COPY sources.list.d/sources.sid.list /etc/apt/sources.list
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get update && \
apt-get install -y --allow-unauthenticated \
libvpx6
##################################################################
# installing deps for rtmp module
##################################################################
RUN mkdir -p /usr/share/nginx/html \
/mnt/hls \
/mnt/dash \
/tmp/build && \
chown -R www-data:www-data /mnt/hls && \
chown -R www-data:www-data /mnt/dash && \
chmod -R 755 /mnt/hls && \
chmod -R 755 /mnt/dash && \
cd /tmp/build && \
wget https://github.com/arut/nginx-rtmp-module/archive/v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \
tar -zxf v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \
rm v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \
cp /tmp/build/nginx-rtmp-module-${NGINX_RTMP_MODULE_VERSION}/stat.xsl /usr/share/nginx/html/stat.xsl && \
rm -rf /tmp/build
##################################################################
# Forward logs to Docker
##################################################################
RUN ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log
##################################################################
# Copy nginx config file to container
##################################################################
RUN rm -rfv /etc/nginx/nginx.conf \
/etc/nginx/sites-avalible/default
COPY conf/nginx.conf /etc/nginx/nginx.conf
##################################################################
# Copy html players to container
##################################################################
COPY players /usr/share/nginx/html/players
##################################################################
# cleaninig up
##################################################################
RUN apt clean -y && \
apt autoclean -y && \
rm -rfv /var/lib/apt/lists/* && \
rm -rfv /var/cache/apt/archives/*.deb
#healthcheck. good practice
HEALTHCHECK --interval=2m --timeout=3s CMD curl -f http://localhost:80/ || exit 1
# Add image configuration and scripts
COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh
RUN chmod 755 /usr/bin/docker-entrypoint.sh
#Final config
VOLUME ["/var/cache/nginx"]
EXPOSE 80 443 1935 8080
ENTRYPOINT ["tini", "-s", "--", "docker-entrypoint.sh"]
CMD ["docker-entrypoint.sh"]

View File

@ -0,0 +1,19 @@
all: app
app:
make build
make deploy
make clean
build:
docker-compose build --compress --parallel --progress plain
deploy:
docker-compose push
clean:
docker container prune -f
docker image prune -f
docker network prune -f
docker volume prune -f
docker system prune -af

View File

@ -0,0 +1,78 @@
# RTMP-HLS Docker
**BASED ON** [TareqAlqutami/rtmp-hls-server](https://github.com/TareqAlqutami/rtmp-hls-server)
**Docker image for video streaming server that supports RTMP, HLS, and DASH streams.**
## Description
This Docker image can be used to create a video streaming server that supports [**RTMP**](https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol), [**HLS**](https://en.wikipedia.org/wiki/HTTP_Live_Streaming), [**DASH**](https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP) out of the box.
It also allows adaptive streaming and custom transcoding of video streams.
All modules are built from source on Debian and Alpine Linux base images.
## Features
* The backend is [**Nginx**](http://nginx.org/en/) with [**nginx-rtmp-module**](https://github.com/arut/nginx-rtmp-module).
* [**FFmpeg**](https://www.ffmpeg.org/) for transcoding and adaptive streaming.
* Default settings:
* RTMP is ON
* HLS is ON (adaptive, 5 variants)
* DASH is ON
* Other Nginx configuration files are also provided to allow for RTMP-only streams or no-FFmpeg transcoding.
* Statistic page of RTMP streams at `http://<server ip>:<server port>/stats`.
* Available web video players (based on [video.js](https://videojs.com/) and [hls.js](https://github.com/video-dev/hls.js/)) at `/usr/share/nginx/html/players`.
## Usage
### To run the server
```
docker run -d -p 1935:1935 -p 8080:8080 epicmorg/balancer:rtmp-hls
```
To run with custom conf file:
```
docker run -d -p 1935:1935 -p 8080:8080 -v custom.conf:/etc/nginx/nginx.conf epicmorg/balancer:rtmp-hls
```
where `custom.conf` is the new conf file for Nginx.
### To stream to the server
* **Stream live RTMP content to:**
```
rtmp://<server ip>:1935/live/<stream_key>
```
where `<stream_key>` is any stream key you specify.
* **Configure [OBS](https://obsproject.com/) to stream content:** <br />
Go to Settings > Stream, choose the following settings:
* Service: Custom Streaming Server.
* Server: `rtmp://<server ip>:1935/live`.
* Stream key: anything you want, however provided video players assume stream key is `test`
### To view the stream
* **Using [VLC](https://www.videolan.org/vlc/index.html):**
* Go to Media > Open Network Stream.
* Enter the streaming URL: `rtmp://<server ip>:1935/live/<stream-key>`
Replace `<server ip>` with the IP of where the server is running, and
`<stream-key>` with the stream key you used when setting up the stream.
* For HLS and DASH, the URLs are of the forms:
`http://<server ip>:8080/hls/<stream-key>.m3u8` and
`http://<server ip>:8080/dash/<stream-key>_src.mpd` respectively.
* Click Play.
* **Using provided web players:** <br/>
The provided demo players assume the stream-key is called `test` and the player is opened in localhost.
* To play RTMP content (requires Flash): `http://localhost:8080/players/rtmp.html`
* To play HLS content: `http://localhost:8080/players/hls.html`
* To play HLS content using hls.js library: `http://localhost:8080/players/hls_hlsjs.html`
* To play DASH content: `http://localhost:8080/players/dash.html`
* To play RTMP and HLS contents on the same page: `http://localhost:8080/players/rtmp_hls.html`
**Notes:**
* These web players are hardcoded to play stream key "test" at localhost.
* To change the stream source for these players. Download the html files and modify the `src` attribute in the video tag in the html file. You can then mount the modified files to the container as follows:
```
docker run -d -p 1935:1935 -p 8080:8080 -v custom_players:/usr/share/nginx/html/players epicmorg/balancer:rtmp-hls
```
where `custom_players` is the directory holding the modified html files.

View File

@ -0,0 +1,134 @@
load_module "/usr/lib/nginx/modules/ngx_rtmp_module.so";
worker_processes auto;
#error_log logs/error.log;
events {
worker_connections 1024;
}
# RTMP configuration
rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4000;
# ping 30s;
# notify_method get;
# This application is to accept incoming stream
application live {
live on; # Allows live input
# for each received stream, transcode for adaptive streaming
# This single ffmpeg command takes the input and transforms
# the source into 4 different streams with different bitrates
# and qualities. # these settings respect the aspect ratio.
exec_push /usr/bin/ffmpeg -i rtmp://localhost:1935/$app/$name -async 1 -vsync -1
-c:v libx264 -c:a aac -b:v 256k -b:a 64k -vf "scale=480:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_low
-c:v libx264 -c:a aac -b:v 768k -b:a 128k -vf "scale=720:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_mid
-c:v libx264 -c:a aac -b:v 1024k -b:a 128k -vf "scale=960:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_high
-c:v libx264 -c:a aac -b:v 1920k -b:a 128k -vf "scale=1280:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_hd720
-c copy -f flv rtmp://localhost:1935/show/$name_src;
}
# This is the HLS application
application show {
live on; # Allows live input from above application
deny play all; # disable consuming the stream from nginx as rtmp
hls on; # Enable HTTP Live Streaming
hls_fragment 3;
hls_playlist_length 20;
hls_path /mnt/hls/; # hls fragments path
# Instruct clients to adjust resolution according to bandwidth
hls_variant _src BANDWIDTH=4096000; # Source bitrate, source resolution
hls_variant _hd720 BANDWIDTH=2048000; # High bitrate, HD 720p resolution
hls_variant _high BANDWIDTH=1152000; # High bitrate, higher-than-SD resolution
hls_variant _mid BANDWIDTH=448000; # Medium bitrate, SD resolution
hls_variant _low BANDWIDTH=288000; # Low bitrate, sub-SD resolution
# MPEG-DASH
dash on;
dash_path /mnt/dash/; # dash fragments path
dash_fragment 3;
dash_playlist_length 20;
}
}
}
http {
include /etc/nginx/sites-enabled/*.conf;
sendfile off;
tcp_nopush on;
directio 512;
# aio on;
# HTTP server required to serve the player and HLS fragments
server {
listen 8080;
# Serve HLS fragments
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /mnt;
add_header Cache-Control no-cache; # Disable cache
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
# Serve DASH fragments
location /dash {
types {
application/dash+xml mpd;
video/mp4 mp4;
}
root /mnt;
add_header Cache-Control no-cache; # Disable cache
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# Allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
# This URL provides RTMP statistics in XML
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl; # Use stat.xsl stylesheet
}
location /stat.xsl {
# XML stylesheet to view RTMP stats.
root /usr/share/nginx/html;
}
}
}

View File

@ -0,0 +1,118 @@
load_module "/usr/lib/nginx/modules/ngx_rtmp_module.so";
worker_processes auto;
#error_log logs/error.log;
events {
worker_connections 1024;
}
# RTMP configuration
rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4000;
# ping 30s;
# notify_method get;
# This application is to accept incoming stream
application live {
live on; # Allows live input
push rtmp://localhost:1935/show;
}
# This is the HLS application
application show {
live on; # Allows live input from above application
deny play all; # disable consuming the stream from nginx as rtmp
hls on; # Enable HTTP Live Streaming
hls_fragment 3;
hls_playlist_length 10;
hls_path /mnt/hls/; # hls fragments path
# MPEG-DASH
dash on;
dash_path /mnt/dash/; # dash fragments path
dash_fragment 3;
dash_playlist_length 10;
}
}
}
http {
include /etc/nginx/sites-enabled/*.conf;
sendfile off;
tcp_nopush on;
directio 512;
# aio on;
# HTTP server required to serve the player and HLS fragments
server {
listen 8080;
# Serve HLS fragments
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /mnt;
add_header Cache-Control no-cache; # Disable cache
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
# Serve DASH fragments
location /dash {
types {
application/dash+xml mpd;
video/mp4 mp4;
}
root /mnt;
add_header Cache-Control no-cache; # Disable cache
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# Allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
# This URL provides RTMP statistics in XML
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl; # Use stat.xsl stylesheet
}
location /stat.xsl {
# XML stylesheet to view RTMP stats.
root /usr/share/nginx/html;
}
}
}

View File

@ -0,0 +1,16 @@
load_module "/usr/lib/nginx/modules/ngx_rtmp_module.so";
worker_processes auto;
rtmp_auto_push on;
events {}
rtmp {
server {
listen 1935;
listen [::]:1935;
application live {
live on;
record off;
}
}
}

View File

@ -0,0 +1,9 @@
version: '3.9'
services:
app:
image: "epicmorg/nginx:${NGINX_VERSION}-rtmp-hls"
build:
context: .
args:
NGINX_VERSION: ${NGINX_VERSION}
NGINX_DOWNLOAD_URL: ${NGINX_DOWNLOAD_URL}

View File

@ -0,0 +1,16 @@
#!/bin/bash
if [[ -z "${FIX_WWW_DATA}" ]]; then
echo "[nginx] env FIX_WWW_DATA is not set. Skipping..."
elif [ "${FIX_WWW_DATA}" == "false" ]; then
echo "[nginx] env FIX_WWW_DATA is set to false. Skipping..."
elif [ "${FIX_WWW_DATA}" == "true" ]; then
echo "[nginx] Changing permissions for /var/www path. Dont worry, please wait."
chown www-data:www-data /var/www -R
echo "[nginx] Done"
else
echo "[nginx] env FIX_WWW_DATA is set to strange value. Skipping..."
fi
echo "[nginx] Starting up"
nginx -g 'daemon off;'

View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DASH Live Streaming</title>
<link href="https://vjs.zencdn.net/7.5.5/video-js.css" rel="stylesheet">
<script src="https://vjs.zencdn.net/7.5.5/video.js"></script>
</head>
<body>
<h1>DASH Player</h1>
<video id="player" class="video-js vjs-default-skin" width="720" controls preload="auto">
<source src="/dash/test_src.mpd" type="application/dash+xml" />
</video>
<script>
var player = videojs('#player');
</script>
<div id="footer">
<font size="2"> Tareq-Alqutami - 2019</font>
</div>
</body>
</html>

View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HLS Live Streaming</title>
<link href="https://vjs.zencdn.net/7.5.5/video-js.css" rel="stylesheet">
<script src="https://vjs.zencdn.net/7.5.5/video.js"></script>
</head>
<body>
<h1>HLS Player</h1>
<video id="player" class="video-js vjs-default-skin" width="720" controls preload="auto">
<source src="/hls/test.m3u8" type="application/x-mpegURL" />
</video>
<script>
var player = videojs('#player');
</script>
<div id="footer">
<font size="2"> Tareq-Alqutami - 2019</font>
</div>
</body>
</html>

View File

@ -0,0 +1,41 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>HLS streaming</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
</head>
<body>
<h1>HLS Player (using hls.js)</h1>
<div class="well">
<div class="embed-responsive embed-responsive-16by9">
<video id="video" style="max-height: 50%" class="embed-responsive-item video-js vjs-default-skin" controls muted="muted"></video>
</div>
</div>
<script>
if(Hls.isSupported()) {
var video = document.getElementById('video');
var hls = new Hls();
hls.loadSource('/hls/test.m3u8');
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
}
</script>
<div id="footer">
<font size="2">Tareq-Alqutami - 2019</font>
</div>
</body>
</html>

View File

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>RTMP Live Streaming</title>
<title>Live Streaming</title>
<link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet">
<script src="https://unpkg.com/video.js/dist/video.js"></script>
<script src="https://unpkg.com/videojs-flash/dist/videojs-flash.min.js"></script>
<script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
</head>
<body>
<h1>RTMP Player</h1>
<video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto" width="720"
data-setup='{"techOrder": ["html5","flash"]}'>
<source src="rtmp://127.0.0.1:1935/live/test" type="rtmp/mp4">
</video>
<div id="footer">
<font size="2">Tareq Alqutami - 2019</font>
</div>
</body>
</html>

View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Live Streaming</title>
<link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet">
<script src="https://unpkg.com/video.js/dist/video.js"></script>
<script src="https://unpkg.com/videojs-flash/dist/videojs-flash.min.js"></script>
<script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
</head>
<body>
<h1>RTMP Player</h1>
<video id="rtmp_video" class="video-js vjs-default-skin" controls preload="auto" width="720"
data-setup='{"techOrder": ["html5","flash"]}'>
<source src="rtmp://127.0.0.1:1935/live/test" type="rtmp/mp4">
</video>
<h1>HLS Player</h1>
<video id="hls_video" class="video-js vjs-default-skin" controls preload="auto" width="720"
data-setup='{"techOrder": ["html5","flash"]}'>
<source src="http://127.0.0.1:8080/hls/test.m3u8" type="application/x-mpegURL">
</video>
<div id="footer">
<font size="2">Tareq Alqutami - 2019</font>
</div>
</body>
</html>

View File

@ -0,0 +1,19 @@
#main
deb http://httpredir.debian.org/debian/ buster main contrib non-free
deb-src http://httpredir.debian.org/debian/ buster main contrib non-free
deb http://httpredir.debian.org/debian/ buster-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ buster-updates main contrib non-free
deb http://httpredir.debian.org/debian/ buster-backports main contrib non-free
deb-src http://httpredir.debian.org/debian/ buster-backports main contrib non-free
deb http://httpredir.debian.org/debian/ buster-proposed-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ buster-proposed-updates main contrib non-free
#security
deb http://httpredir.debian.org/debian-security/ buster/updates main contrib non-free
deb-src http://httpredir.debian.org/debian-security/ buster/updates main contrib non-free
##multimedia
#deb http://httpredir.debian.org/debian-multimedia/ buster main non-free
#deb-src http://httpredir.debian.org/debian-multimedia/ buster main non-free
#deb http://httpredir.debian.org/debian-multimedia/ buster-backports main
#deb-src http://httpredir.debian.org/debian-multimedia/ buster-backports main

View File

@ -0,0 +1,19 @@
#main
deb http://httpredir.debian.org/debian/ sid main contrib non-free
deb-src http://httpredir.debian.org/debian/ sid main contrib non-free
deb http://httpredir.debian.org/debian/ testing-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ testing-updates main contrib non-free
deb http://httpredir.debian.org/debian/ testing-proposed-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ testing-proposed-updates main contrib non-free
#backports
#deb http://httpredir.debian.org/debian/ testing-backports main contrib non-free
#deb-src http://httpredir.debian.org/debian/ testing-backports main contrib non-free
#security
deb http://httpredir.debian.org/debian-security/ testing-security main contrib non-free
deb-src http://httpredir.debian.org/debian-security/ testing-security main contrib non-free
##multimedia
#deb http://httpredir.debian.org/debian-multimedia/ sid main non-free
#deb-src http://httpredir.debian.org/debian-multimedia/ sid main non-free

View File

@ -0,0 +1,19 @@
#main
deb http://httpredir.debian.org/debian/ stretch main contrib non-free
deb-src http://httpredir.debian.org/debian/ stretch main contrib non-free
deb http://httpredir.debian.org/debian/ stretch-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ stretch-updates main contrib non-free
deb http://httpredir.debian.org/debian/ stretch-backports main contrib non-free
deb-src http://httpredir.debian.org/debian/ stretch-backports main contrib non-free
deb http://httpredir.debian.org/debian/ stretch-proposed-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ stretch-proposed-updates main contrib non-free
#security
deb http://httpredir.debian.org/debian-security/ stretch/updates main contrib non-free
deb-src http://httpredir.debian.org/debian-security/ stretch/updates main contrib non-free
##multimedia
#deb http://httpredir.debian.org/debian-multimedia/ stretch main non-free
#deb-src http://httpredir.debian.org/debian-multimedia/ stretch main non-free
#deb http://httpredir.debian.org/debian-multimedia/ stretch-backports main
#deb-src http://httpredir.debian.org/debian-multimedia/ stretch-backports main

View File

@ -0,0 +1 @@
NGINX_VERSION=quic

View File

@ -0,0 +1,276 @@
##################################################################
# Set Global ARG to build process
##################################################################
ARG NGINX_VERSION
##################################################################
# Start build process
##################################################################
FROM epicmorg/debian:bullseye-develop AS builder
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
##################################################################
# ARGuments
##################################################################
ENV BuildDocker true
ARG BUILDS_DIR=/builds
ARG SRC_DIR=${BUILDS_DIR}/src
ARG EXPORT_DIR=${BUILDS_DIR}/export
ARG PRE_DIR=${BUILDS_DIR}/pre
ARG NGINX_SRC_DIR=${SRC_DIR}/nginx
ARG NGINX_VERSION
ARG NGINX_DOWNLOAD_URL
ARG LUAJIT_INC=/usr/local/include/luajit-2.1
ARG LUAJIT_LIB=/usr/local/lib
##################################################################
# Files and folders
##################################################################
RUN mkdir -p ${PRE_DIR} ${NGINX_SRC_DIR} /usr/lib/nginx
ADD pre/luajit2-description-pak ${PRE_DIR}
ADD pre/nginx-description-pak ${PRE_DIR}
ADD pre/ip2location-description-pak ${PRE_DIR}
##################################################################
# BoringSSL
##################################################################
RUN apt-get update && \
apt-get install -y git gcc make g++ cmake perl libunwind-dev golang && \
cd ${SRC_DIR} && \
git clone https://github.com/google/boringssl boringssl && \
mkdir boringssl/build && \
cd boringssl/build && \
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=on .. && \
make
##################################################################
# IP2Location support for prod nginx module
##################################################################
RUN cd ${SRC_DIR} && \
git clone https://github.com/chrislim2888/IP2Location-C-Library.git ip2 && \
cp -fv ${PRE_DIR}/ip2location-description-pak ${SRC_DIR}/ip2/description-pak && \
cd ${SRC_DIR}/ip2 && \
ls -las && \
autoreconf -i -v --force && \
aclocal && \
automake --gnu --add-missing && \
autoconf && \
autoreconf -i -v --force && \
./configure && \
ls -las && \
make clean && \
make && \
make -C data convert && \
make check && \
ls -las && \
fakeroot checkinstall -D --pakdir=${EXPORT_DIR} --maintainer="EpicMorg, developer@epicm.org" --pkgname=ip2-custom --conflicts=ip2 --install=yes -y && \
ln -s /usr/local/lib/libIP2Location.so /usr/lib/libIP2Location.so && \
ln -s /usr/local/lib/libIP2Location.so.1 /usr/lib/libIP2Location.so.1 && \
ln -s /usr/local/lib/libIP2Location.so.2 /usr/lib/libIP2Location.so.2 && \
ln -s /usr/local/lib/libIP2Location.so /lib/libIP2Location.so && \
ln -s /usr/local/lib/libIP2Location.so.1 /lib/libIP2Location.so.1 && \
ln -s /usr/local/lib/libIP2Location.so.2 /lib/libIP2Location.so.2 && \
ln -s /lib/x86_64-linux-gnu/libcrypto.so.1.1 /lib/x86_64-linux-gnu/libcrypto.so.1 && \
dpkg --force-all -i ${EXPORT_DIR}/*.deb
##################################################################
# luaJIT 2 support for prod nginx module
##################################################################
RUN cd ${SRC_DIR} && \
git clone https://github.com/openresty/luajit2.git luajit2 && \
cp -fv ${PRE_DIR}/luajit2-description-pak ${SRC_DIR}/luajit2/description-pak && \
cd ${SRC_DIR}/luajit2 && \
make && \
make install && \
fakeroot checkinstall -D --pakdir=${EXPORT_DIR} --maintainer="EpicMorg, developer@epicm.org" --pkgname=luajit2-custom --conflicts=luajit2 --install=no -y
##################################################################
# nginx preparing
##################################################################
RUN hg clone -b quic https://hg.nginx.org/nginx-quic ${NGINX_SRC_DIR} && \
#wget -qO - ${NGINX_DOWNLOAD_URL} | tar -zxv --strip-components=1 -C ${NGINX_SRC_DIR} && \
cd ${NGINX_SRC_DIR} && \
git clone https://github.com/openresty/headers-more-nginx-module.git http-headers-more-filter && \
git clone https://github.com/sto/ngx_http_auth_pam_module.git http-auth-pam && \
git clone https://github.com/arut/nginx-dav-ext-module.git http-dav-ext && \
git clone https://github.com/openresty/echo-nginx-module.git http-echo && \
git clone https://github.com/aperezdc/ngx-fancyindex.git http-fancyindex && \
git clone https://github.com/slact/nchan.git nchan && \
git clone https://github.com/msva/nginx-upload-progress-module.git http-uploadprogress && \
# git clone https://github.com/masterzen/nginx-upload-progress-module.git http-uploadprogress && \
git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module http-subs-filter && \
git clone https://github.com/grahamedgecombe/nginx-ct.git ssl-ct && \
# git clone https://github.com/stnoonan/spnego-http-auth-nginx-module.git spnego-http-auth-nginx-module && \
git clone https://github.com/leev/ngx_http_geoip2_module http-geoip2 && \
git clone https://github.com/flavioribeiro/nginx-audio-track-for-hls-module.git nginx-audio-track-for-hls-module && \
git clone https://github.com/chrislim2888/ip2location-nginx.git ip2location-nginx && \
git clone https://github.com/kaltura/nginx-vod-module.git nginx-vod-module && \
git clone https://github.com/vozlt/nginx-module-vts.git nginx-module-vts && \
git clone https://github.com/evanmiller/mod_zip.git mod-zip && \
git clone https://github.com/alibaba/nginx-http-user-agent.git nginx-http-user-agent && \
git clone https://github.com/youzee/nginx-unzip-module.git nginx-unzip-module && \
git clone https://github.com/vladbondarenko/ngx_webp.git ngx-webp && \
git clone https://github.com/openresty/xss-nginx-module.git xss-nginx-module && \
git clone https://github.com/openresty/set-misc-nginx-module.git set-misc-nginx-module && \
git clone https://github.com/arut/nginx-rtmp-module.git rtmp && \
git clone https://github.com/kvspb/nginx-auth-ldap.git http-auth-ldap && \
git clone https://github.com/simplresty/ngx_devel_kit.git http-ndk && \
git clone https://github.com/chrislim2888/IP2Location-C-Library.git ip2location-c-7.0.0 && \
git clone https://github.com/itoffshore/nginx-upstream-fair.git http-upstream-fair && \
git clone https://github.com/yaoweibin/nginx_upstream_check_module.git nginx-upstream-check-module && \
git clone https://github.com/openresty/lua-nginx-module http-lua && \
hg clone http://hg.nginx.org/njs njs
##################################################################
# nginx compilling
##################################################################
RUN cd ${NGINX_SRC_DIR} && \
./auto/configure \
--sbin-path=/usr/sbin/nginx \
--prefix=/usr/share/nginx \
--conf-path=/etc/nginx/nginx.conf \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--lock-path=/var/lock/nginx.lock \
--pid-path=/run/nginx.pid \
--modules-path=/usr/lib/nginx/modules \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
# --with-cc-opt='-I../boringssl/include -I/usr/local/include/luajit-2.1 -g -O2 -lz -fstack-protector-strong -Wformat -Wno-error -Wno-error=date-time -Wno-error=implicit-fallthrough -Wno-error=cast-function-type -Wno-error=format-security -Wno-error=implicit-function-declaration -Wno-error=deprecated-declarations -Wno-error=unused-result -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' \
--with-cc-opt='-I../boringssl/include -I/usr/local/include/luajit-2.1 -g -O2 -lz -fstack-protector-strong -fPIC -Wformat -Wno-error -Wdate-time -D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -lz -fPIC -L/usr/local/lib -L../boringssl/build/ssl -L../boringssl/build/crypto' \
--with-file-aio \
--with-compat \
--with-debug \
--with-threads \
--with-pcre-jit \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_auth_request_module \
--with-http_v2_module \
--with-http_v3_module \
--with-stream_quic_module \
--with-http_dav_module \
--with-http_slice_module \
--with-http_addition_module \
--with-http_flv_module \
--with-http_geoip_module=dynamic \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module=dynamic \
--with-http_mp4_module \
--with-http_perl_module=dynamic \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_sub_module \
--with-http_xslt_module=dynamic \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--add-dynamic-module=http-headers-more-filter \
--add-dynamic-module=http-auth-pam \
--add-dynamic-module=http-dav-ext \
--add-dynamic-module=http-ndk \
--add-dynamic-module=http-echo \
--add-dynamic-module=http-fancyindex \
--add-dynamic-module=nchan \
--add-dynamic-module=http-uploadprogress \
--add-dynamic-module=http-subs-filter \
--add-dynamic-module=ssl-ct \
--add-dynamic-module=http-geoip2 \
# --add-dynamic-module=spnego-http-auth-nginx-module \
--add-dynamic-module=http-auth-ldap \
# --add-dynamic-module=nginx-audio-track-for-hls-module \
--add-dynamic-module=ip2location-nginx \
--add-dynamic-module=nginx-vod-module \
# --add-dynamic-module=nginx-module-vts \
--add-dynamic-module=mod-zip \
--add-dynamic-module=nginx-http-user-agent \
--add-dynamic-module=nginx-unzip-module \
--add-dynamic-module=ngx-webp \
--add-dynamic-module=set-misc-nginx-module \
--add-dynamic-module=rtmp \
--add-dynamic-module=http-upstream-fair \
--add-dynamic-module=njs/nginx \
--add-dynamic-module=nginx-upstream-check-module \
--add-dynamic-module=http-lua && \
cp -fv ${PRE_DIR}/nginx-description-pak ${NGINX_SRC_DIR}/description-pak && \
fakeroot checkinstall -D --pakdir=/builds/export --maintainer="EpicMorg, developer@epicm.org" --pkgname=nginx-custom --install=no -y && \
apt clean -y && \
apt autoclean -y && \
rm -rfv /var/lib/apt/lists/* && \
rm -rfv /var/cache/apt/archives/*.deb
##################################################################
##################################################################
##################################################################
FROM epicmorg/debian:bullseye
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
##################################################################
# LDAP Fix
##################################################################
RUN echo "TLS_REQCERT never" >> /etc/ldap/ldap.conf
##################################################################
# Installing nginx from deb
##################################################################
ADD pre/ngninx.pre.tar.gz /
COPY --from=builder /builds/export /tmp/deb
RUN apt-get update && \
apt-get install -y --allow-unauthenticated \
geoip-database \
geoip-bin \
libgeoip1 \
libmaxminddb0 \
libgd3 \
libxslt1.1 && \
dpkg --force-all -i /tmp/deb/*.deb && \
ln -s /usr/local/lib/libIP2Location.so /usr/lib/libIP2Location.so && \
ln -s /usr/local/lib/libIP2Location.so.1 /usr/lib/libIP2Location.so.1 && \
ln -s /usr/local/lib/libIP2Location.so.2 /usr/lib/libIP2Location.so.2 && \
ln -s /usr/local/lib/libIP2Location.so.3 /usr/lib/libIP2Location.so.3 && \
ln -s /usr/local/lib/libIP2Location.so.4 /usr/lib/libIP2Location.so.4 && \
ln -s /usr/local/lib/libIP2Location.so.5 /usr/lib/libIP2Location.so.5 && \
ln -s /usr/local/lib/libIP2Location.so /lib/libIP2Location.so && \
ln -s /usr/local/lib/libIP2Location.so.1 /lib/libIP2Location.so.1 && \
ln -s /usr/local/lib/libIP2Location.so.2 /lib/libIP2Location.so.2 && \
ln -s /usr/local/lib/libIP2Location.so.3 /lib/libIP2Location.so.3 && \
ln -s /usr/local/lib/libIP2Location.so.4 /lib/libIP2Location.so.4 && \
ln -s /usr/local/lib/libIP2Location.so.5 /lib/libIP2Location.so.5 && \
ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log && \
ln -sf /etc/ssl/dhparam.pem /etc/nginx/dhparam.pem && \
apt clean -y && \
apt autoclean -y && \
rm -rf /var/lib/apt/lists/* && \
rm -rf /var/cache/apt/archives/*.deb && \
rm -rf /tmp/deb/* && \
rm -rf /builds/* && \
rm -rf /valve/*
#healthcheck. good practice
HEALTHCHECK --interval=2m --timeout=3s CMD curl -f http://localhost:80/ || exit 1
# Add image configuration and scripts
COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh
RUN chmod 755 /usr/bin/docker-entrypoint.sh
#Final config
VOLUME ["/var/cache/nginx"]
EXPOSE 80 443
RUN nginx -V > /dev/stderr
ENTRYPOINT ["tini", "-s", "--", "docker-entrypoint.sh"]
CMD ["docker-entrypoint.sh"]

View File

@ -0,0 +1,29 @@
FROM nginx AS build
WORKDIR /src
RUN apt-get update && \
apt-get install -y git gcc make g++ cmake perl libunwind-dev golang && \
git clone https://github.com/google/boringssl boringssl && \
mkdir boringssl/build && \
cd boringssl/build && \
cmake .. && \
make
RUN apt-get install -y mercurial libperl-dev libpcre3-dev zlib1g-dev libxslt1-dev libgd-ocaml-dev libgeoip-dev
RUN hg clone -b quic https://hg.nginx.org/nginx-quic && \
hg clone http://hg.nginx.org/njs && \
cd nginx-quic && \
hg update quic && \
hg update -C quic && \
hg branch && \
ls -las && \
auto/configure --with-debug --with-http_v3_module --with-stream_quic_module \
--with-cc-opt="-I../boringssl/include" \
--with-ld-opt="-L../boringssl/build/ssl -L../boringssl/build/crypto" && \
make
FROM nginx
COPY --from=build /src/nginx-quic/objs/nginx /usr/sbin
RUN /usr/sbin/nginx -V > /dev/stderr
EXPOSE 80 443

View File

@ -0,0 +1,19 @@
all: app
app:
make build
make deploy
make clean
build:
docker-compose build --compress --parallel --progress plain
deploy:
docker-compose push
clean:
docker container prune -f
docker image prune -f
docker network prune -f
docker volume prune -f
docker system prune -af

View File

@ -0,0 +1,291 @@
# nginx quic
Experimental QUIC support for nginx
-----------------------------------
1. Introduction
2. Installing
3. Configuration
4. Clients
5. Troubleshooting
6. Contributing
7. Links
1. Introduction
This is an experimental QUIC [1] / HTTP/3 [2] support for nginx.
The code is developed in a separate "quic" branch available
at https://hg.nginx.org/nginx-quic. Currently it is based
on nginx mainline 1.21.x. We merge new nginx releases into
this branch regularly.
The project code base is under the same BSD license as nginx.
The code is currently at a beta level of quality and should not
be used in production.
We are working on improving HTTP/3 support with the goal of
integrating it to the main NGINX codebase. Expect frequent
updates of this code and don't rely on it for whatever purpose.
We'll be grateful for any feedback and code submissions however
we don't bear any responsibilities for any issues with this code.
You can always contact us via nginx-devel mailing list [3].
What works now:
Currently we support IETF-QUIC draft-29 through final RFC documents.
Earlier drafts are NOT supported as they have incompatible wire format.
nginx should be able to respond to HTTP/3 requests over QUIC and
it should be possible to upload and download big files without errors.
+ The handshake completes successfully
+ One endpoint can update keys and its peer responds correctly
+ 0-RTT data is being received and acted on
+ Connection is established using TLS Resume Ticket
+ A handshake that includes a Retry packet completes successfully
+ Stream data is being exchanged and ACK'ed
+ An H3 transaction succeeded
+ One or both endpoints insert entries into dynamic table and
subsequently reference them from header blocks
+ Version Negotiation packet is sent to client with unknown version
+ Lost packets are detected and retransmitted properly
+ Clients may migrate to new address
Not (yet) supported features:
- Explicit Congestion Notification (ECN) as specified in quic-recovery [5]
- A connection with the spin bit succeeds and the bit is spinning
- Structured Logging
Since the code is experimental and still under development,
a lot of things may not work as expected, for example:
- Flow control mechanism is basic and intended to avoid CPU hog and make
simple interactions possible
- Not all protocol requirements are strictly followed; some of checks are
omitted for the sake of simplicity of initial implementation
2. Installing
You will need a BoringSSL [4] library that provides QUIC support
$ hg clone -b quic https://hg.nginx.org/nginx-quic
$ cd nginx-quic
$ ./auto/configure --with-debug --with-http_v3_module \
--with-cc-opt="-I../boringssl/include" \
--with-ld-opt="-L../boringssl/build/ssl \
-L../boringssl/build/crypto"
$ make
When configuring nginx, you can enable QUIC and HTTP/3 using the
following new configuration options:
--with-http_v3_module - enable QUIC and HTTP/3
--with-http_quic_module - enable QUIC for older HTTP versions
--with-stream_quic_module - enable QUIC in Stream
3. Configuration
The HTTP "listen" directive got two new options: "http3" and "quic".
The "http3" option enables HTTP/3 over QUIC on the specified port.
The "quic" option enables QUIC for older HTTP versions on this port.
The Stream "listen" directive got a new option "quic" which enables
QUIC as client transport protocol instead of TCP or plain UDP.
Along with "http3" or "quic", you also have to specify "reuseport"
option [6] to make it work properly with multiple workers.
A number of directives were added that specify transport parameter values:
quic_max_idle_timeout
quic_max_ack_delay
quic_max_udp_payload_size
quic_initial_max_data
quic_initial_max_stream_data_bidi_local
quic_initial_max_stream_data_bidi_remote
quic_initial_max_stream_data_uni
quic_initial_max_streams_bidi
quic_initial_max_streams_uni
quic_ack_delay_exponent
quic_disable_active_migration
quic_active_connection_id_limit
To enable address validation:
quic_retry on;
To enable 0-RTT:
ssl_early_data on;
Make sure that TLS 1.3 is configured which is required for QUIC:
ssl_protocols TLSv1.3;
To enable GSO (Generic Segmentation Offloading):
quic_gso on;
By default this Linux-specific optimization [8] is disabled.
Enable if your network interface is configured to support GSO.
A number of directives were added that configure HTTP/3:
http3_max_table_capacity
http3_max_blocked_streams
http3_max_concurrent_pushes
http3_push
http3_push_preload
An additional variable is available: $quic.
The value of $quic is "quic" if QUIC connection is used,
or an empty string otherwise.
Example configuration:
http {
log_format quic '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$quic"';
access_log logs/access.log quic;
server {
# for better compatibility it's recommended
# to use the same port for quic and https
listen 8443 http3 reuseport;
listen 8443 ssl;
ssl_certificate certs/example.com.crt;
ssl_certificate_key certs/example.com.key;
ssl_protocols TLSv1.3;
location / {
# required for browsers to direct them into quic port
add_header Alt-Svc 'h3=":8443"; ma=86400';
}
}
}
4. Clients
* Browsers
Known to work: Firefox 80+ and Chrome 85+ (QUIC draft 29+)
Beware of strange issues: sometimes browser may decide to ignore QUIC
Cache clearing/restart might help. Always check access.log and
error.log to make sure you are using HTTP/3 and not TCP https.
+ to enable QUIC in Firefox, set the following in 'about:config':
network.http.http3.enabled = true
+ to enable QUIC in Chrome, enable it on command line and force it
on your site:
$ ./chrome --enable-quic --quic-version=h3-29 \
--origin-to-force-quic-on=example.com:8443
* Console clients
Known to work: ngtcp2, firefox's neqo and chromium's console clients:
$ examples/client 127.0.0.1 8443 https://example.com:8443/index.html
$ ./neqo-client https://127.0.0.1:8443/
$ chromium-build/out/my_build/quic_client http://example.com:8443 \
--quic_version=h3-29 \
--allow_unknown_root_cert \
--disable_certificate_verification
If you've got it right, in the access log you should see something like:
127.0.0.1 - - [24/Apr/2020:11:27:29 +0300] "GET / HTTP/3" 200 805 "-"
"nghttp3/ngtcp2 client" "quic"
5. Troubleshooting
Here are some tips that may help you to identify problems:
+ Ensure you are building with proper SSL library that supports QUIC
+ Ensure you are using the proper SSL library in runtime
(`nginx -V` will show you what you are using)
+ Ensure your client is actually sending QUIC requests
(see "Clients" section about browsers and cache)
We recommend to start with simple console client like ngtcp2
to ensure you've got server configured properly before trying
with real browsers that may be very picky with certificates,
for example.
+ Build nginx with debug support [7] and check your debug log.
It should contain all details about connection and why it
failed. All related messages contain "quic " prefix and can
be easily filtered out.
+ If you want to investigate deeper, you may want to enable
additional debugging in src/event/quic/ngx_event_quic_connection.h:
#define NGX_QUIC_DEBUG_PACKETS
#define NGX_QUIC_DEBUG_FRAMES
#define NGX_QUIC_DEBUG_ALLOC
#define NGX_QUIC_DEBUG_CRYPTO
6. Contributing
If you are willing to contribute, please refer to
http://nginx.org/en/docs/contributing_changes.html
7. Links
[1] https://datatracker.ietf.org/doc/html/rfc9000
[2] https://datatracker.ietf.org/doc/html/draft-ietf-quic-http
[3] https://mailman.nginx.org/mailman/listinfo/nginx-devel
[4] https://boringssl.googlesource.com/boringssl/
[5] https://datatracker.ietf.org/doc/html/rfc9002
[6] https://nginx.org/en/docs/http/ngx_http_core_module.html#listen
[7] https://nginx.org/en/docs/debugging_log.html
[8] http://vger.kernel.org/lpc_net2018_talks/willemdebruijn-lpc2018-udpgso-paper-DRAFT-1.pdf
# Compose example
```yml
version: '3.7'
services:
balancer:
image: epicmorg/balancer
restart: unless-stopped
ports:
- "0.0.0.0:80:80"
- "0.0.0.0:443:443"
volumes:
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
- /etc/letsencrypt:/etc/letsencrypt
- nginx:/etc/nginx
- nginx-usr:/usr/share/nginx/html
- /var/lib/nginx
# extra_hosts:
# - "example.com:192.168.0.11"
depends_on:
- websites
tmpfs:
- /tmp
volumes:
nginx:
external: true
nginx-usr:
external: true
```

View File

@ -0,0 +1,9 @@
version: '3.9'
services:
app:
image: "epicmorg/nginx:${NGINX_VERSION}"
build:
context: .
args:
NGINX_VERSION: ${NGINX_VERSION}
NGINX_DOWNLOAD_URL: ${NGINX_DOWNLOAD_URL}

View File

@ -0,0 +1,16 @@
#!/bin/bash
if [[ -z "${FIX_WWW_DATA}" ]]; then
echo "[nginx] env FIX_WWW_DATA is not set. Skipping..."
elif [ "${FIX_WWW_DATA}" == "false" ]; then
echo "[nginx] env FIX_WWW_DATA is set to false. Skipping..."
elif [ "${FIX_WWW_DATA}" == "true" ]; then
echo "[nginx] Changing permissions for /var/www path. Dont worry, please wait."
chown www-data:www-data /var/www -R
echo "[nginx] Done"
else
echo "[nginx] env FIX_WWW_DATA is set to strange value. Skipping..."
fi
echo "[nginx] Starting up"
nginx -g 'daemon off;'

View File

@ -0,0 +1 @@
Custom build of ip2location lib by EpicMorg.

View File

@ -0,0 +1 @@
Custom build of luajit2 for Nginx module, by EpicMorg.

View File

@ -0,0 +1 @@
Custom build of Nginx with some modules by EpicMorg.

View File

@ -0,0 +1 @@
NGINX_VERSION=quic

View File

@ -0,0 +1,263 @@
##################################################################
# Set Global ARG to build process
##################################################################
ARG NGINX_VERSION
##################################################################
# Start build process
##################################################################
FROM epicmorg/debian:bullseye-develop AS builder
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
##################################################################
# ARGuments
##################################################################
ENV BuildDocker true
ARG BUILDS_DIR=/builds
ARG SRC_DIR=${BUILDS_DIR}/src
ARG EXPORT_DIR=${BUILDS_DIR}/export
ARG P4API_DIR=${SRC_DIR}/p4api
ARG P4PHP_DIR=${SRC_DIR}/p4php
ARG MAKE_DIR=${SRC_DIR}/p4php-7.4
ARG P4API_VER=r20.1
ARG P4API_URL=http://filehost.perforce.com/perforce/${P4API_VER}/bin.linux26x86_64/p4api.tgz
ARG P4PHP_VER=r20.1
ARG P4PHP_URL=http://filehost.perforce.com/perforce/${P4PHP_VER}/bin.tools/p4php-php7.tgz
ARG PHP_MODULE_PATH=/usr/lib/php/20190902
##################################################################
# Files and folders
##################################################################
RUN mkdir -p ${BUILDS_DIR} ${SRC_DIR} ${EXPORT_DIR} ${MAKE_DIR} ${P4API_DIR} ${P4PHP_DIR}
##################################################################
# Installing PHP7
##################################################################
#installing php repo
#Install base packages
RUN apt-get update && \
apt-get install -y --allow-unauthenticated \
libmemcached-dev \
smbclient libsmbclient libsmbclient-dev \
php7.4 \
php7.4-dev \
php7.4-fpm \
php7.4-cli \
php7.4-cgi
##################################################################
# preparing p4src
##################################################################
RUN wget -qO - ${P4API_URL} | tar -zxv --strip-components=1 -C ${P4API_DIR} && \
wget -qO - ${P4API_URL} | tar -zxv --strip-components=1 -C ${MAKE_DIR} && \
wget -qO - ${P4PHP_URL} | tar -zxv --strip-components=1 -C ${P4PHP_DIR} && \
wget -qO - ${P4PHP_URL} | tar -zxv --strip-components=1 -C ${MAKE_DIR} && \
cd ${P4API_DIR} && \
ls -las && \
cd ${P4PHP_DIR} && \
ls -las && \
cd ${MAKE_DIR} && \
ls -las && \
cd ${SRC_DIR} && \
ls -las
##################################################################
# compilling p4src
##################################################################
RUN cd ${MAKE_DIR} && \
ls -las && \
phpize && \
./configure --with-perforce=${P4API_DIR} && \
make && \
make test && \
make install && \
cp ${PHP_MODULE_PATH}/perforce.so ${EXPORT_DIR}
##################################################################
# compilling smbclient
##################################################################
RUN pecl install smbclient && \
cp ${PHP_MODULE_PATH}/smbclient.so ${EXPORT_DIR}
##################################################################
##################################################################
##################################################################
FROM epicmorg/nginx:${NGINX_VERSION}
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
##################################################################
# Installing php fpm for nginx from deb
##################################################################
ARG PHP_MODULE_PATH=/usr/lib/php/20190902
ARG PHP_VER=7.4
ARG PHP_DIR=/etc/php/${PHP_VER}
ARG P4_PHP_INI=${PHP_DIR}/mods-available/perfroce.ini
ARG SMB_PHP_INI=${PHP_DIR}/mods-available/smbclient.ini
##################################################################
# Installing PHP7
##################################################################
#Install base packages
RUN apt-get update && \
apt-get install -y --allow-unauthenticated \
php7.4 \
php7.4-dev \
php7.4-fpm \
php7.4-cli \
php7.4-cgi \
php-pear \
php7.4-gmp \
php7.4-snmp \
php7.4-ldap \
php7.4-mail \
php7.4-soap \
php7.4-mysql \
php7.4-memcached \
php7.4-memcache \
php7.4-igbinary \
php7.4-interbase \
php7.4-curl \
php7.4-gd \
php7.4-intl \
php7.4-zip \
php7.4-bcmath \
php7.4-imap \
php7.4-pspell \
php7.4-sqlite3 \
php7.4-tidy \
php7.4-xmlrpc \
php7.4-xml \
php7.4-mbstring \
php7.4-apcu \
php7.4-common \
php7.4-json \
php7.4-readline \
php7.4-enchant \
php7.4-ssh2 \
php7.4-oauth \
php7.4-gmagick \
php7.4-gnupg \
php7.4-redis \
smbclient libsmbclient \
# php-smbclient \
php7.4-yaml \
php7.4-geoip \
sendmail && \
update-alternatives --set php /usr/bin/php7.4 && \
phpenmod \
snmp \
gmp \
calendar \
ldap \
curl \
exif \
ftp \
fileinfo \
gd \
geoip \
gnupg \
iconv \
imap \
json \
mbstring \
memcached \
mysqli \
mysqlnd \
oauth \
pdo_mysql \
pdo_sqlite \
phar \
posix \
readline \
redis \
simplexml \
sockets \
sqlite3 \
ssh2 \
tokenizer \
xml \
xmlreader \
xmlrpc \
xmlwriter \
xsl \
yaml && \
ln -sf /etc/ssl/dhparam.pem /etc/php/dhparam.pem && \
php -v
##################################################################
# Installing IOnCube addon
##################################################################
ADD https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz /tmp/ioncube.tar.gz
RUN tar -C /tmp -xvf /tmp/ioncube.tar.gz && \
cp /tmp/ioncube/ioncube_loader_lin_7.4.so ${PHP_MODULE_PATH} && \
# echo "zend_extension = ${PHP_MODULE_PATH}/ioncube_loader_lin_7.4.so" >> ${PHP_DIR}/apache2/php.ini && \
echo "zend_extension = ${PHP_MODULE_PATH}/ioncube_loader_lin_7.4.so" >> ${PHP_DIR}/cgi/php.ini && \
echo "zend_extension = ${PHP_MODULE_PATH}/ioncube_loader_lin_7.4.so" >> ${PHP_DIR}/cli/php.ini && \
echo "zend_extension = ${PHP_MODULE_PATH}/ioncube_loader_lin_7.4.so" >> ${PHP_DIR}/fpm/php.ini && \
php -m && \
php -v
##################################################################
# Installing P4 addon
##################################################################
COPY --from=builder /builds/export/perforce.so ${PHP_MODULE_PATH}
RUN echo "extension=perforce.so" > ${P4_PHP_INI} && \
ln -sf ${P4_PHP_INI} ${PHP_DIR}/cgi/conf.d/perforce.ini && \
ln -sf ${P4_PHP_INI} ${PHP_DIR}/cli/conf.d/perforce.ini && \
ln -sf ${P4_PHP_INI} ${PHP_DIR}/fpm/conf.d/perforce.ini && \
php -m && \
php -v
##################################################################
# Installing smbclient addon
##################################################################
COPY --from=builder /builds/export/smbclient.so ${PHP_MODULE_PATH}
RUN echo "extension=smbclient.so" > ${SMB_PHP_INI} && \
ln -sf ${SMB_PHP_INI} ${PHP_DIR}/cgi/conf.d/smbclient.ini && \
ln -sf ${SMB_PHP_INI} ${PHP_DIR}/cli/conf.d/smbclient.ini && \
ln -sf ${SMB_PHP_INI} ${PHP_DIR}/fpm/conf.d/smbclient.ini && \
php -m && \
php -v
##################################################################
# Installing Composer addon
##################################################################
RUN cd /tmp && \
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
php composer-setup.php --install-dir=/usr/local/bin --filename=composer && \
rm /tmp/composer-setup.php
##################################################################
# cleaninig up
##################################################################
RUN apt clean -y && \
apt autoclean -y && \
rm -rfv /var/lib/apt/lists/* && \
rm -rfv /var/cache/apt/archives/*.deb && \
rm -rfv /tmp/deb/* && \
rm -rfv /tmp/ioncube/* && \
rm -rfv /tmp/composer-setup.php && \
rm -rfv /tmp/ioncube.tar.gz
#healthcheck. good practice
HEALTHCHECK --interval=2m --timeout=3s CMD curl -f http://localhost:80/ || exit 1
# Add image configuration and scripts
COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh
RUN chmod 755 /usr/bin/docker-entrypoint.sh
#Final config
VOLUME ["/var/cache/nginx"]
EXPOSE 80 443
ENTRYPOINT ["tini", "-s", "--", "docker-entrypoint.sh"]
CMD ["docker-entrypoint.sh"]

View File

@ -0,0 +1,19 @@
all: app
app:
make build
make deploy
make clean
build:
docker-compose build --compress --parallel --progress plain
deploy:
docker-compose push
clean:
docker container prune -f
docker image prune -f
docker network prune -f
docker volume prune -f
docker system prune -af

View File

@ -0,0 +1,30 @@
# Compose example
```yml
version: '3.7'
services:
balancer:
image: epicmorg/balancer
restart: unless-stopped
ports:
- "0.0.0.0:80:80"
- "0.0.0.0:443:443"
volumes:
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
- /etc/letsencrypt:/etc/letsencrypt
- nginx:/etc/nginx
- nginx-usr:/usr/share/nginx/html
- /var/lib/nginx
# extra_hosts:
# - "example.com:192.168.0.11"
depends_on:
- websites
tmpfs:
- /tmp
volumes:
nginx:
external: true
nginx-usr:
external: true
```

View File

@ -0,0 +1,9 @@
version: '3.9'
services:
app:
image: "epicmorg/nginx:${NGINX_VERSION}-php"
build:
context: .
args:
NGINX_VERSION: ${NGINX_VERSION}
NGINX_DOWNLOAD_URL: ${NGINX_DOWNLOAD_URL}

View File

@ -0,0 +1,16 @@
#!/bin/bash
if [[ -z "${FIX_WWW_DATA}" ]]; then
echo "[nginx] env FIX_WWW_DATA is not set. Skipping..."
elif [ "${FIX_WWW_DATA}" == "false" ]; then
echo "[nginx] env FIX_WWW_DATA is set to false. Skipping..."
elif [ "${FIX_WWW_DATA}" == "true" ]; then
echo "[nginx] Changing permissions for /var/www path. Dont worry, please wait."
chown www-data:www-data /var/www -R
echo "[nginx] Done"
else
echo "[nginx] env FIX_WWW_DATA is set to strange value. Skipping..."
fi
echo "[nginx] Starting up"
nginx -g 'daemon off;'

View File

@ -0,0 +1 @@
NGINX_VERSION=quic

View File

@ -0,0 +1,131 @@
##################################################################
# Set Global ARG to build process
##################################################################
ARG NGINX_VERSION
##################################################################
# Start build process
##################################################################
FROM epicmorg/nginx:${NGINX_VERSION}
LABEL maintainer="EpicMorg DevTeam, developer@epicm.org"
ARG DEBIAN_FRONTEND=noninteractive
ARG NGINX_RTMP_MODULE_VERSION=1.2.1
##################################################################
# Clear sources.list.d
##################################################################
RUN rm -rfv /etc/apt/sources.list.d/*
##################################################################
# sid sources list
##################################################################
RUN rm -rfv /etc/apt/sources.list
COPY sources.list.d/sources.sid.list /etc/apt/sources.list
RUN apt update
##################################################################
# installing utils
##################################################################
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get update && \
apt-get install -y --allow-unauthenticated \
libpcre3-dev \
librtmp1 \
libtheora0 \
libvorbis-dev \
libmp3lame0 \
libx264-dev \
libx265-dev
##################################################################
# stretch sources list + libvpx
##################################################################
RUN rm -rfv /etc/apt/sources.list
COPY sources.list.d/sources.stretch.list /etc/apt/sources.list
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get update && \
apt-get install -y --allow-unauthenticated \
libvpx4
##################################################################
# buster sources list + libvpx
##################################################################
RUN rm -rfv /etc/apt/sources.list
COPY sources.list.d/sources.buster.list /etc/apt/sources.list
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get update && \
apt-get install -y --allow-unauthenticated \
libvpx5
##################################################################
# sid sources list + libvpx
##################################################################
RUN rm -rfv /etc/apt/sources.list
COPY sources.list.d/sources.sid.list /etc/apt/sources.list
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
apt-get update && \
apt-get install -y --allow-unauthenticated \
libvpx6
##################################################################
# installing deps for rtmp module
##################################################################
RUN mkdir -p /usr/share/nginx/html \
/mnt/hls \
/mnt/dash \
/tmp/build && \
chown -R www-data:www-data /mnt/hls && \
chown -R www-data:www-data /mnt/dash && \
chmod -R 755 /mnt/hls && \
chmod -R 755 /mnt/dash && \
cd /tmp/build && \
wget https://github.com/arut/nginx-rtmp-module/archive/v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \
tar -zxf v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \
rm v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \
cp /tmp/build/nginx-rtmp-module-${NGINX_RTMP_MODULE_VERSION}/stat.xsl /usr/share/nginx/html/stat.xsl && \
rm -rf /tmp/build
##################################################################
# Forward logs to Docker
##################################################################
RUN ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log
##################################################################
# Copy nginx config file to container
##################################################################
RUN rm -rfv /etc/nginx/nginx.conf \
/etc/nginx/sites-avalible/default
COPY conf/nginx.conf /etc/nginx/nginx.conf
##################################################################
# Copy html players to container
##################################################################
COPY players /usr/share/nginx/html/players
##################################################################
# cleaninig up
##################################################################
RUN apt clean -y && \
apt autoclean -y && \
rm -rfv /var/lib/apt/lists/* && \
rm -rfv /var/cache/apt/archives/*.deb
#healthcheck. good practice
HEALTHCHECK --interval=2m --timeout=3s CMD curl -f http://localhost:80/ || exit 1
# Add image configuration and scripts
COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh
RUN chmod 755 /usr/bin/docker-entrypoint.sh
#Final config
VOLUME ["/var/cache/nginx"]
EXPOSE 80 443 1935 8080
ENTRYPOINT ["tini", "-s", "--", "docker-entrypoint.sh"]
CMD ["docker-entrypoint.sh"]

View File

@ -0,0 +1,19 @@
all: app
app:
make build
make deploy
make clean
build:
docker-compose build --compress --parallel --progress plain
deploy:
docker-compose push
clean:
docker container prune -f
docker image prune -f
docker network prune -f
docker volume prune -f
docker system prune -af

View File

@ -0,0 +1,78 @@
# RTMP-HLS Docker
**BASED ON** [TareqAlqutami/rtmp-hls-server](https://github.com/TareqAlqutami/rtmp-hls-server)
**Docker image for video streaming server that supports RTMP, HLS, and DASH streams.**
## Description
This Docker image can be used to create a video streaming server that supports [**RTMP**](https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol), [**HLS**](https://en.wikipedia.org/wiki/HTTP_Live_Streaming), [**DASH**](https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP) out of the box.
It also allows adaptive streaming and custom transcoding of video streams.
All modules are built from source on Debian and Alpine Linux base images.
## Features
* The backend is [**Nginx**](http://nginx.org/en/) with [**nginx-rtmp-module**](https://github.com/arut/nginx-rtmp-module).
* [**FFmpeg**](https://www.ffmpeg.org/) for transcoding and adaptive streaming.
* Default settings:
* RTMP is ON
* HLS is ON (adaptive, 5 variants)
* DASH is ON
* Other Nginx configuration files are also provided to allow for RTMP-only streams or no-FFmpeg transcoding.
* Statistic page of RTMP streams at `http://<server ip>:<server port>/stats`.
* Available web video players (based on [video.js](https://videojs.com/) and [hls.js](https://github.com/video-dev/hls.js/)) at `/usr/share/nginx/html/players`.
## Usage
### To run the server
```
docker run -d -p 1935:1935 -p 8080:8080 epicmorg/balancer:rtmp-hls
```
To run with custom conf file:
```
docker run -d -p 1935:1935 -p 8080:8080 -v custom.conf:/etc/nginx/nginx.conf epicmorg/balancer:rtmp-hls
```
where `custom.conf` is the new conf file for Nginx.
### To stream to the server
* **Stream live RTMP content to:**
```
rtmp://<server ip>:1935/live/<stream_key>
```
where `<stream_key>` is any stream key you specify.
* **Configure [OBS](https://obsproject.com/) to stream content:** <br />
Go to Settings > Stream, choose the following settings:
* Service: Custom Streaming Server.
* Server: `rtmp://<server ip>:1935/live`.
* Stream key: anything you want, however provided video players assume stream key is `test`
### To view the stream
* **Using [VLC](https://www.videolan.org/vlc/index.html):**
* Go to Media > Open Network Stream.
* Enter the streaming URL: `rtmp://<server ip>:1935/live/<stream-key>`
Replace `<server ip>` with the IP of where the server is running, and
`<stream-key>` with the stream key you used when setting up the stream.
* For HLS and DASH, the URLs are of the forms:
`http://<server ip>:8080/hls/<stream-key>.m3u8` and
`http://<server ip>:8080/dash/<stream-key>_src.mpd` respectively.
* Click Play.
* **Using provided web players:** <br/>
The provided demo players assume the stream-key is called `test` and the player is opened in localhost.
* To play RTMP content (requires Flash): `http://localhost:8080/players/rtmp.html`
* To play HLS content: `http://localhost:8080/players/hls.html`
* To play HLS content using hls.js library: `http://localhost:8080/players/hls_hlsjs.html`
* To play DASH content: `http://localhost:8080/players/dash.html`
* To play RTMP and HLS contents on the same page: `http://localhost:8080/players/rtmp_hls.html`
**Notes:**
* These web players are hardcoded to play stream key "test" at localhost.
* To change the stream source for these players. Download the html files and modify the `src` attribute in the video tag in the html file. You can then mount the modified files to the container as follows:
```
docker run -d -p 1935:1935 -p 8080:8080 -v custom_players:/usr/share/nginx/html/players epicmorg/balancer:rtmp-hls
```
where `custom_players` is the directory holding the modified html files.

View File

@ -0,0 +1,134 @@
load_module "/usr/lib/nginx/modules/ngx_rtmp_module.so";
worker_processes auto;
#error_log logs/error.log;
events {
worker_connections 1024;
}
# RTMP configuration
rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4000;
# ping 30s;
# notify_method get;
# This application is to accept incoming stream
application live {
live on; # Allows live input
# for each received stream, transcode for adaptive streaming
# This single ffmpeg command takes the input and transforms
# the source into 4 different streams with different bitrates
# and qualities. # these settings respect the aspect ratio.
exec_push /usr/bin/ffmpeg -i rtmp://localhost:1935/$app/$name -async 1 -vsync -1
-c:v libx264 -c:a aac -b:v 256k -b:a 64k -vf "scale=480:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_low
-c:v libx264 -c:a aac -b:v 768k -b:a 128k -vf "scale=720:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_mid
-c:v libx264 -c:a aac -b:v 1024k -b:a 128k -vf "scale=960:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_high
-c:v libx264 -c:a aac -b:v 1920k -b:a 128k -vf "scale=1280:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_hd720
-c copy -f flv rtmp://localhost:1935/show/$name_src;
}
# This is the HLS application
application show {
live on; # Allows live input from above application
deny play all; # disable consuming the stream from nginx as rtmp
hls on; # Enable HTTP Live Streaming
hls_fragment 3;
hls_playlist_length 20;
hls_path /mnt/hls/; # hls fragments path
# Instruct clients to adjust resolution according to bandwidth
hls_variant _src BANDWIDTH=4096000; # Source bitrate, source resolution
hls_variant _hd720 BANDWIDTH=2048000; # High bitrate, HD 720p resolution
hls_variant _high BANDWIDTH=1152000; # High bitrate, higher-than-SD resolution
hls_variant _mid BANDWIDTH=448000; # Medium bitrate, SD resolution
hls_variant _low BANDWIDTH=288000; # Low bitrate, sub-SD resolution
# MPEG-DASH
dash on;
dash_path /mnt/dash/; # dash fragments path
dash_fragment 3;
dash_playlist_length 20;
}
}
}
http {
include /etc/nginx/sites-enabled/*.conf;
sendfile off;
tcp_nopush on;
directio 512;
# aio on;
# HTTP server required to serve the player and HLS fragments
server {
listen 8080;
# Serve HLS fragments
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /mnt;
add_header Cache-Control no-cache; # Disable cache
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
# Serve DASH fragments
location /dash {
types {
application/dash+xml mpd;
video/mp4 mp4;
}
root /mnt;
add_header Cache-Control no-cache; # Disable cache
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# Allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
# This URL provides RTMP statistics in XML
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl; # Use stat.xsl stylesheet
}
location /stat.xsl {
# XML stylesheet to view RTMP stats.
root /usr/share/nginx/html;
}
}
}

View File

@ -0,0 +1,118 @@
load_module "/usr/lib/nginx/modules/ngx_rtmp_module.so";
worker_processes auto;
#error_log logs/error.log;
events {
worker_connections 1024;
}
# RTMP configuration
rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4000;
# ping 30s;
# notify_method get;
# This application is to accept incoming stream
application live {
live on; # Allows live input
push rtmp://localhost:1935/show;
}
# This is the HLS application
application show {
live on; # Allows live input from above application
deny play all; # disable consuming the stream from nginx as rtmp
hls on; # Enable HTTP Live Streaming
hls_fragment 3;
hls_playlist_length 10;
hls_path /mnt/hls/; # hls fragments path
# MPEG-DASH
dash on;
dash_path /mnt/dash/; # dash fragments path
dash_fragment 3;
dash_playlist_length 10;
}
}
}
http {
include /etc/nginx/sites-enabled/*.conf;
sendfile off;
tcp_nopush on;
directio 512;
# aio on;
# HTTP server required to serve the player and HLS fragments
server {
listen 8080;
# Serve HLS fragments
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /mnt;
add_header Cache-Control no-cache; # Disable cache
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
# Serve DASH fragments
location /dash {
types {
application/dash+xml mpd;
video/mp4 mp4;
}
root /mnt;
add_header Cache-Control no-cache; # Disable cache
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# Allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
# This URL provides RTMP statistics in XML
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl; # Use stat.xsl stylesheet
}
location /stat.xsl {
# XML stylesheet to view RTMP stats.
root /usr/share/nginx/html;
}
}
}

View File

@ -0,0 +1,16 @@
load_module "/usr/lib/nginx/modules/ngx_rtmp_module.so";
worker_processes auto;
rtmp_auto_push on;
events {}
rtmp {
server {
listen 1935;
listen [::]:1935;
application live {
live on;
record off;
}
}
}

View File

@ -0,0 +1,9 @@
version: '3.9'
services:
app:
image: "epicmorg/nginx:${NGINX_VERSION}-rtmp-hls"
build:
context: .
args:
NGINX_VERSION: ${NGINX_VERSION}
NGINX_DOWNLOAD_URL: ${NGINX_DOWNLOAD_URL}

View File

@ -0,0 +1,16 @@
#!/bin/bash
if [[ -z "${FIX_WWW_DATA}" ]]; then
echo "[nginx] env FIX_WWW_DATA is not set. Skipping..."
elif [ "${FIX_WWW_DATA}" == "false" ]; then
echo "[nginx] env FIX_WWW_DATA is set to false. Skipping..."
elif [ "${FIX_WWW_DATA}" == "true" ]; then
echo "[nginx] Changing permissions for /var/www path. Dont worry, please wait."
chown www-data:www-data /var/www -R
echo "[nginx] Done"
else
echo "[nginx] env FIX_WWW_DATA is set to strange value. Skipping..."
fi
echo "[nginx] Starting up"
nginx -g 'daemon off;'

Some files were not shown because too many files have changed in this diff Show More