From 19867341987cf7bd5865f03cddcb7ab3f6a91066 Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 2 Jun 2021 03:03:23 +0300 Subject: [PATCH] nginx images --- linux/nginx/1.17.10/main/.env | 2 + linux/nginx/1.17.10/main/Dockerfile | 235 ++++++++++++++++ linux/nginx/1.17.10/main/Makefile | 5 + linux/nginx/1.17.10/main/README.md | 30 ++ linux/nginx/1.17.10/main/docker-compose.yml | 9 + .../main/pre/ip2location-description-pak | 1 + .../1.17.10/main/pre/luajit2-description-pak | 1 + .../1.17.10/main/pre/nginx-description-pak | 1 + .../nginx/1.17.10/main/pre/ngninx.pre.tar.gz | Bin 0 -> 9573 bytes linux/nginx/1.17.10/php/.env | 2 + linux/nginx/1.17.10/php/Dockerfile | 257 ++++++++++++++++++ linux/nginx/1.17.10/php/Makefile | 5 + linux/nginx/1.17.10/php/README.md | 30 ++ linux/nginx/1.17.10/php/docker-compose.yml | 9 + linux/nginx/1.17.10/rtmp-hls/.env | 2 + linux/nginx/1.17.10/rtmp-hls/Dockerfile | 127 +++++++++ linux/nginx/1.17.10/rtmp-hls/Makefile | 5 + linux/nginx/1.17.10/rtmp-hls/README.md | 78 ++++++ linux/nginx/1.17.10/rtmp-hls/conf/nginx.conf | 134 +++++++++ .../rtmp-hls/conf/nginx_no-ffmpeg.conf | 118 ++++++++ .../conf/nginx_rtmp_minimal_no-stats.conf | 16 ++ .../nginx/1.17.10/rtmp-hls/docker-compose.yml | 9 + .../nginx/1.17.10/rtmp-hls/players/dash.html | 23 ++ linux/nginx/1.17.10/rtmp-hls/players/hls.html | 23 ++ .../1.17.10/rtmp-hls/players/hls_hlsjs.html | 41 +++ .../nginx/1.17.10/rtmp-hls/players/rtmp.html | 24 ++ .../1.17.10/rtmp-hls/players/rtmp_hls.html | 30 ++ .../sources.list.d/sources.buster.list | 19 ++ .../rtmp-hls/sources.list.d/sources.sid.list | 19 ++ .../sources.list.d/sources.stretch.list | 19 ++ linux/nginx/1.18.0/main/.env | 2 + linux/nginx/1.18.0/main/Dockerfile | 235 ++++++++++++++++ linux/nginx/1.18.0/main/Makefile | 5 + linux/nginx/1.18.0/main/README.md | 30 ++ linux/nginx/1.18.0/main/docker-compose.yml | 9 + .../main/pre/ip2location-description-pak | 1 + .../1.18.0/main/pre/luajit2-description-pak | 1 + .../1.18.0/main/pre/nginx-description-pak | 1 + linux/nginx/1.18.0/main/pre/ngninx.pre.tar.gz | Bin 0 -> 9573 bytes linux/nginx/1.18.0/php/.env | 2 + linux/nginx/1.18.0/php/Dockerfile | 257 ++++++++++++++++++ linux/nginx/1.18.0/php/Makefile | 5 + linux/nginx/1.18.0/php/README.md | 30 ++ linux/nginx/1.18.0/php/docker-compose.yml | 9 + linux/nginx/1.18.0/rtmp-hls/.env | 2 + linux/nginx/1.18.0/rtmp-hls/Dockerfile | 127 +++++++++ linux/nginx/1.18.0/rtmp-hls/Makefile | 5 + linux/nginx/1.18.0/rtmp-hls/README.md | 78 ++++++ linux/nginx/1.18.0/rtmp-hls/conf/nginx.conf | 134 +++++++++ .../1.18.0/rtmp-hls/conf/nginx_no-ffmpeg.conf | 118 ++++++++ .../conf/nginx_rtmp_minimal_no-stats.conf | 16 ++ .../nginx/1.18.0/rtmp-hls/docker-compose.yml | 9 + linux/nginx/1.18.0/rtmp-hls/players/dash.html | 23 ++ linux/nginx/1.18.0/rtmp-hls/players/hls.html | 23 ++ .../1.18.0/rtmp-hls/players/hls_hlsjs.html | 41 +++ linux/nginx/1.18.0/rtmp-hls/players/rtmp.html | 24 ++ .../1.18.0/rtmp-hls/players/rtmp_hls.html | 30 ++ .../sources.list.d/sources.buster.list | 19 ++ .../rtmp-hls/sources.list.d/sources.sid.list | 19 ++ .../sources.list.d/sources.stretch.list | 19 ++ linux/nginx/1.19.10/main/.env | 2 + linux/nginx/1.19.10/main/Dockerfile | 235 ++++++++++++++++ linux/nginx/1.19.10/main/Makefile | 5 + linux/nginx/1.19.10/main/README.md | 30 ++ linux/nginx/1.19.10/main/docker-compose.yml | 9 + .../main/pre/ip2location-description-pak | 1 + .../1.19.10/main/pre/luajit2-description-pak | 1 + .../1.19.10/main/pre/nginx-description-pak | 1 + .../nginx/1.19.10/main/pre/ngninx.pre.tar.gz | Bin 0 -> 9573 bytes linux/nginx/1.19.10/php/.env | 2 + linux/nginx/1.19.10/php/Dockerfile | 257 ++++++++++++++++++ linux/nginx/1.19.10/php/Makefile | 5 + linux/nginx/1.19.10/php/README.md | 30 ++ linux/nginx/1.19.10/php/docker-compose.yml | 9 + linux/nginx/1.19.10/rtmp-hls/.env | 2 + linux/nginx/1.19.10/rtmp-hls/Dockerfile | 127 +++++++++ linux/nginx/1.19.10/rtmp-hls/Makefile | 5 + linux/nginx/1.19.10/rtmp-hls/README.md | 78 ++++++ linux/nginx/1.19.10/rtmp-hls/conf/nginx.conf | 134 +++++++++ .../rtmp-hls/conf/nginx_no-ffmpeg.conf | 118 ++++++++ .../conf/nginx_rtmp_minimal_no-stats.conf | 16 ++ .../nginx/1.19.10/rtmp-hls/docker-compose.yml | 9 + .../nginx/1.19.10/rtmp-hls/players/dash.html | 23 ++ linux/nginx/1.19.10/rtmp-hls/players/hls.html | 23 ++ .../1.19.10/rtmp-hls/players/hls_hlsjs.html | 41 +++ .../nginx/1.19.10/rtmp-hls/players/rtmp.html | 24 ++ .../1.19.10/rtmp-hls/players/rtmp_hls.html | 30 ++ .../sources.list.d/sources.buster.list | 19 ++ .../rtmp-hls/sources.list.d/sources.sid.list | 19 ++ .../sources.list.d/sources.stretch.list | 19 ++ 90 files changed, 3822 insertions(+) create mode 100644 linux/nginx/1.17.10/main/.env create mode 100644 linux/nginx/1.17.10/main/Dockerfile create mode 100644 linux/nginx/1.17.10/main/Makefile create mode 100644 linux/nginx/1.17.10/main/README.md create mode 100644 linux/nginx/1.17.10/main/docker-compose.yml create mode 100644 linux/nginx/1.17.10/main/pre/ip2location-description-pak create mode 100644 linux/nginx/1.17.10/main/pre/luajit2-description-pak create mode 100644 linux/nginx/1.17.10/main/pre/nginx-description-pak create mode 100644 linux/nginx/1.17.10/main/pre/ngninx.pre.tar.gz create mode 100644 linux/nginx/1.17.10/php/.env create mode 100644 linux/nginx/1.17.10/php/Dockerfile create mode 100644 linux/nginx/1.17.10/php/Makefile create mode 100644 linux/nginx/1.17.10/php/README.md create mode 100644 linux/nginx/1.17.10/php/docker-compose.yml create mode 100644 linux/nginx/1.17.10/rtmp-hls/.env create mode 100644 linux/nginx/1.17.10/rtmp-hls/Dockerfile create mode 100644 linux/nginx/1.17.10/rtmp-hls/Makefile create mode 100644 linux/nginx/1.17.10/rtmp-hls/README.md create mode 100644 linux/nginx/1.17.10/rtmp-hls/conf/nginx.conf create mode 100644 linux/nginx/1.17.10/rtmp-hls/conf/nginx_no-ffmpeg.conf create mode 100644 linux/nginx/1.17.10/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf create mode 100644 linux/nginx/1.17.10/rtmp-hls/docker-compose.yml create mode 100644 linux/nginx/1.17.10/rtmp-hls/players/dash.html create mode 100644 linux/nginx/1.17.10/rtmp-hls/players/hls.html create mode 100644 linux/nginx/1.17.10/rtmp-hls/players/hls_hlsjs.html create mode 100644 linux/nginx/1.17.10/rtmp-hls/players/rtmp.html create mode 100644 linux/nginx/1.17.10/rtmp-hls/players/rtmp_hls.html create mode 100644 linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.buster.list create mode 100644 linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.sid.list create mode 100644 linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.stretch.list create mode 100644 linux/nginx/1.18.0/main/.env create mode 100644 linux/nginx/1.18.0/main/Dockerfile create mode 100644 linux/nginx/1.18.0/main/Makefile create mode 100644 linux/nginx/1.18.0/main/README.md create mode 100644 linux/nginx/1.18.0/main/docker-compose.yml create mode 100644 linux/nginx/1.18.0/main/pre/ip2location-description-pak create mode 100644 linux/nginx/1.18.0/main/pre/luajit2-description-pak create mode 100644 linux/nginx/1.18.0/main/pre/nginx-description-pak create mode 100644 linux/nginx/1.18.0/main/pre/ngninx.pre.tar.gz create mode 100644 linux/nginx/1.18.0/php/.env create mode 100644 linux/nginx/1.18.0/php/Dockerfile create mode 100644 linux/nginx/1.18.0/php/Makefile create mode 100644 linux/nginx/1.18.0/php/README.md create mode 100644 linux/nginx/1.18.0/php/docker-compose.yml create mode 100644 linux/nginx/1.18.0/rtmp-hls/.env create mode 100644 linux/nginx/1.18.0/rtmp-hls/Dockerfile create mode 100644 linux/nginx/1.18.0/rtmp-hls/Makefile create mode 100644 linux/nginx/1.18.0/rtmp-hls/README.md create mode 100644 linux/nginx/1.18.0/rtmp-hls/conf/nginx.conf create mode 100644 linux/nginx/1.18.0/rtmp-hls/conf/nginx_no-ffmpeg.conf create mode 100644 linux/nginx/1.18.0/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf create mode 100644 linux/nginx/1.18.0/rtmp-hls/docker-compose.yml create mode 100644 linux/nginx/1.18.0/rtmp-hls/players/dash.html create mode 100644 linux/nginx/1.18.0/rtmp-hls/players/hls.html create mode 100644 linux/nginx/1.18.0/rtmp-hls/players/hls_hlsjs.html create mode 100644 linux/nginx/1.18.0/rtmp-hls/players/rtmp.html create mode 100644 linux/nginx/1.18.0/rtmp-hls/players/rtmp_hls.html create mode 100644 linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.buster.list create mode 100644 linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.sid.list create mode 100644 linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.stretch.list create mode 100644 linux/nginx/1.19.10/main/.env create mode 100644 linux/nginx/1.19.10/main/Dockerfile create mode 100644 linux/nginx/1.19.10/main/Makefile create mode 100644 linux/nginx/1.19.10/main/README.md create mode 100644 linux/nginx/1.19.10/main/docker-compose.yml create mode 100644 linux/nginx/1.19.10/main/pre/ip2location-description-pak create mode 100644 linux/nginx/1.19.10/main/pre/luajit2-description-pak create mode 100644 linux/nginx/1.19.10/main/pre/nginx-description-pak create mode 100644 linux/nginx/1.19.10/main/pre/ngninx.pre.tar.gz create mode 100644 linux/nginx/1.19.10/php/.env create mode 100644 linux/nginx/1.19.10/php/Dockerfile create mode 100644 linux/nginx/1.19.10/php/Makefile create mode 100644 linux/nginx/1.19.10/php/README.md create mode 100644 linux/nginx/1.19.10/php/docker-compose.yml create mode 100644 linux/nginx/1.19.10/rtmp-hls/.env create mode 100644 linux/nginx/1.19.10/rtmp-hls/Dockerfile create mode 100644 linux/nginx/1.19.10/rtmp-hls/Makefile create mode 100644 linux/nginx/1.19.10/rtmp-hls/README.md create mode 100644 linux/nginx/1.19.10/rtmp-hls/conf/nginx.conf create mode 100644 linux/nginx/1.19.10/rtmp-hls/conf/nginx_no-ffmpeg.conf create mode 100644 linux/nginx/1.19.10/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf create mode 100644 linux/nginx/1.19.10/rtmp-hls/docker-compose.yml create mode 100644 linux/nginx/1.19.10/rtmp-hls/players/dash.html create mode 100644 linux/nginx/1.19.10/rtmp-hls/players/hls.html create mode 100644 linux/nginx/1.19.10/rtmp-hls/players/hls_hlsjs.html create mode 100644 linux/nginx/1.19.10/rtmp-hls/players/rtmp.html create mode 100644 linux/nginx/1.19.10/rtmp-hls/players/rtmp_hls.html create mode 100644 linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.buster.list create mode 100644 linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.sid.list create mode 100644 linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.stretch.list diff --git a/linux/nginx/1.17.10/main/.env b/linux/nginx/1.17.10/main/.env new file mode 100644 index 000000000..0349cbaaf --- /dev/null +++ b/linux/nginx/1.17.10/main/.env @@ -0,0 +1,2 @@ +NGINX_VERSION=1.17.10 +NGINX_DOWNLOAD_URL=http://nginx.org/download/nginx-1.17.10.tar.gz diff --git a/linux/nginx/1.17.10/main/Dockerfile b/linux/nginx/1.17.10/main/Dockerfile new file mode 100644 index 000000000..aef90bcb1 --- /dev/null +++ b/linux/nginx/1.17.10/main/Dockerfile @@ -0,0 +1,235 @@ +################################################################## +# Set Global ARG to build process +################################################################## +ARG NGINX_VERSION + +################################################################## +# Start build process +################################################################## +FROM epicmorg/devel 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 && \ + ./build.sh && \ + 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/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/edge +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 -s /lib/x86_64-linux-gnu/libcrypto.so.1.1 /lib/x86_64-linux-gnu/libcrypto.so.1 && \ + 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/* + +#Final config +VOLUME ["/var/cache/nginx"] +EXPOSE 80 443 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/linux/nginx/1.17.10/main/Makefile b/linux/nginx/1.17.10/main/Makefile new file mode 100644 index 000000000..82c5a2de6 --- /dev/null +++ b/linux/nginx/1.17.10/main/Makefile @@ -0,0 +1,5 @@ +all: app + +app: + docker-compose build --compress + docker-compose push diff --git a/linux/nginx/1.17.10/main/README.md b/linux/nginx/1.17.10/main/README.md new file mode 100644 index 000000000..034784bc0 --- /dev/null +++ b/linux/nginx/1.17.10/main/README.md @@ -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 +``` diff --git a/linux/nginx/1.17.10/main/docker-compose.yml b/linux/nginx/1.17.10/main/docker-compose.yml new file mode 100644 index 000000000..4d5d761fb --- /dev/null +++ b/linux/nginx/1.17.10/main/docker-compose.yml @@ -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} \ No newline at end of file diff --git a/linux/nginx/1.17.10/main/pre/ip2location-description-pak b/linux/nginx/1.17.10/main/pre/ip2location-description-pak new file mode 100644 index 000000000..e93eb7783 --- /dev/null +++ b/linux/nginx/1.17.10/main/pre/ip2location-description-pak @@ -0,0 +1 @@ +Custom build of ip2location lib by EpicMorg. diff --git a/linux/nginx/1.17.10/main/pre/luajit2-description-pak b/linux/nginx/1.17.10/main/pre/luajit2-description-pak new file mode 100644 index 000000000..4305e8e88 --- /dev/null +++ b/linux/nginx/1.17.10/main/pre/luajit2-description-pak @@ -0,0 +1 @@ +Custom build of luajit2 for Nginx module, by EpicMorg. diff --git a/linux/nginx/1.17.10/main/pre/nginx-description-pak b/linux/nginx/1.17.10/main/pre/nginx-description-pak new file mode 100644 index 000000000..b6c186ed8 --- /dev/null +++ b/linux/nginx/1.17.10/main/pre/nginx-description-pak @@ -0,0 +1 @@ +Custom build of Nginx with some modules by EpicMorg. \ No newline at end of file diff --git a/linux/nginx/1.17.10/main/pre/ngninx.pre.tar.gz b/linux/nginx/1.17.10/main/pre/ngninx.pre.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..bf9c2735172faf460d34cb157f13291f42cdef88 GIT binary patch literal 9573 zcmV-rC7RkFiwFRv!iZe}1MEF(QyaOm`_=O+wAi%?yZCKP4ivk^f|F2(00)~*ZDn(O zh8fw`Wjr%G(g5C&``d4KYsT}i%_9MCPF*V%u=VI}b+=klt0gMc@18x?AZ=}K(r-xl z-}JfO+-x=Kt$J;<4f$JJ^~QH>^Z7~p?z>PbGhpny!1L5y_3kVGFHM!|l^Hy<4m?o) zpaJczMg#Ie3+lC%{Fjlm{2g)ej5_dm`PUm@23GQ4LQ3TC4uyO3EL!k*`8Qg%`bz%G zNRj-#;Wsw^w^s6BN=oGaZH@nWYbF0>BrX5z>+5f8{5P8``7b3U@*k?V2 zTdn_>k}A)<_Q&*i`PW+Q)%t%aNy}eOq~c@yne^Zb#(#aa|65MV%3uF}YBhMg{F|G# zmH%%kX|DWfD^QU{U0{qv}Ee5aBp12whjW!wnYcC{yMom(229 z6?hInGhI8Oqt`im$6gLhshAvv%J#0^DIH@|xM?!>hy>I1piq<26Jzd$3cJ?j*6!x| z20<5tgecPyS3Dtx5Cbeg{m;XrBSd8a(TFbKh!9ARaRSvq02W0VY#4Z<&tCo$`uWbY z`R-WUaC^N%Jk}Vc7`mn-0oZ^C9A#vC);1K6l=8Q$(Ma`zVU@d8D3aBPF%?|S1E3G* zu23J111_yV_)2*0?j9S7;fVP>0C|r|@Yno;;czE@*vtfc@L3Y2H&v1p+RCL&oXh z!E530-6}{s>XR>QL+hCtsM7$-LK#%$g@`J!vSQ^wS$W7_*d`x)F7wUI*U9cUbd)HEAl6tgf43Q0rN1dvNUNV0#{<`Y z$@wq*Y&2KvzhxvX|8L^_FD3t#|9@F2k^kTB|4+$(<^Nw+s#LkMz76}I@&9eD?Eg}d zmOt!MROPwce_wL`({8W)|4T_3`O_5e^f>O8f4#QVYUcgFTg{dKXDO-peU-MOBf}^b zi|p6Vo5N#vczoD{AFof0B0CMdD`9iFU0_q+&>4rVYQXI>ZL7B#q>|%VrqdrtRtjJ{ zt2lj(90IH)C(`kTkYSEtPnvk-!$8Mhzq|job8vpt*iqH`bS;#K#7_2t z2|C{RjS5Ul#r{U^E4REZjGd~cnVx+}v{~7$uSb0S zi>;M_hP8y3NKwv-gPhdWU8sJ3bolPDmudl8%M}Y9F$NAnJ^U#_Llrs{=Ln_{RgEAK zcv8^5cG#`6PXrXRNbR-CRwIu;lwt81S7G4FZTyVm2M|ZDs*x$#1?R5TdKivWqn@g9 zZKA6*0A5UD53a7%NL8}D(6O28DFBv$n&%m#yp)G5_Jtv5;VZx4)>MV}TP{xAv!P_TeH#OhChgJ4Eq`zNQpE^GX}2w}tctQEeG8YhM^|9ePhVs&(37?69_ zC`@rFmcf%k)A;#^I>N?|)2GDc=rRyaqn5*kILaMtPlws!=U>6bOY;BXl0pa79%)=Ii~4Y{a2 zwOKyCj_eGu5-f;5W-!s)|MvVeK3B+d_>OL9cRs_$3l%L*d_-oA$n%s5lOjxlGN$f~ zvKY>b2thss_j&iM{&?h}KMYKpXPI;2I>O~FDvPuj$4RJYVktcIm|}raYJiDOh8B9( z2cY?r7-?EVr)M;%c(X=_4qk+ z5IIzP5X&16VR>xsfrR%am~T9eyMPfxRN%Rc%dcZHd{vXjO{_og5|2+|L_|>U?up-eq#0iU^dN6lv5rmR<9)! z6Qrq)gU>L}z|ZL*E7+dPsXHB5N=?)V7fJ$;M8JA%u=upl(Uv5~Z=>)q=Hdcl4s-Jz zpUdY&#R~=QNS?}S8oE1Cb~1H9CX5Hml!&9g1~YIp>eitejKsdCvp<$Ywnj57_PT`2 zvNdRd_`whrQqwVfi@^P&!4(R%+xj{V>pmD9f>dKWJ6O7qIGkizVbxOJJG5nv}$AW*{bQGGfGu@fNsm@v{ChU!+(vm1tIaUm@Qjwdjq6 zjEy^Y6>J{CZde|y9AL>0TQG}j1LBr#AuprJ0EWI9OsM_XoG@Dq24Fh}fj6eg!Yz-1 ze%L;Mq1s>;8_#xT`PB(;8Xwi&6kJNK2LSnVR)5a~ca#=*FUR%vq>ayo^H(|td zv6V)WTAM9GK|_#RBM-=x=8$jexrlwDL3@i@e;e7$+c^X7RnLyv{3#} zcou*Hz9as#w%Kmyz#fylu!=eea|mgR|f;Wq|yy4UN`Ji z5Mg(0I*wj4;ogq<9_*+w^b;3Bd@vA}fK^)BlkR(glDn^JRb}~xk;2=(2XXglFt=LG z4C>b*#>Cx;8Fs)=NWiPwMoh!sE%hW-GVbH&!SQ(e->BEOR`!1xsWN+f@Z>n|v;Xbd zX8!(1y}dgBT}mplV^6_mF0oZ*Z=i;-u`c4{MX9jgD5g0>pA z5gj#^Z8oEoIIY;_Y1Q}$icZ=KLFkr!3dy;z-3~Pv2>gYIxkLky;7OIx;9hx`yc}2+ zJ8~mOIP)j(DF~mxp(XvJQY94?^ISL{Z~yD<`s)7oQc_y}(iOhXmHY8;dC5KDP=wsq?rDKA z@0XRIe)*#U8nphhTKRFkw1cjf{U~xGax9&`J!Kj^p7l#5W8ac*(zb&MWvF1%*CBgz zDcWt-S_Jyn2{zLHDvScxNT!Wpe*&7FC7vkNzMk#aZ-pV`DZiB-7)n@|TveNmx`9F0 zrKFp)@OF$OD=^0lWB&UX{-0_F1jm(xYXkS`Co*ft5K+W_RDs6dGg`Cs_#cylPL{cg zp0}s-1U-KJ*J`ice_BpT%Rju9vD(U~#Bq=P$JhR5&i_~Uzm}7Xl+YRb*Lmmc_kOo` zc6j_Iy6aT>Gvr`Jr3%0x?_{f=b)Z4F*MHaPy*)Y5)dLOPN1Aw{!Me=d6EvcG5f9KRKfMdPR(3aLThhX8}X;z~G(c zPzjGG#(B=ru{6u163$?FwX5%Xs!vY1S?;_$>2>;h2M1>dVyO1%$yqO7 z8xOP>bT(Z(?(D+a6akm3jnn#S`M#`FnR_elX>r_R{~P$nK63t_HvavOmHmJIgpWW? z-Say}bU2&5SZ0O_maBNZBzt8sS*YHzfc!C9y&C)qOr*qfg$M!UyIkMkWLxc5J9zDe zUZv`rmc?N|;JG_^&jM{4G=pNgBJ`^%g@s4Oc=9YM*C^nvEV}c7Z3@cr!2tT99Hqb0 zIfc%+VBw{~)sV71>5xGgAVJ%TcijX+n0=-I&&7CQ5$>5-*k^s1hvIG#)g+#K&r zIn?bQ&G1J$)A>fS-ck3eu76hI-wnJ*a1cas_W$+^?D8A7UD4mg-Au5cQeuJ8`Q&M;qya*wwigMNcKXYUwQyJZ~s4i8sLdM0FU4Q zZ?59Mmz2`-&p580&;xMa{(oyT@BeLWuJ-@SNjY!j13Un^1`qK8?1z6DFPCr1d zO?Ut7@U)lRVa{_`=fLQ<%q{2`;(yt4J91in;jM#ziO`#jasZgpZKWBCM=0 z2I2`_yqlQi!@=QMXCLI>+v}Z^bQ`tW9JfkkW})}gv;UX*|5x!J%Sm_1KiYbJHI94c z|JLSaYv%p`*2@30lvKpG<}vtRj_7@p`Emc}XGbsS^?EO`^&R+OU`n5vOnQ#6S?EGG zFw(_K*Z|NQu;bY`jiRSl(qN*;TwI5na-^SV!P`_*0F~&edx_h|>+4GFq8wKPF1--U zprq}jeowvnxZ29|g(a&hR9+xVhaRN?YWu!W1Ji-;X>hn_wfTiGUD~t~b=3nhzFsit zsvxvf7;t*K|IlS)+1$9ElIQo6#Z86k-+`cZ=HRvVAo0UGcIY6{p! zr~eLsaHW8Kx;J3CVau*Z__mEu8WFCOgd1|?_63IQgua~)>WN-Uqlg~5&cV&G{tE=X zDQyG@J%Mc__-o}UEtquu#x_xqoj2%H(_ct86K|dX_8L^x`U^vb)2qx z=m+&ME*YOE()O^7pSZqTBCE*_51T9fibh-p(27R#>R|kr6teGm6^-ehKi=`bs>L^2 zBB$EUwCKb3_Q&lx<*|z|_f{A=exjzWRudz&WIxvLP#w z3eaf0?pV<;)I~uQI9e{kp-hjKt*vIW*_gib1gaCFtBz5CSL8^<7yMj_FM@$p;TC?# z^zs2%+M8RiVl4Tvwui*C6&@VWrg6m1viX6NC@q{dSmsacX&LU>b`tavKM;cAiSIjs zCPpty!a@+;a!Hs7LP1vQX{#oKfM0!{J%R;7s$D%fNv2N_zWAS=ti18}{uRjI+h z`u0C+xIQlwHA8IfPMG$NBQHRr(HG+525O0Rk;1ebZyp&c8#aa>!|;*X8j@nXKtDa7 z;bHX;0IXT45ju`0fjqofPjb%IL;oW4hx4luuOciHr#_n4OwuPadUOZrqq&5Pc7D#P z>c8SM89Tz&@nHr%o0FRl$wcT|fr?Cc%8fd;sXNJ+$cpY@)y!Z>k**7~<1|}5Gx&6q z%vdVkspVhgp?%(zS^qzW^Y6R+{eShX{QAFDTg87bCmHhp+Pk(L$BiSJSMFEvAqX5K z9P2JI8w6-dq`kf_c5Nf;7lR{lB+iH;ElMNJ=I2wVn;KTPni{XM7~3!lkat|Cy4hXT zcOH@-c$R0gZ#*k2Kj>t!{Gc;J&HU+8IIDH@5nQPqC4Tl;ze>7>#VPmn6Kh(nb7oL+N#U!!GDo7`rDO`b}I= zg_8X?S4w{^k&f49X)HEEaekW@)WWYV{qq{?7S29Z6Fw913lI>EqdQsy^1cd4wX^rFYC zf`??CZ}(*>4e?zGcds%GI`Stgx=5B)EvcBUP_>-LMY^M{)w^#MLiH3vL+T>D3#;U) zX|KWPl`^5ail`}{S5-c~{K05LOP*~mk4Y+wJRyb+8AxAzrtIL0u4ZTP#`jgG5gDrs zelq>L(oM-jQOF~{SNg8&h8?DlmAXgjE>mACHF-1|G4-xgdh%z;1G-RZYOUdrUo=sA z@@&M-ZQj^aku6|HXpOMoe9*eC~!|6O0%I7ok zdBnTNPN~V~5qF}B^Nd^`^2ohcPMpE#JePZ=hR=EZWm}Z(R>I`^hmwehvbr|;KH}a~tz$;Mk9^I1UL_#+M?C+Np8Oy2*wPrgV7-hQIMQkZ!S@R3%C5l? zp@5$38(N1`KwmnO1K+(>$Ut@kj?5G=lwCo)e5jC-j3Y-P1&n29Uc~_w6B=dEt+Z$#sJ28s3H?$}GOZGY zvZr(GghaC2a-{A&zt1DIKeSv~dFLPZ8c(eM$HURt`~OD6_We)KA}v;W0q#7N>M;BavXGY`_<1!i+Op-Y29FvMLs__FBVPhi4coTp z^LI_xAmrQ}?G^u@TxB#=?YDLCv;KZ!x2HCh9OsGAPL6BKxK)`W+WGY@o=7`MlJ6SL zB|WRiQ`WDGqQSfxFXnn-pt0L8^L)8ZJZdew)zw|LRt^5{G_X8j{$6EIf1H~iz43eR z^qRtiw~DdVdY;eo*b=Atsmtr;ya#xTdT65dzesIerb=?VSr?wXEB+`@+3d6UE-682 zFkZ%~$#S?hupzZ`Pm^KAIn_?k{)yo165!!ewe{%SUfFw~xHg z@9u0Vj>C@c&11zcVgm9*k!0?CYrW91NH??~U7MF9y~P~sFYByutXF1Qg0i@=&mut1 z?ZNf33n7-7gFlk0+ta{}F9W)ZwWV0i$rg#FE`m)K{6fX!`10#nXRuL$vdu`m@E_7)0vh9zNlBOl7ymu zCI4lSU6;QqQ*`Uo+pQ^A{=ag_Kc4EpU!*y09T#asQ&E0P7p}CqdmJ28x+fOt8J?r8 z&GY5uRU+ZsoQBPTeH5v3AH=#j`Ef1(wwiC_s?H#|=AZVL#l_{7#OXgTS(>cqH7tmg z>`L8waLJgwGtkYSawg%~X~(0|{Jc-+cX$xKDNTOQ&1uP)HCRdk&h3vh9N%BCCsa4j z2A9kUHOwzAxwFmEFfYBhY}`1+<&l0jXGsoOW0?pt&E;QBSGZ4K{=QDJ`1#Kv-FW-m zM}GOoU!FYw8IH&2_kV}&^B>P570n-af2)rx#`2*I{TA@Q|Kn1_n855`c(P!TC(`(Z zB%AJV@bEU-f_p59oL|S7NaQ`kb+X$f+w#hJ#lGWEU4nA^Cmu*BCDVJiO|L)QZ)jJ& zNP1d>RHdVJ5zTT}FZdm6hnLbJQ*R>Q7BcBMVQ$VSt=(y^T(1)X$3hD#!Q(sm+v@)Y1V1mBUVcP8wNP_sks8ai%?Z z*sU1_j_5kG?j%&oi+7ou*eigyk+BC!z>82_j#)7JFGpJ`(xlzm2LxJZ3LnCqexCn(C zHx}*{xi~;DgHtdiJ;DjP&{g#>*89@S(#^iC3J~;=>!>N$S7gygfJZ#QoCo3r1B9+? z$19G96AV#^p)$(S`H30f1c+!*kXs96Rlhf6az1NZ*CtXq5r!5f8to>wh49 zANszoryemKKyNhJ8R>`64~r!EO(B>e1i}cx z8`2{L!U(}z(jx@I2*G!xM+k%w0vZ8l2!Sv{5Ro1s5Jm{TBu~!}0%3&UJ6std5Jm{5 zNP!p#BL;5)APB-Y0htDI5Jnv88@|pA@eoEl-jN>h5Jo)eo7~O}aS=vbsA0_z7h%NZ z9sGm92qQ4>1Vtu9WKP4?iIe1nh)bY#@N3c{DnXBH?@5c81bwch(I!Mh0)r8@?|uFT5~bJP7{rx)?7S?H3s;J=3^{xA|GmB zS4(@0?-R|>teHmvP|e>Dq@6;m`I|NIXa-dCJ2jLjWQ(FlW}OpZ4wz_;e~7UYHTl24 z#r|*5JOBP4soMSDGsug^4PeCuZrb{tHhwR##yxtAZ7kmuAfMyQv!r_Z5qq_GE_Z;g z8zgvSy;KjqCy{ zK_QuCe%CdYmJ%CCY@lIw#xxeo4Q4fK8mq>pyclyD3+o0mgFTHsm}YsIL5*F)$q71( z8ha)8Y_lZMfkX!eYG+epQ_*NxGpezpY0i(as@2-QnOTk9V`D}JyBedoVSAZjjcuY^ z?-QjSENhn08PggI8x5=3)>z$WP|di;H0c`iq{O7}1HJv#%xkP`^n%pvYfRG`Rx_}% zbkd-jg^g)kgBTMVDEaZu}adgnyHO>Tz6y5*2XGI!)nGhmQos2v$nCG(&MS1p@ekj*X(VqM>U8sxUmS< zu$sk<6^&kwGbT5dLV67qq(Y|;Nj0Mz%P~FUn$?Ykl7`jHZY?{Y{%h1Fae0 z*xVZ+V}W;snJ;64V|Q+#H5(jTbOWpz;n=5}`6^I$NivKHe*66Ivxw#WzaRYz5Krv?dz~}>|DfA#`Tx%%4X@3OUVRmw zUfiI+8siteM7Mp5aQhbF_ASDHp0^0M@<$au|I6=6JpcFqI=#`^`@edlaXbG%hp3q2 ze0!C|Ag9Zh{mGI0Cwz$H<%=_m|9Wqdc> ${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 + +#Final config +VOLUME ["/var/cache/nginx"] +EXPOSE 80 443 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/linux/nginx/1.17.10/php/Makefile b/linux/nginx/1.17.10/php/Makefile new file mode 100644 index 000000000..82c5a2de6 --- /dev/null +++ b/linux/nginx/1.17.10/php/Makefile @@ -0,0 +1,5 @@ +all: app + +app: + docker-compose build --compress + docker-compose push diff --git a/linux/nginx/1.17.10/php/README.md b/linux/nginx/1.17.10/php/README.md new file mode 100644 index 000000000..034784bc0 --- /dev/null +++ b/linux/nginx/1.17.10/php/README.md @@ -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 +``` diff --git a/linux/nginx/1.17.10/php/docker-compose.yml b/linux/nginx/1.17.10/php/docker-compose.yml new file mode 100644 index 000000000..0968ca6c1 --- /dev/null +++ b/linux/nginx/1.17.10/php/docker-compose.yml @@ -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} \ No newline at end of file diff --git a/linux/nginx/1.17.10/rtmp-hls/.env b/linux/nginx/1.17.10/rtmp-hls/.env new file mode 100644 index 000000000..0349cbaaf --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/.env @@ -0,0 +1,2 @@ +NGINX_VERSION=1.17.10 +NGINX_DOWNLOAD_URL=http://nginx.org/download/nginx-1.17.10.tar.gz diff --git a/linux/nginx/1.17.10/rtmp-hls/Dockerfile b/linux/nginx/1.17.10/rtmp-hls/Dockerfile new file mode 100644 index 000000000..d7d9b5901 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/Dockerfile @@ -0,0 +1,127 @@ +################################################################## +# 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 + + +EXPOSE 1935 +EXPOSE 8080 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/linux/nginx/1.17.10/rtmp-hls/Makefile b/linux/nginx/1.17.10/rtmp-hls/Makefile new file mode 100644 index 000000000..82c5a2de6 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/Makefile @@ -0,0 +1,5 @@ +all: app + +app: + docker-compose build --compress + docker-compose push diff --git a/linux/nginx/1.17.10/rtmp-hls/README.md b/linux/nginx/1.17.10/rtmp-hls/README.md new file mode 100644 index 000000000..d5a0ec5cc --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/README.md @@ -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://:/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://:1935/live/ + ``` + where `` is any stream key you specify. + + * **Configure [OBS](https://obsproject.com/) to stream content:**
+Go to Settings > Stream, choose the following settings: + * Service: Custom Streaming Server. + * Server: `rtmp://: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://:1935/live/` + Replace `` with the IP of where the server is running, and + `` with the stream key you used when setting up the stream. + * For HLS and DASH, the URLs are of the forms: + `http://:8080/hls/.m3u8` and + `http://:8080/dash/_src.mpd` respectively. + * Click Play. + +* **Using provided web players:**
+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. + + diff --git a/linux/nginx/1.17.10/rtmp-hls/conf/nginx.conf b/linux/nginx/1.17.10/rtmp-hls/conf/nginx.conf new file mode 100644 index 000000000..938da01e2 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/conf/nginx.conf @@ -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; + } + + } +} \ No newline at end of file diff --git a/linux/nginx/1.17.10/rtmp-hls/conf/nginx_no-ffmpeg.conf b/linux/nginx/1.17.10/rtmp-hls/conf/nginx_no-ffmpeg.conf new file mode 100644 index 000000000..99644e14f --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/conf/nginx_no-ffmpeg.conf @@ -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; + } + + } +} \ No newline at end of file diff --git a/linux/nginx/1.17.10/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf b/linux/nginx/1.17.10/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf new file mode 100644 index 000000000..780a1d1ff --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf @@ -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; + } + } +} \ No newline at end of file diff --git a/linux/nginx/1.17.10/rtmp-hls/docker-compose.yml b/linux/nginx/1.17.10/rtmp-hls/docker-compose.yml new file mode 100644 index 000000000..3c46aedbd --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/docker-compose.yml @@ -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} \ No newline at end of file diff --git a/linux/nginx/1.17.10/rtmp-hls/players/dash.html b/linux/nginx/1.17.10/rtmp-hls/players/dash.html new file mode 100644 index 000000000..12b8df786 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/players/dash.html @@ -0,0 +1,23 @@ + + + + + DASH Live Streaming + + + + +

