Merge branch 'patch/add-apps' into localApps
|
|
@ -0,0 +1,67 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/archivebox"
|
||||
edit: true
|
||||
envKey: ARCHIVEBOX_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 8000
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "archivebox"
|
||||
edit: true
|
||||
envKey: ADMIN_USERNAME
|
||||
labelZh: 管理员用户名
|
||||
labelEn: Admin Username
|
||||
required: true
|
||||
type: text
|
||||
- default: "archivebox"
|
||||
edit: true
|
||||
envKey: ADMIN_PASSWORD
|
||||
labelZh: 管理员密码
|
||||
labelEn: Admin Password
|
||||
required: true
|
||||
type: password
|
||||
- default: "True"
|
||||
edit: true
|
||||
envKey: PUBLIC_INDEX
|
||||
labelZh: 是否公开快照列表
|
||||
labelEn: Whether to make the snapshot list public
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: 公开
|
||||
value: "True"
|
||||
- label: 私密
|
||||
value: "False"
|
||||
- default: "True"
|
||||
edit: true
|
||||
envKey: PUBLIC_SNAPSHOTS
|
||||
labelZh: 是否公开快照内容
|
||||
labelEn: Whether to make snapshot content public
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: 公开
|
||||
value: "True"
|
||||
- label: 私密
|
||||
value: "False"
|
||||
- default: "False"
|
||||
edit: true
|
||||
envKey: PUBLIC_ADD_VIEW
|
||||
labelZh: 是否允许匿名用户提交存档
|
||||
labelEn: Whether to allow anonymous users to submit archives
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: 允许
|
||||
value: "True"
|
||||
- label: 禁止
|
||||
value: "False"
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
archivebox:
|
||||
image: archivebox/archivebox:0.7.3
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8000
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${ARCHIVEBOX_ROOT_PATH}/data:/data
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- ALLOWED_HOSTS=*
|
||||
- CSRF_TRUSTED_ORIGINS=http://localhost:8000
|
||||
- SEARCH_BACKEND_ENGINE=sonic
|
||||
- SEARCH_BACKEND_HOST_NAME=archivebox-sonic
|
||||
- SEARCH_BACKEND_PASSWORD=${ADMIN_PASSWORD:-}
|
||||
|
||||
archivebox-sonic:
|
||||
image: archivebox/sonic:latest
|
||||
container_name: sonic-${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
expose:
|
||||
- 1491
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${ARCHIVEBOX_ROOT_PATH}/sonic:/var/lib/sonic/store
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- SEARCH_BACKEND_PASSWORD=${ADMIN_PASSWORD:-}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
ENV_FILE=.env
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/archivebox"
|
||||
edit: true
|
||||
envKey: ARCHIVEBOX_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 8000
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "archivebox"
|
||||
edit: true
|
||||
envKey: ADMIN_USERNAME
|
||||
labelZh: 管理员用户名
|
||||
labelEn: Admin Username
|
||||
required: true
|
||||
type: text
|
||||
- default: "archivebox"
|
||||
edit: true
|
||||
envKey: ADMIN_PASSWORD
|
||||
labelZh: 管理员密码
|
||||
labelEn: Admin Password
|
||||
required: true
|
||||
type: password
|
||||
- default: "True"
|
||||
edit: true
|
||||
envKey: PUBLIC_INDEX
|
||||
labelZh: 是否公开快照列表
|
||||
labelEn: Whether to make the snapshot list public
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: 公开
|
||||
value: "True"
|
||||
- label: 私密
|
||||
value: "False"
|
||||
- default: "True"
|
||||
edit: true
|
||||
envKey: PUBLIC_SNAPSHOTS
|
||||
labelZh: 是否公开快照内容
|
||||
labelEn: Whether to make snapshot content public
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: 公开
|
||||
value: "True"
|
||||
- label: 私密
|
||||
value: "False"
|
||||
- default: "False"
|
||||
edit: true
|
||||
envKey: PUBLIC_ADD_VIEW
|
||||
labelZh: 是否允许匿名用户提交存档
|
||||
labelEn: Whether to allow anonymous users to submit archives
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: 允许
|
||||
value: "True"
|
||||
- label: 禁止
|
||||
value: "False"
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
archivebox:
|
||||
image: archivebox/archivebox:0.8.5rc51
|
||||
depends_on:
|
||||
- archivebox-init
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8000
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${ARCHIVEBOX_ROOT_PATH}/data:/data
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- ALLOWED_HOSTS=*
|
||||
- CSRF_TRUSTED_ORIGINS=http://localhost:8000
|
||||
- SEARCH_BACKEND_ENGINE=sonic
|
||||
- SEARCH_BACKEND_HOST_NAME=archivebox-sonic
|
||||
- SEARCH_BACKEND_PASSWORD=${ADMIN_PASSWORD:-}
|
||||
|
||||
archivebox-init:
|
||||
image: archivebox/archivebox:0.8.5rc51
|
||||
container_name: init-${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
networks:
|
||||
- 1panel-network
|
||||
command: archivebox init
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${ARCHIVEBOX_ROOT_PATH}/data:/data
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- ALLOWED_HOSTS=*
|
||||
- CSRF_TRUSTED_ORIGINS=http://localhost:8000
|
||||
- SEARCH_BACKEND_ENGINE=sonic
|
||||
- SEARCH_BACKEND_HOST_NAME=archivebox-sonic
|
||||
- SEARCH_BACKEND_PASSWORD=${ADMIN_PASSWORD:-}
|
||||
|
||||
archivebox-sonic:
|
||||
image: archivebox/sonic:latest
|
||||
container_name: sonic-${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
expose:
|
||||
- 1491
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${ARCHIVEBOX_ROOT_PATH}/sonic:/var/lib/sonic/store
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- SEARCH_BACKEND_PASSWORD=${ADMIN_PASSWORD:-}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
ENV_FILE=.env
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
# ArchiveBox
|
||||
|
||||
开源自托管网页存档。支持 URL、浏览器历史记录、书签、Pocket、Pinboard 等,保存 HTML、JS、PDF、媒体等
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 简介
|
||||
|
||||
ArchiveBox 是一款自托管应用程序,可让您以多种格式保存网站内容。
|
||||
|
||||
我们的目标是让您的数据立即可用,并以其他程序可直接读取的格式保存。输出格式包括标准 HTML、PNG、PDF、TXT、JSON、WARC 和
|
||||
SQLite,保证在未来数十年内均可读取。ArchiveBox 还支持 CLI、REST API 和 Webhook,方便您与其他服务集成。
|
||||
|
||||
如果不进行积极的保护,互联网上的一切最终都会消失或退化。
|
||||
|
||||
ArchiveBox 是一款开源工具,可帮助组织和个人归档公共和私人网络内容,同时保留对数据的控制权。它可用于保存书签副本、保留法律案件证据、备份
|
||||
Facebook/Insta/Flickr 上的照片或 YouTube/Soundcloud 等媒体资源、保存研究论文等等。
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
|
@ -0,0 +1,14 @@
|
|||
additionalProperties:
|
||||
key: archivebox
|
||||
name: ArchiveBox
|
||||
tags:
|
||||
- WebSite
|
||||
- Local
|
||||
shortDescZh: 开源自托管网页存档
|
||||
shortDescEn: Self-hosted web page archiving
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://archivebox.io/
|
||||
github: https://github.com/ArchiveBox/ArchiveBox/
|
||||
document: https://github.com/ArchiveBox/ArchiveBox/
|
||||
|
After Width: | Height: | Size: 10 KiB |
|
|
@ -0,0 +1,78 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/astrbot-napcat"
|
||||
edit: true
|
||||
envKey: ASTRBOT_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 6185
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 6195
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_WECOM
|
||||
labelZh: 企业微信 WebHook
|
||||
labelEn: WeCom WebHook
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 11451
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_WECHAT
|
||||
labelZh: 个人微信 WebHook
|
||||
labelEn: WeChat WebHook
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 6199
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_QQ_WH
|
||||
labelZh: QQ WebHook
|
||||
labelEn: QQ WebHook
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 6196
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_QQ_API
|
||||
labelZh: QQ API
|
||||
labelEn: QQ API
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 6099
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_NAPCAT
|
||||
labelZh: NapCat 端口
|
||||
labelEn: NapCat port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "02:42:ac:11:00:02"
|
||||
edit: true
|
||||
envKey: NAPCAT_MAC_ADDRESS
|
||||
labelZh: NapCat 容器 MAC 地址
|
||||
labelEn: NapCat container MAC address
|
||||
required: true
|
||||
type: text
|
||||
- default: 1000
|
||||
edit: true
|
||||
envKey: NAPCAT_UID
|
||||
labelZh: NapCat 容器 UID
|
||||
labelEn: NapCat container UID
|
||||
required: true
|
||||
type: number
|
||||
- default: 1000
|
||||
edit: true
|
||||
envKey: NAPCAT_GID
|
||||
labelZh: NapCat 容器 GID
|
||||
labelEn: NapCat container GID
|
||||
required: true
|
||||
type: number
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
napcat:
|
||||
image: mlikiowa/napcat-docker:v4.8.98
|
||||
container_name: napcat-${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_NAPCAT}:6099
|
||||
mac_address: ${NAPCAT_MAC_ADDRESS:-02:42:ac:11:00:02}
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${ASTRBOT_ROOT_PATH}/data:/AstrBot/data
|
||||
- ${ASTRBOT_ROOT_PATH}/ntqq:/app/.config/QQ
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- MODE=astrbot
|
||||
- NAPCAT_UID=${NAPCAT_UID:-1000}
|
||||
- NAPCAT_GID=${NAPCAT_GID:-1000}
|
||||
astrbot:
|
||||
image: soulter/astrbot:v3.5.25
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:6185
|
||||
- ${PANEL_APP_PORT_QQ_WH}:6199
|
||||
- ${PANEL_APP_PORT_QQ_API}:6196
|
||||
- ${PANEL_APP_PORT_WECOM}:6195
|
||||
- ${PANEL_APP_PORT_WECHAT}:11451
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- ${ASTRBOT_ROOT_PATH}/data:/AstrBot/data
|
||||
- ${ASTRBOT_ROOT_PATH}/ntqq:/app/.config/QQ
|
||||
- ${ASTRBOT_ROOT_PATH}/napcat/config:/app/napcat/config
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
ENV_FILE=.env
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# AstrBot (集成NapCat)
|
||||
|
||||
AstrBot 是一个松耦合、异步、支持多消息平台部署、具有易用的插件系统和完善的大语言模型(LLM)接入功能的聊天机器人及开发框架。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 安装说明
|
||||
|
||||
> 默认用户名: `astrbot`
|
||||
>
|
||||
> 默认密码: `astrbot`
|
||||
|
||||
## 特性
|
||||
|
||||
### 大语言模型对话
|
||||
|
||||
支持各种大语言模型,包括 OpenAI API、Google Gemini、Llama、Deepseek、ChatGLM 等,支持接入本地部署的大模型,通过
|
||||
Ollama、LLMTuner。具有多轮对话、人格情境、多模态能力,支持图片理解、语音转文字(Whisper)。
|
||||
|
||||
### 多消息平台接入
|
||||
|
||||
支持接入 QQ(OneBot、QQ 官方机器人平台)、QQ
|
||||
频道、企业微信、微信公众号、飞书、Telegram、钉钉、Discord、KOOK、VoceChat。支持速率限制、白名单、关键词过滤、百度内容审核。
|
||||
|
||||
### Agent
|
||||
|
||||
原生支持部分 Agent 能力,如代码执行器、自然语言待办、网页搜索。对接 Dify 平台,便捷接入 Dify 智能助手、知识库和 Dify
|
||||
工作流。
|
||||
|
||||
### 插件扩展
|
||||
|
||||
深度优化的插件机制,支持开发插件扩展功能,极简开发。已支持安装多个插件。
|
||||
|
||||
### 可视化管理面板
|
||||
|
||||
支持可视化修改配置、插件管理、日志查看等功能,降低配置难度。集成 WebChat,可在面板上与大模型对话。
|
||||
|
||||
### 高稳定性、高模块化
|
||||
|
||||
基于事件总线和流水线的架构设计,高度模块化,低耦合。
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
|
@ -0,0 +1,14 @@
|
|||
additionalProperties:
|
||||
key: astrbot-napcat
|
||||
name: AstrBot (集成NapCat)
|
||||
tags:
|
||||
- WebSite
|
||||
- Local
|
||||
shortDescZh: 多平台大模型机器人基础设施
|
||||
shortDescEn: The Multi-Platform LLM Bot Infrastructure
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://astrbot.app/
|
||||
github: https://github.com/AstrBotDevs/AstrBot/
|
||||
document: https://astrbot.app/
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
|
@ -0,0 +1,49 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/astrbot"
|
||||
edit: true
|
||||
envKey: ASTRBOT_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 6185
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 6195
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_WECOM
|
||||
labelZh: 企业微信 WebHook
|
||||
labelEn: WeCom WebHook
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 11451
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_WECHAT
|
||||
labelZh: 个人微信 WebHook
|
||||
labelEn: WeChat WebHook
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 6199
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_QQ_WH
|
||||
labelZh: QQ WebHook
|
||||
labelEn: QQ WebHook
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 6196
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_QQ_API
|
||||
labelZh: QQ API
|
||||
labelEn: QQ API
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
astrbot:
|
||||
image: soulter/astrbot:v3.5.25
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:6185
|
||||
- ${PANEL_APP_PORT_QQ_WH}:6199
|
||||
- ${PANEL_APP_PORT_QQ_API}:6196
|
||||
- ${PANEL_APP_PORT_WECOM}:6195
|
||||
- ${PANEL_APP_PORT_WECHAT}:11451
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- ${ASTRBOT_ROOT_PATH}/data:/AstrBot/data
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
ENV_FILE=.env
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# AstrBot
|
||||
|
||||
AstrBot 是一个松耦合、异步、支持多消息平台部署、具有易用的插件系统和完善的大语言模型(LLM)接入功能的聊天机器人及开发框架。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 安装说明
|
||||
|
||||
> 默认用户名: `astrbot`
|
||||
>
|
||||
> 默认密码: `astrbot`
|
||||
|
||||
## 特性
|
||||
|
||||
### 大语言模型对话
|
||||
|
||||
支持各种大语言模型,包括 OpenAI API、Google Gemini、Llama、Deepseek、ChatGLM 等,支持接入本地部署的大模型,通过
|
||||
Ollama、LLMTuner。具有多轮对话、人格情境、多模态能力,支持图片理解、语音转文字(Whisper)。
|
||||
|
||||
### 多消息平台接入
|
||||
|
||||
支持接入 QQ(OneBot、QQ 官方机器人平台)、QQ
|
||||
频道、企业微信、微信公众号、飞书、Telegram、钉钉、Discord、KOOK、VoceChat。支持速率限制、白名单、关键词过滤、百度内容审核。
|
||||
|
||||
### Agent
|
||||
|
||||
原生支持部分 Agent 能力,如代码执行器、自然语言待办、网页搜索。对接 Dify 平台,便捷接入 Dify 智能助手、知识库和 Dify
|
||||
工作流。
|
||||
|
||||
### 插件扩展
|
||||
|
||||
深度优化的插件机制,支持开发插件扩展功能,极简开发。已支持安装多个插件。
|
||||
|
||||
### 可视化管理面板
|
||||
|
||||
支持可视化修改配置、插件管理、日志查看等功能,降低配置难度。集成 WebChat,可在面板上与大模型对话。
|
||||
|
||||
### 高稳定性、高模块化
|
||||
|
||||
基于事件总线和流水线的架构设计,高度模块化,低耦合。
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
|
@ -0,0 +1,14 @@
|
|||
additionalProperties:
|
||||
key: astrbot
|
||||
name: AstrBot
|
||||
tags:
|
||||
- WebSite
|
||||
- Local
|
||||
shortDescZh: 多平台大模型机器人基础设施
|
||||
shortDescEn: The Multi-Platform LLM Bot Infrastructure
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://astrbot.app/
|
||||
github: https://github.com/AstrBotDevs/AstrBot/
|
||||
document: https://astrbot.app/
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
|
@ -0,0 +1,8 @@
|
|||
# JWT配置
|
||||
JWT_SECRET=${JWT_SECRET}
|
||||
|
||||
# Telegram配置
|
||||
TELEGRAM_BASE_URL=https://t.me/s
|
||||
|
||||
# Telegram频道配置
|
||||
TELE_CHANNELS=[]
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/cloudsaver"
|
||||
edit: true
|
||||
envKey: CLOUDSAVER_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 8008
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: JWT_SECRET
|
||||
labelZh: JWT 密钥
|
||||
labelEn: JWT secret
|
||||
required: true
|
||||
type: text
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
cloudsaver:
|
||||
image: jiangrui1994/cloudsaver:0.6.1
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8008
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${CLOUDSAVER_ROOT_PATH}/data:/app/data
|
||||
- ${CLOUDSAVER_ROOT_PATH}/config:/app/config
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
healthcheck:
|
||||
test: >
|
||||
node -e "require('http').get('http://localhost:8008/health', res => { const allowed = [200, 204, 301, 302, 304]; process.exit(allowed.includes(res.statusCode) ? 0 : 1); }).on('error', () => process.exit(0));"
|
||||
interval: 30s
|
||||
timeout: 3s
|
||||
start_period: 5s
|
||||
retries: 3
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
ENV_FILE=.env
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
#!/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
|
||||
|
||||
# setup-2 copy env file
|
||||
CONFIG_DIR="$CLOUDSAVER_ROOT_PATH/config"
|
||||
mkdir -p "$CONFIG_DIR"
|
||||
|
||||
CONFIG_FILE="$CONFIG_DIR/env"
|
||||
cp ./config/env.example $CONFIG_FILE
|
||||
sed -i "s/JWT_SECRET=.*/JWT_SECRET=$JWT_SECRET/" $CONFIG_FILE
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
# CloudSaver
|
||||
|
||||
网盘资源搜索与转存工具,支持响应式布局,移动端与PC完美适配。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 安装说明
|
||||
|
||||
> 首次安装需要手动创建账户
|
||||
>
|
||||
> 默认注册码 (请及时修改默认注册码)
|
||||
>
|
||||
> 管理员:`230713`
|
||||
>
|
||||
> 普通用户:`9527`
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 🔍 多源资源搜索
|
||||
|
||||
+ 支持多个资源订阅源搜索
|
||||
+ 支持关键词搜索与资源链接解析
|
||||
+ 支持豆瓣热门榜单展示
|
||||
|
||||
### 💾 网盘资源转存
|
||||
|
||||
+ 支持115 网盘,夸克网盘,天翼网盘,123云盘一键转存
|
||||
+ 支持转存文件夹展示与选择
|
||||
|
||||
### 👥 多用户系统
|
||||
|
||||
+ 支持用户注册登录
|
||||
+ 支持管理员与普通用户权限区分
|
||||
|
||||
### 📱 响应式设计
|
||||
|
||||
+ 支持 PC 端与移动端自适应布局
|
||||
+ 针对不同设备优化的交互体验
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
|
@ -0,0 +1,14 @@
|
|||
additionalProperties:
|
||||
key: cloudsaver
|
||||
name: CloudSaver
|
||||
tags:
|
||||
- WebSite
|
||||
- Local
|
||||
shortDescZh: 网盘资源搜索与转存工具
|
||||
shortDescEn: Network disk resource search and transfer tool
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://github.com/jiangrui1994/CloudSaver/
|
||||
github: https://github.com/jiangrui1994/CloudSaver/
|
||||
document: https://github.com/jiangrui1994/CloudSaver/
|
||||
|
After Width: | Height: | Size: 248 KiB |
|
After Width: | Height: | Size: 282 KiB |
|
|
@ -0,0 +1,41 @@
|
|||
# Excalidraw
|
||||
|
||||
开源虚拟手绘风格白板。 协作和端到端加密。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 特性
|
||||
|
||||
💯 免费且开源。
|
||||
|
||||
🎨 无限的、基于画布的白板。
|
||||
|
||||
✍️手绘风格。
|
||||
|
||||
🌓 黑暗模式。
|
||||
|
||||
🏗️可定制。
|
||||
|
||||
📷 图像支持。
|
||||
|
||||
😀 形状库支持。
|
||||
|
||||
🌐 本地化(i18n)支持。
|
||||
|
||||
🖼️ 导出为 PNG、SVG 和剪贴板。
|
||||
|
||||
💾 开放格式 - 将图纸导出为 .excalidraw json 文件。
|
||||
|
||||
⚒️ 多种工具 - 矩形、圆形、菱形、箭头、线条、自由绘制、橡皮擦......
|
||||
|
||||
➡️ 箭头绑定和标记箭头。
|
||||
|
||||
🔙 撤消/重做。
|
||||
|
||||
🔍 支持缩放和平移。
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
|
@ -0,0 +1,15 @@
|
|||
additionalProperties:
|
||||
key: excalidraw
|
||||
name: Excalidraw
|
||||
tags:
|
||||
- WebSite
|
||||
- Tool
|
||||
- Local
|
||||
shortDescZh: 用于绘制手绘图表的虚拟白板
|
||||
shortDescEn: Virtual whiteboard for sketching hand-drawn like diagrams
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://excalidraw.com/
|
||||
github: https://github.com/excalidraw/excalidraw/
|
||||
document: https://excalidraw.com/
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: 8080
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
excalidraw:
|
||||
image: excalidraw/excalidraw:latest
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
stdin_open: true
|
||||
healthcheck:
|
||||
disable: true
|
||||
test: [ "CMD", "curl", "-f", "http://localhost" ]
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:80
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
ENV_FILE=.env
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
After Width: | Height: | Size: 14 KiB |
|
|
@ -0,0 +1,9 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
|
||||
<rect width="1000" height="1000" rx="200" ry="200" fill="#fff"/>
|
||||
<svg viewBox="0 0 107 101" xmlns="http://www.w3.org/2000/svg"
|
||||
xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2">
|
||||
<path style="fill:none" d="M24 17h121v121H24z" transform="matrix(.8843 0 0 .83471 -21.223 -14.19)"/>
|
||||
<path d="M119.81 105.98a.549.549 0 0 0-.53-.12c-4.19-6.19-9.52-12.06-14.68-17.73l-.85-.93c0-.11-.05-.21-.12-.3a.548.548 0 0 0-.34-.2l-.17-.18-.12-.09c-.15-.32-.53-.56-.95-.35-1.58.81-3 1.97-4.4 3.04-1.87 1.43-3.7 2.92-5.42 4.52-.7.65-1.39 1.33-1.97 2.09-.28.37-.07.72.27.87-1.22 1.2-2.45 2.45-3.68 3.74-.11.12-.17.28-.16.44.01.16.09.31.22.41l2.16 1.65s.01.03.03.04c3.09 3.05 8.51 7.28 14.25 11.76.85.67 1.71 1.34 2.57 2.01.39.47.76.94 1.12 1.4.19.25.55.3.8.11.13.1.26.21.39.31a.57.57 0 0 0 .8-.1c.07-.09.1-.2.11-.31.04 0 .07.03.1.03.15 0 .31-.06.42-.18l10.18-11.12a.56.56 0 0 0-.04-.8l.01-.01Zm-29.23-3.85c.07.09.14.17.21.25 1.16.98 2.4 2.04 3.66 3.12l-5.12-3.91s-.32-.22-.52-.36c-.11-.08-.21-.16-.31-.24l-.38-.32s.07-.07.1-.11l.35-.35c1.72-1.74 4.67-4.64 6.19-6.06-1.61 1.62-4.87 6.37-4.17 7.98h-.01Zm17.53 13.81-4.22-3.22c-1.65-1.71-3.43-3.4-5.24-5.03 2.28 1.76 4.23 3.25 4.52 3.51 2.21 1.97 2.11 1.61 3.63 2.91l1.83 1.33c-.18.16-.36.33-.53.49l.01.01Zm1.06.81-.08-.06c.16-.13.33-.25.49-.38l-.4.44h-.01ZM42.24 51.45c.14.72.27 1.43.4 2.11.69 3.7 1.33 7.03 2.55 9.56l.48 1.92c.19.73.46 1.64.71 1.83 2.85 2.52 7.22 6.28 11.89 9.82.21.16.5.15.7-.01.01.02.03.03.04.04.11.1.24.15.38.15.16 0 .31-.06.42-.19 5.98-6.65 10.43-12.12 13.6-16.7.2-.25.3-.54.29-.84.2-.24.41-.48.6-.68a.558.558 0 0 0-.1-.86.578.578 0 0 0-.17-.36c-1.39-1.34-2.42-2.31-3.46-3.28-1.84-1.72-3.74-3.5-7.77-7.51-.02-.02-.05-.04-.07-.06a.555.555 0 0 0-.22-.14c-1.11-.39-3.39-.78-6.26-1.28-4.22-.72-10-1.72-15.2-3.27h-.04v-.01s-.02 0-.03.02h-.01l.04-.02s-.31.01-.37.04c-.08.04-.14.09-.19.15-.05.06-.09.12-.47.2-.38.08.08 0 .11 0h-.11v.03c.07.34.05.58.16.97-.02.1.21 1.02.24 1.11l1.83 7.26h.03Zm30.95 6.54s-.03.04-.04.05l-.64-.71c.22.21.44.42.68.66Zm-7.09 9.39s-.07.08-.1.12l-.02-.02c.04-.03.08-.07.13-.1h-.01Zm-7.07 8.47Zm3.02-28.57c.35.35 1.74 1.65 2.06 1.97-1.45-.66-5.06-2.34-6.74-2.88 1.65.29 3.93.66 4.68.91Zm-19.18-2.77c.84 1.44 1.5 6.49 2.16 11.4-.37-1.58-.69-3.12-.99-4.6-.52-2.56-1-4.85-1.67-6.88.14.01.31.03.49.05 0 .01 0 .02.02.03h-.01Zm-.29-1.21c-.23-.02-.44-.04-.62-.05-.02-.04-.03-.08-.04-.12l.66.18v-.01Zm-2.22.45v-.02.02ZM118.9 42.57c.04-.23-1.1-1.24-.74-1.26.85-.04.86-1.35 0-1.31-1.13.06-2.27.32-3.37.53-1.98.37-3.95.78-5.92 1.21-4.39.94-8.77 1.93-13.1 3.11-1.36.37-2.86.7-4.11 1.36-.42.22-.4.67-.17.95-.09.05-.18.08-.28.09-.37.07-.74.13-1.11.19a.566.566 0 0 0-.39.86c-2.32 3.1-4.96 6.44-7.82 9.95-2.81 3.21-5.73 6.63-8.72 10.14-9.41 11.06-20.08 23.6-31.9 34.64-.23.21-.24.57-.03.8.05.06.12.1.19.13-.16.15-.32.3-.48.44-.1.09-.14.2-.16.32-.08.08-.16.17-.23.25-.21.23-.2.59.03.8.23.21.59.2.8-.03.04-.04.08-.09.12-.13a.84.84 0 0 1 1.22 0c.69.74 1.34 1.44 1.95 2.09l-1.38-1.15a.57.57 0 0 0-.8.07c-.2.24-.17.6.07.8l14.82 12.43c.11.09.24.13.37.13.15 0 .29-.06.4-.17l.36-.36a.56.56 0 0 0 .63-.12c20.09-20.18 36.27-35.43 54.8-49.06.17-.12.25-.32.23-.51a.57.57 0 0 0 .48-.39c3.42-10.46 4.08-19.72 4.28-24.27 0-.03.01-.05.02-.07.02-.05.03-.1.04-.14.03-.11.05-.19.05-.19.26-.78.17-1.53-.15-2.15v.02ZM82.98 58.94c.9-1.03 1.79-2.04 2.67-3.02-5.76 7.58-15.3 19.26-28.81 33.14 9.2-10.18 18.47-20.73 26.14-30.12Zm-32.55 52.81-.03-.03c.11.02.19.04.2.04a.47.47 0 0 0-.17 0v-.01Zm6.9 6.42-.05-.04.03-.03c.02 0 .03.02.04.02 0 .02-.02.03-.03.05h.01Zm8.36-7.21 1.38-1.44c.01.01.02.03.03.05-.47.46-.94.93-1.42 1.39h.01Zm2.24-2.21c.26-.3.56-.65.87-1.02.01-.01.02-.03.04-.04 3.29-3.39 6.68-6.82 10.18-10.25.02-.02.05-.04.07-.06.86-.66 1.82-1.39 2.72-2.08-4.52 4.32-9.11 8.78-13.88 13.46v-.01Zm21.65-55.88c-1.86 2.42-3.9 5.56-5.63 8.07-5.46 7.91-23.04 27.28-23.43 27.65-2.71 2.62-10.88 10.46-16.09 15.37-.14.13-.25.24-.34.35a.794.794 0 0 1 .03-1.13c24.82-23.4 39.88-42.89 46-51.38-.13.33-.24.69-.55 1.09l.01-.02Zm16.51 7.1-.01.02c0-.02-.02-.07.01-.02Zm-.91-5.13Zm-5.89 9.45c-2.26-1.31-3.32-3.27-2.71-5.25l.19-.66c.08-.19.17-.38.28-.57.59-.98 1.49-1.85 2.52-2.36.05-.02.1-.03.15-.04a.795.795 0 0 1-.04-.43c.05-.31.25-.58.66-.58.67 0 2.75.62 3.54 1.3.24.19.47.4.68.63.3.35.74.92.96 1.33.13.06.23.62.38.91.14.46.2.93.18 1.4 0 .02 0 .02.01.03-.03.07 0 .37-.04.4-.1.72-.36 1.43-.75 2.05-.04.05-.07.11-.11.16 0 .01-.02.02-.03.04-.3.43-.65.83-1.08 1.13-1.26.89-2.73 1.16-4.2.79a6.33 6.33 0 0 1-.57-.25l-.02-.03Zm16.27-1.63c-.49 2.05-1.09 4.19-1.8 6.38-.03.08-.03.16-.03.23-.1.01-.19.05-.27.11-4.44 3.26-8.73 6.62-12.98 10.11 3.67-3.32 7.39-6.62 11.23-9.95a6.409 6.409 0 0 0 2.11-3.74l.56-3.37.03-.1c.25-.71 1.34-.4 1.17.33h-.02Z"
|
||||
style="fill:#6965db;fill-rule:nonzero" transform="matrix(1 0 0 1 -26.41 -29.49)"/>
|
||||
</svg>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
|
|
@ -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
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
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: ${CONTAINER_NAME}-web
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
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"
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
ENV_FILE=.env
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
TZ=Asia/Shanghai
|
||||
|
|
@ -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}" <<EOF
|
||||
metadata_dir = "/tmp/meta"
|
||||
data_dir = "/tmp/data"
|
||||
db_engine = "sqlite"
|
||||
|
||||
replication_factor = 1
|
||||
|
||||
rpc_bind_addr = "[::]:3901"
|
||||
rpc_public_addr = "127.0.0.1:3901"
|
||||
rpc_secret = "$(openssl rand -hex 32)"
|
||||
|
||||
[s3_api]
|
||||
s3_region = "garage"
|
||||
api_bind_addr = "[::]:3900"
|
||||
root_domain = ".s3.garage.localhost"
|
||||
|
||||
[s3_web]
|
||||
bind_addr = "[::]:3902"
|
||||
root_domain = ".web.garage.localhost"
|
||||
index = "index.html"
|
||||
|
||||
[k2v_api]
|
||||
api_bind_addr = "[::]:3904"
|
||||
|
||||
[admin]
|
||||
api_bind_addr = "[::]:3903"
|
||||
admin_token = "$(openssl rand -base64 32)"
|
||||
metrics_token = "$(openssl rand -base64 32)"
|
||||
EOF
|
||||
|
||||
echo "garage.toml written to ${CONFIG_FILE}"
|
||||
fi
|
||||
|
||||
META_DIR="${GARAGE_ROOT_PATH}/meta"
|
||||
mkdir -p "${META_DIR}"
|
||||
DATA_DIR="${GARAGE_ROOT_PATH}/data"
|
||||
mkdir -p "${DATA_DIR}"
|
||||
chmod -R 777 "$CONFIG_DIR"
|
||||
chmod -R 777 "META_DIR"
|
||||
chmod -R 777 "DATA_DIR"
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
# Garage HQ
|
||||
|
||||
Garage 是一种与 S3 兼容的分布式对象存储服务,专为中小规模的自托管而设计。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 简介
|
||||
|
||||
Garage 专为由运行在不同物理位置的节点组成的存储集群而设计,旨在轻松提供存储服务,该服务可在这些不同位置复制数据,即使某些服务器无法访问也能保持可用。Garage
|
||||
还注重轻量级、易于操作以及对机器故障的高弹性。
|
||||
|
||||
## 安装说明
|
||||
|
||||
通过宿主机初始化:
|
||||
|
||||
1. 通过 `docker ps` 命令查看正在运行的容器, 获取当前部署的容器名称 `CONTAINER ID`
|
||||
2. 注册 `garage` 命令
|
||||
|
||||
```sh
|
||||
alias garage="docker exec -ti <container name> /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 <node_id>
|
||||
|
||||
## demo
|
||||
garage layout assign -z dc1 -c 1G 3df3882525930828
|
||||
```
|
||||
|
||||
5. 将节点添加到集群
|
||||
|
||||
```sh
|
||||
garage layout apply --version 1
|
||||
```
|
||||
|
||||
无论是集群部署,还是单节点部署,都需要初始化节点。
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
|
@ -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/
|
||||
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
|
@ -0,0 +1,41 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/garage"
|
||||
edit: true
|
||||
envKey: GARAGE_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 3902
|
||||
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: 3903
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_API
|
||||
labelZh: 管理 API
|
||||
labelEn: Manage API
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
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_HTTP}: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
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
ENV_FILE=.env
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
TZ=Asia/Shanghai
|
||||
|
|
@ -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}" <<EOF
|
||||
metadata_dir = "/tmp/meta"
|
||||
data_dir = "/tmp/data"
|
||||
db_engine = "sqlite"
|
||||
|
||||
replication_factor = 1
|
||||
|
||||
rpc_bind_addr = "[::]:3901"
|
||||
rpc_public_addr = "127.0.0.1:3901"
|
||||
rpc_secret = "$(openssl rand -hex 32)"
|
||||
|
||||
[s3_api]
|
||||
s3_region = "garage"
|
||||
api_bind_addr = "[::]:3900"
|
||||
root_domain = ".s3.garage.localhost"
|
||||
|
||||
[s3_web]
|
||||
bind_addr = "[::]:3902"
|
||||
root_domain = ".web.garage.localhost"
|
||||
index = "index.html"
|
||||
|
||||
[k2v_api]
|
||||
api_bind_addr = "[::]:3904"
|
||||
|
||||
[admin]
|
||||
api_bind_addr = "[::]:3903"
|
||||
admin_token = "$(openssl rand -base64 32)"
|
||||
metrics_token = "$(openssl rand -base64 32)"
|
||||
EOF
|
||||
|
||||
echo "garage.toml written to ${CONFIG_FILE}"
|
||||
fi
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
# Garage HQ
|
||||
|
||||
Garage 是一种与 S3 兼容的分布式对象存储服务,专为中小规模的自托管而设计。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 简介
|
||||
|
||||
Garage 专为由运行在不同物理位置的节点组成的存储集群而设计,旨在轻松提供存储服务,该服务可在这些不同位置复制数据,即使某些服务器无法访问也能保持可用。Garage
|
||||
还注重轻量级、易于操作以及对机器故障的高弹性。
|
||||
|
||||
## 安装说明
|
||||
|
||||
通过宿主机初始化:
|
||||
|
||||
1. 通过 `docker ps` 命令查看正在运行的容器, 获取当前部署的容器名称 `CONTAINER ID`
|
||||
2. 注册 `garage` 命令
|
||||
|
||||
```sh
|
||||
alias garage="docker exec -ti <container name> /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 <node_id>
|
||||
|
||||
## demo
|
||||
garage layout assign -z dc1 -c 1G 3df3882525930828
|
||||
```
|
||||
|
||||
5. 将节点添加到集群
|
||||
|
||||
```sh
|
||||
garage layout apply --version 1
|
||||
```
|
||||
|
||||
无论是集群部署,还是单节点部署,都需要初始化节点。
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
|
@ -0,0 +1,14 @@
|
|||
additionalProperties:
|
||||
key: garage-hq
|
||||
name: Garage HQ
|
||||
tags:
|
||||
- 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/
|
||||
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
|
@ -0,0 +1,70 @@
|
|||
# Kotatsu
|
||||
|
||||
口袋里的漫画
|
||||
|
||||
<img height="128px" src="https://file.lifebus.top/apps/kotatsu/logo.png" alt="Kotatsu" width="128px"/>
|
||||
|
||||

