mirror of
https://github.com/arch3rPro/1Panel-Appstore.git
synced 2026-04-25 14:57:12 +08:00
Compare commits
74 Commits
d31e124a8e
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e552afe2d3 | ||
|
|
3090268604 | ||
|
|
6400008e82 | ||
|
|
ee2f6c8605 | ||
|
|
b9dfae8c75 | ||
|
|
05e76e8aad | ||
|
|
01872b80dc | ||
|
|
ce660b2674 | ||
|
|
b8cffca85a | ||
|
|
c727f469fe | ||
|
|
315c2702b3 | ||
|
|
baff3af503 | ||
|
|
4d179b5275 | ||
|
|
92cecbebf4 | ||
|
|
9bc82a9fee | ||
|
|
ee7a3a1a24 | ||
|
|
23c402d7fd | ||
|
|
7e582f3896 | ||
|
|
7421a40ddb | ||
|
|
dfcf4aa745 | ||
|
|
c6fa8b74bb | ||
|
|
ab3c9ea63c | ||
|
|
b6576cd3ca | ||
|
|
b6a9a9d273 | ||
|
|
88a70bec66 | ||
|
|
43cb937fd2 | ||
|
|
31fcd4a15a | ||
|
|
fd25e05caa | ||
|
|
f9b736dbd8 | ||
|
|
23a6c7bf74 | ||
|
|
e2cd5d3904 | ||
|
|
f7b6aeed6d | ||
|
|
3e79a5dacc | ||
|
|
7b716a26d2 | ||
|
|
cae5ffea9a | ||
|
|
0b1bd19c46 | ||
|
|
d2e91a3855 | ||
|
|
9ae8765b96 | ||
|
|
93ce704a09 | ||
|
|
525ad929cd | ||
|
|
fbc6b98620 | ||
|
|
17b1335dd2 | ||
|
|
ba965e0f5e | ||
|
|
6b8dcd9108 | ||
|
|
27196c9434 | ||
|
|
e565917766 | ||
|
|
e82c63d187 | ||
|
|
11a6cfb307 | ||
|
|
ed6546b479 | ||
|
|
4dbe06b157 | ||
|
|
e8822d711a | ||
|
|
365e7c710a | ||
|
|
3a3123cf99 | ||
|
|
3af85df816 | ||
|
|
01c003495d | ||
|
|
3df51564ef | ||
|
|
9f19223ab7 | ||
|
|
e247555ec3 | ||
|
|
ddb4652d65 | ||
|
|
710a218489 | ||
|
|
f18bb659fd | ||
|
|
300b4fd8da | ||
|
|
b0b24b0adc | ||
|
|
b3959314d1 | ||
|
|
ec095eba5d | ||
|
|
e44146ebf6 | ||
|
|
a1a8e77b3a | ||
|
|
253b0d2005 | ||
|
|
af89dd30a7 | ||
|
|
6ad7b05160 | ||
|
|
354fb12eba | ||
|
|
a3be1dac39 | ||
|
|
8e5b454640 | ||
|
|
8c0e79a720 |
32
README.md
32
README.md
@@ -246,7 +246,7 @@ docker run -d --name=nginx -p 80:80 nginx:latest
|
|||||||
|
|
||||||
🚀 免费的GPT-4和其他大语言模型API接口
|
🚀 免费的GPT-4和其他大语言模型API接口
|
||||||
|
|
||||||
<kbd>7.4.7-slim</kbd> • [官网链接](https://github.com/xtekky/gpt4free)
|
<kbd>7.5.0-slim</kbd> • [官网链接](https://github.com/xtekky/gpt4free)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -289,7 +289,7 @@ docker run -d --name=nginx -p 80:80 nginx:latest
|
|||||||
|
|
||||||
轻量级文档管理系统,支持多人协作编辑与版本控制
|
轻量级文档管理系统,支持多人协作编辑与版本控制
|
||||||
|
|
||||||
<kbd>0.71.1</kbd> • [官网链接](https://github.com/docmost/docmost)
|
<kbd>0.80.0</kbd> • [官网链接](https://github.com/docmost/docmost)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -354,7 +354,7 @@ docker run -d --name=nginx -p 80:80 nginx:latest
|
|||||||
|
|
||||||
自托管协作书签管理工具,支持网页归档和团队协作
|
自托管协作书签管理工具,支持网页归档和团队协作
|
||||||
|
|
||||||
<kbd>2.14.0</kbd> • [官网链接](https://github.com/linkwarden/linkwarden)
|
<kbd>2.14.1</kbd> • [官网链接](https://github.com/linkwarden/linkwarden)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -383,7 +383,7 @@ docker run -d --name=nginx -p 80:80 nginx:latest
|
|||||||
|
|
||||||
开源自托管个人笔记工具,支持AI增强笔记检索
|
开源自托管个人笔记工具,支持AI增强笔记检索
|
||||||
|
|
||||||
<kbd>1.8.6</kbd> • [官网链接](https://github.com/blinko-space/blinko)
|
<kbd>1.8.7</kbd> • [官网链接](https://github.com/blinko-space/blinko)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -424,7 +424,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
开源Airtable替代品,将任何数据库转换为智能电子表格
|
开源Airtable替代品,将任何数据库转换为智能电子表格
|
||||||
|
|
||||||
<kbd>0.301.5</kbd> • [官网链接](https://github.com/nocodb/nocodb)
|
<kbd>2026.04.3</kbd> • [官网链接](https://github.com/nocodb/nocodb)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -455,7 +455,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
🌐 简单安全去中心化的内网穿透 VPN 组网方案
|
🌐 简单安全去中心化的内网穿透 VPN 组网方案
|
||||||
|
|
||||||
<kbd>2.6.0</kbd> • [官网链接](https://github.com/EasyTier/Easytier)
|
<kbd>2.6.1</kbd> • [官网链接](https://github.com/EasyTier/Easytier)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -496,7 +496,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
🛡️ 简单好用的Web应用防火墙(WAF)
|
🛡️ 简单好用的Web应用防火墙(WAF)
|
||||||
|
|
||||||
<kbd>9.3.3</kbd> • [官网链接](https://github.com/chaitin/SafeLine)
|
<kbd>9.3.6</kbd> • [官网链接](https://github.com/chaitin/SafeLine)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
@@ -565,7 +565,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
🚀 强大的AI提示词优化工具,支持多种主流大语言模型
|
🚀 强大的AI提示词优化工具,支持多种主流大语言模型
|
||||||
|
|
||||||
<kbd>2.9.2</kbd> • [官网链接](https://github.com/arch3rPro/Prompt-Optimizer)
|
<kbd>2.9.4</kbd> • [官网链接](https://github.com/arch3rPro/Prompt-Optimizer)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -582,7 +582,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
🍥 新一代大模型网关与AI资产管理系统,支持多种模型统一调用
|
🍥 新一代大模型网关与AI资产管理系统,支持多种模型统一调用
|
||||||
|
|
||||||
<kbd>0.12.3</kbd> • [官网链接](https://docs.newapi.pro/)
|
<kbd>0.13.1-allinone</kbd> • [官网链接](https://docs.newapi.pro/)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -623,7 +623,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
🔮 开源可视化AI工作流构建平台,拖拽式设计LLM应用
|
🔮 开源可视化AI工作流构建平台,拖拽式设计LLM应用
|
||||||
|
|
||||||
<kbd>3.1.1</kbd> • [官网链接](https://github.com/FlowiseAI/Flowise)
|
<kbd>3.1.2</kbd> • [官网链接](https://github.com/FlowiseAI/Flowise)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -635,7 +635,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
🔍 模型上下文协议调试工具,支持MCP服务器测试与开发
|
🔍 模型上下文协议调试工具,支持MCP服务器测试与开发
|
||||||
|
|
||||||
<kbd>0.21.1</kbd> • [官网链接](https://github.com/modelcontextprotocol/inspector)
|
<kbd>0.21.2</kbd> • [官网链接](https://github.com/modelcontextprotocol/inspector)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -705,7 +705,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
🔮 强大的AI应用构建平台,可视化设计AI驱动的工作流和代理
|
🔮 强大的AI应用构建平台,可视化设计AI驱动的工作流和代理
|
||||||
|
|
||||||
<kbd>1.8.4</kbd> • [官网链接](https://langflow.org/)
|
<kbd>1.9.1</kbd> • [官网链接](https://langflow.org/)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -729,7 +729,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
🔄 n8n汉化版,具有原生AI能力的Fair-code工作流自动化平台
|
🔄 n8n汉化版,具有原生AI能力的Fair-code工作流自动化平台
|
||||||
|
|
||||||
<kbd>2.16.0</kbd> • [官网链接](https://n8n.io/)
|
<kbd>2.18.3</kbd> • [官网链接](https://n8n.io/)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -746,7 +746,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
🤖 AI驱动的图表创建工具
|
🤖 AI驱动的图表创建工具
|
||||||
|
|
||||||
<kbd>0.4.13</kbd> • [官网链接](https://next-ai-drawio.jiang.jp/)
|
<kbd>0.4.15</kbd> • [官网链接](https://next-ai-drawio.jiang.jp/)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -787,7 +787,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
🔗 CLIProxyAPI Plus 代理API服务
|
🔗 CLIProxyAPI Plus 代理API服务
|
||||||
|
|
||||||
<kbd>6.9.9-0</kbd> • [官网链接](https://github.com/router-for-me/CLIProxyAPIPlus)
|
<kbd>6.9.28-0</kbd> • [官网链接](https://github.com/router-for-me/CLIProxyAPIPlus)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
@@ -984,7 +984,7 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数
|
|||||||
|
|
||||||
📊 开源 all-in-one 数据洞察中心,集成网站分析、服务监控、服务器状态监控
|
📊 开源 all-in-one 数据洞察中心,集成网站分析、服务监控、服务器状态监控
|
||||||
|
|
||||||
<kbd>1.31.20</kbd> • [官网链接](https://tianji.msgbyte.com/)
|
<kbd>1.31.22</kbd> • [官网链接](https://tianji.msgbyte.com/)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td width="33%" align="center">
|
<td width="33%" align="center">
|
||||||
|
|||||||
28
apps/axonhub/0.9.37/data.yml
Normal file
28
apps/axonhub/0.9.37/data.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
additionalProperties:
|
||||||
|
formFields:
|
||||||
|
- default: 8090
|
||||||
|
edit: true
|
||||||
|
envKey: PANEL_APP_PORT_HTTP
|
||||||
|
labelEn: Web Port
|
||||||
|
labelZh: Web端口
|
||||||
|
required: true
|
||||||
|
rule: paramPort
|
||||||
|
type: number
|
||||||
|
label:
|
||||||
|
en: Web Port
|
||||||
|
zh: Web端口
|
||||||
|
ja: Webポート
|
||||||
|
ko: Web 포트
|
||||||
|
- default: ""
|
||||||
|
edit: true
|
||||||
|
envKey: AXONHUB_DB_PASSWORD
|
||||||
|
labelEn: Database Password
|
||||||
|
labelZh: 数据库密码
|
||||||
|
required: false
|
||||||
|
rule: paramComplexity
|
||||||
|
type: password
|
||||||
|
label:
|
||||||
|
en: Database Password
|
||||||
|
zh: 数据库密码
|
||||||
|
ja: データベースパスワード
|
||||||
|
ko: 데이터베이스 비밀번호
|
||||||
20
apps/axonhub/0.9.37/docker-compose.yml
Normal file
20
apps/axonhub/0.9.37/docker-compose.yml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
services:
|
||||||
|
axonhub:
|
||||||
|
image: looplj/axonhub:v0.9.37
|
||||||
|
container_name: ${CONTAINER_NAME}
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- 1panel-network
|
||||||
|
ports:
|
||||||
|
- ${PANEL_APP_PORT_HTTP}:8090
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
- AXONHUB_DB_DIALECT=sqlite3
|
||||||
|
- AXONHUB_DB_DSN=file:/data/axonhub.db?cache=shared&_fk=1&pragma=journal_mode(WAL)
|
||||||
|
labels:
|
||||||
|
createdBy: Apps
|
||||||
|
networks:
|
||||||
|
1panel-network:
|
||||||
|
external: true
|
||||||
79
apps/axonhub/README.md
Normal file
79
apps/axonhub/README.md
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# AxonHub
|
||||||
|
|
||||||
|
一站式AI开发平台 - 统一API网关,支持多种LLM提供商。
|
||||||
|
|
||||||
|
## 功能特点
|
||||||
|
|
||||||
|
- 🔄 **任意SDK调用任意模型** - 使用OpenAI SDK调用Claude,或使用Anthropic SDK调用GPT,零代码修改
|
||||||
|
- 🔍 **完整请求追踪** - 线程感知的可观测性,完整的请求时间线,快速调试
|
||||||
|
- 🔐 **企业级RBAC** - 细粒度访问控制、使用配额和数据隔离
|
||||||
|
- ⚡ **智能负载均衡** - <100ms自动故障转移,始终路由到最健康的通道
|
||||||
|
- 💰 **实时成本追踪** - 每请求成本分解,输入、输出、缓存令牌全追踪
|
||||||
|
|
||||||
|
## 支持的LLM提供商
|
||||||
|
|
||||||
|
- OpenAI (GPT-4, GPT-4o, GPT-5等)
|
||||||
|
- Anthropic (Claude 3.5, Claude 3.0等)
|
||||||
|
- Zhipu AI (GLM-4.5, GLM-4.5-air等)
|
||||||
|
- Moonshot AI/Kimi (kimi-k2等)
|
||||||
|
- DeepSeek (DeepSeek-V3.1等)
|
||||||
|
- ByteDance Doubao (doubao-1.6等)
|
||||||
|
- Gemini (Gemini 2.5等)
|
||||||
|
- Fireworks (MiniMax-M2.5, GLM-5, Kimi K2.5等)
|
||||||
|
- Jina AI (Embeddings, Reranker等)
|
||||||
|
- OpenRouter (多种模型)
|
||||||
|
- ZAI (图像生成)
|
||||||
|
- AWS Bedrock (Claude on AWS)
|
||||||
|
- Google Cloud (Claude on GCP)
|
||||||
|
- NanoGPT (多种模型, 图像生成)
|
||||||
|
|
||||||
|
## 使用说明
|
||||||
|
|
||||||
|
### 首次访问
|
||||||
|
|
||||||
|
1. 访问 `http://<服务器IP>:8090`
|
||||||
|
2. 按照设置向导创建管理员账户(密码至少6位)
|
||||||
|
3. 登录后配置AI提供商的API密钥
|
||||||
|
4. 创建API密钥开始使用
|
||||||
|
|
||||||
|
### 默认端口
|
||||||
|
|
||||||
|
- Web界面: 8090
|
||||||
|
|
||||||
|
### 数据库配置
|
||||||
|
|
||||||
|
默认使用SQLite数据库,数据存储在 `./data` 目录。
|
||||||
|
|
||||||
|
如需使用PostgreSQL或MySQL,请参考官方文档配置环境变量:
|
||||||
|
- `AXONHUB_DB_DIALECT`: 数据库类型 (postgres/mysql/sqlite3)
|
||||||
|
- `AXONHUB_DB_DSN`: 数据库连接字符串
|
||||||
|
|
||||||
|
### 数据目录
|
||||||
|
|
||||||
|
应用数据存储在 `./data` 目录。
|
||||||
|
|
||||||
|
## 快速开始
|
||||||
|
|
||||||
|
### 使用OpenAI SDK调用Claude
|
||||||
|
|
||||||
|
```python
|
||||||
|
from openai import OpenAI
|
||||||
|
|
||||||
|
client = OpenAI(
|
||||||
|
base_url="http://localhost:8090/v1", # 指向AxonHub
|
||||||
|
api_key="your-axonhub-api-key" # 使用AxonHub API密钥
|
||||||
|
)
|
||||||
|
|
||||||
|
# 使用OpenAI SDK调用Claude!
|
||||||
|
response = client.chat.completions.create(
|
||||||
|
model="claude-3-5-sonnet", # 或 gpt-4, gemini-pro, deepseek-chat...
|
||||||
|
messages=[{"role": "user", "content": "Hello!"}]
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 相关链接
|
||||||
|
|
||||||
|
- 官方网站: https://github.com/looplj/axonhub
|
||||||
|
- GitHub: https://github.com/looplj/axonhub
|
||||||
|
- 文档: https://github.com/looplj/axonhub#readme
|
||||||
|
- Demo: https://axonhub.onrender.com (Email: demo@example.com, Password: 12345678)
|
||||||
29
apps/axonhub/data.yml
Normal file
29
apps/axonhub/data.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
name: AxonHub
|
||||||
|
tags:
|
||||||
|
- 开发工具
|
||||||
|
- AI工具
|
||||||
|
title: 一站式AI开发平台 - 统一API网关,支持多种LLM提供商
|
||||||
|
description: 一站式AI开发平台 - 统一API网关,支持多种LLM提供商
|
||||||
|
additionalProperties:
|
||||||
|
key: axonhub
|
||||||
|
name: AxonHub
|
||||||
|
tags:
|
||||||
|
- DevTool
|
||||||
|
- AI
|
||||||
|
shortDescZh: 一站式AI开发平台 - 统一API网关
|
||||||
|
shortDescEn: All-in-one AI Development Platform - Unified API Gateway
|
||||||
|
description:
|
||||||
|
en: AxonHub is an AI gateway that lets you switch between model providers without changing a single line of code. Use any SDK to call 100+ LLMs. Built-in failover, load balancing, cost control & end-to-end tracing.
|
||||||
|
zh: AxonHub是一个AI网关,让您无需修改任何代码即可在模型提供商之间切换。使用任何SDK调用100+个LLM。内置故障转移、负载均衡、成本控制和端到端追踪。
|
||||||
|
ja: AxonHubは、コードを1行も変更せずにモデルプロバイダー間を切り替えることができるAIゲートウェイです。任意のSDKを使用して100以上のLLMを呼び出します。フェイルオーバー、負荷分散、コスト制御、エンドツーエンドのトレースを内蔵。
|
||||||
|
ko: AxonHub는 코드를 한 줄도 변경하지 않고 모델 제공자 간에 전환할 수 있는 AI 게이트웨이입니다. 모든 SDK를 사용하여 100개 이상의 LLM을 호출합니다. 장애 조치, 로드 밸런싱, 비용 제어 및 엔드 투 엔드 추적이 내장되어 있습니다.
|
||||||
|
type: website
|
||||||
|
crossVersionUpdate: true
|
||||||
|
limit: 0
|
||||||
|
recommend: 0
|
||||||
|
website: https://github.com/looplj/axonhub
|
||||||
|
github: https://github.com/looplj/axonhub
|
||||||
|
document: https://github.com/looplj/axonhub#readme
|
||||||
|
architectures:
|
||||||
|
- amd64
|
||||||
|
- arm64
|
||||||
28
apps/axonhub/latest/data.yml
Normal file
28
apps/axonhub/latest/data.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
additionalProperties:
|
||||||
|
formFields:
|
||||||
|
- default: 8090
|
||||||
|
edit: true
|
||||||
|
envKey: PANEL_APP_PORT_HTTP
|
||||||
|
labelEn: Web Port
|
||||||
|
labelZh: Web端口
|
||||||
|
required: true
|
||||||
|
rule: paramPort
|
||||||
|
type: number
|
||||||
|
label:
|
||||||
|
en: Web Port
|
||||||
|
zh: Web端口
|
||||||
|
ja: Webポート
|
||||||
|
ko: Web 포트
|
||||||
|
- default: ""
|
||||||
|
edit: true
|
||||||
|
envKey: AXONHUB_DB_PASSWORD
|
||||||
|
labelEn: Database Password
|
||||||
|
labelZh: 数据库密码
|
||||||
|
required: false
|
||||||
|
rule: paramComplexity
|
||||||
|
type: password
|
||||||
|
label:
|
||||||
|
en: Database Password
|
||||||
|
zh: 数据库密码
|
||||||
|
ja: データベースパスワード
|
||||||
|
ko: 데이터베이스 비밀번호
|
||||||
20
apps/axonhub/latest/docker-compose.yml
Normal file
20
apps/axonhub/latest/docker-compose.yml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
services:
|
||||||
|
axonhub:
|
||||||
|
image: looplj/axonhub:latest
|
||||||
|
container_name: ${CONTAINER_NAME}
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- 1panel-network
|
||||||
|
ports:
|
||||||
|
- "${PANEL_APP_PORT_HTTP}:8090"
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
- AXONHUB_DB_DIALECT=sqlite3
|
||||||
|
- AXONHUB_DB_DSN=file:/data/axonhub.db?cache=shared&_fk=1&pragma=journal_mode(WAL)
|
||||||
|
labels:
|
||||||
|
createdBy: "Apps"
|
||||||
|
networks:
|
||||||
|
1panel-network:
|
||||||
|
external: true
|
||||||
BIN
apps/axonhub/logo.png
Normal file
BIN
apps/axonhub/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 67 KiB |
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
blinko:
|
blinko:
|
||||||
image: blinkospace/blinko:1.8.6
|
image: blinkospace/blinko:1.8.7
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
services:
|
services:
|
||||||
cliproxyapi-plus:
|
cliproxyapi-plus:
|
||||||
image: eceasy/cli-proxy-api-plus:v6.9.9-0
|
image: eceasy/cli-proxy-api-plus:v6.9.28-0
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- 1panel-network
|
- 1panel-network
|
||||||
ports:
|
ports:
|
||||||
- "${PANEL_APP_PORT_HTTP}:8317"
|
- ${PANEL_APP_PORT_HTTP}:8317
|
||||||
- "${PANEL_APP_PORT_PROXY}:8085"
|
- ${PANEL_APP_PORT_PROXY}:8085
|
||||||
- "${PANEL_APP_PORT_1455}:1455"
|
- ${PANEL_APP_PORT_1455}:1455
|
||||||
- "${PANEL_APP_PORT_54545}:54545"
|
- ${PANEL_APP_PORT_54545}:54545
|
||||||
- "${PANEL_APP_PORT_51121}:51121"
|
- ${PANEL_APP_PORT_51121}:51121
|
||||||
- "${PANEL_APP_PORT_11451}:11451"
|
- ${PANEL_APP_PORT_11451}:11451
|
||||||
volumes:
|
volumes:
|
||||||
- ./data/config.yaml:/CLIProxyAPI/config.yaml
|
- ./data/config.yaml:/CLIProxyAPI/config.yaml
|
||||||
- ./data/auths:/root/.cli-proxy-api
|
- ./data/auths:/root/.cli-proxy-api
|
||||||
@@ -19,8 +19,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- TZ=${TZ}
|
- TZ=${TZ}
|
||||||
labels:
|
labels:
|
||||||
createdBy: "Apps"
|
createdBy: Apps
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
1panel-network:
|
1panel-network:
|
||||||
external: true
|
external: true
|
||||||
29
apps/craft-agents/0.8.11/data.yml
Normal file
29
apps/craft-agents/0.8.11/data.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
additionalProperties:
|
||||||
|
formFields:
|
||||||
|
- default: 9100
|
||||||
|
edit: true
|
||||||
|
envKey: PANEL_APP_PORT_HTTP
|
||||||
|
labelEn: Web Port
|
||||||
|
labelZh: Web端口
|
||||||
|
required: true
|
||||||
|
rule: paramPort
|
||||||
|
type: number
|
||||||
|
label:
|
||||||
|
en: Web Port
|
||||||
|
zh: Web端口
|
||||||
|
ja: Webポート
|
||||||
|
ko: Web 포트
|
||||||
|
- default: "Craft-Agents-"
|
||||||
|
edit: true
|
||||||
|
envKey: CRAFT_SERVER_TOKEN
|
||||||
|
labelEn: Server Token
|
||||||
|
labelZh: 服务器令牌
|
||||||
|
random: true
|
||||||
|
required: true
|
||||||
|
rule: paramComplexity
|
||||||
|
type: password
|
||||||
|
label:
|
||||||
|
en: Server Token
|
||||||
|
zh: 服务器令牌
|
||||||
|
ja: サーバートークン
|
||||||
|
ko: 서버 토큰
|
||||||
28
apps/craft-agents/0.8.11/docker-compose.yml
Normal file
28
apps/craft-agents/0.8.11/docker-compose.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
services:
|
||||||
|
craft-agents:
|
||||||
|
image: ghcr.io/lukilabs/craft-agents-server:0.8.11
|
||||||
|
container_name: ${CONTAINER_NAME}
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- 1panel-network
|
||||||
|
ports:
|
||||||
|
- "${PANEL_APP_PORT_HTTP}:9100"
|
||||||
|
volumes:
|
||||||
|
- craft-agents-data:/home/craftagents/.craft-agent
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
- CRAFT_SERVER_TOKEN=${CRAFT_SERVER_TOKEN}
|
||||||
|
- CRAFT_RPC_HOST=0.0.0.0
|
||||||
|
command:
|
||||||
|
- bun
|
||||||
|
- run
|
||||||
|
- packages/server/src/index.ts
|
||||||
|
- --allow-insecure-bind
|
||||||
|
labels:
|
||||||
|
createdBy: "Apps"
|
||||||
|
volumes:
|
||||||
|
craft-agents-data:
|
||||||
|
driver: local
|
||||||
|
networks:
|
||||||
|
1panel-network:
|
||||||
|
external: true
|
||||||
226
apps/craft-agents/README.md
Normal file
226
apps/craft-agents/README.md
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
# Craft Agents
|
||||||
|
|
||||||
|
Craft Agents 是一个强大的 AI Agent 工作空间,支持多种 LLM 提供商和 MCP 集成。
|
||||||
|
|
||||||
|
## 功能特点
|
||||||
|
|
||||||
|
- **多 LLM 提供商支持**:支持 Anthropic、Google AI Studio、ChatGPT Plus、GitHub Copilot 等多种 AI 提供商
|
||||||
|
- **MCP 集成**:支持连接 MCP 服务器、REST API 和本地文件系统
|
||||||
|
- **多会话管理**:具有收件箱/归档功能,支持会话标记和状态工作流
|
||||||
|
- **权限模式**:三级权限系统(探索、询问编辑、自动),可自定义规则
|
||||||
|
- **动态状态系统**:可自定义会话工作流状态(待办、进行中、完成等)
|
||||||
|
- **自动化**:支持事件驱动的自动化,可基于标签变化、计划任务、工具使用等触发
|
||||||
|
- **无头服务器模式**:可作为远程服务器运行,桌面应用作为瘦客户端连接
|
||||||
|
- **Web UI**:内置 Web 界面,可通过浏览器访问和管理
|
||||||
|
|
||||||
|
## 使用说明
|
||||||
|
|
||||||
|
### 默认端口
|
||||||
|
|
||||||
|
- Web 界面/RPC 端口: 9100
|
||||||
|
|
||||||
|
### 配置说明
|
||||||
|
|
||||||
|
#### 必需参数
|
||||||
|
|
||||||
|
- **服务器令牌 (CRAFT_SERVER_TOKEN)**:用于客户端认证的 Bearer 令牌,系统会自动生成格式为 `Craft-Agents-<随机复杂密码>` 的安全令牌,您也可以自定义
|
||||||
|
|
||||||
|
#### 可选参数
|
||||||
|
|
||||||
|
- **Web 端口 (PANEL_APP_PORT_HTTP)**:Web界面访问端口,默认为 `9100`
|
||||||
|
|
||||||
|
#### 安全说明
|
||||||
|
|
||||||
|
⚠️ **重要提示**:本应用默认使用 `--allow-insecure-bind` 参数启动,允许在内网环境下使用非加密的 `ws://` 协议。这适用于以下场景:
|
||||||
|
|
||||||
|
- ✅ **内网环境**:应用运行在受信任的内网环境中
|
||||||
|
- ✅ **反向代理**:通过 Nginx/Caddy 等反向代理处理 TLS
|
||||||
|
- ❌ **公网直接暴露**:不推荐直接暴露到公网
|
||||||
|
|
||||||
|
**生产环境建议**:
|
||||||
|
- 使用反向代理(如 Nginx、Caddy)处理 TLS 加密
|
||||||
|
- 或在容器内配置 TLS 证书(设置环境变量 `CRAFT_RPC_TLS_CERT` 和 `CRAFT_RPC_TLS_KEY`),并移除 `--allow-insecure-bind` 参数
|
||||||
|
|
||||||
|
**数据存储**:应用数据存储在Docker命名卷中,由Docker自动管理权限,无需手动配置。
|
||||||
|
|
||||||
|
### 连接方式
|
||||||
|
|
||||||
|
#### 通过 Web UI 访问
|
||||||
|
|
||||||
|
部署后,通过浏览器访问 `http://<服务器IP>:9100`,使用设置的服务器令牌登录。
|
||||||
|
|
||||||
|
#### 通过桌面应用连接
|
||||||
|
|
||||||
|
在 Craft Agents 桌面应用中,配置远程工作空间:
|
||||||
|
- URL: `ws://<服务器IP>:9100` 或 `wss://<服务器IP>:9100`(启用 TLS 时)
|
||||||
|
- Token: 部署时设置的服务器令牌
|
||||||
|
|
||||||
|
### 数据目录
|
||||||
|
|
||||||
|
应用数据存储在Docker命名卷 `craft-agents-data` 中,映射到容器内的 `/home/craftagents/.craft-agent` 目录,包括:
|
||||||
|
- 配置文件
|
||||||
|
- 会话数据
|
||||||
|
- 工作空间设置
|
||||||
|
- 技能和源配置
|
||||||
|
|
||||||
|
**数据管理**:
|
||||||
|
- 数据卷由Docker自动管理,无需手动设置权限
|
||||||
|
- 数据会持久化保存,即使容器删除也不会丢失
|
||||||
|
- 可以通过 `docker volume inspect craft-agents-data` 查看数据位置
|
||||||
|
|
||||||
|
### 安全访问方式
|
||||||
|
|
||||||
|
根据官方文档,推荐以下几种安全访问方式:
|
||||||
|
|
||||||
|
#### 方式1:Tailscale(推荐)
|
||||||
|
|
||||||
|
Tailscale 创建设备间的私有网格网络,无需端口转发、证书或防火墙规则。
|
||||||
|
|
||||||
|
**优势**:
|
||||||
|
- ✅ 无需配置TLS证书
|
||||||
|
- ✅ 端到端加密
|
||||||
|
- ✅ 服务器只能从您的Tailscale网络访问
|
||||||
|
|
||||||
|
**配置方法**:
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
- CRAFT_RPC_HOST=100.x.y.z # Tailscale IP
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 方式2:反向代理(nginx, Caddy)
|
||||||
|
|
||||||
|
标准的生产部署方式,反向代理处理TLS终止和访问控制。
|
||||||
|
|
||||||
|
**Caddy 示例**(自动HTTPS):
|
||||||
|
```
|
||||||
|
craft.example.com {
|
||||||
|
reverse_proxy localhost:9100
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Nginx 示例**:
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 443 ssl;
|
||||||
|
server_name craft.example.com;
|
||||||
|
|
||||||
|
ssl_certificate /path/to/cert.pem;
|
||||||
|
ssl_certificate_key /path/to/key.pem;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:9100;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
使用反向代理时,应用绑定到 localhost:
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
- CRAFT_RPC_HOST=127.0.0.1
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 方式3:Cloudflare Tunnel
|
||||||
|
|
||||||
|
无需开放端口或管理证书,通过HTTPS暴露服务。
|
||||||
|
|
||||||
|
**快速隧道**(即时HTTPS URL):
|
||||||
|
```bash
|
||||||
|
cloudflared tunnel --url http://localhost:9100
|
||||||
|
```
|
||||||
|
|
||||||
|
会生成一个 `https://<random>.trycloudflare.com` URL。
|
||||||
|
|
||||||
|
**永久自定义域名**:
|
||||||
|
```bash
|
||||||
|
# 一次性设置
|
||||||
|
cloudflared tunnel login
|
||||||
|
cloudflared tunnel create craft-agents
|
||||||
|
cloudflared tunnel route dns craft-agents agents.yourdomain.com
|
||||||
|
|
||||||
|
# 运行隧道
|
||||||
|
cloudflared tunnel run --url http://localhost:9100 craft-agents
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 方式4:SSH隧道
|
||||||
|
|
||||||
|
快速临时访问,无需任何设置:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 在客户端:转发本地端口9100到远程服务器
|
||||||
|
ssh -L 9100:localhost:9100 user@your-server
|
||||||
|
```
|
||||||
|
|
||||||
|
然后从桌面应用或浏览器连接到 `ws://localhost:9100`。
|
||||||
|
|
||||||
|
#### 方式5:直接配置TLS证书
|
||||||
|
|
||||||
|
如需直接在应用中启用TLS,需要:
|
||||||
|
|
||||||
|
1. **生成证书**(参考官方文档):
|
||||||
|
```bash
|
||||||
|
# 使用官方脚本生成开发证书
|
||||||
|
./scripts/generate-dev-cert.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **修改 docker-compose.yml**:
|
||||||
|
```yaml
|
||||||
|
volumes:
|
||||||
|
- craft-agents-data:/home/craftagents/.craft-agent
|
||||||
|
- ./certs:/certs:ro # 挂载证书目录
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- CRAFT_SERVER_TOKEN=${CRAFT_SERVER_TOKEN}
|
||||||
|
- CRAFT_RPC_HOST=0.0.0.0
|
||||||
|
- CRAFT_RPC_TLS_CERT=/certs/cert.pem
|
||||||
|
- CRAFT_RPC_TLS_KEY=/certs/key.pem
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **移除 `--allow-insecure-bind` 参数**
|
||||||
|
|
||||||
|
#### 访问方式
|
||||||
|
|
||||||
|
- **启用TLS后**:
|
||||||
|
- Web UI: `https://192.168.123.201:9100`
|
||||||
|
- 桌面客户端: `wss://192.168.123.201:9100`
|
||||||
|
|
||||||
|
- **不启用TLS(仅内网测试)**:
|
||||||
|
- Web UI: `http://192.168.123.201:9100`
|
||||||
|
- 桌面客户端: 可能无法连接(浏览器API限制)
|
||||||
|
|
||||||
|
**推荐顺序**:
|
||||||
|
1. Tailscale(最简单安全)
|
||||||
|
2. 反向代理(标准生产方案)
|
||||||
|
3. Cloudflare Tunnel(无需端口转发)
|
||||||
|
4. SSH隧道(临时访问)
|
||||||
|
5. 直接TLS配置(不推荐)
|
||||||
|
|
||||||
|
## 支持的 LLM 提供商
|
||||||
|
|
||||||
|
### 直接连接
|
||||||
|
|
||||||
|
- **Anthropic**:API 密钥或 Claude Max/Pro OAuth
|
||||||
|
- **Google AI Studio**:API 密钥
|
||||||
|
- **ChatGPT Plus / Pro**:Codex OAuth
|
||||||
|
- **GitHub Copilot**:OAuth(设备代码)
|
||||||
|
|
||||||
|
### 第三方提供商
|
||||||
|
|
||||||
|
通过自定义端点支持:
|
||||||
|
- OpenRouter
|
||||||
|
- Vercel AI Gateway
|
||||||
|
- Ollama(本地模型)
|
||||||
|
- 其他 OpenAI 兼容端点
|
||||||
|
|
||||||
|
## 相关链接
|
||||||
|
|
||||||
|
- 官方网站: https://agents.craft.do
|
||||||
|
- GitHub: https://github.com/lukilabs/craft-agents-oss
|
||||||
|
- 文档: https://github.com/lukilabs/craft-agents-oss#readme
|
||||||
|
|
||||||
|
## 许可证
|
||||||
|
|
||||||
|
Apache License 2.0
|
||||||
31
apps/craft-agents/data.yml
Normal file
31
apps/craft-agents/data.yml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
name: Craft Agents
|
||||||
|
tags:
|
||||||
|
- 开发工具
|
||||||
|
- AI助手
|
||||||
|
title: AI Agent工作空间,支持多LLM提供商和MCP集成
|
||||||
|
description: AI Agent工作空间,支持多LLM提供商和MCP集成
|
||||||
|
additionalProperties:
|
||||||
|
key: craft-agents
|
||||||
|
name: Craft Agents
|
||||||
|
tags:
|
||||||
|
- DevTool
|
||||||
|
- AI
|
||||||
|
shortDescZh: AI Agent工作空间,支持多LLM提供商和MCP集成
|
||||||
|
shortDescEn: AI Agent workspace with multi-LLM provider support and MCP integration
|
||||||
|
type: website
|
||||||
|
crossVersionUpdate: true
|
||||||
|
limit: 0
|
||||||
|
recommend: 0
|
||||||
|
website: https://agents.craft.do
|
||||||
|
github: https://github.com/lukilabs/craft-agents-oss
|
||||||
|
document: https://github.com/lukilabs/craft-agents-oss#readme
|
||||||
|
architectures:
|
||||||
|
- amd64
|
||||||
|
- arm64
|
||||||
|
description:
|
||||||
|
en: Craft Agents is an AI agent workspace that supports multiple LLM providers (Anthropic, Google AI Studio, ChatGPT Plus, GitHub Copilot) and MCP integration. It features multi-session management, dynamic status workflow, and can run as a headless server.
|
||||||
|
zh: Craft Agents是一个AI Agent工作空间,支持多种LLM提供商(Anthropic、Google AI Studio、ChatGPT Plus、GitHub Copilot)和MCP集成。它具有多会话管理、动态状态工作流等功能,可以作为无头服务器运行。
|
||||||
|
zh-Hant: Craft Agents是一個AI Agent工作空間,支持多種LLM提供商(Anthropic、Google AI Studio、ChatGPT Plus、GitHub Copilot)和MCP集成。它具有多會話管理、動態狀態工作流等功能,可以作為無頭服務器運行。
|
||||||
|
ja: Craft Agentsは、複数のLLMプロバイダー(Anthropic、Google AI Studio、ChatGPT Plus、GitHub Copilot)とMCP統合をサポートするAIエージェントワークスペースです。マルチセッション管理、動的ステータスワークフローなどの機能を備え、ヘッドレスサーバーとして実行できます。
|
||||||
|
ko: Craft Agents는 여러 LLM 제공자(Anthropic, Google AI Studio, ChatGPT Plus, GitHub Copilot)와 MCP 통합을 지원하는 AI 에이전트 워크스페이스입니다. 다중 세션 관리, 동적 상태 워크플로 등의 기능을 갖추고 있으며 헤드리스 서버로 실행할 수 있습니다.
|
||||||
|
memoryRequired: 512
|
||||||
29
apps/craft-agents/latest/data.yml
Normal file
29
apps/craft-agents/latest/data.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
additionalProperties:
|
||||||
|
formFields:
|
||||||
|
- default: 9100
|
||||||
|
edit: true
|
||||||
|
envKey: PANEL_APP_PORT_HTTP
|
||||||
|
labelEn: Web Port
|
||||||
|
labelZh: Web端口
|
||||||
|
required: true
|
||||||
|
rule: paramPort
|
||||||
|
type: number
|
||||||
|
label:
|
||||||
|
en: Web Port
|
||||||
|
zh: Web端口
|
||||||
|
ja: Webポート
|
||||||
|
ko: Web 포트
|
||||||
|
- default: "Craft-Agents-"
|
||||||
|
edit: true
|
||||||
|
envKey: CRAFT_SERVER_TOKEN
|
||||||
|
labelEn: Server Token
|
||||||
|
labelZh: 服务器令牌
|
||||||
|
random: true
|
||||||
|
required: true
|
||||||
|
rule: paramComplexity
|
||||||
|
type: password
|
||||||
|
label:
|
||||||
|
en: Server Token
|
||||||
|
zh: 服务器令牌
|
||||||
|
ja: サーバートークン
|
||||||
|
ko: 서버 토큰
|
||||||
28
apps/craft-agents/latest/docker-compose.yml
Normal file
28
apps/craft-agents/latest/docker-compose.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
services:
|
||||||
|
craft-agents:
|
||||||
|
image: ghcr.io/lukilabs/craft-agents-server:latest
|
||||||
|
container_name: ${CONTAINER_NAME}
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- 1panel-network
|
||||||
|
ports:
|
||||||
|
- "${PANEL_APP_PORT_HTTP}:9100"
|
||||||
|
volumes:
|
||||||
|
- craft-agents-data:/home/craftagents/.craft-agent
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
- CRAFT_SERVER_TOKEN=${CRAFT_SERVER_TOKEN}
|
||||||
|
- CRAFT_RPC_HOST=0.0.0.0
|
||||||
|
command:
|
||||||
|
- bun
|
||||||
|
- run
|
||||||
|
- packages/server/src/index.ts
|
||||||
|
- --allow-insecure-bind
|
||||||
|
labels:
|
||||||
|
createdBy: "Apps"
|
||||||
|
volumes:
|
||||||
|
craft-agents-data:
|
||||||
|
driver: local
|
||||||
|
networks:
|
||||||
|
1panel-network:
|
||||||
|
external: true
|
||||||
BIN
apps/craft-agents/logo.png
Normal file
BIN
apps/craft-agents/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
@@ -11,7 +11,7 @@ services:
|
|||||||
APP_SECRET: 52f235dee223c92a83a934ada13b83075c9855fe966b3cbf9dd86810e2b742ee
|
APP_SECRET: 52f235dee223c92a83a934ada13b83075c9855fe966b3cbf9dd86810e2b742ee
|
||||||
DATABASE_URL: postgresql://docmost:${PANEL_DB_USER_PASSWORD}@db:5432/docmost?schema=public
|
DATABASE_URL: postgresql://docmost:${PANEL_DB_USER_PASSWORD}@db:5432/docmost?schema=public
|
||||||
REDIS_URL: redis://redis:6379
|
REDIS_URL: redis://redis:6379
|
||||||
image: docmost/docmost:0.71.1
|
image: docmost/docmost:0.80.0
|
||||||
labels:
|
labels:
|
||||||
createdBy: Apps
|
createdBy: Apps
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
easytier:
|
easytier:
|
||||||
image: easytier/easytier:v2.6.0
|
image: easytier/easytier:v2.6.1
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
network_mode: host
|
network_mode: host
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
flowise:
|
flowise:
|
||||||
image: flowiseai/flowise:3.1.1
|
image: flowiseai/flowise:3.1.2
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
gpt4free:
|
gpt4free:
|
||||||
image: hlohaus789/g4f:v7.4.7-slim
|
image: hlohaus789/g4f:v7.5.0-slim
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
gpt4free:
|
gpt4free:
|
||||||
image: hlohaus789/g4f:v7.4.7
|
image: hlohaus789/g4f:v7.5.0
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
0
apps/gpt4free/7.5.0/generated_media/.gitkeep
Normal file
0
apps/gpt4free/7.5.0/generated_media/.gitkeep
Normal file
0
apps/gpt4free/7.5.0/har_and_cookies/.gitkeep
Normal file
0
apps/gpt4free/7.5.0/har_and_cookies/.gitkeep
Normal file
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
inspector:
|
inspector:
|
||||||
image: ghcr.io/modelcontextprotocol/inspector:0.21.1
|
image: ghcr.io/modelcontextprotocol/inspector:0.21.2
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
langflow:
|
langflow:
|
||||||
image: langflowai/langflow:1.8.4
|
image: langflowai/langflow:1.9.1
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
pull_policy: always
|
pull_policy: always
|
||||||
user: root
|
user: root
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
linkwarden:
|
linkwarden:
|
||||||
image: ghcr.io/linkwarden/linkwarden:v2.14.0
|
image: ghcr.io/linkwarden/linkwarden:v2.14.1
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
0
apps/litellm/v1.83.3-stable/data/.gitkeep
Normal file
0
apps/litellm/v1.83.3-stable/data/.gitkeep
Normal file
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
litellm:
|
litellm:
|
||||||
image: ghcr.io/berriai/litellm:v1.83.0-nightly
|
image: ghcr.io/berriai/litellm:v1.83.3-stable
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
#########################################
|
#########################################
|
||||||
## Uncomment these lines to start proxy with a config.yaml file ##
|
## Uncomment these lines to start proxy with a config.yaml file ##
|
||||||
0
apps/n8n-zh/2.18.3/data/.gitkeep
Normal file
0
apps/n8n-zh/2.18.3/data/.gitkeep
Normal file
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
n8n:
|
n8n:
|
||||||
image: n8nio/n8n:2.16.0
|
image: n8nio/n8n:2.18.3
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
user: 1000:1000
|
user: 1000:1000
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
services:
|
|
||||||
new-api:
|
|
||||||
image: calciumion/new-api:v0.12.3
|
|
||||||
container_name: ${CONTAINER_NAME}
|
|
||||||
restart: always
|
|
||||||
ports:
|
|
||||||
- ${PANEL_APP_PORT_HTTP}:3000
|
|
||||||
networks:
|
|
||||||
- 1panel-network
|
|
||||||
command: --log-dir /app/logs
|
|
||||||
volumes:
|
|
||||||
- ./data:/data
|
|
||||||
- ./logs:/app/logs
|
|
||||||
environment:
|
|
||||||
- SQL_DSN=root:${PANEL_DB_ROOT_PASSWORD}@tcp(${CONTAINER_NAME}-mysql:3306)/${PANEL_DB_NAME}
|
|
||||||
- TZ=Asia/Shanghai
|
|
||||||
- REDIS_CONN_STRING=redis://${CONTAINER_NAME}-redis
|
|
||||||
- ERROR_LOG_ENABLED=true
|
|
||||||
- BATCH_UPDATE_ENABLED=true
|
|
||||||
depends_on:
|
|
||||||
redis:
|
|
||||||
condition: service_started
|
|
||||||
mysql:
|
|
||||||
condition: service_healthy
|
|
||||||
healthcheck:
|
|
||||||
test:
|
|
||||||
- CMD-SHELL
|
|
||||||
- 'wget -q -O - http://localhost:3000/api/status | grep -o ''"success":\s*true''
|
|
||||||
| awk -F: ''{print $$2}'''
|
|
||||||
interval: 30s
|
|
||||||
timeout: 10s
|
|
||||||
retries: 3
|
|
||||||
labels:
|
|
||||||
createdBy: Apps
|
|
||||||
mysql:
|
|
||||||
image: mysql:8.2
|
|
||||||
container_name: ${CONTAINER_NAME}-mysql
|
|
||||||
restart: always
|
|
||||||
volumes:
|
|
||||||
- mysql_data:/var/lib/mysql
|
|
||||||
environment:
|
|
||||||
- MYSQL_ROOT_PASSWORD=${PANEL_DB_ROOT_PASSWORD}
|
|
||||||
- MYSQL_DATABASE=${PANEL_DB_NAME}
|
|
||||||
networks:
|
|
||||||
- 1panel-network
|
|
||||||
healthcheck:
|
|
||||||
test:
|
|
||||||
- CMD
|
|
||||||
- mysqladmin
|
|
||||||
- ping
|
|
||||||
- -h
|
|
||||||
- localhost
|
|
||||||
interval: 5s
|
|
||||||
timeout: 5s
|
|
||||||
retries: 10
|
|
||||||
start_period: 30s
|
|
||||||
redis:
|
|
||||||
image: redis:latest
|
|
||||||
container_name: ${CONTAINER_NAME}-redis
|
|
||||||
restart: always
|
|
||||||
networks:
|
|
||||||
- 1panel-network
|
|
||||||
volumes:
|
|
||||||
mysql_data: null
|
|
||||||
networks:
|
|
||||||
1panel-network:
|
|
||||||
external: true
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
new-api:
|
new-api:
|
||||||
image: calciumion/new-api:v0.12.1
|
image: calciumion/new-api:v0.12.5
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
new-api:
|
new-api:
|
||||||
image: calciumion/new-api:v0.11.9
|
image: calciumion/new-api:v0.12.6
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
new-api:
|
new-api:
|
||||||
image: calciumion/new-api:v0.12.2
|
image: calciumion/new-api:v0.12.8
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
new-api:
|
new-api:
|
||||||
image: calciumion/new-api:v0.12.0
|
image: calciumion/new-api:v0.12.9
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
67
apps/new-api/0.13.1-allinone/docker-compose.yml
Normal file
67
apps/new-api/0.13.1-allinone/docker-compose.yml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
services:
|
||||||
|
new-api:
|
||||||
|
image: calciumion/new-api:v0.13.1
|
||||||
|
container_name: ${CONTAINER_NAME}
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- ${PANEL_APP_PORT_HTTP}:3000
|
||||||
|
networks:
|
||||||
|
- 1panel-network
|
||||||
|
command: --log-dir /app/logs
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
- ./logs:/app/logs
|
||||||
|
environment:
|
||||||
|
- SQL_DSN=root:${PANEL_DB_ROOT_PASSWORD}@tcp(${CONTAINER_NAME}-mysql:3306)/${PANEL_DB_NAME}
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
- REDIS_CONN_STRING=redis://${CONTAINER_NAME}-redis
|
||||||
|
- ERROR_LOG_ENABLED=true
|
||||||
|
- BATCH_UPDATE_ENABLED=true
|
||||||
|
depends_on:
|
||||||
|
redis:
|
||||||
|
condition: service_started
|
||||||
|
mysql:
|
||||||
|
condition: service_healthy
|
||||||
|
healthcheck:
|
||||||
|
test:
|
||||||
|
- CMD-SHELL
|
||||||
|
- 'wget -q -O - http://localhost:3000/api/status | grep -o ''"success":\s*true''
|
||||||
|
| awk -F: ''{print $$2}'''
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
labels:
|
||||||
|
createdBy: Apps
|
||||||
|
mysql:
|
||||||
|
image: mysql:8.2
|
||||||
|
container_name: ${CONTAINER_NAME}-mysql
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- mysql_data:/var/lib/mysql
|
||||||
|
environment:
|
||||||
|
- MYSQL_ROOT_PASSWORD=${PANEL_DB_ROOT_PASSWORD}
|
||||||
|
- MYSQL_DATABASE=${PANEL_DB_NAME}
|
||||||
|
networks:
|
||||||
|
- 1panel-network
|
||||||
|
healthcheck:
|
||||||
|
test:
|
||||||
|
- CMD
|
||||||
|
- mysqladmin
|
||||||
|
- ping
|
||||||
|
- -h
|
||||||
|
- localhost
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
start_period: 30s
|
||||||
|
redis:
|
||||||
|
image: redis:latest
|
||||||
|
container_name: ${CONTAINER_NAME}-redis
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- 1panel-network
|
||||||
|
volumes:
|
||||||
|
mysql_data: null
|
||||||
|
networks:
|
||||||
|
1panel-network:
|
||||||
|
external: true
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
new-api:
|
new-api:
|
||||||
image: calciumion/new-api:v0.12.3
|
image: calciumion/new-api:v0.13.1
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
next-ai-draw-io:
|
next-ai-draw-io:
|
||||||
image: ghcr.io/dayuanjiang/next-ai-draw-io:0.4.13
|
image: ghcr.io/dayuanjiang/next-ai-draw-io:0.4.15
|
||||||
ports:
|
ports:
|
||||||
- ${PANEL_APP_PORT_HTTP}:3000
|
- ${PANEL_APP_PORT_HTTP}:3000
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
nocodb:
|
nocodb:
|
||||||
image: nocodb/nocodb:0.301.5
|
image: nocodb/nocodb:2026.04.3
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
prompt-optimizer:
|
prompt-optimizer:
|
||||||
image: linshen/prompt-optimizer:2.9.2
|
image: linshen/prompt-optimizer:2.9.4
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
@@ -5,7 +5,7 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
1panel-network:
|
1panel-network:
|
||||||
ipv4_address: ${SUBNET_PREFIX}.234
|
ipv4_address: ${SUBNET_PREFIX}.234
|
||||||
image: chaitin/safeline-mgt:9.3.3
|
image: chaitin/safeline-mgt:9.3.6
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- ${SAFELINE_DIR}/resources/mgt:/app/data
|
- ${SAFELINE_DIR}/resources/mgt:/app/data
|
||||||
@@ -33,7 +33,7 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
1panel-network:
|
1panel-network:
|
||||||
ipv4_address: ${SUBNET_PREFIX}.235
|
ipv4_address: ${SUBNET_PREFIX}.235
|
||||||
image: chaitin/safeline-detector:9.3.3
|
image: chaitin/safeline-detector:9.3.5
|
||||||
volumes:
|
volumes:
|
||||||
- ${SAFELINE_DIR}/resources/detector:/resources/detector
|
- ${SAFELINE_DIR}/resources/detector:/resources/detector
|
||||||
- ${SAFELINE_DIR}/logs/detector:/logs/detector
|
- ${SAFELINE_DIR}/logs/detector:/logs/detector
|
||||||
@@ -45,7 +45,7 @@ services:
|
|||||||
safeline-tengine:
|
safeline-tengine:
|
||||||
container_name: ${CONTAINER_NAME}-tengine
|
container_name: ${CONTAINER_NAME}-tengine
|
||||||
restart: always
|
restart: always
|
||||||
image: chaitin/safeline-tengine:9.3.3
|
image: chaitin/safeline-tengine:9.3.5
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/resolv.conf:/etc/resolv.conf:ro
|
- /etc/resolv.conf:/etc/resolv.conf:ro
|
||||||
@@ -69,7 +69,7 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
1panel-network:
|
1panel-network:
|
||||||
ipv4_address: ${SUBNET_PREFIX}.237
|
ipv4_address: ${SUBNET_PREFIX}.237
|
||||||
image: chaitin/safeline-luigi:9.3.3
|
image: chaitin/safeline-luigi:9.3.5
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- ${SAFELINE_DIR}/resources/luigi:/app/data
|
- ${SAFELINE_DIR}/resources/luigi:/app/data
|
||||||
@@ -90,7 +90,7 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
1panel-network:
|
1panel-network:
|
||||||
ipv4_address: ${SUBNET_PREFIX}.238
|
ipv4_address: ${SUBNET_PREFIX}.238
|
||||||
image: chaitin/safeline-fvm:9.3.3
|
image: chaitin/safeline-fvm:9.3.5
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
logging:
|
logging:
|
||||||
@@ -126,7 +126,7 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
1panel-network:
|
1panel-network:
|
||||||
ipv4_address: ${SUBNET_PREFIX}.240
|
ipv4_address: ${SUBNET_PREFIX}.240
|
||||||
image: chaitin/safeline-chaos:9.3.3
|
image: chaitin/safeline-chaos:9.3.5
|
||||||
logging:
|
logging:
|
||||||
options:
|
options:
|
||||||
max-size: 100m
|
max-size: 100m
|
||||||
62
apps/tailscale/1.96.5/data.yml
Normal file
62
apps/tailscale/1.96.5/data.yml
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
additionalProperties:
|
||||||
|
formFields:
|
||||||
|
- default: ""
|
||||||
|
edit: true
|
||||||
|
envKey: TS_AUTHKEY
|
||||||
|
labelEn: Tailscale Auth Key
|
||||||
|
labelZh: Tailscale 认证密钥
|
||||||
|
required: false
|
||||||
|
rule: paramCommon
|
||||||
|
type: password
|
||||||
|
description:
|
||||||
|
zh: 从 https://login.tailscale.com/admin/settings/keys 获取认证密钥,留空则需要在容器内执行 tailscale up 进行交互登录
|
||||||
|
en: Get auth key from https://login.tailscale.com/admin/settings/keys, leave empty for interactive login via tailscale up
|
||||||
|
- default: "false"
|
||||||
|
edit: true
|
||||||
|
envKey: TS_USERSPACE
|
||||||
|
labelEn: Userspace Mode
|
||||||
|
labelZh: 用户空间模式
|
||||||
|
required: false
|
||||||
|
type: select
|
||||||
|
values:
|
||||||
|
- label: "false (Kernel Networking)"
|
||||||
|
value: "false"
|
||||||
|
- label: "true (Userspace)"
|
||||||
|
value: "true"
|
||||||
|
description:
|
||||||
|
zh: "false 使用内核网络(推荐),true 使用用户空间网络"
|
||||||
|
en: "false for kernel networking (recommended), true for userspace"
|
||||||
|
- default: ""
|
||||||
|
edit: true
|
||||||
|
envKey: TS_ROUTES
|
||||||
|
labelEn: Subnet Routes (Optional)
|
||||||
|
labelZh: 子网路由(可选)
|
||||||
|
required: false
|
||||||
|
rule: paramCommon
|
||||||
|
type: text
|
||||||
|
description:
|
||||||
|
zh: 要广播的子网路由,如 192.168.1.0/24,10.0.0.0/8
|
||||||
|
en: Subnet routes to advertise, e.g. 192.168.1.0/24,10.0.0.0/8
|
||||||
|
- default: "true"
|
||||||
|
edit: true
|
||||||
|
envKey: TS_ACCEPT_DNS
|
||||||
|
labelEn: Accept DNS
|
||||||
|
labelZh: 接受 DNS
|
||||||
|
required: false
|
||||||
|
type: select
|
||||||
|
values:
|
||||||
|
- label: "true"
|
||||||
|
value: "true"
|
||||||
|
- label: "false"
|
||||||
|
value: "false"
|
||||||
|
- default: ""
|
||||||
|
edit: true
|
||||||
|
envKey: TS_EXTRA_ARGS
|
||||||
|
labelEn: Extra Arguments (Optional)
|
||||||
|
labelZh: 额外参数(可选)
|
||||||
|
required: false
|
||||||
|
rule: paramCommon
|
||||||
|
type: text
|
||||||
|
description:
|
||||||
|
zh: tailscale up 命令的额外参数,如 --accept-routes
|
||||||
|
en: Extra arguments for tailscale up command, e.g. --accept-routes
|
||||||
28
apps/tailscale/1.96.5/docker-compose.yml
Normal file
28
apps/tailscale/1.96.5/docker-compose.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
services:
|
||||||
|
tailscaled:
|
||||||
|
container_name: ${CONTAINER_NAME}
|
||||||
|
image: tailscale/tailscale:v1.96.5
|
||||||
|
hostname: ${HOSTNAME:-tailscale}
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./data/state:/var/lib/tailscale
|
||||||
|
- /dev/net/tun:/dev/net/tun
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
- SYS_MODULE
|
||||||
|
network_mode: host
|
||||||
|
privileged: true
|
||||||
|
environment:
|
||||||
|
- TS_AUTHKEY=${TS_AUTHKEY}
|
||||||
|
- TS_USERSPACE=${TS_USERSPACE:-false}
|
||||||
|
- TS_STATE_DIR=/var/lib/tailscale
|
||||||
|
- TS_ROUTES=${TS_ROUTES:-}
|
||||||
|
- TS_ACCEPT_DNS=${TS_ACCEPT_DNS:-true}
|
||||||
|
- TS_EXTRA_ARGS=${TS_EXTRA_ARGS:-}
|
||||||
|
- TS_AUTH_ONCE=${TS_AUTH_ONCE:-false}
|
||||||
|
command: containerboot
|
||||||
|
labels:
|
||||||
|
createdBy: "Apps"
|
||||||
|
networks:
|
||||||
|
1panel-network:
|
||||||
|
external: true
|
||||||
114
apps/tailscale/README.md
Normal file
114
apps/tailscale/README.md
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
# Tailscale
|
||||||
|
|
||||||
|
最简单、最安全的 WireGuard 私有网络组网工具。Tailscale 让您能够轻松创建安全的 mesh 网络,将您的设备连接在一起,无论它们位于何处。
|
||||||
|
|
||||||
|
## 功能特点
|
||||||
|
|
||||||
|
- **基于 WireGuard**: 使用现代化的 WireGuard 协议,提供高性能和强安全性
|
||||||
|
- **自动 NAT 穿透**: 自动处理复杂的网络环境,实现设备间直连
|
||||||
|
- **零配置**: 无需手动配置,登录即可使用
|
||||||
|
- **端到端加密**: 所有通信都经过端到端加密
|
||||||
|
- **多平台支持**: 支持 Linux、Windows、macOS、iOS、Android 等平台
|
||||||
|
- **子网路由**: 可将整个子网路由到 Tailscale 网络
|
||||||
|
- **魔法 DNS**: 自动为设备分配易记的 DNS 名称
|
||||||
|
- **访问控制**: 精细的访问控制策略
|
||||||
|
|
||||||
|
## 使用说明
|
||||||
|
|
||||||
|
### 认证方式
|
||||||
|
|
||||||
|
Tailscale 支持两种认证方式:
|
||||||
|
|
||||||
|
#### 方式一:使用认证密钥(推荐)
|
||||||
|
|
||||||
|
1. 访问 [Tailscale 管理控制台](https://login.tailscale.com/admin/settings/keys)
|
||||||
|
2. 点击 "Generate auth key" 创建认证密钥
|
||||||
|
3. 复制生成的密钥,在部署时填写到 "Tailscale 认证密钥" 字段
|
||||||
|
4. 部署后自动完成认证,无需额外操作
|
||||||
|
|
||||||
|
**注意**:认证密钥有过期时间,请在生成后尽快使用。
|
||||||
|
|
||||||
|
#### 方式二:交互登录
|
||||||
|
|
||||||
|
1. 部署时留空 "Tailscale 认证密钥" 字段
|
||||||
|
2. 部署完成后,在 1Panel 容器列表中点击 "Tailscale" 容器的 "终端" 按钮
|
||||||
|
3. 在终端中执行以下命令:
|
||||||
|
```bash
|
||||||
|
tailscale up
|
||||||
|
```
|
||||||
|
4. 命令会输出一个认证 URL,复制该 URL 到浏览器打开
|
||||||
|
5. 登录您的 Tailscale 账号并授权该设备
|
||||||
|
6. 认证成功后,容器会自动连接到 Tailscale 网络
|
||||||
|
|
||||||
|
### 部署参数说明
|
||||||
|
|
||||||
|
- **Tailscale 认证密钥**(可选):从管理控制台获取的认证密钥,留空则使用交互登录
|
||||||
|
- **用户空间模式**:
|
||||||
|
- `false` (推荐): 使用内核网络模式,性能更好
|
||||||
|
- `true`: 使用用户空间网络模式,兼容性更好
|
||||||
|
- **子网路由** (可选): 要广播的子网,如 `192.168.1.0/24,10.0.0.0/8`
|
||||||
|
- **接受 DNS**: 是否接受 Tailscale 的 DNS 配置
|
||||||
|
- **额外参数** (可选): tailscale up 命令的额外参数,如 `--accept-routes`
|
||||||
|
|
||||||
|
### 部署后操作
|
||||||
|
|
||||||
|
1. 部署完成后,访问 [Tailscale 管理控制台](https://login.tailscale.com/admin/machines) 查看设备状态
|
||||||
|
2. 在其他设备上安装 Tailscale 客户端并登录同一账号
|
||||||
|
3. 设备间可以通过 Tailscale IP 或魔法 DNS 名称互相访问
|
||||||
|
|
||||||
|
### 高级配置
|
||||||
|
|
||||||
|
#### 配置子网路由器
|
||||||
|
|
||||||
|
如果您希望将本地网络路由到 Tailscale:
|
||||||
|
|
||||||
|
1. 在 `子网路由` 参数中填写要广播的子网,如 `192.168.1.0/24`
|
||||||
|
2. 部署后在管理控制台批准该子网路由
|
||||||
|
3. 其他 Tailscale 设备即可访问该子网内的设备
|
||||||
|
|
||||||
|
#### 使用出口节点
|
||||||
|
|
||||||
|
将 Tailscale 配置为出口节点,让其他设备通过此设备访问互联网:
|
||||||
|
|
||||||
|
1. 在 `额外参数` 中添加 `--advertise-exit-node`
|
||||||
|
2. 部署后在管理控制台批准出口节点
|
||||||
|
3. 其他设备可以选择使用此出口节点
|
||||||
|
|
||||||
|
#### 仅首次认证
|
||||||
|
|
||||||
|
如果希望只在首次启动时使用认证密钥,后续启动使用已有状态:
|
||||||
|
|
||||||
|
- 设置环境变量 `TS_AUTH_ONCE=true`(需要在 docker-compose.yml 中手动添加)
|
||||||
|
|
||||||
|
### 数据目录
|
||||||
|
|
||||||
|
应用数据存储在 `./data/state` 目录,包含 Tailscale 的状态信息(认证状态、配置等)。该目录挂载到容器的 `/var/lib/tailscale`。
|
||||||
|
|
||||||
|
**重要提示**:请确保 `data/state` 目录有正确的读写权限,否则状态无法保存,导致每次重启都需要重新认证。
|
||||||
|
|
||||||
|
## 环境变量说明
|
||||||
|
|
||||||
|
- `TS_AUTHKEY`: Tailscale 认证密钥(可选,支持交互登录)
|
||||||
|
- `TS_USERSPACE`: 是否使用用户空间网络模式
|
||||||
|
- `TS_STATE_DIR`: 状态文件存储目录(固定为 /var/lib)
|
||||||
|
- `TS_ROUTES`: 要广播的子网路由
|
||||||
|
- `TS_ACCEPT_DNS`: 是否接受 Tailscale DNS 配置
|
||||||
|
- `TS_EXTRA_ARGS`: tailscale up 命令的额外参数
|
||||||
|
- `TS_AUTH_ONCE`: 是否仅在首次启动时认证(默认 false)
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
- 需要 `privileged` 权限和 `NET_ADMIN`、`SYS_MODULE` 能力
|
||||||
|
- 使用 `host` 网络模式以直接管理网络接口
|
||||||
|
- 需要访问 `/dev/net/tun` 设备
|
||||||
|
- 首次运行时需要有效的认证密钥或进行交互登录
|
||||||
|
- 建议在防火墙中允许 UDP 41641 端口(WireGuard 默认端口)
|
||||||
|
- 容器重启策略固定为 `always`,由 1Panel 统一管理
|
||||||
|
|
||||||
|
## 相关链接
|
||||||
|
|
||||||
|
- 官方网站:https://tailscale.com
|
||||||
|
- GitHub: https://github.com/tailscale/tailscale
|
||||||
|
- 文档:https://tailscale.com/kb
|
||||||
|
- 管理控制台:https://login.tailscale.com/admin
|
||||||
|
- 下载客户端:https://tailscale.com/download
|
||||||
114
apps/tailscale/README_en.md
Normal file
114
apps/tailscale/README_en.md
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
# Tailscale
|
||||||
|
|
||||||
|
The easiest, most secure way to use WireGuard. Tailscale enables you to create secure mesh networks that connect your devices together, no matter where they are located.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **WireGuard-based**: Uses modern WireGuard protocol for high performance and strong security
|
||||||
|
- **Automatic NAT Traversal**: Automatically handles complex network environments for direct device connections
|
||||||
|
- **Zero Configuration**: No manual setup required, just login and use
|
||||||
|
- **End-to-End Encryption**: All communications are encrypted end-to-end
|
||||||
|
- **Multi-Platform Support**: Supports Linux, Windows, macOS, iOS, Android and more
|
||||||
|
- **Subnet Routing**: Route entire subnets to your Tailscale network
|
||||||
|
- **Magic DNS**: Automatically assigns friendly DNS names to devices
|
||||||
|
- **Access Control**: Fine-grained access control policies
|
||||||
|
|
||||||
|
## Usage Instructions
|
||||||
|
|
||||||
|
### Authentication Methods
|
||||||
|
|
||||||
|
Tailscale supports two authentication methods:
|
||||||
|
|
||||||
|
#### Method 1: Using Auth Key (Recommended)
|
||||||
|
|
||||||
|
1. Visit [Tailscale Admin Console](https://login.tailscale.com/admin/settings/keys)
|
||||||
|
2. Click "Generate auth key" to create an authentication key
|
||||||
|
3. Copy the generated key and fill it in the "Tailscale Auth Key" field during deployment
|
||||||
|
4. Authentication completes automatically after deployment
|
||||||
|
|
||||||
|
**Note**: Auth keys have an expiration time, please use them as soon as possible after generation.
|
||||||
|
|
||||||
|
#### Method 2: Interactive Login
|
||||||
|
|
||||||
|
1. Leave the "Tailscale Auth Key" field empty during deployment
|
||||||
|
2. After deployment, click the "Terminal" button for the "Tailscale" container in 1Panel
|
||||||
|
3. Execute the following command in the terminal:
|
||||||
|
```bash
|
||||||
|
tailscale up
|
||||||
|
```
|
||||||
|
4. The command will output an authentication URL, copy it to your browser
|
||||||
|
5. Log in to your Tailscale account and authorize the device
|
||||||
|
6. After successful authentication, the container will automatically connect to the Tailscale network
|
||||||
|
|
||||||
|
### Deployment Parameters
|
||||||
|
|
||||||
|
- **Tailscale Auth Key** (Optional): Authentication key from admin console, leave empty for interactive login
|
||||||
|
- **Userspace Mode**:
|
||||||
|
- `false` (Recommended): Use kernel networking mode for better performance
|
||||||
|
- `true`: Use userspace networking mode for better compatibility
|
||||||
|
- **Subnet Routes** (Optional): Subnets to advertise, e.g., `192.168.1.0/24,10.0.0.0/8`
|
||||||
|
- **Accept DNS**: Whether to accept Tailscale DNS configuration
|
||||||
|
- **Extra Args** (Optional): Additional arguments for tailscale up command, e.g., `--accept-routes`
|
||||||
|
|
||||||
|
### Post-Deployment Steps
|
||||||
|
|
||||||
|
1. After deployment, visit [Tailscale Admin Console](https://login.tailscale.com/admin/machines) to check device status
|
||||||
|
2. Install Tailscale clients on other devices and login with the same account
|
||||||
|
3. Devices can access each other via Tailscale IP or MagicDNS names
|
||||||
|
|
||||||
|
### Advanced Configuration
|
||||||
|
|
||||||
|
#### Configure Subnet Router
|
||||||
|
|
||||||
|
If you want to route your local network to Tailscale:
|
||||||
|
|
||||||
|
1. Fill in the subnets to advertise in `Subnet Routes` parameter, e.g., `192.168.1.0/24`
|
||||||
|
2. Approve the subnet route in admin console after deployment
|
||||||
|
3. Other Tailscale devices can then access devices in that subnet
|
||||||
|
|
||||||
|
#### Configure Exit Node
|
||||||
|
|
||||||
|
Configure Tailscale as an exit node to allow other devices to access the internet through it:
|
||||||
|
|
||||||
|
1. Add `--advertise-exit-node` to `Extra Args` parameter
|
||||||
|
2. Approve the exit node in admin console after deployment
|
||||||
|
3. Other devices can choose to use this exit node
|
||||||
|
|
||||||
|
#### First-Time Authentication Only
|
||||||
|
|
||||||
|
If you want to use the auth key only on first startup and use existing state on subsequent starts:
|
||||||
|
|
||||||
|
- Set environment variable `TS_AUTH_ONCE=true` (needs to be manually added in docker-compose.yml)
|
||||||
|
|
||||||
|
### Data Directory
|
||||||
|
|
||||||
|
Application data is stored in `./data/state` directory, containing Tailscale state information (authentication state, configuration, etc.). This directory is mounted to `/var/lib/tailscale` in the container.
|
||||||
|
|
||||||
|
**Important**: Ensure the `data/state` directory has correct read/write permissions, otherwise state cannot be persisted and re-authentication will be required on every restart.
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
- `TS_AUTHKEY`: Tailscale authentication key (optional, supports interactive login)
|
||||||
|
- `TS_USERSPACE`: Whether to use userspace networking mode
|
||||||
|
- `TS_STATE_DIR`: State file storage directory (fixed to /var/lib)
|
||||||
|
- `TS_ROUTES`: Subnet routes to advertise
|
||||||
|
- `TS_ACCEPT_DNS`: Whether to accept Tailscale DNS configuration
|
||||||
|
- `TS_EXTRA_ARGS`: Additional arguments for tailscale up command
|
||||||
|
- `TS_AUTH_ONCE`: Whether to authenticate only on first start (default false)
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Requires `privileged` mode and `NET_ADMIN`, `SYS_MODULE` capabilities
|
||||||
|
- Uses `host` network mode to directly manage network interfaces
|
||||||
|
- Requires access to `/dev/net/tun` device
|
||||||
|
- A valid auth key or interactive login is required for first run
|
||||||
|
- Recommended to allow UDP port 41641 (WireGuard default port) in firewall
|
||||||
|
- Container restart policy is fixed to `always`, managed by 1Panel
|
||||||
|
|
||||||
|
## Links
|
||||||
|
|
||||||
|
- Website: https://tailscale.com
|
||||||
|
- GitHub: https://github.com/tailscale/tailscale
|
||||||
|
- Documentation: https://tailscale.com/kb
|
||||||
|
- Admin Console: https://login.tailscale.com/admin
|
||||||
|
- Downloads: https://tailscale.com/download
|
||||||
29
apps/tailscale/data.yml
Normal file
29
apps/tailscale/data.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
name: Tailscale
|
||||||
|
tags:
|
||||||
|
- 网络工具
|
||||||
|
- 安全
|
||||||
|
title: 私有 WireGuard 网络组网工具
|
||||||
|
description: 最简单的 WireGuard 私有网络组网解决方案,支持多设备安全互联
|
||||||
|
additionalProperties:
|
||||||
|
key: tailscale
|
||||||
|
name: Tailscale
|
||||||
|
tags:
|
||||||
|
- Networking
|
||||||
|
- Security
|
||||||
|
shortDescZh: 私有 WireGuard 网络组网工具
|
||||||
|
shortDescEn: Private WireGuard networking tool
|
||||||
|
description:
|
||||||
|
en: The easiest, most secure way to use WireGuard. Create private networks with secure mesh connectivity between devices.
|
||||||
|
zh: 最简单、最安全的 WireGuard 使用方式。创建设备间安全 mesh 连接的私有网络。
|
||||||
|
type: tool
|
||||||
|
crossVersionUpdate: true
|
||||||
|
limit: 0
|
||||||
|
recommend: 90
|
||||||
|
website: https://tailscale.com
|
||||||
|
github: https://github.com/tailscale/tailscale
|
||||||
|
document: https://tailscale.com/kb
|
||||||
|
architectures:
|
||||||
|
- amd64
|
||||||
|
- arm64
|
||||||
|
- arm/v7
|
||||||
|
hostMode: true
|
||||||
62
apps/tailscale/latest/data.yml
Normal file
62
apps/tailscale/latest/data.yml
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
additionalProperties:
|
||||||
|
formFields:
|
||||||
|
- default: ""
|
||||||
|
edit: true
|
||||||
|
envKey: TS_AUTHKEY
|
||||||
|
labelEn: Tailscale Auth Key
|
||||||
|
labelZh: Tailscale 认证密钥
|
||||||
|
required: false
|
||||||
|
rule: paramCommon
|
||||||
|
type: password
|
||||||
|
description:
|
||||||
|
zh: 从 https://login.tailscale.com/admin/settings/keys 获取认证密钥,留空则需要在容器内执行 tailscale up 进行交互登录
|
||||||
|
en: Get auth key from https://login.tailscale.com/admin/settings/keys, leave empty for interactive login via tailscale up
|
||||||
|
- default: "false"
|
||||||
|
edit: true
|
||||||
|
envKey: TS_USERSPACE
|
||||||
|
labelEn: Userspace Mode
|
||||||
|
labelZh: 用户空间模式
|
||||||
|
required: false
|
||||||
|
type: select
|
||||||
|
values:
|
||||||
|
- label: "false (Kernel Networking)"
|
||||||
|
value: "false"
|
||||||
|
- label: "true (Userspace)"
|
||||||
|
value: "true"
|
||||||
|
description:
|
||||||
|
zh: "false 使用内核网络(推荐),true 使用用户空间网络"
|
||||||
|
en: "false for kernel networking (recommended), true for userspace"
|
||||||
|
- default: ""
|
||||||
|
edit: true
|
||||||
|
envKey: TS_ROUTES
|
||||||
|
labelEn: Subnet Routes (Optional)
|
||||||
|
labelZh: 子网路由(可选)
|
||||||
|
required: false
|
||||||
|
rule: paramCommon
|
||||||
|
type: text
|
||||||
|
description:
|
||||||
|
zh: 要广播的子网路由,如 192.168.1.0/24,10.0.0.0/8
|
||||||
|
en: Subnet routes to advertise, e.g. 192.168.1.0/24,10.0.0.0/8
|
||||||
|
- default: "true"
|
||||||
|
edit: true
|
||||||
|
envKey: TS_ACCEPT_DNS
|
||||||
|
labelEn: Accept DNS
|
||||||
|
labelZh: 接受 DNS
|
||||||
|
required: false
|
||||||
|
type: select
|
||||||
|
values:
|
||||||
|
- label: "true"
|
||||||
|
value: "true"
|
||||||
|
- label: "false"
|
||||||
|
value: "false"
|
||||||
|
- default: ""
|
||||||
|
edit: true
|
||||||
|
envKey: TS_EXTRA_ARGS
|
||||||
|
labelEn: Extra Arguments (Optional)
|
||||||
|
labelZh: 额外参数(可选)
|
||||||
|
required: false
|
||||||
|
rule: paramCommon
|
||||||
|
type: text
|
||||||
|
description:
|
||||||
|
zh: tailscale up 命令的额外参数,如 --accept-routes
|
||||||
|
en: Extra arguments for tailscale up command, e.g. --accept-routes
|
||||||
28
apps/tailscale/latest/docker-compose.yml
Normal file
28
apps/tailscale/latest/docker-compose.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
services:
|
||||||
|
tailscaled:
|
||||||
|
container_name: ${CONTAINER_NAME}
|
||||||
|
image: tailscale/tailscale:latest
|
||||||
|
hostname: ${HOSTNAME:-tailscale}
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./data/state:/var/lib/tailscale
|
||||||
|
- /dev/net/tun:/dev/net/tun
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
- SYS_MODULE
|
||||||
|
network_mode: host
|
||||||
|
privileged: true
|
||||||
|
environment:
|
||||||
|
- TS_AUTHKEY=${TS_AUTHKEY}
|
||||||
|
- TS_USERSPACE=${TS_USERSPACE:-false}
|
||||||
|
- TS_STATE_DIR=/var/lib/tailscale
|
||||||
|
- TS_ROUTES=${TS_ROUTES:-}
|
||||||
|
- TS_ACCEPT_DNS=${TS_ACCEPT_DNS:-true}
|
||||||
|
- TS_EXTRA_ARGS=${TS_EXTRA_ARGS:-}
|
||||||
|
- TS_AUTH_ONCE=${TS_AUTH_ONCE:-false}
|
||||||
|
command: containerboot
|
||||||
|
labels:
|
||||||
|
createdBy: "Apps"
|
||||||
|
networks:
|
||||||
|
1panel-network:
|
||||||
|
external: true
|
||||||
BIN
apps/tailscale/logo.png
Normal file
BIN
apps/tailscale/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
@@ -2,7 +2,7 @@ services:
|
|||||||
tianji:
|
tianji:
|
||||||
container_name: ${CONTAINER_NAME}
|
container_name: ${CONTAINER_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
image: moonrailgun/tianji:1.31.20
|
image: moonrailgun/tianji:1.31.22
|
||||||
networks:
|
networks:
|
||||||
- 1panel-network
|
- 1panel-network
|
||||||
ports:
|
ports:
|
||||||
Reference in New Issue
Block a user