DASH Player

+ + + + + + + diff --git a/linux/nginx/1.17.10/rtmp-hls/players/hls.html b/linux/nginx/1.17.10/rtmp-hls/players/hls.html new file mode 100644 index 000000000..15d95b4c1 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/players/hls.html @@ -0,0 +1,23 @@ + + + + + HLS Live Streaming + + + + +

HLS Player

+ + + + + + + diff --git a/linux/nginx/1.17.10/rtmp-hls/players/hls_hlsjs.html b/linux/nginx/1.17.10/rtmp-hls/players/hls_hlsjs.html new file mode 100644 index 000000000..0237e7a52 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/players/hls_hlsjs.html @@ -0,0 +1,41 @@ + + + + + HLS streaming + + + + + + + + + + +

HLS Player (using hls.js)

+ +
+
+ +
+
+ + + + + + + diff --git a/linux/nginx/1.17.10/rtmp-hls/players/rtmp.html b/linux/nginx/1.17.10/rtmp-hls/players/rtmp.html new file mode 100644 index 000000000..d8ce85610 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/players/rtmp.html @@ -0,0 +1,24 @@ + + + + + RTMP Live Streaming + Live Streaming + + + + + + + +

RTMP Player

+ + + + + diff --git a/linux/nginx/1.17.10/rtmp-hls/players/rtmp_hls.html b/linux/nginx/1.17.10/rtmp-hls/players/rtmp_hls.html new file mode 100644 index 000000000..35617e913 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/players/rtmp_hls.html @@ -0,0 +1,30 @@ + + + + + Live Streaming + + + + + + + + +

