forked from TareqAlqutami/rtmp-hls-server
-
Notifications
You must be signed in to change notification settings - Fork 10
/
Dockerfile.alpine
132 lines (114 loc) · 3.9 KB
/
Dockerfile.alpine
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
ARG ALPINE_VERSION=3.16
##### Building stage #####
FROM alpine:${ALPINE_VERSION} as builder
LABEL version = "1.6"
LABEL maintainer = "[email protected]"
# Versions of nginx, rtmp-module and ffmpeg
ARG NGINX_VERSION=1.23.0
ARG NGINX_RTMP_MODULE_VERSION=1.2.2
ARG FFMPEG_VERSION=5.1
# Install dependencies
RUN apk update && \
apk --no-cache add \
bash build-base ca-certificates \
openssl openssl-dev make \
gcc libgcc libc-dev rtmpdump-dev \
zlib-dev musl-dev pcre pcre-dev lame-dev \
yasm pkgconf pkgconfig libtheora-dev \
libvorbis-dev libvpx-dev freetype-dev \
x264-dev x265-dev && \
rm -rf /var/lib/apt/lists/*
# Download nginx source
RUN mkdir -p /tmp/build && \
cd /tmp/build && \
wget https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
tar zxf nginx-${NGINX_VERSION}.tar.gz && \
rm nginx-${NGINX_VERSION}.tar.gz
# Download rtmp-module source
RUN 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
# Build nginx with nginx-rtmp module
RUN cd /tmp/build/nginx-${NGINX_VERSION} && \
./configure \
--sbin-path=/usr/local/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--http-client-body-temp-path=/tmp/nginx-client-body \
--with-http_ssl_module \
--with-stream \
--with-stream_ssl_module \
--with-threads \
--add-module=/tmp/build/nginx-rtmp-module-${NGINX_RTMP_MODULE_VERSION} && \
make CFLAGS=-Wno-error -j $(getconf _NPROCESSORS_ONLN) && \
make install
# Download ffmpeg source
RUN cd /tmp/build && \
wget http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz && \
tar zxf ffmpeg-${FFMPEG_VERSION}.tar.gz && \
rm ffmpeg-${FFMPEG_VERSION}.tar.gz
# Build ffmpeg
RUN cd /tmp/build/ffmpeg-${FFMPEG_VERSION} && \
./configure \
--enable-version3 \
--enable-gpl \
--enable-small \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-libtheora \
--enable-libvorbis \
--enable-librtmp \
--enable-postproc \
--enable-swresample \
--enable-libfreetype \
--enable-libmp3lame \
--disable-debug \
--disable-doc \
--disable-ffplay \
--extra-libs="-lpthread -lm" && \
make -j $(getconf _NPROCESSORS_ONLN) && \
make install
# Copy stats.xsl file to nginx html directory and clean build files
RUN cp /tmp/build/nginx-rtmp-module-${NGINX_RTMP_MODULE_VERSION}/stat.xsl /usr/local/nginx/html/stat.xsl && \
rm -rf /tmp/build && \
mkdir /var/run/stunnel4
##### Building the final image #####
FROM alpine:${ALPINE_VERSION}
# Install dependencies and create the assets folder for default players and configs to be copied to
RUN apk update && \
apk --no-cache add \
bash ca-certificates openssl \
pcre libtheora libvorbis lame libvpx \
librtmp x264-dev x265-dev freetype stunnel htop && \
rm -rf /var/lib/apt/lists/* && \
mkdir /assets-default && mkdir /assets-default/ssl && \
mkdir /assets
# Copy files from build stage to final stage
COPY --from=builder /usr/local /usr/local
COPY --from=builder /etc/nginx /etc/nginx
COPY --from=builder /var/log/nginx /var/log/nginx
COPY --from=builder /var/lock /var/lock
COPY --from=builder /var/run/nginx /var/run/nginx
# 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
COPY conf /assets-default/configs
# Copy html players to container
COPY players /assets-default/players
# Copy run script to container
COPY run.sh /run.sh
ENV IMAGE=Alpine
ENV PUID=0
ENV PGID=0
ENV SSL_DOMAIN=rtmp-server.loc
EXPOSE 1935
EXPOSE 1936
EXPOSE 8080
VOLUME /assets
CMD ["bash", "/run.sh"]