FROM arm64v8/alpine:3.18 AS build-nginx ARG NGINX_VERSION=1.23.1 ARG NGINX_RTMP_VERSION=1.2.2 ARG MAKEFLAGS="-j4" # 构建依赖 RUN apk add --no-cache \ build-base \ ca-certificates \ curl \ gcc \ libc-dev \ libgcc \ linux-headers \ make \ musl-dev \ openssl \ openssl-dev \ pcre \ pcre-dev \ pkgconf \ pkgconfig \ zlib-dev # 编译nginx和rtmp模块 WORKDIR /tmp RUN wget https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \ tar zxf nginx-${NGINX_VERSION}.tar.gz && \ rm nginx-${NGINX_VERSION}.tar.gz && \ wget https://github.com/arut/nginx-rtmp-module/archive/v${NGINX_RTMP_VERSION}.tar.gz && \ tar zxf v${NGINX_RTMP_VERSION}.tar.gz && \ rm v${NGINX_RTMP_VERSION}.tar.gz WORKDIR /tmp/nginx-${NGINX_VERSION} RUN ./configure \ --prefix=/usr/local/nginx \ --add-module=/tmp/nginx-rtmp-module-${NGINX_RTMP_VERSION} \ --conf-path=/etc/nginx/nginx.conf \ --with-threads \ --with-file-aio \ --with-http_ssl_module \ --with-debug \ --with-http_stub_status_module \ --with-cc-opt="-Wimplicit-fallthrough=0" && \ make && \ make install # 构建FFmpeg FROM arm64v8/alpine:3.18 AS build-ffmpeg ARG FFMPEG_VERSION=5.1 ARG PREFIX=/usr/local ARG MAKEFLAGS="-j4" RUN apk add --no-cache \ build-base \ coreutils \ freetype-dev \ lame-dev \ libogg-dev \ libass \ libass-dev \ libvpx-dev \ libvorbis-dev \ libwebp-dev \ libtheora-dev \ openssl-dev \ opus-dev \ pkgconf \ pkgconfig \ rtmpdump-dev \ wget \ x264-dev \ x265-dev \ yasm RUN echo http://dl-cdn.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \ apk add --no-cache fdk-aac-dev WORKDIR /tmp RUN wget http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz && \ tar zxf ffmpeg-${FFMPEG_VERSION}.tar.gz && \ rm ffmpeg-${FFMPEG_VERSION}.tar.gz WORKDIR /tmp/ffmpeg-${FFMPEG_VERSION} RUN ./configure \ --prefix=${PREFIX} \ --enable-version3 \ --enable-gpl \ --enable-nonfree \ --enable-small \ --enable-libmp3lame \ --enable-libx264 \ --enable-libx265 \ --enable-libvpx \ --enable-libtheora \ --enable-libvorbis \ --enable-libopus \ --enable-libfdk-aac \ --enable-libass \ --enable-libwebp \ --enable-postproc \ --enable-libfreetype \ --enable-openssl \ --disable-debug \ --disable-doc \ --disable-ffplay \ --extra-libs="-lpthread -lm" && \ make && \ make install # 最终镜像 FROM arm64v8/alpine:3.18 LABEL version="1.0" \ description="NGINX RTMP Server ARM64" \ maintainer="zhensolidsl" ENV HTTP_PORT=80 \ HTTPS_PORT=443 \ RTMP_PORT=1935 \ PATH="/usr/local/bin:${PATH}:/usr/local/nginx/sbin" # 安装运行依赖 RUN apk update && \ apk add --no-cache \ ca-certificates \ gettext \ openssl \ pcre \ lame \ libogg \ curl \ libass \ libvpx \ libvorbis \ libwebp \ libtheora \ opus \ rtmpdump \ x264-dev \ x265-dev # 复制构建产物 COPY --from=build-nginx /usr/local/nginx /usr/local/nginx COPY --from=build-nginx /etc/nginx /etc/nginx COPY --from=build-ffmpeg /usr/local /usr/local COPY --from=build-ffmpeg /usr/lib/libfdk-aac.so.2 /usr/lib/libfdk-aac.so.2 # 复制配置文件 COPY nginx.conf /etc/nginx/nginx.conf.template COPY static /www/static # 创建必要目录 RUN mkdir -p /opt/data/hls /www /var/log/nginx # 设置权限 RUN addgroup -S nginx && \ adduser -S -G nginx nginx && \ chown -R nginx:nginx /opt/data /www /usr/local/nginx /etc/nginx /var/log/nginx && \ chmod -R 755 /opt/data VOLUME ["/opt/data/hls"] EXPOSE 1935 80 HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost:${HTTP_PORT}/healthcheck || exit 1 CMD ["sh", "-c", "envsubst \"$(env | sed -e 's/=.*//' -e 's/^/\\$/g')\" < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf && nginx -g 'daemon off;'"]