RTMP Player

+ + +

HLS Player

+ + + + + diff --git a/linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.buster.list b/linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.buster.list new file mode 100644 index 000000000..fd3092816 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.buster.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ buster main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-backports main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-backports main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-proposed-updates main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ buster/updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ buster/updates main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ buster main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ buster main non-free +#deb http://ftp.ru.debian.org/debian-multimedia/ buster-backports main +#deb-src http://ftp.ru.debian.org/debian-multimedia/ buster-backports main diff --git a/linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.sid.list b/linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.sid.list new file mode 100644 index 000000000..677a95436 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.sid.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ sid main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ sid main contrib non-free +deb http://ftp.ru.debian.org/debian/ testing-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ testing-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ testing-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ testing-proposed-updates main contrib non-free + +#backports +#deb http://ftp.ru.debian.org/debian/ testing-backports main contrib non-free +#deb-src http://ftp.ru.debian.org/debian/ testing-backports main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ testing-security main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ testing-security main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ sid main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ sid main non-free diff --git a/linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.stretch.list b/linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.stretch.list new file mode 100644 index 000000000..ff15154c3 --- /dev/null +++ b/linux/nginx/1.17.10/rtmp-hls/sources.list.d/sources.stretch.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ stretch main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-backports main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-backports main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-proposed-updates main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ stretch/updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ stretch/updates main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ stretch main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ stretch main non-free +#deb http://ftp.ru.debian.org/debian-multimedia/ stretch-backports main +#deb-src http://ftp.ru.debian.org/debian-multimedia/ stretch-backports main diff --git a/linux/nginx/1.18.0/main/.env b/linux/nginx/1.18.0/main/.env new file mode 100644 index 000000000..841a1e5c4 --- /dev/null +++ b/linux/nginx/1.18.0/main/.env @@ -0,0 +1,2 @@ +NGINX_VERSION=1.18.0 +NGINX_DOWNLOAD_URL=http://nginx.org/download/nginx-1.18.0.tar.gz diff --git a/linux/nginx/1.18.0/main/Dockerfile b/linux/nginx/1.18.0/main/Dockerfile new file mode 100644 index 000000000..aef90bcb1 --- /dev/null +++ b/linux/nginx/1.18.0/main/Dockerfile @@ -0,0 +1,235 @@ +################################################################## +# Set Global ARG to build process +################################################################## +ARG NGINX_VERSION + +################################################################## +# Start build process +################################################################## +FROM epicmorg/devel 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 && \ + ./build.sh && \ + 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/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/edge +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 -s /lib/x86_64-linux-gnu/libcrypto.so.1.1 /lib/x86_64-linux-gnu/libcrypto.so.1 && \ + 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/* + +#Final config +VOLUME ["/var/cache/nginx"] +EXPOSE 80 443 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/linux/nginx/1.18.0/main/Makefile b/linux/nginx/1.18.0/main/Makefile new file mode 100644 index 000000000..82c5a2de6 --- /dev/null +++ b/linux/nginx/1.18.0/main/Makefile @@ -0,0 +1,5 @@ +all: app + +app: + docker-compose build --compress + docker-compose push diff --git a/linux/nginx/1.18.0/main/README.md b/linux/nginx/1.18.0/main/README.md new file mode 100644 index 000000000..034784bc0 --- /dev/null +++ b/linux/nginx/1.18.0/main/README.md @@ -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 +``` diff --git a/linux/nginx/1.18.0/main/docker-compose.yml b/linux/nginx/1.18.0/main/docker-compose.yml new file mode 100644 index 000000000..4d5d761fb --- /dev/null +++ b/linux/nginx/1.18.0/main/docker-compose.yml @@ -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} \ No newline at end of file diff --git a/linux/nginx/1.18.0/main/pre/ip2location-description-pak b/linux/nginx/1.18.0/main/pre/ip2location-description-pak new file mode 100644 index 000000000..e93eb7783 --- /dev/null +++ b/linux/nginx/1.18.0/main/pre/ip2location-description-pak @@ -0,0 +1 @@ +Custom build of ip2location lib by EpicMorg. diff --git a/linux/nginx/1.18.0/main/pre/luajit2-description-pak b/linux/nginx/1.18.0/main/pre/luajit2-description-pak new file mode 100644 index 000000000..4305e8e88 --- /dev/null +++ b/linux/nginx/1.18.0/main/pre/luajit2-description-pak @@ -0,0 +1 @@ +Custom build of luajit2 for Nginx module, by EpicMorg. diff --git a/linux/nginx/1.18.0/main/pre/nginx-description-pak b/linux/nginx/1.18.0/main/pre/nginx-description-pak new file mode 100644 index 000000000..b6c186ed8 --- /dev/null +++ b/linux/nginx/1.18.0/main/pre/nginx-description-pak @@ -0,0 +1 @@ +Custom build of Nginx with some modules by EpicMorg. \ No newline at end of file diff --git a/linux/nginx/1.18.0/main/pre/ngninx.pre.tar.gz b/linux/nginx/1.18.0/main/pre/ngninx.pre.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..bf9c2735172faf460d34cb157f13291f42cdef88 GIT binary patch literal 9573 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 ${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 + +#Final config +VOLUME ["/var/cache/nginx"] +EXPOSE 80 443 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/linux/nginx/1.18.0/php/Makefile b/linux/nginx/1.18.0/php/Makefile new file mode 100644 index 000000000..82c5a2de6 --- /dev/null +++ b/linux/nginx/1.18.0/php/Makefile @@ -0,0 +1,5 @@ +all: app + +app: + docker-compose build --compress + docker-compose push diff --git a/linux/nginx/1.18.0/php/README.md b/linux/nginx/1.18.0/php/README.md new file mode 100644 index 000000000..034784bc0 --- /dev/null +++ b/linux/nginx/1.18.0/php/README.md @@ -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 +``` diff --git a/linux/nginx/1.18.0/php/docker-compose.yml b/linux/nginx/1.18.0/php/docker-compose.yml new file mode 100644 index 000000000..0968ca6c1 --- /dev/null +++ b/linux/nginx/1.18.0/php/docker-compose.yml @@ -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} \ No newline at end of file diff --git a/linux/nginx/1.18.0/rtmp-hls/.env b/linux/nginx/1.18.0/rtmp-hls/.env new file mode 100644 index 000000000..841a1e5c4 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/.env @@ -0,0 +1,2 @@ +NGINX_VERSION=1.18.0 +NGINX_DOWNLOAD_URL=http://nginx.org/download/nginx-1.18.0.tar.gz diff --git a/linux/nginx/1.18.0/rtmp-hls/Dockerfile b/linux/nginx/1.18.0/rtmp-hls/Dockerfile new file mode 100644 index 000000000..d7d9b5901 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/Dockerfile @@ -0,0 +1,127 @@ +################################################################## +# 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 + + +EXPOSE 1935 +EXPOSE 8080 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/linux/nginx/1.18.0/rtmp-hls/Makefile b/linux/nginx/1.18.0/rtmp-hls/Makefile new file mode 100644 index 000000000..82c5a2de6 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/Makefile @@ -0,0 +1,5 @@ +all: app + +app: + docker-compose build --compress + docker-compose push diff --git a/linux/nginx/1.18.0/rtmp-hls/README.md b/linux/nginx/1.18.0/rtmp-hls/README.md new file mode 100644 index 000000000..d5a0ec5cc --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/README.md @@ -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://:/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://:1935/live/ + ``` + where `` is any stream key you specify. + + * **Configure [OBS](https://obsproject.com/) to stream content:**
+Go to Settings > Stream, choose the following settings: + * Service: Custom Streaming Server. + * Server: `rtmp://: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://:1935/live/` + Replace `` with the IP of where the server is running, and + `` with the stream key you used when setting up the stream. + * For HLS and DASH, the URLs are of the forms: + `http://:8080/hls/.m3u8` and + `http://:8080/dash/_src.mpd` respectively. + * Click Play. + +* **Using provided web players:**
+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. + + diff --git a/linux/nginx/1.18.0/rtmp-hls/conf/nginx.conf b/linux/nginx/1.18.0/rtmp-hls/conf/nginx.conf new file mode 100644 index 000000000..938da01e2 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/conf/nginx.conf @@ -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; + } + + } +} \ No newline at end of file diff --git a/linux/nginx/1.18.0/rtmp-hls/conf/nginx_no-ffmpeg.conf b/linux/nginx/1.18.0/rtmp-hls/conf/nginx_no-ffmpeg.conf new file mode 100644 index 000000000..99644e14f --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/conf/nginx_no-ffmpeg.conf @@ -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; + } + + } +} \ No newline at end of file diff --git a/linux/nginx/1.18.0/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf b/linux/nginx/1.18.0/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf new file mode 100644 index 000000000..780a1d1ff --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf @@ -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; + } + } +} \ No newline at end of file diff --git a/linux/nginx/1.18.0/rtmp-hls/docker-compose.yml b/linux/nginx/1.18.0/rtmp-hls/docker-compose.yml new file mode 100644 index 000000000..3c46aedbd --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/docker-compose.yml @@ -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} \ No newline at end of file diff --git a/linux/nginx/1.18.0/rtmp-hls/players/dash.html b/linux/nginx/1.18.0/rtmp-hls/players/dash.html new file mode 100644 index 000000000..12b8df786 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/players/dash.html @@ -0,0 +1,23 @@ + + + + + DASH Live Streaming + + + + +

