bonus-edge-proxy/docker/Dockerfile.prod

132 lines
4.9 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ----------------------------------------------------
# 阶段 1: "Builder"
# 目标: 编译所有C/C++依赖项
# ----------------------------------------------------
FROM 192.168.0.75:3000/guanyuankai/ubuntu-arm64:22.04 AS build_env
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends \
sudo build-essential cmake git unzip pkg-config \
software-properties-common gpg-agent \
&& \
add-apt-repository -y ppa:jjriek/panfork-mesa && \
add-apt-repository -y ppa:jjriek/rockchip && \
add-apt-repository -y ppa:jjriek/rockchip-multimedia && \
apt-get update && \
apt-get install -y --no-install-recommends \
libssl-dev libspdlog-dev libsqlite3-dev libboost-all-dev \
librockchip-mpp-dev librga-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libasound2-dev libopencv-dev \
&& rm -rf /var/lib/apt/lists/*
COPY . /app
WORKDIR /app
COPY rknn_sdk/librknn_api/include/rknn_api.h /usr/local/include/
COPY rknn_sdk/rknn_server/aarch64/usr/bin/rknn_server /usr/bin/rknn_server
COPY rknn_sdk/librknn_api/aarch64/librknnrt.so /usr/lib/librknnrt.so
COPY rknn_sdk/librknn_api/aarch64/librknn_api.so /usr/lib/librknn_api.so
RUN ldconfig
RUN cd /app/external/paho.mqtt.c && \
cmake -Bbuild -H. -DPAHO_WITH_SSL=ON -DPAHO_BUILD_SAMPLES=OFF -DPAHO_BUILD_DOCUMENTATION=OFF && \
cmake --build build --target install --parallel $(nproc) && \
cd /app/external/paho.mqtt.cpp && \
cmake -Bbuild -H. -DPAHO_WITH_SSL=ON -DPAHO_BUILD_SAMPLES=OFF -DPAHO_BUILD_DOCUMENTATION=OFF && \
cmake --build build --target install --parallel $(nproc)
RUN cmake -S /app -B /app/build
RUN cmake --build /app/build --target edge_proxy --parallel $(nproc)
RUN ls -l /app/build/
## ----------------------------------------------------
# 阶段 2: "Production"
# 目标: 构建包含所有运行时库和您应用的精简镜像
# ----------------------------------------------------
FROM 192.168.0.75:3000/guanyuankai/ubuntu-arm64:22.04
ENV DEBIAN_FRONTEND=noninteractive
# 1. (作为 root) 安装所有系统依赖
RUN apt-get update && \
apt-get install -y --no-install-recommends \
unzip software-properties-common gpg-agent \
espeak-ng-data libespeak1 python3 python3-pip \
libssl-dev libspdlog-dev libsqlite3-dev libboost-all-dev \
librockchip-mpp-dev librga-dev gstreamer1.0-rockchip \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
alsa-utils libasound2-plugins gstreamer1.0-alsa \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x \
gstreamer1.0-pulseaudio gstreamer1.0-rtsp \
libopencv-dev nmap \
&& \
add-apt-repository -y ppa:jjriek/panfork-mesa && \
add-apt-repository -y ppa:jjriek/rockchip && \
add-apt-repository -y ppa:jjriek/rockchip-multimedia && \
apt-get update && \
rm -rf /var/lib/apt/lists/* [cite: 5, 6]
# 2. (作为 root) 创建用户和组
RUN groupadd -r developers && \
useradd -ms /bin/bash -g developers dev && \
# (移除了 -G sudo) [cite: 7]
groupadd -g 20 dialout || true && \
groupadd -g 44 video || true && \
groupadd -g 110 render || true && \
# (移除了 g 29 render因为它和 110 重复) [cite: 9, 10]
usermod -a -G dialout dev && \
usermod -a -G video dev && \
usermod -a -G render dev && \
usermod -a -G audio dev
# (移除了 sudoers 的 echo)
# 3. (作为 root) 复制所有文件
COPY --from=build_env /usr/local/lib/ /usr/local/lib/
COPY --from=build_env /usr/local/include/ /usr/local/include/
COPY --from=build_env /app/build/edge_proxy /app/edge_proxy
WORKDIR /app
COPY rknn_sdk/librknn_api/include/rknn_api.h /usr/local/include/
COPY rknn_sdk/rknn_server/aarch64/usr/bin/rknn_server /usr/bin/rknn_server
COPY rknn_sdk/librknn_api/aarch64/librknnrt.so /usr/lib/librknnrt.so
COPY rknn_sdk/librknn_api/aarch64/librknn_api.so /usr/lib/librknn_api.so
COPY rknn_sdk/whl/*.whl /tmp/rknn_wheels/
RUN pip3 install /tmp/rknn_wheels/*.whl && \
rm -rf /tmp/rknn_wheels
RUN chmod +x /usr/bin/rknn_server
RUN ldconfig
COPY config/ /app/config/
COPY models/ /app/models/
COPY piper_models/ /app/piper_models/
# 4. (作为 root) 更改 /app 目录的所有权
# 这是关键一步:在切换用户之前更改所有权
RUN chown -R dev:developers /app
RUN chmod 775 /app/edge_proxy [cite: 12]
# 5. 现在切换到 dev 用户
USER dev
# 6. (作为 dev) 为 pip 设置 PATH 环境变量
ENV PATH="/home/dev/.local/bin:${PATH}"
# (移除了 echo 到 .bash_profile) [cite: 12]
# 7. (作为 dev) 安装 Python 包
RUN pip install --no-cache-dir --user -i https://mirrors.aliyun.com/pypi/simple/ \
piper-tts \
onvif-zeep \
python-nmap \
psutil \
paramiko [cite: 11, 12]
# (移除了所有 sudo chown 和 chmod 命令) [cite: 12]
# 8. (作为 dev) 设置默认命令
CMD ["/app/edge_proxy"] [cite: 12]