当前位置:论坛首页 > 第三方应用 > Linux面板插件

教程:如何开发宝塔第三方应用插件

发表在 第三方应用2022-4-22 18:46 [复制链接] 3 4884

本帖最后由 Winlin 于 2022-4-26 17:30 编辑

可以在简书 https://www.jianshu.com/p/deb790efdbec 看本文。
也可以在 https://blog.csdn.net/win_lin/article/details/124430617 看本文。

宝塔管理服务器比较方便,管理网站和数据库,安装各种插件,比较灵活。如果能用宝塔安装云SRS,那可以在很多云和虚拟机都可能安装了。

说干就干,先去下载资料,宝塔插件的官方手册官方论坛,还有官方Demo,可以直接下载下来后在你的宝塔中安装。

我跟着操作了一遍,发现还是有些地方没有说清楚,而官方Demo比较复杂,写得比较隐晦,就重新写了个教程。

Note: 目前插件开发,需要企业认证,认证通过后,才能开发第三方应用插件。

Develop Mode

记得一定要打开开发者模式,否则修改代码不生效:



Note: 开启开发者模式后,比如修改`srs_cloud_main.py`或者`index.html`后,会立刻生效,不用清理缓存或重启服务。

开启开发者模式后,我们就可以开始开发插件了。

HelloWorld

我们先做一个最简单的插件,只实现安装和卸载,请参考bt-plugin-example-install,下面是详细的解读。

宝塔插件的安装如下,假设插件为`srs_cloud`,请替换成你的插件名称:

  • 安装时,会调用`install.sh`脚本,参数是`install`,需要定义如何安装。
  • ZIP文件会解压到`/www/server/panel/plugin/srs_cloud`插件目录,调用脚本时文件已经存在了,可以使用插件自己的这些文件。
  • 会获取`info.json`的信息,关于插件的描述信息。
  • 卸载时,会调用`install.sh`脚本,参数是`uninstall`,需要定义如何卸载。


我们写一个简单的插件,目录为`srs_cloud`。插件描述信息`info.json`文件,内容如下:

  1. {
  2.   "title": "SRS音视频服务器",
  3.   "name": "srs_cloud",
  4.   "ps": "直播和WebRTC音视频能力,支持RTMP、WebRTC、HLS、HTTP- FLV和SRT等常用协议",
  5.   "versions": "4.4",
  6.   "checks": "/www/server/panel/plugin/srs_cloud",
  7.   "author": "Winlin",
  8.   "home": "https://github.com/ossrs/srs"
  9. }
复制代码


然后是`install.sh`脚本,安装只打印一条消息并等待几秒,卸载时直接删除插件目录:


  1. #!/bin/bash

  2. install_path=/www/server/panel/plugin/srs_cloud

  3. Install() {
  4.   echo 'Installing'; sleep 2;
  5.   echo 'Install OK'; sleep 2;
  6. }

  7. Uninstall() {
  8. rm -rf $install_path
  9. }

  10. if [ "${1}" == 'install' ];then
  11. Install
  12. elif [ "${1}" == 'uninstall' ];then
  13. Uninstall
  14. else
  15. echo 'Error!'; exit 1;
  16. fi
复制代码


将目录`srs_cloud`打包成`srs_cloud.zip`,可以在`第三方应用 > 导入插件`,上传压缩包安装。安装过程会显示消息。
图片被识别为敏感信息了,请去简书看吧。
Note: 安装后,可以直接scp本地文件到服务器的插件目录,这样不用每次上传压缩包,直接刷新页面就可以看到效果,开发调试的周期很短。

安装后,就可以看到这个插件,可以卸载,如下图所示:
图片被识别为敏感信息了,请去简书看吧。

安装后,如果点设置发现会有错误提示,接下来我们开发插件的设置和配置面板。

Settings

接下来我们实现插件的设置面板,只显示一个简单的信息,请参考bt-plugin-example-settings,下面是详细的解读。

用户点击插件的`设置`按钮,或者点插件名称,会打开插件设置面板。定义如下:

  • 需要`index.html`页面,默认的模板页面。



我们先实现一个简单的UI,新增文件`index.html`我们先写一个非常简单的插件(更多样式可以参考demo插件),只显示一个导航和内容:

  1. <div class="bt-form">
  2.     <div class="bt-w-main">
  3.         <div class="bt-w-menu"><p class="bgw">概览</p></div>
  4.         <div class="bt-w-con pd15"><div class="plugin_body"></div></div>
  5.     </div>
  6. </div>
  7. <script type="text/javascript">
  8.     $('.plugin_body').html("<h1>Hello World!</h1>");
  9. </script>
复制代码


这样用户点击就会打开一个页面:

图片被识别为敏感信息了,请去简书看吧。

这是最简单的插件页面了,只是静态页面而已。我们接下来,添加后端API。

Backend Server

接下来我们实现插件的后端服务,前端调用后端服务并展示结果,请参考bt-plugin-example-backend,下面是详细的解读。
我们一般需要页面从后端服务请求数据,比如查看我们的服务器是否正常等。定义如下:

  • 需要`srs_cloud_main.py`,每个函数就是API。


新建文件`srs_cloud_main.py`,新增一个简单的`helloworld`函数,它的代码如下:

  1. #!/usr/bin/python
  2. # coding: utf-8

  3. import sys, os, json

  4. os.chdir("/www/server/panel")
  5. sys.path.append("class/")
  6. import public

  7. class srs_cloud_main:
  8.     def __init__(self):
  9.         pass

  10.     def helloworld(self, args):
  11.         return public.returnMsg(True, "Hello API World!")

复制代码


关于后端API,请注意:

  •    必须返回固定的格式,我们使用`public.returnMsg`函数返回,一个是`status`,一个是`msg`两个字段,是不能随便返回的,会报错。
  •    我们这里没有传参数,`args`为空,注意不能传`action、s、name、a`等参数,会报错。


现在我们有了后端API,在前端`index.html`中就可以调用这个API了,同样也必须是固定的格式,我们修改`index.html`代码如下:

代码被识别为敏感信息了,请去简书看吧。

打开插件的设置页面,就会调用这个API,从后端AP获取数据:
图片被识别为敏感信息了,请去简书看吧。

这样,我们就可以写非常复杂的功能了。接下来,我们传参数和解析响应值。

剩下的,被识别成敏感信息太多了,还是请去简书看吧。

使用道具 举报 只看该作者 回复
发表于 2022-4-22 19:31:00 | 显示全部楼层
666
使用道具 举报 回复
发表于 2022-4-23 09:02:55 | 显示全部楼层
赞赞赞
使用道具 举报 回复 支持 反对
发表于 2022-4-27 19:14:59 | 显示全部楼层
不是比较隐晦,是完全靠猜~~~
就一个列表里的icon.png都不知道怎么搞,老是碎!
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

立即付费处理

工作时间:09:00至24:00

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