Sign inSign up

baone/olt-manager

By baone

•Updated 5 days ago

Huawei OLT/ONT manager. One docker-compose.yml for Linux/NAS; separate RouterOS setup.

Image
0

379

baone/olt-manager repository overview

⁠OLT Manager · Alpine 单容器版

项目:baone/olt-manager。华为OLT/ONT Web管理、SQLite、SNMP、Telnet/SSH配置、WebSocket终端和后台任务在一个容器内。

⁠Linux / 飞牛 / NAS:一份文件即可

下面完整内容保存为 docker-compose.yml,或直接粘贴到飞牛Docker → Compose → 新增项目 → 创建docker-compose.yml。先改Web初始密码,再启动。无需.env,无需源码,无需编译。

services:
  olt-manager:
    image: baone/olt-manager:alpine-v26
    restart: unless-stopped
    ports:
      - "18091:80"
    environment:
      TZ: "Asia/Shanghai"
      # 首次部署前改成你的 Web 登录密码,账号为 admin。
      ADMIN_INITIAL_PASSWORD: "CHANGE_ME_BEFORE_START"
      # 常用管理操作已开启;设备权限和操作预演仍由系统检查。
      OLT_ALLOW_WRITES: "1"
      OLT_ENABLE_REGISTRATION: "1"
      OLT_ENABLE_CONFIG_SAVE: "1"
      OLT_ENABLE_CONFIGURATION_WRITES: "1"
      OLT_ENABLE_TEMPLATE_WRITES: "1"
      OLT_ENABLE_TERMINAL: "1"
      OLT_ENABLE_VLAN_SHIFT: "1"
      OLT_ENABLE_SERVICE_REBUILD: "1"
      # 校时、完整备份恢复需额外条件,暂保持关闭。
      OLT_ENABLE_CLOCK_SYNC: "0"
      OLT_FILE_TRANSFER_READY: "0"
      OLT_ENABLE_FULL_RESTORE: "0"
      # 降低空载占用,后台任务和注册并发仍可由系统管理。
      SNMP_HTTP_WORKERS: "8"
      SNMP_HEARTBEAT_PARALLEL: "2"
    volumes:
      - ./data:/data
    cap_add:
      - NET_RAW
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    stop_grace_period: 35s

⁠Linux:一份 docker-compose.yml 部署

下载部署包里的 docker-compose.yml,或从Docker Hub项目介绍复制完整内容。把它放进一个新的部署目录,例如 /opt/olt-manager。前提是主机已安装Docker和Compose,不需要下载源码,不需要.env文件。

  1. 修改文件中 ADMIN_INITIAL_PASSWORD 的值,这是Web的初始密码,账号 admin。密码含 $ 时写 $$,Compose会还原成单个 $;普通密码直接替换即可。已有账号不会被这个初始密码覆盖。
  2. 如果18091端口已占用,把 "18091:80" 的左侧改成空闲端口。
  3. 在该文件所在目录执行:
docker compose up -d

访问 http://服务器地址:18091/。首次会拉取镜像,等待容器healthy后登录即可。需要查看状态或输出时执行 docker compose ps、docker compose logs --tail 100。

文件中的 ./data:/data 会在部署目录下建立持久数据目录,保存设备、账号、密钥、日志和备份。一般不需要手工建立目录。常用设备写入、注册、保存、模板和终端开关已在文件内开启;设备权限、用户权限及未验收功能的检查继续生效。首次添加OLT后,按实际地址、SNMP读写团体字和Telnet/SSH映射端口填写,主机/容器须通过已有VPN或路由到达设备。

镜像总标签自动匹配amd64、arm64或arm/v7,无需为Linux/NAS分别选择配置。需要固定本次版本时,将image改成 baone/olt-manager:alpine-v26-20261012。更新方法见 更新与发布.md。

容器共享主机时钟,先由Linux主机的NTP校准。完整CFG/DATA/FTP恢复仍等待OLT回程和实机验收,相应开关保持0;不影响其它已开放管理功能。

源码目录还保留旧 compose.yaml。如果你在源码目录运行,需明确执行 docker compose -f docker-compose.yml up -d;上述最简步骤面向只有这份文件的新部署目录。

旧 compose.hub.yaml + .env.hub.example 保留供已部署用户兼容使用,新部署直接使用本文件。

官方说明:https://docs.docker.com/reference/compose-file/services/⁠

⁠飞牛 / NAS:直接粘贴 docker-compose.yml

使用与Linux完全相同的 docker-compose.yml,不需要SSH、源码、.env或额外容器。

