找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 2200|回复: 7

把 LuCI 装入 docker 容器

[复制链接]
发表于 2021-11-20 14:26 | 显示全部楼层 |阅读模式
本帖最后由 lisaac 于 2021-11-20 14:40 编辑

缘起
自从使用了 Docker,已经很少在服务器上装应用了,基本都是起个容器跑应用,在使用 Docker 容器的过程中,很多容器的配置文件需要管理,使用过程中不少人对命令行及配置文件不熟悉,而且配置文件管理起来也太麻烦。
一直想找一个 web 前端来管理配置文件,看来看去还是回到了 openwrt 的 LuCI,而且 LuCI 上有很多 app 可以移(chao)植(xi),所以一口气将 LuCI 装入容器,配合 luci-lib-docker 以进行 Docker 容器的配置文件管理。

LuCI in Docker
早期 luci 是支持独立于 openwrt 运行的,不过近年了与 openwrt 的耦合度越来越高,特别是 ubus 相关的 api,由于我们移植 LuCI 的目的就是用于配置文件管理,所以就用不到 ubus,移植 LuCI 最关键的就是剥离 ubus。
过程就不缀诉了,移植过程中恰逢 LuCI 大版本从18.06 升级至 19.07,两个版本天差地别,19.07 明显前端化,使用 javascript 编写插件。硬着头皮将 18.06 移植完成之后,又顺路移植了 19.07,所有源码都在 [https://github.com/lisaac/luci-in-docker](https://github.com/lisaac/luci-in-docker)

  • 安装 LuCI
首先你需要有 Docker 环境,目前 luci-in-docker 只还支持 x86/arm64 两种架构,安装方法:
  1. docker run -d \
  2.   --name luci \
  3.   --restart unless-stopped \
  4.   -p 80:80 \
  5.   -p 7682:7682 \
  6.   -e TZ=Asia/Shanghai \
  7.   -v $HOME/pods/luci:/external \
  8.   -v /var/run/docker.sock:/var/run/docker.sock \
  9.   lisaac/luci:latest
复制代码

稍等启动之后,就可以使用浏览器访问 80 端口打开 LuCI 了,在 LuCI 容器中,已经内置了 luci-app-dockerman, 可以用来管理 Docker,再也不需要难用的 portainer 了。


从 LuCI 容器的启动命令可以看到映射了/external目录,/external/cfg.d 目录是用来存放将来的配置文件的,而/external目录也是用来存放插件的,所以只要保存好这个目录,就能保存所有配置信息。

One Container One Service
没错,一个容器只提供一种服务,这是政治问题!!这很 Linux!!
所以,强烈不建议在 LuCI 容器中运行其他服务,别忘了我们的初衷是把 LuCI 拿过来管理其他容器的配置文件的,接下来管理各个容器配置文件是由各个插件完成的。
所以,如果你想要使用 LuCI 管理一个服务,你需要一个容器和一个插件。


LuCI 插件
LuCI 插件有别于 Openwrt 的安装包,不直接兼容 Openwrt 的 ipk,插件是一个目录,目录结构如下:
  1. |-luci-app-podclash    # 插件名,会忽略以 _ 开头的目录,方便调试,插件结构如下:
  2.         |-Makefile    # 判定有效插件目录标志,并不按照Makefile执行
  3.         |-root          # 插件所需的 root 目录
  4.         |-luasrc       # 插件所需的 lua 文件目录
  5.         |-htdocs       # 插件所需的 html 文件目录
  6.         |-po            # 插件所需的 po 文件目录
  7.         |-depends.lst # 插件所需要 alpine 依赖列表文件, 依赖用空格隔开, 只用来存放 alpine 依赖
  8.         |-preinst     # 插件所需的初始化脚本(合并前)
  9.         |-postinst    # 插件所需的初始化脚本(合并后), 若没有此脚本, 会尝试执行 /root/etc/uci-defaults/ 下的插件初始化脚本
复制代码
  • LuCI 容器每次启动都会遍历/external目录中的插件,合并到 LuCI 中
  • 插件安装时不会执行按照 Makefile 编译,插件内必须是 lua/js 源码 + 二进制文件
  • 插件中依赖文件 depends.lst 为 alpine 依赖,并非 openwrt 中的依赖
  • 插件中的 preinst及 postinst 是插件合并前及合并后分别执行的钩子,PS:可能执行 preinst 及 postinst 存在依赖其他插件的情况,可以将插件目录开头的加上数字,来确定遍历顺序
  • 插件目录名若以 _ 开头,则会跳过此插件



可以看出 LuCI 插件与 ipk 解压后 data 目录中的内容相似,在 LuCI 菜单中 「系统--插件」 中可以对 LuCI 插件进行管理,新增插件只需要填入 LuCI 插件的仓库地址即可。

Docker API(For Developer)
由于现在 LuCI 19.07+ 大量使用 js,此前的 luci-lib-docker 是 lua 后端库,在使用 js 访问的时候挺麻烦。
于是就有了 luci-socket-forwarder,目前已经集成在 luci-in-docker中,可以使用Docker 原生 api 的方式请求,例如:

  1. GET http://host/socket/containers/json
  2. headers:{
  3.   socket_path: "/var/run/docker.sock"
  4.   cookie: "sysauth=xxxxxxxxxxxxxxxxxxxx"
  5. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-11-20 15:35 | 显示全部楼层
看着好牛。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-11-20 15:47 | 显示全部楼层
大神威武,感谢大神为大家谋福利。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-11-20 15:52 来自手机 | 显示全部楼层
感谢分享。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-11-20 18:14 | 显示全部楼层
感谢大佬分享!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-11-21 17:27 | 显示全部楼层
虽然不懂  但是看着很牛逼
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2021-12-2 20:41 | 显示全部楼层
自顶下
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-1-27 04:06 | 显示全部楼层
牛逼啊谢谢
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-26 09:12

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表