From 3d504723c21b082b6c458dd7abd18101d924900c Mon Sep 17 00:00:00 2001 From: Luca Rullo Date: Mon, 5 Jun 2023 13:29:45 +0200 Subject: [PATCH] Add: Basic Docker based on Kaltura HLS Nginx Module --- Dockerfile | 38 +++++++++++++++++++++ docker-compose.yml | 10 ++++++ nginx.conf | 84 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 nginx.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2b342bf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +FROM alpine:latest AS base_image + +FROM base_image AS build + +RUN apk add --no-cache curl build-base openssl openssl-dev zlib-dev linux-headers pcre-dev ffmpeg ffmpeg-dev + +RUN mkdir nginx nginx-vod-module + +ARG NGINX_VERSION=1.25.0 +ARG VOD_MODULE_VERSION=6c305a78b7ab6e4312279bea5c45741bb54a713b + +RUN curl -sL https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz | tar -C /nginx --strip 1 -xz +RUN curl -sL https://github.com/kaltura/nginx-vod-module/archive/${VOD_MODULE_VERSION}.tar.gz | tar -C /nginx-vod-module --strip 1 -xz + +WORKDIR /nginx + +RUN ./configure --prefix=/usr/local/nginx \ + --add-module=../nginx-vod-module \ + --with-http_ssl_module \ + --with-file-aio \ + --with-threads \ + --with-cc-opt="-O3" + +RUN make + +RUN make install + +RUN rm -rf /usr/local/nginx/html /usr/local/nginx/conf/*.default + +FROM base_image + +RUN apk add --no-cache ca-certificates openssl pcre zlib ffmpeg + +COPY --from=build /usr/local/nginx /usr/local/nginx + +ENTRYPOINT ["/usr/local/nginx/sbin/nginx"] + +CMD ["-g", "daemon off;"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..22ef796 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,10 @@ +version: "3" +services: + vod: + image: registry.audio-lab.org/kaltura-nginx + restart: always + ports: + - 8001:80 + volumes: + - ./nginx.conf:/usr/local/nginx/conf/nginx.conf:ro + - ./videos/:/var/www/html/videos/:ro diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..f0da0c9 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,84 @@ +worker_processes auto; +pid /run/nginx.pid; + +events { + use epoll; +} + +http { + log_format main '$remote_addr $remote_user [$time_local] "$request" ' + '$status "$http_referer" "$http_user_agent"'; + + access_log /dev/stdout main; + error_log stderr debug; + + default_type application/octet-stream; + include /usr/local/nginx/conf/mime.types; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + + vod_mode local; + vod_metadata_cache metadata_cache 16m; + vod_response_cache response_cache 512m; + vod_last_modified_types *; + vod_segment_duration 9000; + vod_align_segments_to_key_frames on; + vod_dash_fragment_file_name_prefix "segment"; + vod_hls_segment_file_name_prefix "segment"; + + vod_manifest_segment_durations_mode accurate; + + open_file_cache max=1000 inactive=5m; + open_file_cache_valid 2m; + open_file_cache_min_uses 1; + open_file_cache_errors on; + + aio on; + +# secure_token_akamai $secure_token { +# key RANDOM_HEX; +# acl "$secure_token_baseuri_comma*"; +# param_name token; +# } + + server { + listen 80; + server_name localhost; + root /var/www/html; + + location ~ ^/videos/.+$ { + autoindex on; + } + + location /hls/ { + vod hls; + alias /var/www/html/videos/; + + if ($arg_token) { + set $input_token $arg_token; + } + + add_header Access-Control-Allow-Headers '*'; + add_header Access-Control-Allow-Origin '*'; + add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS'; + + #akamai_token_validate $input_token; + #akamai_token_validate_key RANDOM_HEX; + + #secure_token $secure_token; + #secure_token_types application/vnd.apple.mpegurl; + #secure_token_expires_time 100d; + #secure_token_query_token_expires_time 1h; + } + + location /thumb/ { + vod thumb; + alias /var/www/html/videos/; + add_header Access-Control-Allow-Headers '*'; + add_header Access-Control-Allow-Origin '*'; + add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS'; + } + } +}