#!/bin/bash # ================= 配置区域 ================= # 源代码位置 (刚才手动安装的位置) SOURCE_DIR="/usr/local/goedge/edge-admin" # 镜像名称 IMAGE_NAME="goedge-admin:local-v1" # 飞牛 NAS 数据存储路径规范 NAS_DATA_DIR="/vol1/1000/dock/goedge" # Compose 配置文件名 COMPOSE_FILE="$NAS_DATA_DIR/goedge.yml" # =========================================== echo "=== 🚀 开始制作 GoEdge Docker 镜像 ===" # 1. 检查源目录是否存在 if [ ! -d "$SOURCE_DIR" ]; then echo "❌ 错误:找不到源目录 $SOURCE_DIR" exit 1 fi cd "$SOURCE_DIR" # 2. 动态生成 Dockerfile # 使用 tail -f 确保容器在前台运行不退出 echo "📂 正在生成 Dockerfile..." cat < Dockerfile FROM debian:12-slim # 设置时区和基本环境 ENV TZ=Asia/Shanghai WORKDIR /usr/local/goedge/edge-admin # 将当前目录的所有文件复制到镜像中 COPY . . # 赋予执行权限 RUN chmod +x bin/edge-admin # 暴露端口 (7788=管理端, 8001=API节点) EXPOSE 7788 8001 # 启动命令:启动服务并挂起 logs,防止容器退出 CMD ["/bin/sh", "-c", "./bin/edge-admin start && tail -f logs/run.log"] EOF # 3. 构建 Docker 镜像 echo "🐳 正在构建镜像 (这可能需要几秒钟)..." docker build -t "$IMAGE_NAME" . if [ $? -ne 0 ]; then echo "❌ 镜像构建失败!" rm Dockerfile exit 1 fi # 清理临时生成的 Dockerfile rm Dockerfile echo "✅ 镜像 $IMAGE_NAME 构建成功!" # 4. 准备飞牛 NAS 目录结构 echo "📂 正在创建数据目录结构: $NAS_DATA_DIR ..." mkdir -p "$NAS_DATA_DIR/configs" mkdir -p "$NAS_DATA_DIR/logs" mkdir -p "$NAS_DATA_DIR/data" # 5. 生成 docker-compose (goedge.yml) echo "📝 正在生成配置文件: $COMPOSE_FILE ..." cat < "$COMPOSE_FILE" version: '3' services: goedge: image: $IMAGE_NAME container_name: goedge-admin restart: always network_mode: "host" volumes: - "$NAS_DATA_DIR/configs:/usr/local/goedge/edge-admin/configs" - "$NAS_DATA_DIR/logs:/usr/local/goedge/edge-admin/logs" - "$NAS_DATA_DIR/data:/usr/local/goedge/edge-admin/data" EOF echo "" echo "========================================================" echo "🎉 恭喜!镜像制作与配置生成已完成!" echo "========================================================" echo "1. 镜像名称: $IMAGE_NAME" echo "2. 配置文件: $COMPOSE_FILE" echo "3. 数据目录: $NAS_DATA_DIR" echo "" echo "👉 你现在可以执行以下命令来启动容器:" echo " docker compose -f $COMPOSE_FILE up -d" echo "" echo "💡 如果想把镜像导出保存(备份),请运行:" echo " docker save -o /tmp/goedge-image.tar $IMAGE_NAME" echo "========================================================"