Procházet zdrojové kódy

增加arm架构docker构建

zhensolid před 1 rokem
rodič
revize
5501217ea6
2 změnil soubory, kde provedl 195 přidání a 0 odebrání
  1. 167 0
      Dockerfile.arm
  2. 28 0
      docker-compose-arm.yaml

+ 167 - 0
Dockerfile.arm

@@ -0,0 +1,167 @@
+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;'"] 

+ 28 - 0
docker-compose-arm.yaml

@@ -0,0 +1,28 @@
+version: '3'
+
+services:
+  nginx-rtmp:
+    build:
+      context: .
+      dockerfile: Dockerfile.arm
+    platform: linux/arm64
+    container_name: nginx-rtmp-arm
+    restart: unless-stopped
+    ports:
+      - 1935:1935    # RTMP
+      - 8080:80      # HTTP
+      - 8443:443     # HTTPS
+    environment:
+      - HTTP_PORT=80
+      - HTTPS_PORT=443
+      - RTMP_PORT=1935
+      - TZ=Asia/Shanghai
+    volumes:
+      - ./data/hls:/opt/data/hls
+      - ./data/certs:/opt/certs
+      - ./logs:/var/log/nginx
+    healthcheck:
+      test: ["CMD", "curl", "-f", "http://localhost:80/healthcheck"]
+      interval: 30s
+      timeout: 3s
+      retries: 3