AppSpec 用于定义 Application 的所有依赖包,资源配置,定制化的Script Executor,…
他的原始数据格式基于 TOML,如下为一个基于 Gitea 源码管理应用的 AppSpec 定义:
kind = "AppSpec"
roles = [101, 100]
type_tags = ["devops", "enterprise"]
[meta]
  id = "gitea-x1"
  name = "Gitea 源码自托管系统"
  version = "1.0"
[[depends]]
  id = "sysinner-mysql-x1"
  name = "MySQL x1"
  version = "1.0"
[[packages]]
  name = "gitea"
  version = "1.12"
[[executors]]
  name = "gitea-main"
  exec_start = """
DAEMON=/opt/gitea/gitea/gitea
DAEMON_ARGS="web"
NAME=gitea
if pidof $NAME; then
    exit 0
fi
if [ ! -d "/opt/gitea/gitea" ]; then
  mkdir -p /opt/gitea/gitea
fi
rsync -av {{.inpack_prefix_gitea}}/* /opt/gitea/gitea/
/home/action/.sysinner/inagent config-render --app-spec gitea-x1 --in /opt/gitea/gitea/misc/app.ini --out /opt/gitea/gitea/custom/conf/app.ini
/home/action/.sysinner/inagent config-merge --app-spec gitea-x1 --config /opt/gitea/gitea/custom/conf/app.ini --with-config-field cfg/gitea/app_ini
cd /opt/gitea/gitea/
$DAEMON $DAEMON_ARGS >> /home/action/var/log/gitea.log 2>&1 &
"""
  exec_stop = "killall gitea"
  [executors.plan]
    on_tick = 60
[[service_ports]]
  name = "http"
  box_port = 3000
[[service_ports]]
  name = "gitssh"
  box_port = 3022
[configurator]
  name = "cfg/gitea"
  [[configurator.fields]]
    name = "app_name"
    title = "应用名称"
    type = 1
    default = "Gitea"
  [[configurator.fields]]
    name = "app_ini"
    title = "ini 增量配置"
    type = 304
    default = "[i18n]\nLANGS = en-US,zh-CN\nNAMES = English,中文"
[exp_res]
  cpu_min = 2
  mem_min = 128
  vol_min = 5
[exp_deploy]
  rep_min = 1
  rep_max = 1
  sys_state = 1
  network_mode = 1
但通常,开发者使用 inPanel 可视化的开发 AppSpec, 入口 inPanel/App/Spec, 如下