DASH Player

+ + + + + + + diff --git a/linux/nginx/1.18.0/rtmp-hls/players/hls.html b/linux/nginx/1.18.0/rtmp-hls/players/hls.html new file mode 100644 index 000000000..15d95b4c1 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/players/hls.html @@ -0,0 +1,23 @@ + + + + + HLS Live Streaming + + + + +

HLS Player

+ + + + + + + diff --git a/linux/nginx/1.18.0/rtmp-hls/players/hls_hlsjs.html b/linux/nginx/1.18.0/rtmp-hls/players/hls_hlsjs.html new file mode 100644 index 000000000..0237e7a52 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/players/hls_hlsjs.html @@ -0,0 +1,41 @@ + + + + + HLS streaming + + + + + + + + + + +

HLS Player (using hls.js)

+ +
+
+ +
+
+ + + + + + + diff --git a/linux/nginx/1.18.0/rtmp-hls/players/rtmp.html b/linux/nginx/1.18.0/rtmp-hls/players/rtmp.html new file mode 100644 index 000000000..d8ce85610 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/players/rtmp.html @@ -0,0 +1,24 @@ + + + + + RTMP Live Streaming + Live Streaming + + + + + + + +

RTMP Player

+ + + + + diff --git a/linux/nginx/1.18.0/rtmp-hls/players/rtmp_hls.html b/linux/nginx/1.18.0/rtmp-hls/players/rtmp_hls.html new file mode 100644 index 000000000..35617e913 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/players/rtmp_hls.html @@ -0,0 +1,30 @@ + + + + + Live Streaming + + + + + + + + +

