121 lines
4.4 KiB
Docker
121 lines
4.4 KiB
Docker
|
|
# ----------------------------------------------------
|
||
|
|
# 阶段 1: "Builder"
|
||
|
|
# 目标: 编译所有C/C++依赖项
|
||
|
|
# ----------------------------------------------------
|
||
|
|
FROM arm64v8/ubuntu: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 arm64v8/ubuntu:22.04
|
||
|
|
|
||
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
||
|
|
|
||
|
|
|
||
|
|
RUN apt-get update && \
|
||
|
|
apt-get install -y --no-install-recommends \
|
||
|
|
sudo unzip 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 \
|
||
|
|
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 \
|
||
|
|
&& rm -rf /var/lib/apt/lists/*
|
||
|
|
|
||
|
|
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
|
||
|
|
|
||
|
|
RUN groupadd -r developers && \
|
||
|
|
useradd -ms /bin/bash -g developers -G sudo dev && \
|
||
|
|
groupadd -g 20 dialout || true && \
|
||
|
|
groupadd -g 44 video || true && \
|
||
|
|
groupadd -g 110 render || true && \
|
||
|
|
groupadd -g 29 render || true && \
|
||
|
|
usermod -a -G dialout dev && \
|
||
|
|
usermod -a -G video dev && \
|
||
|
|
usermod -a -G render dev && \
|
||
|
|
usermod -a -G audio dev && \
|
||
|
|
echo "dev ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dev-nopasswd
|
||
|
|
|
||
|
|
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 piper_models/ /app/piper_models/
|
||
|
|
|
||
|
|
USER dev
|
||
|
|
RUN pip install --no-cache-dir --user -i https://mirrors.aliyun.com/pypi/simple/ \
|
||
|
|
piper-tts \
|
||
|
|
onvif-zeep \
|
||
|
|
python-nmap \
|
||
|
|
psutil \
|
||
|
|
paramiko
|
||
|
|
RUN echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bash_profile
|
||
|
|
|
||
|
|
RUN sudo chown -R dev:developers /app
|
||
|
|
RUN sudo chown dev:developers /app/edge_proxy
|
||
|
|
RUN sudo chmod 775 /app/edge_proxy
|
||
|
|
|
||
|
|
USER dev
|
||
|
|
|
||
|
|
CMD ["/app/edge-proxy"]
|