按你提供的飞牛Docker创建项目界面:

  1. 打开 Docker → Compose → 新增项目,项目名填 olt-manager,路径选择NAS上的持久目录。
  2. 来源选 创建docker-compose.yml,将交付文件或Docker Hub项目介绍里的完整YAML粘贴到编辑框。也可以选 上传docker-compose.yml,上传同一个文件。
  3. 把 ADMIN_INITIAL_PASSWORD 改成你要使用的Web密码。如密码含 $,写成 $$。如18091已占用,修改 "18091:80" 的左侧。
  4. 勾选 创建项目后立即启动,点击 确认。等待镜像下载和容器启动,访问 http://NAS地址:18091/,账号admin、密码为刚才设置的值。

./data 会保存在你选择的项目路径下,设备、Web账号、日志及密钥都在里面。无须为每个组件设置目录,只有一个容器。更新、重建时保留项目路径和data目录,不要让新旧实例同时写同一目录。

其它支持Compose的NAS也可导入同一文件。需要NAS的容器运行时支持本镜像的amd64、arm64或ARMv7架构。镜像已在Linux Docker及ARM仿真完成验收;飞牛/NAS实机点击流程以你当前版本的界面为准,本轮没有登录你的NAS部署。

常用管理操作已经在文件里开启,不需要先找到另一个.env再开启。若某项操作仍被阻止,看设备权限、功能能力或预演提示;不能把Compose开关当作所有功能已经完成验收。完整CFG/DATA和周期校时保持原有验收边界。

NAS自身设置NTP校准系统时间;容器网络须能到达OLT的SNMP与Telnet/SSH地址及端口,已有VPN/路由需允许Docker网络转发。

更新时在飞牛Compose项目里拉取新镜像并重新创建/启动,保留文件中的挂载路径;升级前停止项目、备份data及含密码的docker-compose.yml。详见 更新与发布.md。旧拆分部署文件仍留作兼容,不是新部署要求。

⁠MikroTik RouterOS 部署

RouterOS没有Docker Compose运行方式,使用本指南单独部署;不要把Linux/NAS的docker-compose.yml直接粘贴进RouterOS终端。本指南根据MikroTik官方当前Container文档编写。镜像已通过amd64 Docker原生和ARM仿真检查;RouterOS实机的启动、文件权限、探测能力和资源峰值仍需核对,不能据此宣称已完成实机适配。

⁠1. 前提

  • RouterOS设备需支持并安装与系统版本/架构相符的 container 包;不能在没有容器支持的旧系统上直接运行。
  • 打开 /system/device-mode/print 检查 container。若为no,运行 /system/device-mode/update container=yes,按设备提示在时限内进行物理确认;可能要求按键或断电。此步骤会影响路由运行,应由你安排维护窗口,本文不会在现有路由上执行。
  • CPU必须匹配:x86_64用amd64,ARM64用arm64,ARMv7用armv7。MIPS和ARMv5不支持;hEX Refresh的EN7562CT只有arm32v5容器支持,不能使用本版armv7。
  • 准备外置SSD/USB磁盘或足够的持久磁盘,不把数据库及长期日志放在小容量内部闪存。下面的磁盘名 disk1 需替换为实际名称。
  • 容器网络要能到达OLT,已有VPN账号/路由可以继续使用。

⁠2. 准备容器网络

下面使用独立示例网段 172.19.77.0/24。先核对与你现有局域网/VPN不冲突,冲突则全部替换。已存在容器网桥时可使用原有网络,不重复执行创建。

/interface/bridge/add name=br-olt-container
/ip/address/add address=172.19.77.1/24 interface=br-olt-container
/interface/veth/add name=veth-olt address=172.19.77.2/24 gateway=172.19.77.1
/interface/bridge/port/add bridge=br-olt-container interface=veth-olt
/ip/firewall/nat/add chain=srcnat src-address=172.19.77.0/24 action=masquerade comment="OLT container outbound"

NAT规则要与现有VPN、防火墙策略一起核对,容器需要到达OLT的SNMP和Telnet/SSH映射端口。若已有更前面的NAT或丢弃规则,应按现网调整;本文示例不保证覆盖所有网络。

⁠3. 环境变量及数据挂载

先将示例密码替换为你的密码,下面使用低空载参数。设备写入默认关闭;需要下发时,在OLT_ENV中添加/修改Linux/NAS的docker-compose.yml所列对应管理开关为1。

/container/envs/add list=OLT_ENV key=TZ value="Asia/Shanghai"
/container/envs/add list=OLT_ENV key=ADMIN_INITIAL_PASSWORD value="CHANGE_ME_BEFORE_FIRST_START"
/container/envs/add list=OLT_ENV key=OLT_ALLOW_WRITES value="0"
/container/envs/add list=OLT_ENV key=OLT_REPLICA_WORKERS value="2"
/container/envs/add list=OLT_ENV key=OLT_REGISTRATION_WORKERS value="2"
/container/envs/add list=OLT_ENV key=SNMP_HTTP_WORKERS value="8"
/container/envs/add list=OLT_ENV key=SNMP_HEARTBEAT_PARALLEL value="2"
/container/mounts/add list=OLT_DATA src=disk1/olt-data dst=/data
/container/config/set registry-url=https://registry-1.docker.io tmpdir=disk1/olt-pull

