👋
本文由 小王 @wan92hen 供稿,首发于 3703.wang。
原文地址:https://3703.wang/archives/1panel-openldap
1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。
相比于直接通过命令行方式来运维管理 Linux 服务器,1Panel 的优势主要体现在:
高效管理:用户可以通过 Web 图形界面轻松管理 Linux 服务器,实现主机监控、文件管理、数据库管理、容器管理等功能;
快速建站:深度集成开源建站软件 WordPress 和 Halo,域名绑定、SSL 证书配置等操作一键搞定;
应用商店:精选上架各类高质量的开源工具和应用软件,协助用户轻松安装并升级;
安全可靠:基于容器管理并部署应用,实现最小的漏洞暴露面,同时提供防火墙和日志审计等功能;
一键备份:支持一键备份和恢复,用户可以将数据备份到各类云端存储介质,永不丢失。
前段时间在进行项目测试时需要一个 LDAP 服务器,去 1Panel 应用商店里搜了下发现没有,又去 1Panel GitHub 代码仓库的 Issue 里搜了下,看到也有其他人有这样的需求。
https://github.com/1Panel-dev/1Panel/issues/768
既然如此那就立马开干,搞个 1Panel 应用商店的 OpenLDAP 应用,给 1Panel 项目刷一波贡献值。
1Panel 应用商店中的应用提交流程
首先先看下 1Panel 应用商店的官方文档 如何提交自己想要的应用 1Panel-dev/appstore Wiki (github.com),了解下大概的应用编写和提交流程。可以概括为如下几个步骤:
- fork 本项目
- clone 代码到本地
- 创建一个新的分支
- 创建应用文件
- 脚本
- 本地测试
- 提交文件 提
- 交 Pull Request
一个典型的 1Panel 应用商店应用目录结构如下:
├──halo // 以 halo 的 key 命名 ,下面解释什么是 key
├── logo.png // 应用 logo , 最好是 180 * 180 px
├── data.yml // 应用声明文件
├── README.md // 应用的 README
├── 2.2.0 // 应用版本 注意不要以 v 开头
│ ├── data.yml // 应用的参数配置,下面有详细介绍
│ ├── data // 挂载出来的目录
| ├── scripts // 脚本目录 存放 init.sh upgrade.sh uninstall.sh
│ └── docker-compose.yml // docker-compose 文件
└── 2.3.2
├── data.yml
├── data
└── docker-compose.yml
大体上是在 docker-compose.yml 文件的基础上增加了一些应用元数据,并进行了一些参数化处理。
寻找 OpenLDAP 容器化部署方案
了解完 1Panel 应用商店应用的机制和结构,接下来需要找一个靠谱的 OpenLDAP 容器化部署方案。一开始瞄准 OpenLDAP 项目官网,在官网上没有找到容器化相关的内容。
接下来直接在 Docker Hub 镜像仓库中搜索 OpenLDAP,排在首位的是 Bitnami 团队制作的镜像https://hub.docker.com/r/bitnami/openldap
Bitnami 作为 VMware 旗下团队,制作维护了很多开源项目的容器镜像以及 Helm Chart,质量和更新速度都比较有保障。在没有 OpenLDAP 官网镜像的情况下,这里就直接选择使用 Bitnami 团队的 OpenLDAP 镜像了。
创建本地应用
初始化
为了方便在编写应用的过程中进行调试,我们先不管 1Panel Appstore 的代码仓库,直接找一台部署了 1Panel 的服务器,参照 如何提交自己想要的应用 中本地测试步骤说明,在 1Panel 上直接创建一个 OpenLDAP 本地应用。
在 1Panel 文件管理页面去到 /opt/1panel/resource/apps 目录,选择 VS Code 打开 local 文件夹,填写好当前服务器的连接信息后,便会使用本地电脑安装的 VS Code 打开这个服务器目录。
在 /opt/1panel/resource/apps/local 目录下新建 openldap 目录并增加必要的文件。
└── openldap
├── 2.6.8
│ ├── data.yml
│ └── docker-compose.yml
├── data.yml
├── logo.png
└── README.md
其中 README.md 为应用的说明文件,用于展示在 1Panel 应用商店的应用详情页面。
data.yml 为应用的元数据定义,包括应用的名称、描述、类型等信息。
2.6.8 为应用具体的版本目录,其中 data.yml 主要定义了安装应用时需要填写的参数信息,docker-compose.yml 则是最终用来启动应用使用的 docker compose 定义文件。
安装测试
参考 Bitnami OpenLDAP 镜像仓库中的示例,使用一个最小可运行的 Docker Compose 文件,修改 2.6.8/docker-compose.yml 文件的内容。
version: '3'
networks:
1panel-network:
external: true
services:
openldap:
image: bitnami/openldap:2.6.8
ports:
- '1389:1389'
- '1636:1636'
environment:
- LDAP_ADMIN_USERNAME=admin
- LDAP_ADMIN_PASSWORD=adminpassword
- LDAP_USERS=user01,user02
- LDAP_PASSWORDS=password1,password2
networks:
- 1panel-network
volumes:
- './data:/bitnami/openldap'
同时参考应用商店其他应用的 data.yml 元数据定义补充相关内容后,点击应用商店页面的 更新应用列表 即可在应用列表中搜索到新添加的 OpenLDAP 这个本地应用。
参数化处理
根据常见的使用场景,我们一般期望在安装 OpenLDAP 时可以自定义监听端口、根路径、默认用户名及默认密码等参数,这里可以通过在 2.6.8/data.yml 中定义安装参数,并在 2.6.8/docker-compose.yml 中引用这些参数的方式实现这一效果。
修改完成后可以再次点击应用商店页面的 更新应用列表 ,重新部署修改后的应用,不断重复该过程直至应用安装所填参数可以满足需求并能正常生效。
最终文件内容可以参考:feat: 增加 OpenLDAP 应用 by wan92hen · Pull Request #1664 · 1Panel-dev/appstore (github.com)。
补充初始化脚本
在安装 OpenLDAP 本地应用进行测试的过程中,出现了容器内 OpenLDAP 没有权限操作挂在上的数据目录的问题。这是因为应用部署后的数据目录 data 默认所有者是 root ,而 Bitnami 提供的 OpenLDAP 镜像是使用 uid 为 1001 的用户运行的,这种情况便可通过补充脚本的方式来进行处理。在 2.6.8/scripts/ 目录增加 init.sh 、upgrade.sh 两个脚本,用于修改数据目录所有者及权限。
#!/bin/bash
DIR="./data/"
if [ -d "$DIR" ]; then
echo "目录 $DIR 已存在"
else
echo "目录 $DIR 不存在,正在创建..."
mkdir -p "$DIR"
if [ $? -eq 0 ]; then
echo "目录 $DIR 创建成功"
else
echo "目录 $DIR 创建失败"
fi
fi
chown -R 1001:1001 $DIR
提交到官方仓库
本地应用测试完成没有问题后,便可根据官方文档 如何提交自己想要的应用 中的步骤,fork 项目后将服务器上创建的本地应用目录,整个拷贝到本地的 appstore 代码仓库提交 Pull Request 到官方仓库。
针对 OpenLDAP 应用的完整 PR 内容可以参考:https://github.com/1Panel-dev/appstore/pull/1664
☘️ 如果你希望为 1Panel 开源项目提交贡献,或是在 1Panel 官方应用市场没有找到自己想要的应用,希望这篇文章可以帮助到你~
ps:如果你觉得这篇文章还不错,别忘了去原博 3703.wang 为作者打气。