diff --git a/appstore/garage-hq-web/2.0.0/.env b/appstore/garage-hq-web/2.0.0/.env new file mode 100644 index 000000000..4acc5fa19 --- /dev/null +++ b/appstore/garage-hq-web/2.0.0/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +GARAGE_ROOT_PATH=/home/garage + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3909 + +# S3 API 接口 [必填] +PANEL_APP_PORT_S3_API=3900 + +# RPC 通信 [必填] +PANEL_APP_PORT_RPC=3901 + +# S3 通讯端口 [必填] +PANEL_APP_PORT_S3_WEB=3902 + +# 管理 API [必填] +PANEL_APP_PORT_API=3903 + diff --git a/appstore/garage-hq-web/2.0.0/data.yml b/appstore/garage-hq-web/2.0.0/data.yml new file mode 100644 index 000000000..73209afda --- /dev/null +++ b/appstore/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/appstore/garage-hq-web/2.0.0/docker-compose.yml b/appstore/garage-hq-web/2.0.0/docker-compose.yml new file mode 100644 index 000000000..e57c32a0f --- /dev/null +++ b/appstore/garage-hq-web/2.0.0/docker-compose.yml @@ -0,0 +1,39 @@ +networks: + 1panel-network: + external: true +services: + garage: + container_name: garage-hq-web + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: dxflrs/garage:v2.0.0 + labels: + createdBy: Apps + 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 + restart: always + 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 + garage-webui: + container_name: garage-hq-web-web + environment: + API_BASE_URL: http://garage:3903 + S3_ENDPOINT_URL: http://garage:3900 + image: khairul169/garage-webui:1.0.9 + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3909 + restart: always + volumes: + - ${GARAGE_ROOT_PATH}/config/garage.toml:/etc/garage.toml diff --git a/appstore/garage-hq-web/2.0.0/envs/default.env b/appstore/garage-hq-web/2.0.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/garage-hq-web/2.0.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/garage-hq-web/2.0.0/envs/global.env b/appstore/garage-hq-web/2.0.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/garage-hq-web/2.0.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/garage-hq-web/2.0.0/scripts/init.sh b/appstore/garage-hq-web/2.0.0/scripts/init.sh new file mode 100644 index 000000000..315e05b7a --- /dev/null +++ b/appstore/garage-hq-web/2.0.0/scripts/init.sh @@ -0,0 +1,76 @@ +#!/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/appstore/garage-hq-web/README.md b/appstore/garage-hq-web/README.md new file mode 100644 index 000000000..0b64a162a --- /dev/null +++ b/appstore/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/appstore/garage-hq-web/data.yml b/appstore/garage-hq-web/data.yml new file mode 100644 index 000000000..24d0197dc --- /dev/null +++ b/appstore/garage-hq-web/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: garage-hq-web + name: Garage HQ (WebUI版) + tags: + - WebSite + - Storage + - 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/appstore/garage-hq-web/logo.png b/appstore/garage-hq-web/logo.png new file mode 100644 index 000000000..134032b49 Binary files /dev/null and b/appstore/garage-hq-web/logo.png differ diff --git a/appstore/garage-hq-web/logo.svg b/appstore/garage-hq-web/logo.svg new file mode 100644 index 000000000..c2bf0dc98 --- /dev/null +++ b/appstore/garage-hq-web/logo.svg @@ -0,0 +1,8 @@ + + + + diff --git a/appstore/garage-hq/README.md b/appstore/garage-hq/README.md index c4a605e11..0b64a162a 100644 --- a/appstore/garage-hq/README.md +++ b/appstore/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/appstore/garage-hq/data.yml b/appstore/garage-hq/data.yml index 4561829f4..0ec445cff 100644 --- a/appstore/garage-hq/data.yml +++ b/appstore/garage-hq/data.yml @@ -2,7 +2,7 @@ additionalProperties: key: garage-hq name: Garage HQ tags: - - WebSite + - Storage - Local shortDescZh: 专为自托管而定制的开源分布式对象存储服务 shortDescEn: An open-source distributed object storage service tailored for self-hosting diff --git a/appstore/seaweedfs/3.94/config/prometheus.yml b/appstore/seaweedfs/3.94/config/prometheus.yml index 2f0ead441..7bdcab08f 100644 --- a/appstore/seaweedfs/3.94/config/prometheus.yml +++ b/appstore/seaweedfs/3.94/config/prometheus.yml @@ -7,8 +7,8 @@ scrape_configs: metrics_path: /metrics static_configs: - targets: - - 'prometheus:9090' - - 'master:9324' - - 'volume:9325' - - 'filer:9326' - - 's3:9327' \ No newline at end of file + - 'seaweedfs-prometheus:9090' + - 'seaweedfs-master:9324' + - 'seaweedfs-volume:9325' + - 'seaweedfs-filer:9326' + - 'seaweedfs-s3:9327' diff --git a/appstore/seaweedfs/3.94/docker-compose.yml b/appstore/seaweedfs/3.94/docker-compose.yml index 157af1a53..098be4e18 100644 --- a/appstore/seaweedfs/3.94/docker-compose.yml +++ b/appstore/seaweedfs/3.94/docker-compose.yml @@ -1,11 +1,10 @@ networks: 1panel-network: external: true - seaweedfs-network: - external: true + seaweedfs-network: null services: seaweedfs-filer: - command: filer -master="master:9333" -ip.bind=0.0.0.0 -metricsPort=9326 + command: filer -master="seaweedfs-master:9333" -ip.bind=0.0.0.0 -metricsPort=9326 container_name: seaweedfs-filer depends_on: - seaweedfs-master @@ -68,7 +67,7 @@ services: volumes: - ${SEAWEEDFS_ROOT_PATH}/prometheus:/etc/prometheus seaweedfs-s3: - command: s3 -filer="filer:8888" -ip.bind=0.0.0.0 -metricsPort=9327 + command: s3 -filer="seaweedfs-filer:8888" -ip.bind=0.0.0.0 -metricsPort=9327 container_name: seaweedfs depends_on: - seaweedfs-master @@ -93,7 +92,7 @@ services: - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} seaweedfs-volume: - command: volume -mserver="master:9333" -ip.bind=0.0.0.0 -port=8080 -metricsPort=9325 + command: volume -mserver="seaweedfs-master:9333" -ip.bind=0.0.0.0 -port=8080 -metricsPort=9325 container_name: seaweedfs-volume depends_on: - seaweedfs-master @@ -115,7 +114,7 @@ services: - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} seaweedfs-webdav: - command: webdav -filer="filer:8888" + command: webdav -filer="seaweedfs-filer:8888" container_name: seaweedfs-webdav depends_on: - seaweedfs-master diff --git a/appstore/seaweedfs/logo.png b/appstore/seaweedfs/logo.png index 2512e2b9c..74bfb12a0 100644 Binary files a/appstore/seaweedfs/logo.png and b/appstore/seaweedfs/logo.png differ diff --git a/dockge/garage-hq-web/.env b/dockge/garage-hq-web/.env new file mode 100644 index 000000000..4acc5fa19 --- /dev/null +++ b/dockge/garage-hq-web/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +GARAGE_ROOT_PATH=/home/garage + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3909 + +# S3 API 接口 [必填] +PANEL_APP_PORT_S3_API=3900 + +# RPC 通信 [必填] +PANEL_APP_PORT_RPC=3901 + +# S3 通讯端口 [必填] +PANEL_APP_PORT_S3_WEB=3902 + +# 管理 API [必填] +PANEL_APP_PORT_API=3903 + diff --git a/dockge/garage-hq-web/docker-compose.yml b/dockge/garage-hq-web/docker-compose.yml new file mode 100644 index 000000000..e57c32a0f --- /dev/null +++ b/dockge/garage-hq-web/docker-compose.yml @@ -0,0 +1,39 @@ +networks: + 1panel-network: + external: true +services: + garage: + container_name: garage-hq-web + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: dxflrs/garage:v2.0.0 + labels: + createdBy: Apps + 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 + restart: always + 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 + garage-webui: + container_name: garage-hq-web-web + environment: + API_BASE_URL: http://garage:3903 + S3_ENDPOINT_URL: http://garage:3900 + image: khairul169/garage-webui:1.0.9 + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3909 + restart: always + volumes: + - ${GARAGE_ROOT_PATH}/config/garage.toml:/etc/garage.toml diff --git a/dockge/garage-hq-web/envs/default.env b/dockge/garage-hq-web/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/dockge/garage-hq-web/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/garage-hq-web/envs/global.env b/dockge/garage-hq-web/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/dockge/garage-hq-web/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/seaweedfs/config/prometheus.yml b/dockge/seaweedfs/config/prometheus.yml index 2f0ead441..7bdcab08f 100644 --- a/dockge/seaweedfs/config/prometheus.yml +++ b/dockge/seaweedfs/config/prometheus.yml @@ -7,8 +7,8 @@ scrape_configs: metrics_path: /metrics static_configs: - targets: - - 'prometheus:9090' - - 'master:9324' - - 'volume:9325' - - 'filer:9326' - - 's3:9327' \ No newline at end of file + - 'seaweedfs-prometheus:9090' + - 'seaweedfs-master:9324' + - 'seaweedfs-volume:9325' + - 'seaweedfs-filer:9326' + - 'seaweedfs-s3:9327' diff --git a/dockge/seaweedfs/docker-compose.yml b/dockge/seaweedfs/docker-compose.yml index 157af1a53..098be4e18 100644 --- a/dockge/seaweedfs/docker-compose.yml +++ b/dockge/seaweedfs/docker-compose.yml @@ -1,11 +1,10 @@ networks: 1panel-network: external: true - seaweedfs-network: - external: true + seaweedfs-network: null services: seaweedfs-filer: - command: filer -master="master:9333" -ip.bind=0.0.0.0 -metricsPort=9326 + command: filer -master="seaweedfs-master:9333" -ip.bind=0.0.0.0 -metricsPort=9326 container_name: seaweedfs-filer depends_on: - seaweedfs-master @@ -68,7 +67,7 @@ services: volumes: - ${SEAWEEDFS_ROOT_PATH}/prometheus:/etc/prometheus seaweedfs-s3: - command: s3 -filer="filer:8888" -ip.bind=0.0.0.0 -metricsPort=9327 + command: s3 -filer="seaweedfs-filer:8888" -ip.bind=0.0.0.0 -metricsPort=9327 container_name: seaweedfs depends_on: - seaweedfs-master @@ -93,7 +92,7 @@ services: - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} seaweedfs-volume: - command: volume -mserver="master:9333" -ip.bind=0.0.0.0 -port=8080 -metricsPort=9325 + command: volume -mserver="seaweedfs-master:9333" -ip.bind=0.0.0.0 -port=8080 -metricsPort=9325 container_name: seaweedfs-volume depends_on: - seaweedfs-master @@ -115,7 +114,7 @@ services: - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} seaweedfs-webdav: - command: webdav -filer="filer:8888" + command: webdav -filer="seaweedfs-filer:8888" container_name: seaweedfs-webdav depends_on: - seaweedfs-master