Dockerfile.arm 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. FROM arm64v8/alpine:3.18 AS build-nginx
  2. ARG NGINX_VERSION=1.23.1
  3. ARG NGINX_RTMP_VERSION=1.2.2
  4. ARG MAKEFLAGS="-j4"
  5. # 构建依赖
  6. RUN apk add --no-cache \
  7. build-base \
  8. ca-certificates \
  9. curl \
  10. gcc \
  11. libc-dev \
  12. libgcc \
  13. linux-headers \
  14. make \
  15. musl-dev \
  16. openssl \
  17. openssl-dev \
  18. pcre \
  19. pcre-dev \
  20. pkgconf \
  21. pkgconfig \
  22. zlib-dev
  23. # 编译nginx和rtmp模块
  24. WORKDIR /tmp
  25. RUN wget https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
  26. tar zxf nginx-${NGINX_VERSION}.tar.gz && \
  27. rm nginx-${NGINX_VERSION}.tar.gz && \
  28. wget https://github.com/arut/nginx-rtmp-module/archive/v${NGINX_RTMP_VERSION}.tar.gz && \
  29. tar zxf v${NGINX_RTMP_VERSION}.tar.gz && \
  30. rm v${NGINX_RTMP_VERSION}.tar.gz
  31. WORKDIR /tmp/nginx-${NGINX_VERSION}
  32. RUN ./configure \
  33. --prefix=/usr/local/nginx \
  34. --add-module=/tmp/nginx-rtmp-module-${NGINX_RTMP_VERSION} \
  35. --conf-path=/etc/nginx/nginx.conf \
  36. --with-threads \
  37. --with-file-aio \
  38. --with-http_ssl_module \
  39. --with-debug \
  40. --with-http_stub_status_module \
  41. --with-cc-opt="-Wimplicit-fallthrough=0" && \
  42. make && \
  43. make install
  44. # 构建FFmpeg
  45. FROM arm64v8/alpine:3.18 AS build-ffmpeg
  46. ARG FFMPEG_VERSION=5.1
  47. ARG PREFIX=/usr/local
  48. ARG MAKEFLAGS="-j4"
  49. RUN apk add --no-cache \
  50. build-base \
  51. coreutils \
  52. freetype-dev \
  53. lame-dev \
  54. libogg-dev \
  55. libass \
  56. libass-dev \
  57. libvpx-dev \
  58. libvorbis-dev \
  59. libwebp-dev \
  60. libtheora-dev \
  61. openssl-dev \
  62. opus-dev \
  63. pkgconf \
  64. pkgconfig \
  65. rtmpdump-dev \
  66. wget \
  67. x264-dev \
  68. x265-dev \
  69. yasm
  70. RUN echo http://dl-cdn.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
  71. apk add --no-cache fdk-aac-dev
  72. WORKDIR /tmp
  73. RUN wget http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz && \
  74. tar zxf ffmpeg-${FFMPEG_VERSION}.tar.gz && \
  75. rm ffmpeg-${FFMPEG_VERSION}.tar.gz
  76. WORKDIR /tmp/ffmpeg-${FFMPEG_VERSION}
  77. RUN ./configure \
  78. --prefix=${PREFIX} \
  79. --enable-version3 \
  80. --enable-gpl \
  81. --enable-nonfree \
  82. --enable-small \
  83. --enable-libmp3lame \
  84. --enable-libx264 \
  85. --enable-libx265 \
  86. --enable-libvpx \
  87. --enable-libtheora \
  88. --enable-libvorbis \
  89. --enable-libopus \
  90. --enable-libfdk-aac \
  91. --enable-libass \
  92. --enable-libwebp \
  93. --enable-postproc \
  94. --enable-libfreetype \
  95. --enable-openssl \
  96. --disable-debug \
  97. --disable-doc \
  98. --disable-ffplay \
  99. --extra-libs="-lpthread -lm" && \
  100. make && \
  101. make install
  102. # 最终镜像
  103. FROM arm64v8/alpine:3.18
  104. LABEL version="1.0" \
  105. description="NGINX RTMP Server ARM64" \
  106. maintainer="zhensolidsl"
  107. ENV HTTP_PORT=80 \
  108. HTTPS_PORT=443 \
  109. RTMP_PORT=1935 \
  110. PATH="/usr/local/bin:${PATH}:/usr/local/nginx/sbin"
  111. # 安装运行依赖
  112. RUN apk update && \
  113. apk add --no-cache \
  114. ca-certificates \
  115. gettext \
  116. openssl \
  117. pcre \
  118. lame \
  119. libogg \
  120. curl \
  121. libass \
  122. libvpx \
  123. libvorbis \
  124. libwebp \
  125. libtheora \
  126. opus \
  127. rtmpdump \
  128. x264-dev \
  129. x265-dev
  130. # 复制构建产物
  131. COPY --from=build-nginx /usr/local/nginx /usr/local/nginx
  132. COPY --from=build-nginx /etc/nginx /etc/nginx
  133. COPY --from=build-ffmpeg /usr/local /usr/local
  134. COPY --from=build-ffmpeg /usr/lib/libfdk-aac.so.2 /usr/lib/libfdk-aac.so.2
  135. # 复制配置文件
  136. COPY nginx.conf /etc/nginx/nginx.conf.template
  137. COPY static /www/static
  138. # 创建必要目录
  139. RUN mkdir -p /opt/data/hls /www /var/log/nginx
  140. # 设置权限
  141. RUN addgroup -S nginx && \
  142. adduser -S -G nginx nginx && \
  143. chown -R nginx:nginx /opt/data /www /usr/local/nginx /etc/nginx /var/log/nginx && \
  144. chmod -R 755 /opt/data
  145. VOLUME ["/opt/data/hls"]
  146. EXPOSE 1935 80
  147. HEALTHCHECK --interval=30s --timeout=3s \
  148. CMD curl -f http://localhost:${HTTP_PORT}/healthcheck || exit 1
  149. CMD ["sh", "-c", "envsubst \"$(env | sed -e 's/=.*//' -e 's/^/\\$/g')\" < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf && nginx -g 'daemon off;'"]