# ================================================================= # Edge Proxy - 开发环境 Dockerfile (V6 - 修正版) # ================================================================= FROM arm64v8/ubuntu:22.04 # 1. 基础环境设置 # ================================= WORKDIR /app ENV DEBIAN_FRONTEND=noninteractive # 2. 安装依赖、创建用户和组 # 将所有系统级操作合并到一层,以减少镜像大小和构建时间 # ================================= RUN apt-get update && \ apt-get install -y --no-install-recommends \ # 基础工具 sudo \ build-essential \ cmake \ git \ gdb \ vim \ # Piper TTS 所需的系统库 espeak-ng-data \ libespeak1 \ python3 \ python3-pip \ # 开发库 libssl-dev \ libspdlog-dev \ libsqlite3-dev \ libboost-all-dev && \ \ # --- 用户和组创建 --- groupadd -r developers && \ # 创建 'dev' 用户,将其主组设置为 'developers',并添加到 'sudo' 组 useradd -ms /bin/bash -g developers -G sudo dev && \ # 添加用户到 'dialout' 组 (GID 20) 以便访问串口设备 # `|| true` 用于防止在 GID 已存在时出错 groupadd -g 20 dialout || true && \ usermod -a -G dialout dev && \ # 为 'dev' 用户设置无密码 sudo echo "dev ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dev-nopasswd # 3. 权限和协作设置 # ================================= # 为所有用户设置 umask 为 0002,这样新创建的文件权限默认为 664 (rw-rw-r--) RUN echo "umask 0002" > /etc/profile.d/99-shared-umask.sh && \ chmod +x /etc/profile.d/99-shared-umask.sh # 4. 编译并安装第三方库 # ================================= # [cite_start]将整个项目复制到临时目录,用于编译 paho 等库 [cite: 4] COPY . /tmp/build-context RUN cd /tmp/build-context/external/paho.mqtt.c && \ cmake -Bbuild -H. \ -DPAHO_WITH_SSL=ON \ -DPAHO_BUILD_SAMPLES=OFF \ -DPAHO_BUILD_DOCUMENTATION=OFF && \ cmake --build build --target install && \ \ cd /tmp/build-context/external/paho.mqtt.cpp && \ cmake -Bbuild -H. \ -DPAHO_WITH_SSL=ON \ -DPAHO_BUILD_SAMPLES=OFF \ -DPAHO_BUILD_DOCUMENTATION=OFF && \ cmake --build build --target install && \ \ # --- 清理工作 --- ldconfig && \ rm -rf /tmp/build-context && \ # 在所有 apt 操作完成后,最后进行清理 rm -rf /var/lib/apt/lists/* COPY piper_models/ /app/piper_models/ # 5. 设置默认用户 # ================================= # 容器的默认用户将是 'dev' USER dev RUN pip install --no-cache-dir --user piper-tts # 将 ~/.local/bin (包含 piper 二进制文件) 添加到 PATH RUN echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bash_profile # 现在,dev 用户可以使用 `piper` 命令了,只要 shell 环境被正确加载。 # 我们可以将最终的 CMD 设置为加载环境然后执行一个命令,或者留空让用户交互。