RTMP Player

+ + +

HLS Player

+ + + + + diff --git a/linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.buster.list b/linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.buster.list new file mode 100644 index 000000000..fd3092816 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.buster.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ buster main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-backports main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-backports main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-proposed-updates main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ buster/updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ buster/updates main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ buster main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ buster main non-free +#deb http://ftp.ru.debian.org/debian-multimedia/ buster-backports main +#deb-src http://ftp.ru.debian.org/debian-multimedia/ buster-backports main diff --git a/linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.sid.list b/linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.sid.list new file mode 100644 index 000000000..677a95436 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.sid.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ sid main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ sid main contrib non-free +deb http://ftp.ru.debian.org/debian/ testing-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ testing-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ testing-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ testing-proposed-updates main contrib non-free + +#backports +#deb http://ftp.ru.debian.org/debian/ testing-backports main contrib non-free +#deb-src http://ftp.ru.debian.org/debian/ testing-backports main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ testing-security main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ testing-security main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ sid main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ sid main non-free diff --git a/linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.stretch.list b/linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.stretch.list new file mode 100644 index 000000000..ff15154c3 --- /dev/null +++ b/linux/nginx/1.18.0/rtmp-hls/sources.list.d/sources.stretch.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ stretch main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-backports main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-backports main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-proposed-updates main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ stretch/updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ stretch/updates main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ stretch main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ stretch main non-free +#deb http://ftp.ru.debian.org/debian-multimedia/ stretch-backports main +#deb-src http://ftp.ru.debian.org/debian-multimedia/ stretch-backports main diff --git a/linux/nginx/1.19.10/main/.env b/linux/nginx/1.19.10/main/.env new file mode 100644 index 000000000..25655a5b6 --- /dev/null +++ b/linux/nginx/1.19.10/main/.env @@ -0,0 +1,2 @@ +NGINX_VERSION=1.19.10 +NGINX_DOWNLOAD_URL=http://nginx.org/download/nginx-1.19.10.tar.gz diff --git a/linux/nginx/1.19.10/main/Dockerfile b/linux/nginx/1.19.10/main/Dockerfile new file mode 100644 index 000000000..aef90bcb1 --- /dev/null +++ b/linux/nginx/1.19.10/main/Dockerfile @@ -0,0 +1,235 @@ +################################################################## +# Set Global ARG to build process +################################################################## +ARG NGINX_VERSION + +################################################################## +# Start build process +################################################################## +FROM epicmorg/devel 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 && \ + ./build.sh && \ + 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/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/edge +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 -s /lib/x86_64-linux-gnu/libcrypto.so.1.1 /lib/x86_64-linux-gnu/libcrypto.so.1 && \ + 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/* + +#Final config +VOLUME ["/var/cache/nginx"] +EXPOSE 80 443 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/linux/nginx/1.19.10/main/Makefile b/linux/nginx/1.19.10/main/Makefile new file mode 100644 index 000000000..82c5a2de6 --- /dev/null +++ b/linux/nginx/1.19.10/main/Makefile @@ -0,0 +1,5 @@ +all: app + +app: + docker-compose build --compress + docker-compose push diff --git a/linux/nginx/1.19.10/main/README.md b/linux/nginx/1.19.10/main/README.md new file mode 100644 index 000000000..034784bc0 --- /dev/null +++ b/linux/nginx/1.19.10/main/README.md @@ -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 +``` diff --git a/linux/nginx/1.19.10/main/docker-compose.yml b/linux/nginx/1.19.10/main/docker-compose.yml new file mode 100644 index 000000000..4d5d761fb --- /dev/null +++ b/linux/nginx/1.19.10/main/docker-compose.yml @@ -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} \ No newline at end of file diff --git a/linux/nginx/1.19.10/main/pre/ip2location-description-pak b/linux/nginx/1.19.10/main/pre/ip2location-description-pak new file mode 100644 index 000000000..e93eb7783 --- /dev/null +++ b/linux/nginx/1.19.10/main/pre/ip2location-description-pak @@ -0,0 +1 @@ +Custom build of ip2location lib by EpicMorg. diff --git a/linux/nginx/1.19.10/main/pre/luajit2-description-pak b/linux/nginx/1.19.10/main/pre/luajit2-description-pak new file mode 100644 index 000000000..4305e8e88 --- /dev/null +++ b/linux/nginx/1.19.10/main/pre/luajit2-description-pak @@ -0,0 +1 @@ +Custom build of luajit2 for Nginx module, by EpicMorg. diff --git a/linux/nginx/1.19.10/main/pre/nginx-description-pak b/linux/nginx/1.19.10/main/pre/nginx-description-pak new file mode 100644 index 000000000..b6c186ed8 --- /dev/null +++ b/linux/nginx/1.19.10/main/pre/nginx-description-pak @@ -0,0 +1 @@ +Custom build of Nginx with some modules by EpicMorg. \ No newline at end of file diff --git a/linux/nginx/1.19.10/main/pre/ngninx.pre.tar.gz b/linux/nginx/1.19.10/main/pre/ngninx.pre.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..bf9c2735172faf460d34cb157f13291f42cdef88 GIT binary patch literal 9573 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 ${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 + +#Final config +VOLUME ["/var/cache/nginx"] +EXPOSE 80 443 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/linux/nginx/1.19.10/php/Makefile b/linux/nginx/1.19.10/php/Makefile new file mode 100644 index 000000000..82c5a2de6 --- /dev/null +++ b/linux/nginx/1.19.10/php/Makefile @@ -0,0 +1,5 @@ +all: app + +app: + docker-compose build --compress + docker-compose push diff --git a/linux/nginx/1.19.10/php/README.md b/linux/nginx/1.19.10/php/README.md new file mode 100644 index 000000000..034784bc0 --- /dev/null +++ b/linux/nginx/1.19.10/php/README.md @@ -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 +``` diff --git a/linux/nginx/1.19.10/php/docker-compose.yml b/linux/nginx/1.19.10/php/docker-compose.yml new file mode 100644 index 000000000..0968ca6c1 --- /dev/null +++ b/linux/nginx/1.19.10/php/docker-compose.yml @@ -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} \ No newline at end of file diff --git a/linux/nginx/1.19.10/rtmp-hls/.env b/linux/nginx/1.19.10/rtmp-hls/.env new file mode 100644 index 000000000..25655a5b6 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/.env @@ -0,0 +1,2 @@ +NGINX_VERSION=1.19.10 +NGINX_DOWNLOAD_URL=http://nginx.org/download/nginx-1.19.10.tar.gz diff --git a/linux/nginx/1.19.10/rtmp-hls/Dockerfile b/linux/nginx/1.19.10/rtmp-hls/Dockerfile new file mode 100644 index 000000000..d7d9b5901 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/Dockerfile @@ -0,0 +1,127 @@ +################################################################## +# 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 + + +EXPOSE 1935 +EXPOSE 8080 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/linux/nginx/1.19.10/rtmp-hls/Makefile b/linux/nginx/1.19.10/rtmp-hls/Makefile new file mode 100644 index 000000000..82c5a2de6 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/Makefile @@ -0,0 +1,5 @@ +all: app + +app: + docker-compose build --compress + docker-compose push diff --git a/linux/nginx/1.19.10/rtmp-hls/README.md b/linux/nginx/1.19.10/rtmp-hls/README.md new file mode 100644 index 000000000..d5a0ec5cc --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/README.md @@ -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://:/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://:1935/live/ + ``` + where `` is any stream key you specify. + + * **Configure [OBS](https://obsproject.com/) to stream content:**
+Go to Settings > Stream, choose the following settings: + * Service: Custom Streaming Server. + * Server: `rtmp://: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://:1935/live/` + Replace `` with the IP of where the server is running, and + `` with the stream key you used when setting up the stream. + * For HLS and DASH, the URLs are of the forms: + `http://:8080/hls/.m3u8` and + `http://:8080/dash/_src.mpd` respectively. + * Click Play. + +* **Using provided web players:**
+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. + + diff --git a/linux/nginx/1.19.10/rtmp-hls/conf/nginx.conf b/linux/nginx/1.19.10/rtmp-hls/conf/nginx.conf new file mode 100644 index 000000000..938da01e2 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/conf/nginx.conf @@ -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; + } + + } +} \ No newline at end of file diff --git a/linux/nginx/1.19.10/rtmp-hls/conf/nginx_no-ffmpeg.conf b/linux/nginx/1.19.10/rtmp-hls/conf/nginx_no-ffmpeg.conf new file mode 100644 index 000000000..99644e14f --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/conf/nginx_no-ffmpeg.conf @@ -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; + } + + } +} \ No newline at end of file diff --git a/linux/nginx/1.19.10/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf b/linux/nginx/1.19.10/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf new file mode 100644 index 000000000..780a1d1ff --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf @@ -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; + } + } +} \ No newline at end of file diff --git a/linux/nginx/1.19.10/rtmp-hls/docker-compose.yml b/linux/nginx/1.19.10/rtmp-hls/docker-compose.yml new file mode 100644 index 000000000..3c46aedbd --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/docker-compose.yml @@ -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} \ No newline at end of file diff --git a/linux/nginx/1.19.10/rtmp-hls/players/dash.html b/linux/nginx/1.19.10/rtmp-hls/players/dash.html new file mode 100644 index 000000000..12b8df786 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/players/dash.html @@ -0,0 +1,23 @@ + + + + + DASH Live Streaming + + + + +

