← 返回 TimeAmber
logo NodeSeekbeta

将 akile_monitor 服务端和客户端打包到Docker部署(已提交PR)

项目地址

Docker 部署介绍

  • 将前端akile_monitor_fe,主控服务ak_monitor以及被控客户端ak_client打包进容器,并利用 GitHub Actions 自动构建Docker镜像并推送至Docker Hub
  • 前端 端口80 主控服务端 端口3000 可自行映射到宿主机或反向代理TLS加密

支持架构

  • linux/amd64
  • linux/arm64

准备工作

以下所有 /CHANGE_PATH 替换为你的宿主机路径
SQLite 数据库需要提前创建,避免Docker自动创建文件夹导致失败

主控服务端

  • SQLite数据库 /CHANGE_PATH/akile_monitor/ak_monitor.db

compose文件

主控服务端

  • 环境变量(默认) 与 配置文件 二选一即可

  • 如需映射配置文件,请提前创建文件并挂载至目录 /CHANGE_PATH/akile_monitor/server/config.json:/app/config.json

  • 主控服务端配置文件参考

Docker Cli 部署

docker run -it --name akile_monitor_server --restart always -v /CHANGE_PATH/akile_monitor/server/ak_monitor.db:/app/ak_monitor.db -e AUTH_SECRET="auth_secret" -e LISTEN=":3000" -e ENABLE_TG=false -e TG_TOKEN="your_telegram_bot_token" -e HOOK_URI="/hook" -e UPDATE_URI="/monitor" -e WEB_URI="/ws" -e HOOK_TOKEN="hook_token" -e TG_CHAT_ID=0 -p 3000:3000 -e TZ="Asia/Shanghai" niliaerith/akile_monitor_server

Docker Compose 部署

cat <<EOF > server-compose.yml
services:
  akile_monitor_server:
    image: niliaerith/akile_monitor_server
    container_name: akile_monitor_server
    hostname: akile_monitor_server
    restart: always
    ports:
      - 3000:3000 #主控服务端 端口
    volumes:
      - /CHANGE_PATH/akile_monitor/server/ak_monitor.db:/app/ak_monitor.db
    environment:
      TZ: "Asia/Shanghai"
      AUTH_SECRET: "auth_secret"
      LISTEN: ":3000"
      ENABLE_TG: false
      TG_TOKEN: "your_telegram_bot_token"
      HOOK_URI: "/hook"
      UPDATE_URI: "/monitor"
      WEB_URI: "/ws"
      HOOK_TOKEN: "hook_token"
      TG_CHAT_ID: 0
EOF
docker compose -f server-compose.yml up -d

前端 部署

  • 环境变量(默认) 与 配置文件 二选一即可

  • 如需映射配置文件,请提前创建文件并挂载至目录 /CHANGE_PATH/akile_monitor/caddy/config.json:/usr/share/caddy/config.json

  • 前端配置文件参考如下

{
  "socket": "ws://192.168.31.64:3000/ws",
  "apiURL": "http://192.168.31.64:3000"
}

Docker Cli 部署

docker run -it --name akile_monitor_server --restart always -e SOCKET="ws://192.168.31.64:3000/ws" -e APIURL="http://192.168.31.64:3000" -p 80:80 -e TZ="Asia/Shanghai" niliaerith/akile_monitor_fe

Docker Compose 部署

cat <<EOF > fe-compose.yml
services:
  akile_monitor_fe:
    image: niliaerith/akile_monitor_fe
    container_name: akile_monitor_fe
    hostname: akile_monitor_fe
    restart: always
    ports:
      - 80:80 #前端 端口
    environment:
      TZ: "Asia/Shanghai"
      SOCKET: "ws://192.168.31.64:3000/ws"
      APIURL: "http://192.168.31.64:3000"
EOF
docker compose -f fe-compose.yml up -d

被控客户端 部署

  • 必须添加 host 网络模式,否则识别的流量为容器内的

  • 必须添加 /var/run/docker.sock 卷,否则识别的系统为容器内的

  • 环境变量(默认) 与 配置文件 二选一即可

  • 如需映射配置文件,请提前创建文件并挂载至目录 /CHANGE_PATH/akile_monitor/client/client.json:/app/client.json

  • 被控客户端配置文件参考

Docker Cli 部署

docker run -it --name akile_monitor_client --restart always -e AUTH_SECRET="auth_secret" -e URL="ws://localhost:3000/monitor" -e NET_NAME="eth0" -e NAME="HK-Akile" -v /var/run/docker.sock:/var/run/docker.sock --net host -e TZ="Asia/Shanghai" niliaerith/akile_monitor_client

Docker Compose 部署

cat <<EOF > client-compose.yml
services:
  akile_monitor_client:
    image: niliaerith/akile_monitor_client
    container_name: akile_monitor_client
    hostname: akile_monitor_client
    restart: always
    network_mode: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      TZ: "Asia/Shanghai"
      AUTH_SECRET: "auth_secret" 
      URL: "ws://localhost:3000/monitor" 
      NET_NAME: "eth0" 
      NAME: "HK-Akile"
EOF
docker compose -f client-compose.yml up -d

Github Actions 自动构建镜像

  • Fork项目
  • Settings > Secrets and variables > Actions > New repository secret 添加 DOCKER_USERNAME (你的 Docker Hub 用户名) 和 DOCKER_PASSWORD (你的 Docker Hub 密码) 两个变量
  • Actions 中手动开始工作流 或者 主页Star 或者 修改任意README文档后push触发

Docker Build 本地构建镜像

git clone https://github.com/akile-network/akile_monitor
cd akile_monitor
docker build --target server --tag akile_monitor_server .
docker build --target fe --tag akile_monitor_fe .
docker build --target client --tag akile_monitor_client .

已知问题

因为被控客户端在Docker alpine容器内,所以虚拟化始终显示为docker

  • 解决方法1: 被控客户端采用 二进制部署,详见 被控端
  • 解决方法2: 忽略虚拟化显示内容
123
  • @0fb6bya #6 发布于2024/12/8 02:32:50,编辑于2024/12/8 03:38:34
    前端和主控不应该打包在一个镜像里,改一下吧

    感谢提议,已做修改

  • @0fb6bya #9 发布于2024/12/8 19:04:04
    官方我看已经是0.0.2了,可以跟进一下版本吗

    你是说页面显示的 v0.0.1 嘛,这个不影响的,前端主控被控三个都是用最新源码编译的,官方前端代码没改还是0.0.1 ![image](Image description) 我去提个PR

  • @0fb6bya #8 发布于2024/12/8 13:41:38
    @nili #7 很好,感谢!

    还有可以把参数写进环境变量,然后在entry中把环境变量写进json,这样可以少几个文件,改参数也更方便些
    好思路 xhj003 ,等我改一下entrypoint

  • 新增 主控服务端/被控客户端/前端 环境变量部署,保留原本配置文件映射方法,二选一即可

  • 感谢@ip88ip 提供隔壁站邀请码 xhj003

  • 支持⬆️

  • 感谢分享

  • Image description
    Docker 服务端 前端 客户端资源占用情况

  • 奥里给,感谢!

  • 前端和主控不应该打包在一个镜像里,改一下吧

  • @nili #7 很好,感谢!

    还有可以把参数写进环境变量,然后在entry中把环境变量写进json,这样可以少几个文件,改参数也更方便些

  • 官方我看已经是0.0.2了,可以跟进一下版本吗

123
内容
预览
对照
AC娘
洋葱头
小黄鸡
set 限制解除