From b464163eea0e5e4182b8533219d1d56cb6ae3e9b Mon Sep 17 00:00:00 2001 From: okxlin <61420215+okxlin@users.noreply.github.com> Date: Thu, 13 Aug 2026 01:24:33 +0800 Subject: [PATCH] Update dokku app Rebuilt-from-PR: #5816 Source-PR: https://github.com/okxlin/appstore/pull/5816 Maintainer-workflow: appstore-pr-maintainer --- apps/dokku/0.38.26/data.yml | 101 ------------------ apps/dokku/0.38.26/docker-compose.yml | 20 ---- apps/dokku/0.38.26/scripts/init.sh | 58 ---------- apps/dokku/0.38.26/scripts/upgrade.sh | 2 - apps/dokku/{0.38.26 => 0.38.27}/.env.sample | 3 +- apps/dokku/0.38.27/data.yml | 85 +++++++++++++++ apps/dokku/{0.38.26 => 0.38.27}/data/.gitkeep | 0 .../{latest => 0.38.27}/docker-compose.yml | 8 +- apps/dokku/0.38.27/scripts/init.sh | 11 ++ .../{0.38.26 => 0.38.27}/scripts/uninstall.sh | 0 apps/dokku/0.38.27/scripts/upgrade.sh | 44 ++++++++ apps/dokku/README.md | 18 +++- apps/dokku/data.yml | 42 ++++---- apps/dokku/latest/.env.sample | 7 -- apps/dokku/latest/data.yml | 101 ------------------ apps/dokku/latest/data/.gitkeep | 1 - apps/dokku/latest/scripts/init.sh | 58 ---------- apps/dokku/latest/scripts/uninstall.sh | 2 - apps/dokku/latest/scripts/upgrade.sh | 2 - apps/dokku/logo.png | Bin 3478 -> 4938 bytes 20 files changed, 183 insertions(+), 380 deletions(-) delete mode 100644 apps/dokku/0.38.26/data.yml delete mode 100644 apps/dokku/0.38.26/docker-compose.yml delete mode 100755 apps/dokku/0.38.26/scripts/init.sh delete mode 100755 apps/dokku/0.38.26/scripts/upgrade.sh rename apps/dokku/{0.38.26 => 0.38.27}/.env.sample (84%) create mode 100644 apps/dokku/0.38.27/data.yml rename apps/dokku/{0.38.26 => 0.38.27}/data/.gitkeep (100%) rename apps/dokku/{latest => 0.38.27}/docker-compose.yml (62%) create mode 100755 apps/dokku/0.38.27/scripts/init.sh rename apps/dokku/{0.38.26 => 0.38.27}/scripts/uninstall.sh (100%) create mode 100755 apps/dokku/0.38.27/scripts/upgrade.sh delete mode 100644 apps/dokku/latest/.env.sample delete mode 100644 apps/dokku/latest/data.yml delete mode 100644 apps/dokku/latest/data/.gitkeep delete mode 100755 apps/dokku/latest/scripts/init.sh delete mode 100755 apps/dokku/latest/scripts/uninstall.sh delete mode 100755 apps/dokku/latest/scripts/upgrade.sh diff --git a/apps/dokku/0.38.26/data.yml b/apps/dokku/0.38.26/data.yml deleted file mode 100644 index 4337ed83d..000000000 --- a/apps/dokku/0.38.26/data.yml +++ /dev/null @@ -1,101 +0,0 @@ -additionalProperties: - formFields: - - default: 8080 - edit: true - envKey: PANEL_APP_PORT_HTTP - labelEn: Application HTTP Port - labelZh: 应用 HTTP 端口 - label: - en: Application HTTP Port - zh: 应用 HTTP 端口 - zh-Hant: 應用程式 HTTP 連接埠 - ja: アプリ HTTP ポート - ko: 애플리케이션 HTTP 포트 - ru: HTTP-порт приложений - ms: Port HTTP Aplikasi - pt-br: Porta HTTP das Aplicações - required: true - rule: paramPort - type: number - - default: 8443 - edit: true - envKey: PANEL_APP_PORT_HTTPS - labelEn: Application HTTPS Port - labelZh: 应用 HTTPS 端口 - label: - en: Application HTTPS Port - zh: 应用 HTTPS 端口 - zh-Hant: 應用程式 HTTPS 連接埠 - ja: アプリ HTTPS ポート - ko: 애플리케이션 HTTPS 포트 - ru: HTTPS-порт приложений - ms: Port HTTPS Aplikasi - pt-br: Porta HTTPS das Aplicações - required: true - rule: paramPort - type: number - - default: 3022 - edit: true - envKey: PANEL_APP_PORT_SSH - labelEn: Git SSH Port - labelZh: Git SSH 端口 - label: - en: Git SSH Port - zh: Git SSH 端口 - zh-Hant: Git SSH 連接埠 - ja: Git SSH ポート - ko: Git SSH 포트 - ru: Порт Git SSH - ms: Port Git SSH - pt-br: Porta Git SSH - required: true - rule: paramPort - type: number - - default: dokku.me - edit: true - envKey: DOKKU_HOSTNAME - labelEn: Global Hostname - labelZh: 全局域名 - label: - en: Global Hostname - zh: 全局域名 - zh-Hant: 全域主機名稱 - ja: グローバルホスト名 - ko: 전역 호스트 이름 - ru: Глобальное имя хоста - ms: Nama Hos Global - pt-br: Nome de Host Global - required: true - type: text - - default: /var/lib/dokku - edit: true - envKey: APP_DATA_DIR - labelEn: Data Directory - labelZh: 数据目录 - label: - en: Data Directory - zh: 数据目录 - zh-Hant: 資料目錄 - ja: データディレクトリ - ko: 데이터 디렉터리 - ru: Каталог данных - ms: Direktori Data - pt-br: Diretório de Dados - required: true - type: text - - default: Asia/Shanghai - edit: true - envKey: TZ - labelEn: Timezone - labelZh: 时区 - label: - en: Timezone - zh: 时区 - zh-Hant: 時區 - ja: タイムゾーン - ko: 시간대 - ru: Часовой пояс - ms: Zon Waktu - pt-br: Fuso Horário - required: true - type: text diff --git a/apps/dokku/0.38.26/docker-compose.yml b/apps/dokku/0.38.26/docker-compose.yml deleted file mode 100644 index 572d9eb95..000000000 --- a/apps/dokku/0.38.26/docker-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -services: - dokku: - image: "dokku/dokku:0.38.26@sha256:0128539691d4fe8529f83dadd0a500f5f71ba0a6c003c59b8119fc3614d027ec" - container_name: ${CONTAINER_NAME} - restart: unless-stopped - network_mode: bridge - environment: - - DOKKU_HOSTNAME=${DOKKU_HOSTNAME} - - DOKKU_HOST_ROOT=${APP_DATA_DIR}/home/dokku - - DOKKU_LIB_HOST_ROOT=${APP_DATA_DIR}/var/lib/dokku - - TZ=${TZ} - volumes: - - "${APP_DATA_DIR}:/mnt/dokku" - - "/var/run/docker.sock:/var/run/docker.sock" - ports: - - "${PANEL_APP_PORT_SSH}:22" - - "${PANEL_APP_PORT_HTTP}:80" - - "${PANEL_APP_PORT_HTTPS}:443" - labels: - createdBy: "Apps" diff --git a/apps/dokku/0.38.26/scripts/init.sh b/apps/dokku/0.38.26/scripts/init.sh deleted file mode 100755 index 42dac740a..000000000 --- a/apps/dokku/0.38.26/scripts/init.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}" - -read_env_value() { - local key="$1" - [[ -f "$ENV_FILE" ]] || return 0 - local value - value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)" - case "$value" in - \"*\") value="${value#\"}"; value="${value%\"}" ;; - \'*\') value="${value#\'}"; value="${value%\'}" ;; - esac - printf '%s\n' "$value" -} - -configured_value() { - local key="$1" - local default_value="$2" - local value - value="${!key:-}" - if [[ -z "$value" ]]; then - value="$(read_env_value "$key")" - fi - printf '%s\n' "${value:-$default_value}" -} - -resolve_app_path() { - local raw="$1" - if [[ "$raw" = /* ]]; then - printf '%s\n' "$raw" - else - printf '%s\n' "$ROOT_DIR/${raw#./}" - fi -} - -ensure_dir() { - local path - path="$(resolve_app_path "$(configured_value "$1" "$2")")" - mkdir -p "$path" -} - -ensure_file_parent() { - local path - local parent - path="$(resolve_app_path "$(configured_value "$1" "$2")")" - parent="$(dirname "$path")" - mkdir -p "$parent" -} - -DATA_DIR="$(configured_value APP_DATA_DIR /var/lib/dokku)" -if [[ "$DATA_DIR" != /* ]]; then - echo "APP_DATA_DIR must be an absolute host path for Dokku" >&2 - exit 1 -fi -mkdir -p "$DATA_DIR" diff --git a/apps/dokku/0.38.26/scripts/upgrade.sh b/apps/dokku/0.38.26/scripts/upgrade.sh deleted file mode 100755 index 6e877466e..000000000 --- a/apps/dokku/0.38.26/scripts/upgrade.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail diff --git a/apps/dokku/0.38.26/.env.sample b/apps/dokku/0.38.27/.env.sample similarity index 84% rename from apps/dokku/0.38.26/.env.sample rename to apps/dokku/0.38.27/.env.sample index 180e644ca..68bcba99b 100644 --- a/apps/dokku/0.38.26/.env.sample +++ b/apps/dokku/0.38.27/.env.sample @@ -1,7 +1,6 @@ +CONTAINER_NAME=dokku-compose-check PANEL_APP_PORT_HTTP=8080 PANEL_APP_PORT_HTTPS=8443 PANEL_APP_PORT_SSH=3022 DOKKU_HOSTNAME=dokku.me -APP_DATA_DIR=/var/lib/dokku TZ=Asia/Shanghai -CONTAINER_NAME=dokku-compose-check diff --git a/apps/dokku/0.38.27/data.yml b/apps/dokku/0.38.27/data.yml new file mode 100644 index 000000000..acebe0764 --- /dev/null +++ b/apps/dokku/0.38.27/data.yml @@ -0,0 +1,85 @@ +additionalProperties: + formFields: + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Application HTTP Port + labelZh: 应用 HTTP 端口 + label: + en: Application HTTP Port + zh: 应用 HTTP 端口 + zh-Hant: 應用程式 HTTP 連接埠 + ja: アプリ HTTP ポート + ko: 애플리케이션 HTTP 포트 + ru: HTTP-порт приложений + ms: Port HTTP Aplikasi + pt-br: Porta HTTP das Aplicações + required: true + rule: paramPort + type: number + - default: 8443 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelEn: Application HTTPS Port + labelZh: 应用 HTTPS 端口 + label: + en: Application HTTPS Port + zh: 应用 HTTPS 端口 + zh-Hant: 應用程式 HTTPS 連接埠 + ja: アプリ HTTPS ポート + ko: 애플리케이션 HTTPS 포트 + ru: HTTPS-порт приложений + ms: Port HTTPS Aplikasi + pt-br: Porta HTTPS das Aplicações + required: true + rule: paramPort + type: number + - default: 3022 + edit: true + envKey: PANEL_APP_PORT_SSH + labelEn: Git SSH Port + labelZh: Git SSH 端口 + label: + en: Git SSH Port + zh: Git SSH 端口 + zh-Hant: Git SSH 連接埠 + ja: Git SSH ポート + ko: Git SSH 포트 + ru: Порт Git SSH + ms: Port Git SSH + pt-br: Porta Git SSH + required: true + rule: paramPort + type: number + - default: dokku.me + edit: true + envKey: DOKKU_HOSTNAME + labelEn: Global Hostname + labelZh: 全局域名 + label: + en: Global Hostname + zh: 全局域名 + zh-Hant: 全域主機名稱 + ja: グローバルホスト名 + ko: 전역 호스트 이름 + ru: Глобальное имя хоста + ms: Nama Hos Global + pt-br: Nome de Host Global + required: true + type: text + - default: Asia/Shanghai + edit: true + envKey: TZ + labelEn: Timezone + labelZh: 时区 + label: + en: Timezone + zh: 时区 + zh-Hant: 時區 + ja: タイムゾーン + ko: 시간대 + ru: Часовой пояс + ms: Zon Waktu + pt-br: Fuso Horário + required: true + type: text diff --git a/apps/dokku/0.38.26/data/.gitkeep b/apps/dokku/0.38.27/data/.gitkeep similarity index 100% rename from apps/dokku/0.38.26/data/.gitkeep rename to apps/dokku/0.38.27/data/.gitkeep diff --git a/apps/dokku/latest/docker-compose.yml b/apps/dokku/0.38.27/docker-compose.yml similarity index 62% rename from apps/dokku/latest/docker-compose.yml rename to apps/dokku/0.38.27/docker-compose.yml index 49a71e805..1fd7895ab 100644 --- a/apps/dokku/latest/docker-compose.yml +++ b/apps/dokku/0.38.27/docker-compose.yml @@ -1,16 +1,16 @@ services: dokku: - image: "dokku/dokku:latest" + image: "dokku/dokku:0.38.27@sha256:4fb49b29f643265945ef5da3878c7933205a9b60a1ac767f821834c802a56065" container_name: ${CONTAINER_NAME} restart: unless-stopped network_mode: bridge environment: - DOKKU_HOSTNAME=${DOKKU_HOSTNAME} - - DOKKU_HOST_ROOT=${APP_DATA_DIR}/home/dokku - - DOKKU_LIB_HOST_ROOT=${APP_DATA_DIR}/var/lib/dokku + - DOKKU_HOST_ROOT=/var/lib/dokku/home/dokku + - DOKKU_LIB_HOST_ROOT=/var/lib/dokku/var/lib/dokku - TZ=${TZ} volumes: - - "${APP_DATA_DIR}:/mnt/dokku" + - "/var/lib/dokku:/mnt/dokku" - "/var/run/docker.sock:/var/run/docker.sock" ports: - "${PANEL_APP_PORT_SSH}:22" diff --git a/apps/dokku/0.38.27/scripts/init.sh b/apps/dokku/0.38.27/scripts/init.sh new file mode 100755 index 000000000..35d7926dc --- /dev/null +++ b/apps/dokku/0.38.27/scripts/init.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -euo pipefail + +DOKKU_DATA_DIR=/var/lib/dokku + +if [[ -L "$DOKKU_DATA_DIR" ]]; then + echo "Refusing to use symbolic link as Dokku data directory: $DOKKU_DATA_DIR" >&2 + exit 1 +fi + +mkdir -p -- "$DOKKU_DATA_DIR" diff --git a/apps/dokku/0.38.26/scripts/uninstall.sh b/apps/dokku/0.38.27/scripts/uninstall.sh similarity index 100% rename from apps/dokku/0.38.26/scripts/uninstall.sh rename to apps/dokku/0.38.27/scripts/uninstall.sh diff --git a/apps/dokku/0.38.27/scripts/upgrade.sh b/apps/dokku/0.38.27/scripts/upgrade.sh new file mode 100755 index 000000000..acf71b3d0 --- /dev/null +++ b/apps/dokku/0.38.27/scripts/upgrade.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)" +ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}" +DOKKU_DATA_DIR=/var/lib/dokku + +read_legacy_data_dir() { + [[ -f "$ENV_FILE" ]] || return 0 + + local line value='' + while IFS= read -r line || [[ -n "$line" ]]; do + case "$line" in + APP_DATA_DIR=*) value="${line#APP_DATA_DIR=}" ;; + esac + done < "$ENV_FILE" + [[ "$value" != *$'\n'* && "$value" != *$'\r'* ]] || { + echo "Invalid APP_DATA_DIR value in $ENV_FILE" >&2 + return 1 + } + case "$value" in + \"*\") value="${value#\"}"; value="${value%\"}" ;; + \'*\') value="${value#\'}"; value="${value%\'}" ;; + esac + printf '%s\n' "$value" +} + +legacy_data_dir="${APP_DATA_DIR:-$(read_legacy_data_dir)}" +if [[ -n "$legacy_data_dir" && "$legacy_data_dir" != "$DOKKU_DATA_DIR" ]]; then + cat >&2 <&2 + exit 1 +fi + +mkdir -p -- "$DOKKU_DATA_DIR" diff --git a/apps/dokku/README.md b/apps/dokku/README.md index 23cb3fb63..523ac085b 100644 --- a/apps/dokku/README.md +++ b/apps/dokku/README.md @@ -20,9 +20,15 @@ Dokku 是面向单机服务器的开源 PaaS,可通过 Git 推送、Dockerfile ## 数据持久化 -- `APP_DATA_DIR` 必须是宿主机绝对路径,默认 `/var/lib/dokku`。 -- 该目录挂载到 `/mnt/dokku`,保存 Git 仓库、插件、配置、服务数据和 SSH 状态。 -- 升级前应备份整个目录,并同时备份 Dokku 创建的应用容器、卷和数据库插件数据。 +- Dokku 按官方容器部署契约固定使用宿主机 `/var/lib/dokku`,并将其挂载到容器内 `/mnt/dokku`。 +- 该目录保存 Git 仓库、插件、配置、服务数据和 SSH 状态。为避免不同 Dokku 实例共享并覆盖同一状态,本应用限制为单实例,且不提供自定义数据目录表单。 +- 升级前应备份整个 `/var/lib/dokku`,并同时备份 Dokku 创建的应用容器、卷和数据库插件数据。 + +### 旧版自定义路径迁移 + +早期包允许通过 `APP_DATA_DIR` 指定其他宿主机路径。新版本不会自动移动这类持久化数据,也不会在路径不一致时静默启动一个空的 `/var/lib/dokku`。 + +升级前请停止 Dokku,完整备份旧目录,将其中的全部内容迁移到 `/var/lib/dokku`,并确认属主、权限以及插件和 SSH 状态无误。然后在当前旧版本的 1Panel 应用参数中,将“数据目录”改为 `/var/lib/dokku`,确认当前实例可正常启动后再选择升级。不要只手工修改安装目录的 `.env`,因为 1Panel 在升级时会从已保存的应用参数重写该文件。若检测到其他非空路径,`upgrade.sh` 会明确中止。 ## 高风险权限说明 @@ -30,6 +36,12 @@ Dokku 的核心功能必须挂载宿主机 `/var/run/docker.sock`。这相当于 仅在专用或充分受信任的服务器上安装。不要向不受信任用户开放 Dokku SSH 权限,不要安装来源不明的插件。卸载 Dokku 应用不会自动删除它创建的子容器、镜像、网络和卷,需要管理员按上游流程审计后手工清理。 +## 镜像安全提示 + +当前镜像的 Docker 相关工具包含 Trivy 标记为 High 的 Moby/Docker 与 Go 标准库问题,其中包括授权插件绕过、针对恶意容器镜像执行 `docker cp`/压缩归档上传时的宿主机代码执行或文件覆盖风险,以及符号链接目录遍历风险。由于 Dokku 必须直接访问宿主机 Docker Socket,这些问题不能按普通低权限容器处理。 + +仅部署受信任镜像和应用源码;不要对不受信任容器执行 `docker cp` 或压缩归档上传;不要向不受信任用户授予 Dokku SSH、插件安装或 Docker 操作权限。后续 Dokku 镜像包含已修复的 Docker/Go 工具链后应尽快升级。 + ## 端口与网络风险 - Dokku 部署的应用可能创建额外端口和 Docker 网络,这些资源不会自动出现在当前应用包的 Compose 文件中。 diff --git a/apps/dokku/data.yml b/apps/dokku/data.yml index 3c32ae7c9..e451c094a 100644 --- a/apps/dokku/data.yml +++ b/apps/dokku/data.yml @@ -1,33 +1,37 @@ name: Dokku tags: - - DevOps - - PaaS +- DevOps +- Server title: 基于 Docker 的单机应用部署与生命周期管理平台 description: 基于 Docker 的单机应用部署与生命周期管理平台 additionalProperties: key: dokku name: Dokku tags: - - DevOps - - Server + - DevOps + - Server + type: tool + website: https://dokku.com + document: https://dokku.com/docs/getting-started/install/docker/ + github: https://github.com/dokku/dokku shortDescZh: 基于 Docker 的单机应用部署与生命周期管理平台 - shortDescEn: Docker-powered platform for building, deploying, and managing applications on one server + shortDescEn: Docker-powered platform for building, deploying, and managing applications + on one server + crossVersionUpdate: true + limit: 1 + architectures: + - amd64 + - arm64 description: - en: Build, deploy, and manage applications on a single server through Git pushes, Docker, buildpacks, and plugins. + en: Build, deploy, and manage applications on a single server through Git pushes, + Docker, buildpacks, and plugins. zh: 通过 Git 推送、Docker、Buildpack 和插件在单台服务器上构建、部署和管理应用。 zh-Hant: 透過 Git 推送、Docker、Buildpack 和外掛在單台伺服器上建置、部署和管理應用程式。 ja: Gitプッシュ、Docker、Buildpack、プラグインを使用して単一サーバー上のアプリケーションを構築・デプロイ・管理します。 ko: Git 푸시, Docker, 빌드팩 및 플러그인을 통해 단일 서버에서 애플리케이션을 빌드, 배포 및 관리합니다. - ru: Создавайте, развертывайте и управляйте приложениями на одном сервере с помощью Git, Docker, buildpack и плагинов. - ms: Bina, gunakan dan urus aplikasi pada satu pelayan melalui Git, Docker, buildpack dan pemalam. - pt-br: Crie, implante e gerencie aplicações em um único servidor com Git, Docker, buildpacks e plugins. - type: tool - crossVersionUpdate: true - limit: 1 - recommend: 0 - website: https://dokku.com - github: https://github.com/dokku/dokku - document: https://dokku.com/docs/getting-started/install/docker/ - architectures: - - amd64 - - arm64 + ru: Создавайте, развертывайте и управляйте приложениями на одном сервере с помощью + Git, Docker, buildpack и плагинов. + ms: Bina, gunakan dan urus aplikasi pada satu pelayan melalui Git, Docker, buildpack + dan pemalam. + pt-br: Crie, implante e gerencie aplicações em um único servidor com Git, Docker, + buildpacks e plugins. diff --git a/apps/dokku/latest/.env.sample b/apps/dokku/latest/.env.sample deleted file mode 100644 index 180e644ca..000000000 --- a/apps/dokku/latest/.env.sample +++ /dev/null @@ -1,7 +0,0 @@ -PANEL_APP_PORT_HTTP=8080 -PANEL_APP_PORT_HTTPS=8443 -PANEL_APP_PORT_SSH=3022 -DOKKU_HOSTNAME=dokku.me -APP_DATA_DIR=/var/lib/dokku -TZ=Asia/Shanghai -CONTAINER_NAME=dokku-compose-check diff --git a/apps/dokku/latest/data.yml b/apps/dokku/latest/data.yml deleted file mode 100644 index 4337ed83d..000000000 --- a/apps/dokku/latest/data.yml +++ /dev/null @@ -1,101 +0,0 @@ -additionalProperties: - formFields: - - default: 8080 - edit: true - envKey: PANEL_APP_PORT_HTTP - labelEn: Application HTTP Port - labelZh: 应用 HTTP 端口 - label: - en: Application HTTP Port - zh: 应用 HTTP 端口 - zh-Hant: 應用程式 HTTP 連接埠 - ja: アプリ HTTP ポート - ko: 애플리케이션 HTTP 포트 - ru: HTTP-порт приложений - ms: Port HTTP Aplikasi - pt-br: Porta HTTP das Aplicações - required: true - rule: paramPort - type: number - - default: 8443 - edit: true - envKey: PANEL_APP_PORT_HTTPS - labelEn: Application HTTPS Port - labelZh: 应用 HTTPS 端口 - label: - en: Application HTTPS Port - zh: 应用 HTTPS 端口 - zh-Hant: 應用程式 HTTPS 連接埠 - ja: アプリ HTTPS ポート - ko: 애플리케이션 HTTPS 포트 - ru: HTTPS-порт приложений - ms: Port HTTPS Aplikasi - pt-br: Porta HTTPS das Aplicações - required: true - rule: paramPort - type: number - - default: 3022 - edit: true - envKey: PANEL_APP_PORT_SSH - labelEn: Git SSH Port - labelZh: Git SSH 端口 - label: - en: Git SSH Port - zh: Git SSH 端口 - zh-Hant: Git SSH 連接埠 - ja: Git SSH ポート - ko: Git SSH 포트 - ru: Порт Git SSH - ms: Port Git SSH - pt-br: Porta Git SSH - required: true - rule: paramPort - type: number - - default: dokku.me - edit: true - envKey: DOKKU_HOSTNAME - labelEn: Global Hostname - labelZh: 全局域名 - label: - en: Global Hostname - zh: 全局域名 - zh-Hant: 全域主機名稱 - ja: グローバルホスト名 - ko: 전역 호스트 이름 - ru: Глобальное имя хоста - ms: Nama Hos Global - pt-br: Nome de Host Global - required: true - type: text - - default: /var/lib/dokku - edit: true - envKey: APP_DATA_DIR - labelEn: Data Directory - labelZh: 数据目录 - label: - en: Data Directory - zh: 数据目录 - zh-Hant: 資料目錄 - ja: データディレクトリ - ko: 데이터 디렉터리 - ru: Каталог данных - ms: Direktori Data - pt-br: Diretório de Dados - required: true - type: text - - default: Asia/Shanghai - edit: true - envKey: TZ - labelEn: Timezone - labelZh: 时区 - label: - en: Timezone - zh: 时区 - zh-Hant: 時區 - ja: タイムゾーン - ko: 시간대 - ru: Часовой пояс - ms: Zon Waktu - pt-br: Fuso Horário - required: true - type: text diff --git a/apps/dokku/latest/data/.gitkeep b/apps/dokku/latest/data/.gitkeep deleted file mode 100644 index 8b1378917..000000000 --- a/apps/dokku/latest/data/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/dokku/latest/scripts/init.sh b/apps/dokku/latest/scripts/init.sh deleted file mode 100755 index 42dac740a..000000000 --- a/apps/dokku/latest/scripts/init.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}" - -read_env_value() { - local key="$1" - [[ -f "$ENV_FILE" ]] || return 0 - local value - value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)" - case "$value" in - \"*\") value="${value#\"}"; value="${value%\"}" ;; - \'*\') value="${value#\'}"; value="${value%\'}" ;; - esac - printf '%s\n' "$value" -} - -configured_value() { - local key="$1" - local default_value="$2" - local value - value="${!key:-}" - if [[ -z "$value" ]]; then - value="$(read_env_value "$key")" - fi - printf '%s\n' "${value:-$default_value}" -} - -resolve_app_path() { - local raw="$1" - if [[ "$raw" = /* ]]; then - printf '%s\n' "$raw" - else - printf '%s\n' "$ROOT_DIR/${raw#./}" - fi -} - -ensure_dir() { - local path - path="$(resolve_app_path "$(configured_value "$1" "$2")")" - mkdir -p "$path" -} - -ensure_file_parent() { - local path - local parent - path="$(resolve_app_path "$(configured_value "$1" "$2")")" - parent="$(dirname "$path")" - mkdir -p "$parent" -} - -DATA_DIR="$(configured_value APP_DATA_DIR /var/lib/dokku)" -if [[ "$DATA_DIR" != /* ]]; then - echo "APP_DATA_DIR must be an absolute host path for Dokku" >&2 - exit 1 -fi -mkdir -p "$DATA_DIR" diff --git a/apps/dokku/latest/scripts/uninstall.sh b/apps/dokku/latest/scripts/uninstall.sh deleted file mode 100755 index 6e877466e..000000000 --- a/apps/dokku/latest/scripts/uninstall.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail diff --git a/apps/dokku/latest/scripts/upgrade.sh b/apps/dokku/latest/scripts/upgrade.sh deleted file mode 100755 index 6e877466e..000000000 --- a/apps/dokku/latest/scripts/upgrade.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail diff --git a/apps/dokku/logo.png b/apps/dokku/logo.png index d3c06a082057da0886171a4acb7c3b77d2fd06a5..2deae796105ebd8ad9384df664643156d0742e43 100644 GIT binary patch literal 4938 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