DASH Player

+ + + + + + + diff --git a/linux/nginx/1.19.10/rtmp-hls/players/hls.html b/linux/nginx/1.19.10/rtmp-hls/players/hls.html new file mode 100644 index 000000000..15d95b4c1 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/players/hls.html @@ -0,0 +1,23 @@ + + + + + HLS Live Streaming + + + + +

HLS Player

+ + + + + + + diff --git a/linux/nginx/1.19.10/rtmp-hls/players/hls_hlsjs.html b/linux/nginx/1.19.10/rtmp-hls/players/hls_hlsjs.html new file mode 100644 index 000000000..0237e7a52 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/players/hls_hlsjs.html @@ -0,0 +1,41 @@ + + + + + HLS streaming + + + + + + + + + + +

HLS Player (using hls.js)

+ +
+
+ +
+
+ + + + + + + diff --git a/linux/nginx/1.19.10/rtmp-hls/players/rtmp.html b/linux/nginx/1.19.10/rtmp-hls/players/rtmp.html new file mode 100644 index 000000000..d8ce85610 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/players/rtmp.html @@ -0,0 +1,24 @@ + + + + + RTMP Live Streaming + Live Streaming + + + + + + + +

RTMP Player

+ + + + + diff --git a/linux/nginx/1.19.10/rtmp-hls/players/rtmp_hls.html b/linux/nginx/1.19.10/rtmp-hls/players/rtmp_hls.html new file mode 100644 index 000000000..35617e913 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/players/rtmp_hls.html @@ -0,0 +1,30 @@ + + + + + Live Streaming + + + + + + + + +

