Add: Basic Docker based on Kaltura HLS Nginx Module

This commit is contained in:
Luca 2023-06-05 13:29:45 +02:00
commit 3d504723c2
Signed by: lrullo
GPG Key ID: A04E97D8E19A58A7
3 changed files with 132 additions and 0 deletions

38
Dockerfile Normal file
View File

@ -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;"]

10
docker-compose.yml Normal file
View File

@ -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

84
nginx.conf Normal file
View File

@ -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';
}
}
}