From 126373d36cdcdd10743cd9c7cefc31877fbcdd81 Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Fri, 18 Jul 2025 17:28:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=BA=94=E7=94=A8=20garage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- apps/garage-hq-web/2.0.0/data.yml | 49 +++++++++++++ apps/garage-hq-web/2.0.0/docker-compose.yml | 38 ++++++++++ apps/garage-hq-web/2.0.0/envs/default.env | 2 + apps/garage-hq-web/2.0.0/envs/global.env | 2 + apps/garage-hq-web/2.0.0/scripts/init.sh | 68 ++++++++++++++++++ apps/garage-hq-web/2.0.0/scripts/uninstall.sh | 10 +++ apps/garage-hq-web/2.0.0/scripts/upgrade.sh | 17 +++++ apps/garage-hq-web/README.md | 62 ++++++++++++++++ apps/garage-hq-web/data.yml | 14 ++++ apps/garage-hq-web/logo.png | Bin 0 -> 53472 bytes apps/garage-hq-web/logo.svg | 8 +++ apps/garage-hq/README.md | 46 ++++++++++++ apps/garage-hq/data.yml | 2 +- 13 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 apps/garage-hq-web/2.0.0/data.yml create mode 100644 apps/garage-hq-web/2.0.0/docker-compose.yml create mode 100644 apps/garage-hq-web/2.0.0/envs/default.env create mode 100644 apps/garage-hq-web/2.0.0/envs/global.env create mode 100644 apps/garage-hq-web/2.0.0/scripts/init.sh create mode 100644 apps/garage-hq-web/2.0.0/scripts/uninstall.sh create mode 100644 apps/garage-hq-web/2.0.0/scripts/upgrade.sh create mode 100644 apps/garage-hq-web/README.md create mode 100644 apps/garage-hq-web/data.yml create mode 100644 apps/garage-hq-web/logo.png create mode 100644 apps/garage-hq-web/logo.svg diff --git a/apps/garage-hq-web/2.0.0/data.yml b/apps/garage-hq-web/2.0.0/data.yml new file mode 100644 index 000000000..73209afda --- /dev/null +++ b/apps/garage-hq-web/2.0.0/data.yml @@ -0,0 +1,49 @@ +additionalProperties: + formFields: + - default: "/home/garage" + edit: true + envKey: GARAGE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3909 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 3900 + edit: true + envKey: PANEL_APP_PORT_S3_API + labelZh: S3 API 接口 + labelEn: S3 API + required: true + rule: paramPort + type: number + - default: 3901 + edit: true + envKey: PANEL_APP_PORT_RPC + labelZh: RPC 通信 + labelEn: RPC Communication + required: true + rule: paramPort + type: number + - default: 3902 + edit: true + envKey: PANEL_APP_PORT_S3_WEB + labelZh: S3 通讯端口 + labelEn: S3 Communication + required: true + rule: paramPort + type: number + - default: 3903 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: 管理 API + labelEn: Manage API + required: true + rule: paramPort + type: number diff --git a/apps/garage-hq-web/2.0.0/docker-compose.yml b/apps/garage-hq-web/2.0.0/docker-compose.yml new file mode 100644 index 000000000..50966ae94 --- /dev/null +++ b/apps/garage-hq-web/2.0.0/docker-compose.yml @@ -0,0 +1,38 @@ +networks: + 1panel-network: + external: true + +services: + garage: + image: dxflrs/garage:v2.0.0 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_S3_API}:3900 + - ${PANEL_APP_PORT_RPC}:3901 + - ${PANEL_APP_PORT_S3_WEB}:3902 + - ${PANEL_APP_PORT_API}:3903 + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${GARAGE_ROOT_PATH}/config/garage.toml:/etc/garage.toml + - ${GARAGE_ROOT_PATH}/meta:/var/lib/garage/meta + - ${GARAGE_ROOT_PATH}/data:/var/lib/garage/data + environment: + - TZ=Asia/Shanghai + garage-webui: + image: khairul169/garage-webui:1.0.9 + container_name: garage-webui + restart: unless-stopped + volumes: + - ${GARAGE_ROOT_PATH}/config/garage.toml:/etc/garage.toml + ports: + - ${PANEL_APP_PORT_HTTP}:3909 + environment: + API_BASE_URL: "http://garage:3903" + S3_ENDPOINT_URL: "http://garage:3900" diff --git a/apps/garage-hq-web/2.0.0/envs/default.env b/apps/garage-hq-web/2.0.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/apps/garage-hq-web/2.0.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/garage-hq-web/2.0.0/envs/global.env b/apps/garage-hq-web/2.0.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/apps/garage-hq-web/2.0.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/garage-hq-web/2.0.0/scripts/init.sh b/apps/garage-hq-web/2.0.0/scripts/init.sh new file mode 100644 index 000000000..88bb39b37 --- /dev/null +++ b/apps/garage-hq-web/2.0.0/scripts/init.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + # 检查 GARAGE_ROOT_PATH 是否存在 + if [ -z "${GARAGE_ROOT_PATH}" ]; then + echo "Error: GARAGE_ROOT_PATH is not set in .env." + exit 1 + fi + + # 创建 config 目录 + CONFIG_DIR="${GARAGE_ROOT_PATH}/config" + mkdir -p "${CONFIG_DIR}" + CONFIG_FILE="${CONFIG_DIR}/garage.toml" + + # 检查文件是否存在并包含 admin_token + if [ -f "${CONFIG_FILE}" ] && grep -q '^admin_token' "${CONFIG_FILE}"; then + echo "garage.toml already exists and contains admin_token. Skipping creation." + else + echo "Creating or updating garage.toml..." + + cat > "${CONFIG_FILE}" <> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/garage-hq-web/README.md b/apps/garage-hq-web/README.md new file mode 100644 index 000000000..0b64a162a --- /dev/null +++ b/apps/garage-hq-web/README.md @@ -0,0 +1,62 @@ +# Garage HQ + +Garage 是一种与 S3 兼容的分布式对象存储服务,专为中小规模的自托管而设计。 + +![Garage HQ](https://file.lifebus.top/imgs/garage-hq_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Garage 专为由运行在不同物理位置的节点组成的存储集群而设计,旨在轻松提供存储服务,该服务可在这些不同位置复制数据,即使某些服务器无法访问也能保持可用。Garage +还注重轻量级、易于操作以及对机器故障的高弹性。 + +## 安装说明 + +通过宿主机初始化: + +1. 通过 `docker ps` 命令查看正在运行的容器, 获取当前部署的容器名称 `CONTAINER ID` +2. 注册 `garage` 命令 + +```sh +alias garage="docker exec -ti /garage" +``` + +3. 查看集群状态 + +```sh +garage status +``` + +输出结果,获得集群 `ID`:3df3882525930828 + +```shell + +[root@mechrevmini ~]# garage status +2025-07-18T09:10:09.202519Z INFO garage_net::netapp: Connected to 127.0.0.1:3901, negotiating handshake... +2025-07-18T09:10:09.243660Z INFO garage_net::netapp: Connection established to 3df3882525930828 +==== HEALTHY NODES ==== +ID Hostname Address Tags Zone Capacity DataAvail Version +3df3882525930828 a2bc48d5c8ab 127.0.0.1:3901 NO ROLE ASSIGNED v2.0.0 +``` + +4. 创建节点 + +```sh +garage layout assign -z dc1 -c 1G + +## demo +garage layout assign -z dc1 -c 1G 3df3882525930828 +``` + +5. 将节点添加到集群 + +```sh +garage layout apply --version 1 +``` + +无论是集群部署,还是单节点部署,都需要初始化节点。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/garage-hq-web/data.yml b/apps/garage-hq-web/data.yml new file mode 100644 index 000000000..31b589b8a --- /dev/null +++ b/apps/garage-hq-web/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: garage-hq-web + name: Garage HQ + tags: + - Tool + - Local + shortDescZh: 专为自托管而定制的开源分布式对象存储服务 + shortDescEn: An open-source distributed object storage service tailored for self-hosting + type: website + crossVersionUpdate: true + limit: 0 + website: https://garagehq.deuxfleurs.fr/ + github: https://git.deuxfleurs.fr/Deuxfleurs/garage/ + document: https://garagehq.deuxfleurs.fr/ diff --git a/apps/garage-hq-web/logo.png b/apps/garage-hq-web/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..134032b4944b4c787a8432872c8ba8fc4d2acfa2 GIT binary patch literal 53472 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 ag8naw71IlXV?|H^0000 + + + diff --git a/apps/garage-hq/README.md b/apps/garage-hq/README.md index c4a605e11..0b64a162a 100644 --- a/apps/garage-hq/README.md +++ b/apps/garage-hq/README.md @@ -11,6 +11,52 @@ Garage 是一种与 S3 兼容的分布式对象存储服务,专为中小规模 Garage 专为由运行在不同物理位置的节点组成的存储集群而设计,旨在轻松提供存储服务,该服务可在这些不同位置复制数据,即使某些服务器无法访问也能保持可用。Garage 还注重轻量级、易于操作以及对机器故障的高弹性。 +## 安装说明 + +通过宿主机初始化: + +1. 通过 `docker ps` 命令查看正在运行的容器, 获取当前部署的容器名称 `CONTAINER ID` +2. 注册 `garage` 命令 + +```sh +alias garage="docker exec -ti /garage" +``` + +3. 查看集群状态 + +```sh +garage status +``` + +输出结果,获得集群 `ID`:3df3882525930828 + +```shell + +[root@mechrevmini ~]# garage status +2025-07-18T09:10:09.202519Z INFO garage_net::netapp: Connected to 127.0.0.1:3901, negotiating handshake... +2025-07-18T09:10:09.243660Z INFO garage_net::netapp: Connection established to 3df3882525930828 +==== HEALTHY NODES ==== +ID Hostname Address Tags Zone Capacity DataAvail Version +3df3882525930828 a2bc48d5c8ab 127.0.0.1:3901 NO ROLE ASSIGNED v2.0.0 +``` + +4. 创建节点 + +```sh +garage layout assign -z dc1 -c 1G + +## demo +garage layout assign -z dc1 -c 1G 3df3882525930828 +``` + +5. 将节点添加到集群 + +```sh +garage layout apply --version 1 +``` + +无论是集群部署,还是单节点部署,都需要初始化节点。 + --- ![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/garage-hq/data.yml b/apps/garage-hq/data.yml index 4561829f4..78fc4eef9 100644 --- a/apps/garage-hq/data.yml +++ b/apps/garage-hq/data.yml @@ -2,7 +2,7 @@ additionalProperties: key: garage-hq name: Garage HQ tags: - - WebSite + - Tool - Local shortDescZh: 专为自托管而定制的开源分布式对象存储服务 shortDescEn: An open-source distributed object storage service tailored for self-hosting