RTMP Player

+ + +

HLS Player

+ + + + + diff --git a/linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.buster.list b/linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.buster.list new file mode 100644 index 000000000..fd3092816 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.buster.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ buster main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-backports main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-backports main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-proposed-updates main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ buster/updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ buster/updates main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ buster main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ buster main non-free +#deb http://ftp.ru.debian.org/debian-multimedia/ buster-backports main +#deb-src http://ftp.ru.debian.org/debian-multimedia/ buster-backports main diff --git a/linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.sid.list b/linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.sid.list new file mode 100644 index 000000000..677a95436 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.sid.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ sid main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ sid main contrib non-free +deb http://ftp.ru.debian.org/debian/ testing-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ testing-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ testing-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ testing-proposed-updates main contrib non-free + +#backports +#deb http://ftp.ru.debian.org/debian/ testing-backports main contrib non-free +#deb-src http://ftp.ru.debian.org/debian/ testing-backports main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ testing-security main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ testing-security main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ sid main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ sid main non-free diff --git a/linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.stretch.list b/linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.stretch.list new file mode 100644 index 000000000..ff15154c3 --- /dev/null +++ b/linux/nginx/1.19.10/rtmp-hls/sources.list.d/sources.stretch.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ stretch main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-backports main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-backports main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-proposed-updates main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ stretch/updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ stretch/updates main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ stretch main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ stretch main non-free +#deb http://ftp.ru.debian.org/debian-multimedia/ stretch-backports main +#deb-src http://ftp.ru.debian.org/debian-multimedia/ stretch-backports main