Spaces:
Running
Running
File size: 11,236 Bytes
66e6dd3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 |
# 添加你想要的应用
> 需要有 docker 和 docker-compose 相关知识
## 前提
- 活跃的开源项目
- 有官方维护的 docker 镜像
## 1. fork 本项目
为了提交 pull request 你需要 fork 本项目,访问 [appstore](https://github.com/1Panel-dev/appstore),然后点击右上角的 "Fork" 按钮,把本项目 fork 到你自己的代码仓库
## 2. clone 代码到本地
执行下面的命令 clone 代码到你自己的电脑
```
git clone -b dev https://<your-github-username>/appstore
```
## 3. 创建一个新的分支
进入到刚才下载的代码目录
```
cd appstore
```
创建一个新的分支
```
git checkout -b app/<app-name>
```
## 4. 创建应用文件 (以 Halo 为例)
v1.3 及以上版本可以在 1Panel 宿主机使用 1panel app init <应用的key> <应用的版本> 来快速初始化应用文件 (注意不是 1pctl 命令)
文件夹格式
```
├──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
```
应用声明文件 data.yml
> 本文件主要用于声明应用的一些信息
```
additionalProperties: #固定参数
key: halo #应用的 key ,仅限英文,用于在 Linux 创建文件夹
name: Halo #应用名称
tags:
- WebSite #应用标签,可以有多个,请参照下方的标签列表
shortDescZh: 强大易用的开源建站工具 #应用中文描述,不要超过30个字
shortDescEn: Powerful and easy-to-use open source website builder #应用英文描述
type: website #应用类型,区别于应用分类,只能有一个,请参照下方的类型列表
crossVersionUpdate: true #是否可以跨大版本升级
limit: 0 #应用安装数量限制,0 代表无限制
website: https://halo.run/ #官网地址
github: https://github.com/halo-dev/halo #github 地址
document: https://docs.halo.run/ #文档地址
```
应用标签 - tags 字段(持续更新。。。)
| key | name |
| ---- | ---- |
| WebSite | 建站 |
| Server | Web 服务器 |
| Runtime | 运行环境 |
| Database | 数据库 |
| Tool | 工具 |
| CI/CD | CI/CD |
| Local | 本地 |
应用类型 - type 字段
| type | 说明 |
| ---- | ---- |
| website | website 类型在 1Panel 中支持在网站中一键部署,wordpress halo 都是此 type |
| runtime | mysql openresty redis 等类型的应用 |
| tool | phpMyAdmin redis-commander jenkins 等类型的应用 |
应用参数配置文件 data.yml (注意区分于应用主目录下面的 data.yaml)
> 本文件主要用于生成安装时要填写的 form 表单,在应用版本文件夹下面
> 可以无表单,但是需要有这个 data.yml文件,并且包含 formFields 字段
以安装 halo 时的 form 表单 为例
<img width="754" alt="iShot_2023-03-18_14 03 43" src="https://user-images.githubusercontent.com/31820853/226111412-9c7b25a1-83f2-4621-8789-7ef85a2695dd.png">
如果要生成上面的表单,需要这么填写 data.yml
```
additionalProperties: #固定参数
formFields:
- default: ""
envKey: PANEL_DB_HOST #docker-compose 文件中的参数
key: mysql #依赖应用的 key , 例如 mysql
labelEn: Database Service #英文的label
labelZh: 数据库服务 #中文的label
required: true #是否必填
type: service #如果需要依赖其他应用,例如数据库,使用此 type
- default: halo
envKey: PANEL_DB_NAME
labelEn: Database
labelZh: 数据库名
random: true #是否在 default 文字后面,增加随机字符串
required: true
rule: paramCommon #校验规则
type: text #需要手动填写的,使用此 type
- default: halo
envKey: PANEL_DB_USER
labelEn: User
labelZh: 数据库用户
random: true
required: true
rule: paramCommon
type: text
- default: halo
envKey: PANEL_DB_USER_PASSWORD
labelEn: Password
labelZh: 数据库用户密码
random: true
required: true
rule: paramComplexity
type: password #密码字段使用此 type
- default: admin
envKey: HALO_ADMIN
labelEn: Admin Username
labelZh: 超级管理员用户名
required: true
rule: paramCommon
type: text
- default: halo
envKey: HALO_ADMIN_PASSWORD
labelEn: Admin Password
labelZh: 超级管理员密码
random: true
required: true
rule: paramComplexity
type: password
- default: http://localhost:8080
edit: true
envKey: HALO_EXTERNAL_URL
labelEn: External URL
labelZh: 外部访问地址
required: true
rule: paramExtUrl
type: text
- default: 8080
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Port
labelZh: 端口
required: true
rule: paramPort
type: number #端口使用此 type
```
关于端口字段:
1. PANEL_APP_PORT_HTTP 有 web 访问端口的优先使用此 envKey
2. envKey 中包含 PANEL_APP_PORT 前缀会被认定为端口类型,并且用于安装前的端口占用校验。注意:端口需要是外部端口
关于 type 字段:
| type | 说明 |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| service | `type: service` 如果该应用需要依赖其他组件,如 mysql redis 等,可以通过 `key: mysql` 定义依赖的名称,在创建应用时会要求先创建依赖的应用。 |
| password | `type: password` 敏感信息,如密码相关的字段会默认不显示明文。 |
| text | `type: text` 一般内容,比如数据库名称,默认明文显示。 |
| number | `type: number` 一般用在端口相关的配置上,只允许输入数字。 |
| select | `type: select` 选项,比如 `true`, `false`,日志等级等。 |
简单的例子
```
# type: service,定义一个 mysql 的 service 依赖。
- default: ""
envKey: DB_HOST
key: mysql
labelEn: Database Service
labelZh: 数据库服务
required: true
type: service
# type: password
- default: Np2qgqtiUayA857GpuVI0Wtg
edit: true
envKey: DB_PASSWORD
labelEn: Database password
labelZh: 数据库密码
required: true
type: password
# type: text
- default: 192.168.100.100
disabled: true.
envKey: REDIS_HOST
labelEn: Redis host
labelZh: Redis 主机
type: text
# type: number
- default: 3306
disabled: true
envKey: DB_PORT
labelEn: Database port
labelZh: 数据库端口
rule: paramPort
type: number
# type: select
- default: "ERROR"
envKey: LOG_LEVEL
labelEn: Log level
labelZh: 日志级别
required: true
type: select
values:
- label: DEBUG
value: "DEBUG"
- label: INFO
value: "INFO"
- label: WARNING
value: "WARNING"
- label: ERROR
value: "ERROR"
- label: CRITICAL
value: "CRITICAL"
```
rule 字段目前支持的几种校验
| rule | 规则 |
| ---- | ---- |
| paramPort | 用于限制端口范围为 1-65535 |
| paramExtUrl | 格式为 http(s)://(域名/ip):(端口) |
| paramCommon | 英文、数字、.-和_,长度2-30 |
| paramComplexity | 支持英文、数字、.%@$!&~_-,长度6-30,特殊字符不能在首尾 |
应用 docker-compose.yml 文件
> ${PANEL_APP_PORT_HTTP} 类型的参数,都在 data.yml 中有声明
```
version: "3"
services:
halo:
image: halohub/halo:2.2.0
container_name: ${CONTAINER_NAME} // 固定写法,勿改
restart: always
networks:
- 1panel-network // 1Panel 创建的应用都在此网络下
volumes:
- ./data:/root/.halo2
ports:
- ${PANEL_APP_PORT_HTTP}:8090
command:
- --spring.r2dbc.url=r2dbc:pool:${HALO_PLATFORM}://${PANEL_DB_HOST}:${HALO_DB_PORT}/${PANEL_DB_NAME}
- --spring.r2dbc.username=${PANEL_DB_USER}
- --spring.r2dbc.password=${PANEL_DB_USER_PASSWORD}
- --spring.sql.init.platform=${HALO_PLATFORM}
- --halo.external-url=${HALO_EXTERNAL_URL}
- --halo.security.initializer.superadminusername=${HALO_ADMIN}
- --halo.security.initializer.superadminpassword=${HALO_ADMIN_PASSWORD}
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true
```
## 5. 脚本
1Panel 在 安装之前、升级之前、卸载之后支持执行 .sh 脚本
分别对应 init.sh upgrade.sh uninstall.sh
存放目录(以halo为例) : halo/2.2.0/scripts
## 6. 本地测试
将应用目录上传到 1Panel 的 /opt/1panel/resource/apps/local 文件夹下
注意:/opt 为 1Panel 默认安装目录,请根据自己的实际情况修改
上传完成后,目录结构如下
```
├──halo
├── logo.png
├── data.yml
├── README.md
├── 2.2.0
├── data.yml
├── data
└── docker-compose.yml
```
在 1Panel 应用商店中,点击更新应用列表按钮同步本地应用
> v1.2 版本及之前版本的本地应用,请参考[这个文档](https://github.com/1Panel-dev/appstore/wiki/v1.2-%E7%89%88%E6%9C%AC%E6%9C%AC%E5%9C%B0%E5%BA%94%E7%94%A8%E5%8D%87%E7%BA%A7%E6%8C%87%E5%8D%97)修改
## 7. 提交文件
```
git add .
git commit -m "Add my-app"
git push origin dev
```
## 8. 提交 Pull Request
- 在你的仓库点击 Pull requests 菜单
- 点击 New pull request ,填写标题和描述
- 选择由你的分支提交到 1Panel-dev/appstore |