|
||||
|
||||
## 安装说明
|
||||
|
||||
### Kotatsu 同步服务器
|
||||
|
||||
Kotatsu 是一款适用于 Android 平台的免费开源漫画阅读器。它支持多种语言的在线漫画,并具备筛选和搜索功能、本地存储离线阅读、收藏、书签、新章节通知等功能。
|
||||
|
||||
如果您不想公开自部署的同步服务器,请在注册完成自己的设备后,将`允许新用户注册`改为禁止,重启即可。
|
||||
|
||||
### 初始化数据库
|
||||
|
||||
创建数据库后,请将应用目录 `config/database.sql` 数据库文件进行初始化。
|
||||
|
||||
## 简介
|
||||
|
||||
一款简单、方便的 Android 开源漫画阅读器,由社区提供,您可以比以往更轻松地找到和阅读您喜欢的漫画。
|
||||
|
||||
## 特性
|
||||
|
||||
### 大量来源
|
||||
|
||||
支持超过 1000 个来源
|
||||
|
||||
### 可定制的阅读器
|
||||
|
||||
通过不同的阅读器设置使阅读更加方便
|
||||
|
||||
### 支持追踪
|
||||
|
||||
支持 MyAnimeList、Anilist 和 Shikimori
|
||||
|
||||
### 智能搜索
|
||||
|
||||
快速轻松地搜索感兴趣的标题
|
||||
|
||||
### 强大的下载器
|
||||
|
||||
可以缓慢下载标题以避免出现源问题
|
||||
|
||||
### 同步
|
||||
|
||||
轻松在您的设备之间同步系列。
|
||||
|
||||
## 下载客户端
|
||||
|
||||
<div style="display: flex; justify-content: center; gap: 40px; text-align: center;">
|
||||
<div style="width: 256px; display: flex; flex-direction: column; align-items: center;">
|
||||
<img src="https://file.lifebus.top/imgs/badge/get-f-droid-badge.svg"
|
||||
alt="F-Droid"
|
||||
style="width: 256px; height: 80px; object-fit: contain;">
|
||||
<a href="https://f-droid.org/packages/org.koitharu.kotatsu/">F-Droid</a>
|
||||
</div>
|
||||
<div style="width: 256px; display: flex; flex-direction: column; align-items: center;">
|
||||
<img src="https://file.lifebus.top/imgs/badge/github-badge.svg"
|
||||
alt="GitHub"
|
||||
style="width: 256px; height: 80px; object-fit: contain;">
|
||||
<a href="https://github.com/KotatsuApp/Kotatsu/releases/latest/">GitHub Releases</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
|
@ -0,0 +1,14 @@
|
|||
additionalProperties:
|
||||
key: kotatsu
|
||||
name: Kotatsu
|
||||
tags:
|
||||
- WebSite
|
||||
- Local
|
||||
shortDescZh: 口袋里的漫画
|
||||
shortDescEn: Manga in your pocket
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://kotatsu.app/
|
||||
github: https://github.com/KotatsuApp/Kotatsu/
|
||||
document: https://kotatsu.app/
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
|
@ -0,0 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 1406.2 1406.2" style="enable-background:new 0 0 1406.2 1406.2;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#0058C9;}
|
||||
.st1{display:none;}
|
||||
.st2{display:inline;}
|
||||
</style>
|
||||
<path id="path" class="st0" d="M391.7,270.7c-51.6,18.6-96.2,88.4-117.9,183.6c-7.8,34.8-15.1,93.5-15.1,121.7v19.7l-23.3,36.6
|
||||
c-65,101.3-124.6,206.8-180.5,319.2C5.1,1051,0,1063.2,0,1080.9c0,7.8,2,18,4,22.2c6.6,12,22.2,24.4,39.7,31l16,6.2l651.1-0.2
|
||||
c633.1,0,651.1-0.4,661.2-5.3c32.6-16.9,43-51.7,26.2-88c-63.8-139-150.5-296.8-229.6-418.5l-19.1-29.5l-2.2-33.7
|
||||
c-8.7-129.4-36.1-208.6-92-266.5c-24.2-24.8-33.5-30.4-50.6-30.6c-23.9,0-39.9,10.9-75.6,52.1c-35.2,40.4-42.4,50.1-66.9,86.4
|
||||
c-12,17.7-27,38.3-33.2,45.5l-11.3,13.5h-117l-117-0.2L560.2,429C515,359.2,440.7,274.5,419.6,268.7
|
||||
C406.8,264.9,409,264.5,391.7,270.7z M466.2,666.4c8.9,6.2,11.3,11.8,14.4,37.7c4,30.6,7.7,34.8,27.5,32.4
|
||||
c18-2.2,32.6,3.6,40.8,16.6c16,25.9-11.5,80.2-50.6,99.3c-14,7.1-19.1,7.8-42.8,7.8c-22.8,0-28.8-1.1-39.4-6.7
|
||||
c-31.2-16.4-50.3-40.3-58.3-71.8c-4-16.6-4.2-21.7-1.1-36.3c4.2-21.1,11.5-35.2,24.8-50.1C404.8,669.5,449.1,654.4,466.2,666.4z
|
||||
M964,669c8.7,7.3,9.3,9.7,13.5,43.4c2.6,20.6,8.7,26.8,25.3,24.2c16-2.2,29.9,2.2,39.2,12.9c15.1,18.2,6.2,53.4-20.8,82.2
|
||||
c-21.7,23.1-35.2,28.4-69.2,28.8c-25.9,0-29.1-0.5-42.8-8.2c-20.2-11.3-38.4-29.9-47.7-49c-6.2-12.8-8.2-20.8-8.9-39.2
|
||||
c-0.9-21.1,0-25,7.7-41c14-30.4,35.5-49.2,65-57C945.2,660.2,954.7,661.1,964,669z"/>
|
||||
<g class="st1">
|
||||
<path class="st2" d="M1806.5,939.2V464h88.3v475.3L1806.5,939.2L1806.5,939.2z M1885.3,827.2l-4.8-104.5L2129.7,464h99.1
|
||||
l-207.1,220l-48.9,53.6L1885.3,827.2z M2137.8,939.2l-181.9-216.6l58.4-64.5L2241,939.2H2137.8L2137.8,939.2z"/>
|
||||
<path class="st2" d="M2440.6,944c-37.1,0-70.2-8-99.1-24.1c-29-16.1-51.8-38.1-68.6-66.2c-16.8-28.1-25.1-60-25.1-95.7
|
||||
c0-36.2,8.4-68.2,25.1-96.1c16.7-27.8,39.6-49.7,68.6-65.5s62-23.8,99.1-23.8c37.6,0,70.9,7.9,100.1,23.8
|
||||
c29.2,15.9,52.1,37.6,68.6,65.2c16.5,27.6,24.8,59.8,24.8,96.4c0,35.8-8.3,67.7-24.8,95.7c-16.5,28.1-39.4,50.1-68.6,66.2
|
||||
C2511.6,936,2478.2,944,2440.6,944z M2440.6,871.3c20.8,0,39.4-4.5,55.7-13.6c16.3-9,29.1-22.2,38.4-39.4
|
||||
c9.3-17.2,13.9-37.3,13.9-60.4c0-23.5-4.6-43.8-13.9-60.8c-9.3-17-22.1-30-38.4-39c-16.3-9-34.6-13.6-55-13.6
|
||||
c-20.8,0-39.3,4.5-55.3,13.6c-16.1,9-28.8,22.1-38.3,39c-9.5,17-14.3,37.2-14.3,60.8c0,23.1,4.8,43.2,14.3,60.4
|
||||
s22.3,30.3,38.3,39.4C2402,866.8,2420.3,871.3,2440.6,871.3z"/>
|
||||
<path class="st2" d="M2667.4,647.3v-67.9h241.7v67.9H2667.4z M2852.1,944c-39.8,0-70.6-10.3-92.3-30.9
|
||||
c-21.7-20.6-32.6-51-32.6-91.3V496.6h84.9v323.2c0,17.2,4.4,30.5,13.2,40.1c8.8,9.5,21.1,14.3,37,14.3c19,0,34.9-5,47.5-14.9
|
||||
l23.8,60.4c-9.9,8.2-22.2,14.3-36.7,18.3C2882.4,941.9,2867.4,944,2852.1,944z"/>
|
||||
<path class="st2" d="M3112.8,944c-27.2,0-50.9-4.6-71.3-13.9c-20.4-9.3-36.1-22.2-47.2-38.7c-11.1-16.5-16.6-35.2-16.6-56
|
||||
c0-20.4,4.9-38.7,14.6-55c9.7-16.3,25.7-29.2,47.9-38.7s51.6-14.3,88.3-14.3h105.2v56.3h-99.1c-29,0-48.4,4.7-58.4,13.9
|
||||
c-10,9.3-14.9,20.7-14.9,34.3c0,15.4,6.1,27.6,18.3,36.7c12.2,9.1,29.2,13.6,50.9,13.6c20.8,0,39.5-4.8,56-14.3
|
||||
s28.4-23.5,35.6-42.1l14.3,50.9c-8.1,21.3-22.7,37.8-43.8,49.6S3144.9,944,3112.8,944z M3226.8,939.2v-73.3l-4.8-15.6V722
|
||||
c0-24.9-7.5-44.2-22.4-58s-37.6-20.7-67.9-20.7c-20.4,0-40.4,3.2-60.1,9.5c-19.7,6.3-36.3,15.2-49.9,26.5l-33.3-61.8
|
||||
c19.4-14.9,42.6-26.1,69.6-33.6c26.9-7.5,54.9-11.2,83.8-11.2c52.5,0,93.1,12.6,121.9,37.7c28.7,25.1,43.1,63.9,43.1,116.4v212.5
|
||||
L3226.8,939.2L3226.8,939.2z"/>
|
||||
<path class="st2" d="M3367.4,647.3v-67.9h241.7v67.9H3367.4z M3552,944c-39.8,0-70.6-10.3-92.3-30.9c-21.7-20.6-32.6-51-32.6-91.3
|
||||
V496.6h84.9v323.2c0,17.2,4.4,30.5,13.2,40.1c8.8,9.5,21.1,14.3,37,14.3c19,0,34.9-5,47.5-14.9l23.8,60.4
|
||||
c-9.9,8.2-22.2,14.3-36.7,18.3C3582.3,941.9,3567.4,944,3552,944z"/>
|
||||
<path class="st2" d="M3815.5,944c-30.3,0-59.4-4-87.2-11.9s-49.9-17.5-66.2-28.9l32.6-64.5c16.3,10.4,35.8,19,58.4,25.8
|
||||
c22.6,6.8,45.3,10.2,67.9,10.2c26.7,0,46-3.6,58-10.9c12-7.2,18-17,18-29.2c0-10-4.1-17.5-12.2-22.8c-8.1-5.2-18.8-9.2-31.9-11.9
|
||||
c-13.1-2.7-27.7-5.2-43.8-7.5s-32.1-5.3-48.2-9.2c-16.1-3.8-30.7-9.5-43.8-17s-23.8-17.5-31.9-30.2c-8.1-12.7-12.2-29.4-12.2-50.2
|
||||
c0-23.1,6.6-43.1,19.7-60.1c13.1-17,31.6-30.1,55.3-39.4c23.8-9.3,51.9-13.9,84.5-13.9c24.4,0,49.1,2.7,74,8.1
|
||||
c24.9,5.4,45.5,13.1,61.8,23.1l-32.6,64.5c-17.2-10.4-34.5-17.5-51.9-21.4c-17.4-3.8-34.7-5.8-51.9-5.8c-25.8,0-44.9,3.9-57.4,11.5
|
||||
c-12.4,7.7-18.7,17.4-18.7,29.2c0,10.9,4.1,19,12.2,24.4c8.1,5.4,18.8,9.7,31.9,12.9c13.1,3.2,27.7,5.8,43.8,7.8s32,5.1,47.9,9.2
|
||||
c15.8,4.1,30.4,9.6,43.8,16.6c13.3,7,24.1,16.9,32.3,29.5c8.1,12.7,12.2,29.2,12.2,49.6c0,22.6-6.7,42.3-20,59.1
|
||||
c-13.4,16.8-32.3,29.8-56.7,39C3878.6,939.3,3849.4,944,3815.5,944z"/>
|
||||
<path class="st2" d="M4206.5,944c-30.8,0-57.9-5.8-81.5-17.3c-23.5-11.5-41.9-29.2-55-53s-19.7-53.7-19.7-90v-207h84.9v195.5
|
||||
c0,32.6,7.4,56.9,22.1,73s35.6,24.1,62.8,24.1c19.9,0,37.2-4.1,51.9-12.2c14.7-8.1,26.2-20.4,34.6-36.7s12.6-36.4,12.6-60.4V576.7
|
||||
h84.9v362.5h-80.8v-97.8l14.3,29.9c-12.2,23.5-30.1,41.5-53.6,54C4260.4,937.8,4234.6,944,4206.5,944z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
|
|
@ -0,0 +1,134 @@
|
|||
drop table if exists favourites;
|
||||
|
||||
drop table if exists categories;
|
||||
|
||||
drop table if exists history;
|
||||
|
||||
drop table if exists manga_tags;
|
||||
|
||||
drop table if exists manga;
|
||||
|
||||
drop table if exists tags;
|
||||
|
||||
drop table if exists users;
|
||||
|
||||
create table manga
|
||||
(
|
||||
id bigint not null,
|
||||
title varchar(84) not null,
|
||||
alt_title varchar(84) null,
|
||||
url varchar(255) not null,
|
||||
public_url varchar(255) not null,
|
||||
rating float not null,
|
||||
content_rating char(12) null,
|
||||
cover_url varchar(255) not null,
|
||||
large_cover_url varchar(255) null,
|
||||
state char(12) null,
|
||||
author varchar(64) null,
|
||||
source varchar(32) not null,
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
create table tags
|
||||
(
|
||||
id bigint not null,
|
||||
title varchar(64) not null,
|
||||
`key` varchar(120) not null,
|
||||
source varchar(32) not null,
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
create table manga_tags
|
||||
(
|
||||
manga_id bigint not null,
|
||||
tag_id bigint not null,
|
||||
primary key (manga_id, tag_id),
|
||||
constraint manga_tags_ibfk_1
|
||||
foreign key (tag_id) references tags (id),
|
||||
constraint manga_tags_ibfk_2
|
||||
foreign key (manga_id) references manga (id)
|
||||
on delete cascade
|
||||
);
|
||||
|
||||
create index tag_id
|
||||
on manga_tags (tag_id);
|
||||
|
||||
create table users
|
||||
(
|
||||
id int auto_increment
|
||||
primary key,
|
||||
email varchar(120) not null,
|
||||
password char(32) not null,
|
||||
nickname varchar(84) null,
|
||||
favourites_sync_timestamp bigint null,
|
||||
history_sync_timestamp bigint null
|
||||
);
|
||||
|
||||
create table categories
|
||||
(
|
||||
id bigint not null,
|
||||
created_at bigint not null,
|
||||
sort_key int not null,
|
||||
title varchar(120) not null,
|
||||
`order` char(16) not null,
|
||||
user_id int not null,
|
||||
track tinyint(1) not null,
|
||||
show_in_lib tinyint(1) not null,
|
||||
deleted_at bigint not null,
|
||||
primary key (id, user_id),
|
||||
constraint categories_ibfk_1
|
||||
foreign key (user_id) references users (id)
|
||||
on delete cascade
|
||||
);
|
||||
|
||||
create index categories_id_index
|
||||
on categories (id);
|
||||
|
||||
create table favourites
|
||||
(
|
||||
manga_id bigint not null,
|
||||
category_id bigint not null,
|
||||
sort_key int not null,
|
||||
pinned tinyint(1) not null,
|
||||
created_at bigint not null,
|
||||
deleted_at bigint not null,
|
||||
user_id int not null,
|
||||
primary key (manga_id, category_id, user_id),
|
||||
constraint favourites_categories_id_pk
|
||||
foreign key (category_id, user_id) references categories (id, user_id),
|
||||
constraint favourites_ibfk_1
|
||||
foreign key (manga_id) references manga (id),
|
||||
constraint favourites_ibfk_2
|
||||
foreign key (user_id) references users (id)
|
||||
);
|
||||
|
||||
create index user_id
|
||||
on favourites (user_id);
|
||||
|
||||
create table history
|
||||
(
|
||||
manga_id bigint not null,
|
||||
created_at bigint not null,
|
||||
updated_at bigint not null,
|
||||
chapter_id bigint not null,
|
||||
page smallint not null,
|
||||
scroll double not null,
|
||||
percent double not null,
|
||||
chapters int not null,
|
||||
deleted_at bigint not null,
|
||||
user_id int not null,
|
||||
primary key (user_id, manga_id),
|
||||
constraint history_ibfk_1
|
||||
foreign key (manga_id) references manga (id),
|
||||
constraint history_ibfk_2
|
||||
foreign key (user_id) references users (id)
|
||||
on delete cascade
|
||||
);
|
||||
|
||||
create index manga_id
|
||||
on history (manga_id);
|
||||
|
||||
create unique index users_email_uindex
|
||||
on users (email);
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- child:
|
||||
default: ""
|
||||
envKey: PANEL_DB_HOST
|
||||
required: true
|
||||
type: service
|
||||
default: mysql
|
||||
edit: true
|
||||
envKey: PANEL_DB_TYPE
|
||||
labelZh: MySQL 服务 (前置检查)
|
||||
labelEn: Database Service (Pre-check)
|
||||
required: true
|
||||
type: apps
|
||||
values:
|
||||
- label: MySQL
|
||||
value: mysql
|
||||
- label: MariaDB
|
||||
value: mariadb
|
||||
- label: Percona
|
||||
value: percona
|
||||
- default: 8080
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: JWT_SECRET
|
||||
labelZh: JWT 密钥
|
||||
labelEn: JWT secret
|
||||
required: true
|
||||
type: password
|
||||
- default: "127.0.0.1"
|
||||
edit: true
|
||||
envKey: DATABASE_HOST
|
||||
labelZh: 数据库 主机
|
||||
labelEn: Database Host
|
||||
required: true
|
||||
type: text
|
||||
- default: 3306
|
||||
edit: true
|
||||
envKey: DATABASE_PORT
|
||||
labelZh: 数据库 端口
|
||||
labelEn: Database Port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "kotatsu-syncserver"
|
||||
edit: true
|
||||
envKey: DATABASE_NAME
|
||||
labelZh: 数据库 名称
|
||||
labelEn: Database Name
|
||||
required: true
|
||||
type: text
|
||||
- default: "kotatsu-syncserver"
|
||||
edit: true
|
||||
envKey: DATABASE_USER
|
||||
labelZh: 数据库 用户名
|
||||
labelEn: Database Username
|
||||
required: true
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: DATABASE_PASSWORD
|
||||
labelZh: 数据库 密码
|
||||
labelEn: Database Password
|
||||
required: true
|
||||
type: password
|
||||
- default: "true"
|
||||
edit: true
|
||||
envKey: ALLOW_NEW_REGISTER
|
||||
labelZh: 允许新用户注册
|
||||
labelEn: Allow new users to register
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: 开放注册
|
||||
value: "true"
|
||||
- label: 禁止注册
|
||||
value: "false"
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
kotatsu-syncserver:
|
||||
image: qyg2297248353/kotatsu-syncserver:v20250725
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8080
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
ENV_FILE=.env
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
||||
|
||||
echo "Check Finish."
|
||||
|
||||
else
|
||||
echo "Error: .env file not found."
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/kvrocks"
|
||||
edit: true
|
||||
envKey: KVROCKS_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 6666
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: 服务端口
|
||||
labelEn: Service port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
kvrocks:
|
||||
image: apache/kvrocks:2.13.0
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:6666
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${KVROCKS_ROOT_PATH}/data:/kvrocks_data
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
ENV_FILE=.env
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# copyright© 2024 XinJiang Ms Studio
|
||||
TZ=Asia/Shanghai
|
||||