当前文档使用 list 和 mountlists,旧版可能使用 name 和 mounts,以本机命令补全/帮助为准。root-dir是镜像解包目录,olt-data是实际持久数据,必须是两个不同的目录。

⁠4. 添加并启动

以下选择ARM64的滚动v26单架构标签;x86_64改末尾为 -amd64,ARMv7改 -armv7。如需固定本次版本,使用 alpine-v26-20261012-arm64 等日期标签。

/container/add remote-image=baone/olt-manager:alpine-v26-arm64 interface=veth-olt root-dir=disk1/olt-root mountlists=OLT_DATA envlist=OLT_ENV name=olt-manager start-on-boot=yes logging=yes
/container/print

等待下载/解包完成,状态为stopped后启动:

/container/start olt-manager
/log/print where topics~"container"

电脑有到这个容器网段的路由时,访问 http://172.19.77.2/;账号admin、密码为第三步所设。RouterOS不会使用Docker的-p端口映射。

如果要通过路由器LAN地址的18091端口访问,新增仅匹配该LAN地址的dst-nat。以下 192.168.88.1 必须改成你的路由器实际LAN地址,若仅允许VPN/指定LAN源访问,可另设src-address条件和现有防火墙策略。

/ip/firewall/nat/add chain=dstnat dst-address=192.168.88.1 protocol=tcp dst-port=18091 action=dst-nat to-addresses=172.19.77.2 to-ports=80 comment="OLT Web LAN"

没有相应forward放行时NAT不足以访问,请核对现有规则;不要为了这个容器删除原防火墙规则。本文不向WAN全地址发布管理入口。

⁠5. 离线导入

在线拉取对小内存设备压力较大。可先在Linux/PC获取对应单架构镜像:

docker pull --platform linux/arm64 baone/olt-manager:alpine-v26-20261012-arm64
docker image save -o olt-manager-arm64.tar baone/olt-manager:alpine-v26-20261012-arm64
gzip olt-manager-arm64.tar

将 olt-manager-arm64.tar.gz 上传到设备的外置磁盘。其它环境替换架构与标签。此前交付的匹配架构Docker归档也可使用;包内旧版本与仓库日期版的差别见发布报告。

把第四步的 remote-image=... 替换为 file=disk1/olt-manager-arm64.tar.gz,其余参数相同。根据RouterOS版本帮助选择支持的tar.gz或tar格式,等待extracting结束再启动。

⁠6. 更新和备份

先停容器、完整备份 disk1/olt-data,同时保存container/envs/mounts配置。RouterOS配置导出本身不包含挂载的数据目录,也不等于OLT的CFG/DATA。

使用上述滚动标签时,新镜像发布后可按当前官方 /container/update 功能更新,保留 /data:

/container/stop olt-manager
/container/update olt-manager
/container/print

等待更新解包完成,确认配置和数据挂载仍正确,再 /container/start olt-manager。旧版若没有update功能,改用新root-dir添加新版本容器,绑定原 /data,仅在旧容器停止后启动新容器。保留旧版本镜像/目录以便回退;不要删除数据挂载目录。使用日期固定标签时update不会变成后续版本,需明确换到新标签。

容器继承RouterOS主机时钟,应先开启RouterOS自身NTP;网页主机NTP代理和OLT周期自动校时尚未做RouterOS集成验收。NET_RAW相关探测能力需在设备核对,SSH/Telnet和SNMP同样需要真实网络连通。

官方说明:

⁠更新与能力范围

新修复验收后继续发布到此仓库,alpine-v26和latest为滚动标签;alpine-v26-20261012为本次固定版本,另有amd64/arm64/armv7后缀。Linux/NAS默认总标签自动选择这三个架构,ARMv5、MIPS不支持。amd64镜像约115MB,上一轮空载约74MiB;ARM为QEMU验收,NAS/RouterOS实机仍需核对。

升级前停止容器并完整备份data及含密码的docker-compose.yml,随后在部署目录运行 docker compose pull、docker compose up -d。NAS执行对应项目拉取与重建,保留挂载目录。不会自动升级运行中的实例。

常用管理操作在新单文件Compose中已开启,设备权限和预演仍有效。秒开全集及部分高级注册/模板/MA5800写入、实际拨号及换纤仍有明确未完善项。完整CFG/DATA/FTP恢复按用户要求等待回程;ACS平台/API和ACL不在开发范围。发布镜像不能代替这些业务验收。

旧compose.hub.yaml + .env.hub仍可继续使用,新部署不需要。如果由旧方式切换,保留原runtime-alpine等实际数据路径和原权限设置,不能误用空data目录。

Tag summary

Content type

Image

Digest

sha256:0842bfc32…

Size

40.8 MB

Last updated

5 days ago

docker pull baone/olt-manager