mirror of
https://github.com/okxlin/appstore.git
synced 2026-10-08 16:00:35 +00:00
fix: use store runtime selector for jianmu db
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
PANEL_APP_PORT_HTTP=18080
|
||||
APP_DATA_DIR=./data
|
||||
PANEL_DB_TYPE=mysql
|
||||
PANEL_DB_HOST=mysql
|
||||
PANEL_DB_PORT=3306
|
||||
PANEL_DB_NAME=jianmu
|
||||
|
||||
+35
-13
@@ -34,21 +34,43 @@ additionalProperties:
|
||||
required: true
|
||||
type: text
|
||||
- default: mysql
|
||||
edit: true
|
||||
envKey: PANEL_DB_HOST
|
||||
labelEn: Database Host or App Name
|
||||
labelZh: 数据库主机或应用名
|
||||
envKey: PANEL_DB_TYPE
|
||||
labelEn: Database Service
|
||||
labelZh: 数据库服务
|
||||
label:
|
||||
en: Database Host or App Name
|
||||
zh: 数据库主机或应用名
|
||||
zh-Hant: 數據庫主機或應用名
|
||||
ja: データベースホストまたはアプリ名
|
||||
ko: 데이터베이스 호스트 또는 앱 이름
|
||||
ru: Хост базы данных или имя приложения
|
||||
ms: Hos pangkalan data atau nama aplikasi
|
||||
pt-br: Host do banco de dados ou nome do aplicativo
|
||||
en: Database Service
|
||||
zh: 数据库服务
|
||||
zh-Hant: 數據庫服務
|
||||
ja: データベースサービス
|
||||
ko: 데이터베이스 서비스
|
||||
ru: Сервис базы данных
|
||||
ms: Perkhidmatan Pangkalan Data
|
||||
pt-br: Serviço de Banco de Dados
|
||||
required: true
|
||||
type: text
|
||||
type: apps
|
||||
values:
|
||||
- label: "MySQL"
|
||||
value: mysql
|
||||
- label: "LocalMySQL"
|
||||
value: localmysql
|
||||
- label: "MariaDB"
|
||||
value: mariadb
|
||||
child:
|
||||
default: ""
|
||||
envKey: PANEL_DB_HOST
|
||||
labelEn: Database Service
|
||||
labelZh: 数据库服务
|
||||
label:
|
||||
en: Database Service
|
||||
zh: 数据库服务
|
||||
zh-Hant: 數據庫服務
|
||||
ja: データベースサービス
|
||||
ko: 데이터베이스 서비스
|
||||
ru: Сервис базы данных
|
||||
ms: Perkhidmatan Pangkalan Data
|
||||
pt-br: Serviço de Banco de Dados
|
||||
required: true
|
||||
type: service
|
||||
- default: 3306
|
||||
edit: true
|
||||
envKey: PANEL_DB_PORT
|
||||
|
||||
@@ -3,6 +3,72 @@ set -euo pipefail
|
||||
|
||||
ENV_FILE="${ENV_FILE:-./.env}"
|
||||
|
||||
escape_sql_string() {
|
||||
local value="${1:-}"
|
||||
printf "%s" "${value//\'/\'\'}"
|
||||
}
|
||||
|
||||
infer_db_type_from_host() {
|
||||
local host_value="${1:-}"
|
||||
local agent_db="/opt/1panel/db/agent.db"
|
||||
|
||||
if [[ -n "$host_value" && -f "$agent_db" ]] && command -v sqlite3 >/dev/null 2>&1; then
|
||||
local host_sql
|
||||
local detected
|
||||
host_sql="$(escape_sql_string "$host_value")"
|
||||
detected="$(
|
||||
sqlite3 "$agent_db" "
|
||||
SELECT apps.key
|
||||
FROM app_installs
|
||||
JOIN apps ON apps.id = app_installs.app_id
|
||||
WHERE apps.key IN ('mysql', 'localmysql', 'mariadb')
|
||||
AND (
|
||||
app_installs.name = '${host_sql}'
|
||||
OR app_installs.service_name = '${host_sql}'
|
||||
OR app_installs.container_name = '${host_sql}'
|
||||
)
|
||||
ORDER BY app_installs.id DESC
|
||||
LIMIT 1;
|
||||
"
|
||||
)"
|
||||
if [[ -n "$detected" ]]; then
|
||||
printf '%s\n' "$detected"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
case "$host_value" in
|
||||
*localmysql*)
|
||||
printf 'localmysql\n'
|
||||
;;
|
||||
*mariadb*)
|
||||
printf 'mariadb\n'
|
||||
;;
|
||||
*)
|
||||
printf 'mysql\n'
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
migrate_db_type() {
|
||||
if [[ ! -f "$ENV_FILE" ]]; then
|
||||
echo "$ENV_FILE not found; skipped PANEL_DB_TYPE migration"
|
||||
return
|
||||
fi
|
||||
|
||||
if grep -qE '^PANEL_DB_TYPE=' "$ENV_FILE"; then
|
||||
echo "PANEL_DB_TYPE already exists"
|
||||
return
|
||||
fi
|
||||
|
||||
local current_host
|
||||
local detected_type
|
||||
current_host="$(sed -n -E 's/^PANEL_DB_HOST=//p' "$ENV_FILE" | tail -n 1)"
|
||||
detected_type="$(infer_db_type_from_host "$current_host")"
|
||||
printf 'PANEL_DB_TYPE=%s\n' "$detected_type" >> "$ENV_FILE"
|
||||
echo "Added PANEL_DB_TYPE=$detected_type"
|
||||
}
|
||||
|
||||
migrate_db_port() {
|
||||
if [[ ! -f "$ENV_FILE" ]]; then
|
||||
echo "$ENV_FILE not found; skipped PANEL_DB_PORT migration"
|
||||
@@ -26,9 +92,10 @@ migrate_db_port() {
|
||||
echo "Added default PANEL_DB_PORT"
|
||||
}
|
||||
|
||||
migrate_db_type
|
||||
migrate_db_port
|
||||
|
||||
echo "Jianmu is currently pinned to the verified official image line ui/server v2.8.2 and worker v1.0.13."
|
||||
echo "Automatic in-place app upgrades are intentionally disabled for this package."
|
||||
echo "Back up APP_DATA_DIR, the external MySQL database, and the configured Jianmu secrets before changing packaged versions or rotating credentials."
|
||||
echo "Back up APP_DATA_DIR, the MySQL-compatible database, and the configured Jianmu secrets before changing packaged versions or rotating credentials."
|
||||
exit 0
|
||||
|
||||
@@ -25,13 +25,13 @@ Jianmu is an open source no-code and low-code DevOps workflow platform for graph
|
||||
|
||||
- Graphical DevOps workflow orchestration
|
||||
- Official three-service topology with Web UI, Java server, and Docker worker
|
||||
- External MySQL 8 dependency support
|
||||
- Reuse 1Panel store-managed MySQL-compatible runtimes through the install form selector
|
||||
- Docker worker execution on the host through the Docker socket
|
||||
|
||||
## 部署说明
|
||||
|
||||
- 本应用基于官方源码仓库 `jianmu-dev/jianmu` 和官方 deploy 仓库 `jianmu-dev/jianmu-deploy` 适配。
|
||||
- 保留官方 `web + ci-server + worker` 三服务拓扑,但移除官方 compose 中自带的 MySQL 容器,优先改为复用 1Panel 管理的 MySQL 8 服务实例。
|
||||
- 保留官方 `web + ci-server + worker` 三服务拓扑,但移除官方 compose 中自带的 MySQL 容器,优先改为复用 1Panel 管理的 MySQL / LocalMySQL / MariaDB 服务实例。
|
||||
- 官方 deploy 示例默认使用固定弱口令 `admin/123456`、`worker-secret` 和 MySQL `123456`;本适配改为表单化或随机化处理 `JIANMU_API_ADMINPASSWD`、`JIANMU_API_JWTSECRET` 和 `JIANMU_WORKER_SECRET`。
|
||||
- 版本目录 `2.8.2` 与 `latest` 当前都固定到同一官方发布线:`jianmu-ui:v2.8.2`、`jianmu-server:v2.8.2`、`jianmu-worker-docker:v1.0.13`。
|
||||
- 官方镜像来自 deploy compose 使用的 `docker.jianmuhub.com/jianmu/*` 命名空间,并已核实 `amd64` / `arm64` 可拉取。
|
||||
@@ -54,7 +54,8 @@ Jianmu is an open source no-code and low-code DevOps workflow platform for graph
|
||||
|
||||
| 变量 | 说明 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `PANEL_DB_HOST` | MySQL 主机、1Panel MySQL 应用安装名、服务名或容器名 | `mysql` | 是 |
|
||||
| `PANEL_DB_TYPE` | 安装表单中的数据库类型选择器,支持 `mysql` / `localmysql` / `mariadb` | `mysql` | 是 |
|
||||
| `PANEL_DB_HOST` | 由 1Panel 商店数据库 service 选择器注入的服务名;也兼容旧安装里手工填写的主机名或 IP | `mysql` | 是 |
|
||||
| `PANEL_DB_PORT` | MySQL 端口 | `3306` | 是 |
|
||||
| `PANEL_DB_NAME` | Jianmu 数据库名 | `jianmu` | 是 |
|
||||
| `PANEL_DB_USER` | Jianmu 数据库用户 | `jianmu` | 是 |
|
||||
@@ -69,9 +70,9 @@ Jianmu is an open source no-code and low-code DevOps workflow platform for graph
|
||||
|
||||
## 使用说明
|
||||
|
||||
- 推荐优先把 `PANEL_DB_HOST` 填成 1Panel 管理的 MySQL 应用安装名,例如 `mysql-prod`、`mysql-jianmu`,这样初始化脚本可以自动解析到对应容器并补建 Jianmu 所需的数据库和用户。
|
||||
- 如果使用 `localmysql` 或其他 1Panel 管理的 MySQL / MariaDB runtime,也可以直接填写它的安装名、服务名或容器名;本包会在安装阶段自动探测并完成建库、建用户和授权。
|
||||
- 如果填写的是普通外部 MySQL 主机名或 IP,本包不会尝试猜测 root 凭据;此时请提前手工创建 `PANEL_DB_NAME`、`PANEL_DB_USER` 和对应权限。
|
||||
- 安装表单中请先选择数据库类型,再从下一级 service 列表选择具体的 1Panel 商店数据库实例;当前已适配 `MySQL`、`LocalMySQL` 和 `MariaDB`。
|
||||
- 如果选择的是 1Panel 管理的 MySQL 兼容 runtime,本包会在安装阶段自动探测对应容器并完成 Jianmu 所需的建库、建用户和授权。
|
||||
- 旧安装如果已经把 `PANEL_DB_HOST` 手工写成外部 MySQL 主机名或 IP,本次升级不会覆盖该值;这类外部数据库场景仍需提前手工创建 `PANEL_DB_NAME`、`PANEL_DB_USER` 和对应权限。
|
||||
- 如果宿主机 Docker 套接字不是默认 `/var/run/docker.sock`,请把 `DOCKER_SOCK_PATH` 改成真实路径。
|
||||
- 官方 README 提到 Ubuntu 等场景也可以改成 Docker TCP;当前适配只封装了本地 Socket 路径方案,没有默认开放远程 Docker TCP。
|
||||
- 如果需要公网访问,请在 1Panel 或外部反向代理层补 HTTPS、鉴权和网络隔离。
|
||||
@@ -82,8 +83,8 @@ Jianmu is an open source no-code and low-code DevOps workflow platform for graph
|
||||
- 这是一个多服务、外部数据库、带 Docker Socket 权限的高联动应用,排障与升级复杂度高于普通单容器应用。
|
||||
- 当前包固定到官方 `v2.8.2` / `v1.0.13` 镜像线,`latest` 目录也同样固定到该发布线。
|
||||
- 自动 in-place 升级暂未放开;`upgrade.sh` 只输出明确提醒,不做破坏性迁移。
|
||||
- 升级前请备份 `APP_DATA_DIR`、外部 MySQL 数据,以及安装时使用的 `JIANMU_API_JWTSECRET` / `JIANMU_WORKER_SECRET`。
|
||||
- `upgrade.sh` 会兼容把旧测试包里的 `DB_PORT` 迁移为 `PANEL_DB_PORT`,避免早期试装环境在后续重装或升级时丢失数据库端口配置。
|
||||
- 升级前请备份 `APP_DATA_DIR`、MySQL 兼容数据库数据,以及安装时使用的 `JIANMU_API_JWTSECRET` / `JIANMU_WORKER_SECRET`。
|
||||
- `upgrade.sh` 会兼容把旧测试包里的 `DB_PORT` 迁移为 `PANEL_DB_PORT`,并尽量根据旧 `PANEL_DB_HOST` 自动推断补齐 `PANEL_DB_TYPE`,避免已绑定 `localmysql` / `mariadb` 的老安装在升级后无法于表单中正确回显商店 runtime。
|
||||
- 由于存在 Docker Socket 权限、外部数据库依赖和升级联动风险,本应用不加入 Renovate 自动合并白名单。
|
||||
|
||||
## 参考资料
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
PANEL_APP_PORT_HTTP=18080
|
||||
APP_DATA_DIR=./data
|
||||
PANEL_DB_TYPE=mysql
|
||||
PANEL_DB_HOST=mysql
|
||||
PANEL_DB_PORT=3306
|
||||
PANEL_DB_NAME=jianmu
|
||||
|
||||
+35
-13
@@ -34,21 +34,43 @@ additionalProperties:
|
||||
required: true
|
||||
type: text
|
||||
- default: mysql
|
||||
edit: true
|
||||
envKey: PANEL_DB_HOST
|
||||
labelEn: Database Host or App Name
|
||||
labelZh: 数据库主机或应用名
|
||||
envKey: PANEL_DB_TYPE
|
||||
labelEn: Database Service
|
||||
labelZh: 数据库服务
|
||||
label:
|
||||
en: Database Host or App Name
|
||||
zh: 数据库主机或应用名
|
||||
zh-Hant: 數據庫主機或應用名
|
||||
ja: データベースホストまたはアプリ名
|
||||
ko: 데이터베이스 호스트 또는 앱 이름
|
||||
ru: Хост базы данных или имя приложения
|
||||
ms: Hos pangkalan data atau nama aplikasi
|
||||
pt-br: Host do banco de dados ou nome do aplicativo
|
||||
en: Database Service
|
||||
zh: 数据库服务
|
||||
zh-Hant: 數據庫服務
|
||||
ja: データベースサービス
|
||||
ko: 데이터베이스 서비스
|
||||
ru: Сервис базы данных
|
||||
ms: Perkhidmatan Pangkalan Data
|
||||
pt-br: Serviço de Banco de Dados
|
||||
required: true
|
||||
type: text
|
||||
type: apps
|
||||
values:
|
||||
- label: "MySQL"
|
||||
value: mysql
|
||||
- label: "LocalMySQL"
|
||||
value: localmysql
|
||||
- label: "MariaDB"
|
||||
value: mariadb
|
||||
child:
|
||||
default: ""
|
||||
envKey: PANEL_DB_HOST
|
||||
labelEn: Database Service
|
||||
labelZh: 数据库服务
|
||||
label:
|
||||
en: Database Service
|
||||
zh: 数据库服务
|
||||
zh-Hant: 數據庫服務
|
||||
ja: データベースサービス
|
||||
ko: 데이터베이스 서비스
|
||||
ru: Сервис базы данных
|
||||
ms: Perkhidmatan Pangkalan Data
|
||||
pt-br: Serviço de Banco de Dados
|
||||
required: true
|
||||
type: service
|
||||
- default: 3306
|
||||
edit: true
|
||||
envKey: PANEL_DB_PORT
|
||||
|
||||
@@ -3,6 +3,72 @@ set -euo pipefail
|
||||
|
||||
ENV_FILE="${ENV_FILE:-./.env}"
|
||||
|
||||
escape_sql_string() {
|
||||
local value="${1:-}"
|
||||
printf "%s" "${value//\'/\'\'}"
|
||||
}
|
||||
|
||||
infer_db_type_from_host() {
|
||||
local host_value="${1:-}"
|
||||
local agent_db="/opt/1panel/db/agent.db"
|
||||
|
||||
if [[ -n "$host_value" && -f "$agent_db" ]] && command -v sqlite3 >/dev/null 2>&1; then
|
||||
local host_sql
|
||||
local detected
|
||||
host_sql="$(escape_sql_string "$host_value")"
|
||||
detected="$(
|
||||
sqlite3 "$agent_db" "
|
||||
SELECT apps.key
|
||||
FROM app_installs
|
||||
JOIN apps ON apps.id = app_installs.app_id
|
||||
WHERE apps.key IN ('mysql', 'localmysql', 'mariadb')
|
||||
AND (
|
||||
app_installs.name = '${host_sql}'
|
||||
OR app_installs.service_name = '${host_sql}'
|
||||
OR app_installs.container_name = '${host_sql}'
|
||||
)
|
||||
ORDER BY app_installs.id DESC
|
||||
LIMIT 1;
|
||||
"
|
||||
)"
|
||||
if [[ -n "$detected" ]]; then
|
||||
printf '%s\n' "$detected"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
case "$host_value" in
|
||||
*localmysql*)
|
||||
printf 'localmysql\n'
|
||||
;;
|
||||
*mariadb*)
|
||||
printf 'mariadb\n'
|
||||
;;
|
||||
*)
|
||||
printf 'mysql\n'
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
migrate_db_type() {
|
||||
if [[ ! -f "$ENV_FILE" ]]; then
|
||||
echo "$ENV_FILE not found; skipped PANEL_DB_TYPE migration"
|
||||
return
|
||||
fi
|
||||
|
||||
if grep -qE '^PANEL_DB_TYPE=' "$ENV_FILE"; then
|
||||
echo "PANEL_DB_TYPE already exists"
|
||||
return
|
||||
fi
|
||||
|
||||
local current_host
|
||||
local detected_type
|
||||
current_host="$(sed -n -E 's/^PANEL_DB_HOST=//p' "$ENV_FILE" | tail -n 1)"
|
||||
detected_type="$(infer_db_type_from_host "$current_host")"
|
||||
printf 'PANEL_DB_TYPE=%s\n' "$detected_type" >> "$ENV_FILE"
|
||||
echo "Added PANEL_DB_TYPE=$detected_type"
|
||||
}
|
||||
|
||||
migrate_db_port() {
|
||||
if [[ ! -f "$ENV_FILE" ]]; then
|
||||
echo "$ENV_FILE not found; skipped PANEL_DB_PORT migration"
|
||||
@@ -26,9 +92,10 @@ migrate_db_port() {
|
||||
echo "Added default PANEL_DB_PORT"
|
||||
}
|
||||
|
||||
migrate_db_type
|
||||
migrate_db_port
|
||||
|
||||
echo "Jianmu is currently pinned to the verified official image line ui/server v2.8.2 and worker v1.0.13."
|
||||
echo "Automatic in-place app upgrades are intentionally disabled for this package."
|
||||
echo "Back up APP_DATA_DIR, the external MySQL database, and the configured Jianmu secrets before changing packaged versions or rotating credentials."
|
||||
echo "Back up APP_DATA_DIR, the MySQL-compatible database, and the configured Jianmu secrets before changing packaged versions or rotating credentials."
|
||||
exit 0
|
||||
|
||||
Reference in New Issue
Block a user