You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

7.5 KiB

应用管理

如何添加一个应用

  1. 在用户目录.godoos/run下建立一个应用文件夹。
  2. 一个应用需要包含两个配置文件,在应用根目录下创建install.jsonstore.json两个文件。 配置文件格式如下:
  • install.json
{
    "name": "",             // string, 应用程序名称。
    "url": "",              // string, 应用程序下载地址。
    "webUrl":"",            // string, 如何设置,应用程序将显示到桌面。
    "isDev": true,          // boolean, 是否为开发环境。
    "needDownload": true,   // boolean, 是否需要下载。
    "needInstall": true,    // boolean, 是否需要安装。
    "version": "1.0.0",    // string, 应用程序版本。
    "icon": "",             // string, 应用程序图标,为可访问的网络地址。
    "checkProgress": true,  // boolean, 表示是否显示启动和停止。
    "hasRestart": true,     // boolean, 是否需要重启。
    "setting": true         // boolean, 是否需要设置。
}

如果不需要后端进程的web应用,store.json可以不用配置。

install.json的struct为:

type InstallInfo struct {
	Name          string `json:"name"`          // 应用程序名称。重要,必须和应用的目录名称一致。
	URL           string `json:"url"`           // 应用程序下载地址。
	WebUrl        string `json:"webUrl"`        // 应用程序的网页地址。
	IsDev         bool   `json:"isDev"`         // 标志位,表示是否为开发者版本。
	NeedDownload  bool   `json:"needDownload"`  // 标志位,表示是否需要下载。
	NeedInstall   bool   `json:"needInstall"`   // 标志位,表示是否需要安装。
	Version       string `json:"version"`       // 应用程序的版本号。
	Desc          string `json:"desc"`          // 应用程序的描述信息。
	Icon          string `json:"icon"`          // 应用程序的图标路径。
	CheckProgress bool   `json:"checkProgress"` // 标志位,表示是否显示启动和停止。
	HasRestart    bool   `json:"hasRestart"`    // 标志位,表示安装后是否需要重启。
	Setting       bool   `json:"setting"`       // 标志位,表示是否需要配置。
	Dependencies  []Item `json:"dependencies"`  // 依赖项。
}
  • store.json
{
    "name": "mysql5.7",     // string, 应用程序名称。可不设置,会继承自install.json
    "icon": "mysql.png",    // string, 应用程序图标,一般放在应用程序static目录下。
    "setting": {
        "binPath": "{exePath}/bin/mysqld.exe", // string, 重要,必须设置。为启动程序路径。
        "confPath": "{exePath}/my.ini",// string, 重要,必须设置。为配置文件路径。
        "progressName": "mysqld.exe",// string, 进程名称。如果为单线程可不设置。
        "isOn": true // boolean, 是否启动守护进程
    },
    "config": { // object, 配置文件。里面的配置可以任意填写,和cmds配合使用。
    },
    "cmds": {},// object, 命令集。
    "install": { // object, 安装配置。
        "envs": [],// object[], 环境变量。
        "cmds": []// object[], 启动命令。
    },
    "start": {// object, 启动配置。
        "envs": [],// object[], 环境变量。
        "cmds": []// object[], 启动命令。
    }
}

store.json的struct为

type StoreInfo struct {
	Name    string           `json:"name"`    // 应用程序的名称。
	Icon    string           `json:"icon"`    // 应用程序的图标路径。
	Setting Setting          `json:"setting"` // 应用程序的配置信息。
	Config  map[string]any   `json:"config"`  // 应用程序的配置信息映射。
	Cmds    map[string][]Cmd `json:"cmds"`    // 应用程序的命令集合。
	Install Install          `json:"install"` // 安装应用程序的信息。
	Start   Install          `json:"start"`   // 启动应用程序的信息。
}

Setting的结构体为:

// 包含应用程序的二进制文件路径、配置文件路径等关键设置信息。
type Setting struct {
	BinPath      string `json:"binPath"`      // 应用程序二进制文件的路径。
	ConfPath     string `json:"confPath"`     // 应用程序配置文件的路径。
	ProgressName string `json:"progressName"` // 进程的名称。
	IsOn         bool   `json:"isOn"`         //是否守护进程运行。
}

Cmd的结构体为:

type Cmd struct {
	Name     string   `json:"name"`               // 命令的名称。
	FilePath string   `json:"filePath,omitempty"` // 命令文件的路径。
	Content  string   `json:"content,omitempty"`  // 命令的内容。
	BinPath  string   `json:"binPath,omitempty"`  // 执行命令的二进制文件路径。
	TplPath  string   `json:"tplPath,omitempty"`  // 命令的模板路径。
	Cmds     []string `json:"cmds,omitempty"`     // 要执行的子命令列表。
	Waiting  int      `json:"waiting"`            // 等待的时间。
	Kill     bool     `json:"kill"`               // 标志位,表示是否需要终止之前的命令。如果setting中设置了progressName会优先杀死整个进程
	Envs     []Item   `json:"envs"`               // 命令执行时的环境变量。
}

Install的struct为:

// Install 描述了安装过程中的环境变量和命令列表。
type Install struct {
	Envs []Item   `json:"envs"` // 安装过程中需要的环境变量。
	Cmds []string `json:"cmds"` // 安装过程中需要执行的命令列表。
}
// Item 是一个通用的键值对结构体,用于表示配置项或环境变量等。
type Item struct {
	Name  string `json:"name"`  // 配置项的名称。
	Value any    `json:"value"` // 配置项的值。
}
  1. 在应用商店添加应用,选择本地添加,输入应用的目录名字(不需要填写整个目录)。

配置文件store.json说明

  1. installstart配置可以调用cmds里的命令。
  2. cmds里的命令也可以调用自身的命令。
  3. 所有的命令都可以串联使用。

如何设置配置

  1. 在应用目录下建立static目录,并创建index.html文件。install.jsonsetting设置为true。 前端配置样列
const postData = {
dataDir: dataDir,// 此处对应store.json中的config配置项
logDir: logDir,// 此处对应store.json中的config配置项
port: port, // 此处对应store.json中的config配置项
name: "mysql5.7",// 应用名称
cmdKey: "setting"// 命令键,cmds的name
 }
const comp = await fetch('http://localhost:56780/store/setting', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(postData)
});

关键要设置好namecmdKeycmdKey对应store.json中的cmds数组配置项中的name,一个数组中又可以配置一系列的命令,可以参考Cmd的结构体

内置应用说明

  • 系列封装了一些用于处理进程控制和文件操作的功能函数,以下是各函数的详细描述:
  1. start 启动应用
  2. stop 停止应用
  3. restart 重启应用
  4. exec 执行命令 必须设置binPath和cmds
  5. writeFile 写入文件 必须设置filePath和content,以config为依据,对content进行替换
  6. changeFile 修改文件 必须设置filePath和tplPath,以config为依据,在模板文件中进行替换
  7. deleteFile 删除文件
  8. unzip 解压文件 必须设置filePath和content,content为解压目录
  9. zip 压缩文件 必须设置filePath和content,filePath为将要压缩的文件夹,content为压缩后的文件名
  10. mkdir 创建文件夹 必须设置FilePath,FilePath为创建的文件夹路径