每日开源速递 - 2026-04-14

GitHub Trending 项目的深度解读与推荐

每日开源速递 - 2026年4月14日

在当今快速发展的技术生态中,开源项目始终扮演着推动创新的核心角色。本期我们将深入解读近期 GitHub 上最热门的开源项目,涵盖人工智能、开发工具、云原生应用等多个领域,为开发者提供全面的技术选型参考。

1. ChatGPT-Next-Web:下一代 AI 对话界面

项目概述

ChatGPT-Next-Web 是一个功能强大的 AI 对话界面项目,旨在为用户提供更加智能和个性化的 ChatGPT 使用体验。该项目以其优雅的设计、丰富的功能和出色的用户体验,迅速成为 GitHub 上最受欢迎的开源项目之一。截至目前,项目已获得超过 50,000 颗星标,充分证明了其在开发者社区中的影响力。

项目的核心理念是让每个人都能轻松部署自己的 AI 对话服务,同时保持高度的定制性和隐私性。无论是个人使用还是团队协作,ChatGPT-Next-Web 都能提供卓越的解决方案。

核心功能

ChatGPT-Next-Web 的核心功能围绕以下几个方面展开:

多模型支持:项目原生支持 OpenAI 的 GPT-4、GPT-4 Turbo 以及最新的 GPT-4o 模型,同时兼容 Anthropic 的 Claude 3 系列。这种多模型支持策略让用户能够根据具体需求灵活选择最适合的 AI 模型,在成本和效果之间找到最佳平衡点。

对话管理:强大的对话历史管理功能支持对话分类、标签标记、搜索检索等操作。用户可以轻松组织和回顾之前的对话内容,这对于长期使用 AI 助手进行知识积累的用户来说尤为重要。

提示词模板:内置丰富的提示词模板库,涵盖写作、编程、翻译、分析等多个场景。用户可以直接使用这些模板,也可以创建和分享自己的模板,极大提升了使用效率。

数据隐私:所有对话数据默认存储在本地,支持端到端加密配置,确保敏感信息不会泄露给第三方。对于企业用户而言,这一特性尤为重要。

多设备同步:通过配置外部存储(如 S3、WebDAV),可以实现对话数据的多设备同步,满足移动办公需求。

适用场景

ChatGPT-Next-Web 适用于多种应用场景:

个人生产力提升:作为个人的 AI 助手,帮助完成写作、编程、思考辅助等任务。其优雅的界面设计和流畅的交互体验,让用户愿意更频繁地使用 AI 工具。

团队协作:企业可以将 ChatGPT-Next-Web 部署为内部服务,为团队提供统一的 AI 对话平台。结合企业知识库,可以构建专属的 AI 助手。

教育培训:教育机构可以利用该项目搭建 AI 教学平台,让学生在安全可控的环境中学习和实践 AI 技术。

安装方式

项目提供多种安装方式,满足不同用户的需求:

Docker 部署(推荐)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 使用 Docker 快速部署
docker run -d \
    --name chatgpt-next-web \
    -p 3000:3000 \
    -e OPENAI_API_KEY="your-api-key" \
    -e CODE="your-access-password" \
    yidadaa/chatgpt-next-web:latest

# 使用 Docker Compose(推荐生产环境)
version: '3'
services:
  chatgpt-next-web:
    image: yidadaa/chatgpt-next-web:latest
    container_name: chatgpt-next-web
    ports:
      - "3000:3000"
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - CODE=${ACCESS_PASSWORD}
      - MAX_TOKENS=4096
      - TIMEOUT=60
    restart: unless-stopped

Vercel 部署(适合快速体验)

1
2
3
4
5
6
7
# 安装 Vercel CLI
npm i -g vercel

# 克隆并部署
git clone https://github.com/Yidadaa/ChatGPT-Next-Web.git
cd ChatGPT-Next-Web
vercel deploy

源码构建

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 克隆项目
git clone https://github.com/Yidadaa/ChatGPT-Next-Web.git
cd ChatGPT-Next-Web

# 安装依赖
pnpm install

# 开发模式运行
pnpm dev

# 生产构建
pnpm build
pnpm start

代码示例

以下是一个简单的 API 集成示例,展示如何在其他应用中调用 ChatGPT-Next-Web:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import requests
import json

class ChatGPTClient:
    def __init__(self, base_url, access_code):
        self.base_url = base_url.rstrip('/')
        self.access_code = access_code
        self.headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Bearer {access_code}'
        }
    
    def chat(self, message, system_prompt=None):
        payload = {
            'messages': [
                {'role': 'user', 'content': message}
            ],
            'model': {
                'provider': 'openai',
                'model': 'gpt-4'
            },
            'temperature': 0.7
        }
        
        if system_prompt:
            payload['messages'].insert(0, {
                'role': 'system',
                'content': system_prompt
            })
        
        response = requests.post(
            f'{self.base_url}/api/chat',
            headers=self.headers,
            json=payload
        )
        
        return response.json()

# 使用示例
client = ChatGPTClient(
    base_url='http://localhost:3000',
    access_code='your-password'
)

response = client.chat(
    '请用 Python 写一个快速排序算法',
    system_prompt='你是一个专业的 Python 导师'
)
print(response['choices'][0]['message']['content'])

评价

ChatGPT-Next-Web 凭借其出色的用户体验和强大的功能,成为个人和团队部署 AI 对话服务的首选方案。其开源特性确保了透明度和持续改进,而活跃的社区贡献者不断为项目注入新的活力。对于希望拥有完全控制权同时又不想从零开始构建对话界面的开发者来说,这是一个不可多得的选择。

2. Tabby:自托管 AI 编程助手

项目概述

Tabby 是一个自托管的 AI 编程助手项目,旨在为开发团队提供私有化部署的代码补全和问答解决方案。在数据隐私日益受到重视的今天,Tabby 为企业提供了在防火墙内部署 AI 编程助手的可能性,同时保持了与主流商业产品相当的使用体验。

项目的命名来源于 “Tabnine” 的简化形式,体现了其作为代码补全工具的核心定位。与传统 IDE 插件不同,Tabby 采用客户端-服务器架构,支持集中管理和资源共享,特别适合中大型开发团队使用。

核心功能

智能代码补全:Tabby 提供行内代码补全和建议功能,支持多种编程语言和框架。通过深度学习模型,项目能够理解代码上下文,提供精准的补全建议。与 GitHub Copilot 相比,Tabby 在私有部署场景下具有明显优势。

代码问答:基于 RAG(检索增强生成)架构,Tabby 能够理解项目代码库,回答开发者关于代码库的问题。它可以检索相关代码片段,生成准确的解释和答案。

模型管理:内置模型管理功能,支持主流的开源大语言模型,包括 Llama 2、CodeLlama、Qwen 等。用户可以根据硬件条件和需求选择合适的模型。

API 集成:提供完整的 RESTful API,方便与其他开发工具和 CI/CD 流水线集成。企业可以将 Tabby 能力嵌入到内部平台中。

使用分析:提供详细的使用统计,帮助团队了解 AI 助手的使用模式和效果,为优化工作流程提供数据支持。

适用场景

企业级开发团队:对于有严格数据安全要求的企业,Tabby 提供了在内部网络部署 AI 编程助手的能力,避免代码和项目信息外泄。

开源项目维护:开源项目维护者可以使用 Tabby 为贡献者提供一致的 AI 辅助体验,同时保持项目独立性。

教育机构:学校和培训机构可以部署 Tabby,为学生提供 AI 编程辅助工具,同时遵守数据保护法规。

安装方式

Tabby 支持多种部署方式:

Docker Compose(推荐)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 创建部署目录
mkdir -p tabby
cd tabby

# 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3'
services:
  tabby:
    image: tabbyio/tabby:latest
    container_name: tabby
    ports:
      - "8080:8080"
    volumes:
      - tabby-data:/data
    environment:
      - TABBY_DISABLE_USAGE_COLLECT=true
    restart: unless-stopped

volumes:
  tabby-data:
EOF

# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f tabby

Kubernetes 部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# tabby-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tabby
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tabby
  template:
    metadata:
      labels:
        app: tabby
    spec:
      containers:
      - name: tabby
        image: tabbyio/tabby:latest
        ports:
        - containerPort: 8080
        resources:
          limits:
            nvidia.com/gpu: 1
            memory: 16Gi
          requests:
            nvidia.com/gpu: 1
            memory: 8Gi
---
apiVersion: v1
kind: Service
metadata:
  name: tabby
spec:
  selector:
    app: tabby
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer

IDE 插件安装

Tabby 为主流 IDE 提供插件支持:

  • VS Code: 在扩展市场搜索 “Tabby”
  • JetBrains 系列: 在插件市场搜索 “Tabby”
  • Vim/Neovim: 使用插件管理器安装

代码示例

以下是一个使用 Tabby API 进行代码补全的示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import requests
import json

class TabbyClient:
    def __init__(self, server_url):
        self.server_url = server_url.rstrip('/')
        self.completions_url = f"{self.server_url}/v1/completions"
    
    def complete(self, filepath, content, max_tokens=100):
        """
        获取代码补全建议
        
        Args:
            filepath: 文件路径
            content: 当前文件内容
            max_tokens: 最大生成 token 数
        
        Returns:
            补全建议列表
        """
        payload = {
            "language": self._detect_language(filepath),
            "segments": {
                "prefix": content,
                "suffix": ""
            },
            "max_tokens": max_tokens,
            "temperature": 0.2
        }
        
        response = requests.post(
            self.completions_url,
            json=payload,
            headers={"Content-Type": "application/json"}
        )
        
        return response.json()
    
    def _detect_language(self, filepath):
        """根据文件扩展名检测编程语言"""
        extension_map = {
            '.py': 'python',
            '.js': 'javascript',
            '.ts': 'typescript',
            '.java': 'java',
            '.go': 'go',
            '.rs': 'rust',
            '.cpp': 'cpp',
            '.c': 'c',
            '.rb': 'ruby',
            '.php': 'php',
        }
        ext = '.' + filepath.split('.')[-1] if '.' in filepath else ''
        return extension_map.get(ext.lower(), 'plaintext')

# 使用示例
client = TabbyClient("http://localhost:8080")

# 假设我们正在编写一个 Python 函数
code_context = '''
def fibonacci(n):
    """计算第 n 个斐波那契数"""
    if n <= 1:
        return n
    '''

suggestions = client.complete(
    filepath="fibonacci.py",
    content=code_context
)

for suggestion in suggestions['choices']:
    print(f"Suggestion: {suggestion['text']}")

评价

Tabby 在自托管 AI 编程助手领域树立了新的标杆。它成功平衡了开源灵活性与企业级功能需求,为那些无法使用或不想使用商业 AI 编程工具的团队提供了可靠的替代方案。项目文档完善,部署相对简单,社区活跃度高。对于注重代码隐私的企业来说,Tabby 是目前最佳的选择之一。

3. Coolify:开源 Heroku 替代方案

项目概述

Coolify 是一个功能完整的开源平台即服务(PaaS)解决方案,旨在为开发者提供 Heroku 风格的部署体验,同时保持对底层基础设施的完全控制。该项目以其简洁的设计理念和强大的功能集,迅速成为自托管部署领域的热门选择。

作为一个一体化部署平台,Coolify 支持部署各类应用,包括静态网站、Node.js、Python、PHP、Ruby、Go 等多种语言和框架的应用,还支持 Docker 容器部署和数据库服务管理。

核心功能

多应用类型支持:Coolify 原生支持多种应用类型,包括静态站点、Node.js、Python、PHP、Ruby、Go、Rust、Java 应用,以及 Docker 容器。这种广泛的支持使其成为真正的通用部署平台。

一键部署:通过简单的配置(通常只需一个 docker-compose.yml 文件),即可实现应用的自动化部署。Git 推送自动触发部署,大大简化了 DevOps 工作流。

数据库服务:内置 PostgreSQL、MySQL、MongoDB、Redis、Elasticsearch 等流行数据库的一键部署和管理功能,无需额外部署数据库服务。

SSL 证书管理:自动通过 Let’s Encrypt 获取和续期 SSL 证书,确保所有部署的应用都启用 HTTPS。

资源监控:提供实时的 CPU、内存、磁盘和网络使用监控,帮助用户了解应用运行状态。

团队协作:支持多用户和团队管理,可以设置不同的访问权限,适合团队开发场景。

适用场景

个人开发者:希望简化部署流程,又不想依赖大型云平台的个人开发者。

初创团队:需要快速迭代产品,同时希望控制基础设施成本的初创团队。

内部部署:企业内部需要部署私有应用,但又缺乏专业运维团队的场景。

教学和学习:用于教授 DevOps 和云原生技术的教学环境。

安装方式

Coolify 提供自动化安装脚本,最短几分钟即可完成部署:

自动化安装(推荐)

1
2
3
4
5
# 安装脚本
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash

# 安装完成后,访问 https://your-server-ip:8000
# 按照向导完成初始化配置

手动 Docker 部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 创建数据目录
mkdir -p coolify/{data,panels,backups}

# 创建 Docker Compose 配置
cat > docker-compose.yml << 'EOF'
version: '3.8'

services:
  coolify:
    image: coolifyio/coolify:latest
    container_name: coolify
    ports:
      - "8000:8000"
      - "8080:8080"
    volumes:
      - coolify-data:/data
      - coolify-log:/var/log/coolify
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Shanghai
      - SECRET_KEY_BASE=your-secret-key-min-32-chars
    restart: unless-stopped

volumes:
  coolify-data:
    external: true
EOF

# 初始化数据卷
docker volume create coolify-data

# 启动服务
docker-compose up -d

生产环境配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 配置域名和 SSL
# 创建 coolify.conf 文件

server {
    listen 80;
    server_name coolify.yourdomain.com;
    
    location / {
        proxy_pass http://localhost:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}

代码示例

以下是创建一个简单 Node.js 应用并通过 Coolify 部署的配置示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{
  "name": "my-node-app",
  "type": "application",
  "source": {
    "type": "git",
    "git_repository": "https://github.com/username/my-node-app.git",
    "branch": "main"
  },
  "destination": {
    "host": "localhost",
    "port": 22,
    "username": "root",
    "path": "/var/www/my-node-app"
  },
  "static": false,
  "port": 3000,
  "build": {
    "command": "npm install && npm run build"
  },
  "health_check": {
    "command": "curl -f http://localhost:3000/health",
    "interval": 10,
    "timeout": 5,
    "retries": 3
  },
  "environment_variables": {
    "NODE_ENV": "production",
    "DATABASE_URL": "${DATABASE_URL}"
  },
  "domains": [
    {
      "name": "api.yourdomain.com",
      "generate_ssl": true,
      "force_ssl": true
    }
  ],
  "health_check_enabled": true,
  "persistent_storages": [
    {
      "name": "uploads",
      "path": "/app/uploads",
      "size": "1Gi"
    }
  ],
  "clone_command": "git clone ${GIT_REPOSITORY_URL} .",
  "restart_policy": "always",
  "horizontal_scaling": {
    "enabled": true,
    "min": 1,
    "max": 3
  }
}

评价

Coolify 在自托管 PaaS 领域表现出色,它成功地将复杂的 DevOps 流程简化为直观的操作界面。项目持续活跃更新,社区反馈积极。对于寻求 Heroku 替代方案或希望建立私有部署平台的用户,Coolify 提供了出色的解决方案。虽然对于超大规模部署可能需要额外优化,但对于大多数中小型项目来说,Coolify 完全能够胜任。

4. Home Assistant:开源智能家居平台

项目概述

Home Assistant 是一个功能强大且广泛使用的开源智能家居平台,支持集成数千种智能设备和服务。作为智能家居领域的标杆项目,Home Assistant 以其出色的兼容性、强大的自动化能力和活跃的社区生态,赢得了全球数百万用户的青睐。

该项目采用 Python 编写,设计理念强调本地控制优先,确保用户隐私数据不离开家庭网络。这一特性使其在智能家居平台中独树一帜,特别适合注重隐私安全的用户。

核心功能

设备集成:Home Assistant 支持超过 2,000 种品牌和设备的集成,涵盖照明、恒温器、摄像头、门锁、传感器、媒体播放器等几乎所有主流智能家居设备品类。

本地控制:优先在本地网络内完成设备通信和控制,仅在必要时才与云服务交互。这种设计确保了即使在互联网中断时,核心智能家居功能仍能正常工作。

自动化引擎:强大的自动化引擎支持基于时间、状态、事件、设备状态等多种条件的自动化规则创建。YAML 或可视化编辑器都能完成自动化配置。

场景控制:支持创建复杂的场景模式,一键触发多个设备的协调动作,如"离家模式"、“睡眠模式”、“观影模式"等。

仪表盘:高度可定制的仪表盘界面,支持多种卡片类型和布局,满足不同用户对界面美观和功能的需求。

能源监控:内置能源监控功能,可以追踪家庭用电量、太阳能发电量等,帮助用户了解和优化能源使用。

适用场景

全屋智能家居:作为家庭智能中枢,统一管理和控制所有智能设备。

能源管理:通过监控和自动化,优化家庭能源使用,降低电费支出。

安防系统:集成摄像头、门窗传感器、动作检测器等,构建完整的家庭安防系统。

辅助生活:为老年人或行动不便者提供自动化辅助,提高生活便利性和安全性。

安装方式

Home Assistant 提供多种安装方式,适合不同技术水平的用户:

Home Assistant Operating System(推荐新手)

1
2
3
4
5
# Raspberry Pi 4 安装
# 1. 下载 Home Assistant OS 镜像
# 2. 使用 Balena Etcher 写入 SD 卡
# 3. 配置网络并启动
# 4. 访问 http://homeassistant.local:8123

Docker 部署(推荐进阶用户)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 创建 Docker 网络
docker network create homeassistant

# 运行 Home Assistant
docker run -d \
    --name homeassistant \
    --privileged \
    --restart=unless-stopped \
    -e TZ=Asia/Shanghai \
    -v /path/to/config:/config \
    --network=homeassistant \
    --device /dev/ttyUSB0:/dev/ttyUSB0 \
    --publish 8123:8123 \
    homeassistant/home-assistant:latest

# 可选:添加 Zigbee 协调器支持
docker run -d \
    --name zigbee2mqtt \
    --restart=unless-stopped \
    -e TZ=Asia/Shanghai \
    -v /opt/zigbee2mqtt:/data \
    --device /dev/ttyACM0:/dev/ttyACM0 \
    koenkk/zigbee2mqtt:latest

Docker Compose 完整配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: homeassistant/home-assistant:latest
    volumes:
      - /home/pi/homeassistant:/config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    network_mode: host
    privileged: true
    devices:
      - /dev/ttyACM0:/dev/ttyACM0
    environment:
      - TZ=Asia/Shanghai

  mosquitto:
    image: eclipse-mosquitto:latest
    container_name: mosquitto
    ports:
      - "1883:1883"
      - "9001:9001"
    volumes:
      - /home/pi/mosquitto/config:/mosquitto/config
      - /home/pi/mosquitto/data:/mosquitto/data
      - /home/pi/mosquitto/log:/mosquitto/log
    restart: unless-stopped

  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt:latest
    volumes:
      - /home/pi/zigbee2mqtt:/data
      - /run/udev:/run/udev:ro
    devices:
      - /dev/ttyACM0:/dev/ttyACM0
    restart: unless-stopped
    environment:
      - TZ=Asia/Shanghai
    depends_on:
      - mosquitto

代码示例

以下是 Home Assistant 自动化配置的示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# automations.yaml
- id: 'arrive_home_lights'
  alias: 回家开灯
  description: 当有人回家时,自动打开玄关灯
  trigger:
    - platform: zone
      entity_id: person.family_member
      zone: zone.home
      event: enter
  condition:
    - condition: sun
      after: sunset
      before: sunrise
  action:
    - service: light.turn_on
      target:
        entity_id: light.entrance
      data:
        brightness: 80
        color_name: warm_white

- id: 'night_security'
  alias: 夜间安防模式
  description: 夜间自动启动安防监控
  trigger:
    - platform: time
      at: "23:00:00"
  action:
    - service: switch.turn_on
      target:
        entity_id:
          - switch.front_door_camera
          - switch.backyard_camera
    - service: notify.mobile_app
      data:
        title: "安防已启动"
        message: "夜间安防模式已激活,所有摄像头已开始录制"

# scripts.yaml
- id: 'movie_mode'
  alias: 观影模式
  description: 一键启动观影模式
  sequence:
    - service: light.turn_off
      target:
        entity_id: all
    - service: light.turn_on
      target:
        entity_id: light.living_room
      data:
        brightness: 30
        color_name: teal
    - service: media_player.turn_on
      target:
        entity_id: media_player.living_room_tv
    - service: cover.close_cover
      target:
        entity_id: cover.living_room_blinds

评价

Home Assistant 是智能家居领域最值得推荐的开源项目之一。其卓越的设备兼容性让用户可以自由选择不同品牌的智能设备,而不被单一生态系统所束缚。本地控制优先的设计理念在隐私保护方面具有显著优势。丰富的社区插件和活跃的论坛资源,使得学习和问题解决都变得相对容易。对于希望掌控自己智能家居数据的用户,Home Assistant 是首选方案。

5. AppFlowy:开源 Notion 替代方案

项目概述

AppFlowy 是一个开源的项目管理和协作工具,定位为 Notion 的开源替代方案。该项目旨在为用户提供类似 Notion 的使用体验,同时确保数据完全由用户自己掌控。采用 Flutter 开发,AppFlowy 同时支持 Windows、macOS、Linux 和移动端平台。

项目的核心理念是"你的工作空间,你的数据”,强调用户对数据的完全所有权。与 Notion 等云服务不同,AppFlowy 默认将数据存储在本地,用户可以选择同步到自托管的存储服务。

核心功能

块级编辑器:采用块级编辑架构,每个段落、图片、表格等都是一个独立的"块",支持灵活的内容组织和重新排列。这种设计让文档编辑更加灵活和直观。

多视图支持:同一页面可以切换不同视图,包括文档视图、看板视图、列表视图、日历视图等,满足不同场景下的项目管理需求。

模板系统:内置丰富的模板库,涵盖项目管理、知识库、笔记、目标追踪等多种场景,用户也可以创建和分享自定义模板。

团队协作:支持多用户协作,提供权限管理和实时协作功能(通过自托管服务器)。

插件架构:开放插件接口,允许开发者扩展功能,构建自定义的工作流程和集成。

数据导出:支持导出为 Markdown、PDF、HTML 等多种格式,确保数据可移植性。

适用场景

个人知识管理:作为个人的第二大脑,管理笔记、文档、灵感收集等。

团队项目管理:中小型团队的项目规划、任务分配、进度追踪。

文档协作:团队内部知识库建设和文档协作编辑。

目标追踪:个人或团队的目标设定和进度追踪。

安装方式

AppFlowy 提供多种安装方式:

桌面应用安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# macOS (Homebrew)
brew install --cask appflowy

# Linux (snap)
sudo snap install appflowy

# Linux (Debian/Ubuntu)
wget https://github.com/AppFlowy-IO/AppFlowy/releases/latest/download/AppFlowy-linux-x86_64.deb
sudo dpkg -i AppFlowy-linux-x86_64.deb

# Windows
# 从 GitHub Releases 下载 MSI 安装包运行

Docker 自托管部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 拉取镜像
docker pull appflowy/appflowy:latest

# 运行容器
docker run -d \
    --name appflowy \
    -p 8000:8000 \
    -v appflowy-data:/app/data \
    appflowy/appflowy:latest

# 访问 http://localhost:8000

Docker Compose 生产部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
version: '3'
services:
  appflowy:
    image: appflowy/appflowy:latest
    container_name: appflowy
    ports:
      - "8000:8000"
    volumes:
      - appflowy-data:/app/data
    restart: unless-stopped
    environment:
      - APPFLOWY_DATA_DIR=/app/data
      - APPFLOWY_SECRET_KEY=your-secret-key-here

volumes:
  appflowy-data:

代码示例

AppFlowy 支持通过 API 与外部系统集成,以下是一个简单的 Python 集成示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import requests
import json
from pathlib import Path

class AppFlowyClient:
    def __init__(self, base_url, api_key=None):
        self.base_url = base_url
        self.headers = {
            'Content-Type': 'application/json'
        }
        if api_key:
            self.headers['Authorization'] = f'Bearer {api_key}'
    
    def create_page(self, title, content=None, parent_id=None):
        """创建新页面"""
        payload = {
            'title': title,
            'icon': '📝'
        }
        
        if content:
            payload['content'] = content
        
        if parent_id:
            payload['parent_id'] = parent_id
        
        response = requests.post(
            f'{self.base_url}/api/v1/pages',
            headers=self.headers,
            json=payload
        )
        
        return response.json()
    
    def create_task(self, title, status='todo', due_date=None):
        """创建任务(看板视图)"""
        payload = {
            'title': title,
            'properties': {
                'status': {'value': status},
                'due_date': due_date
            }
        }
        
        response = requests.post(
            f'{self.base_url}/api/v1/tasks',
            headers=self.headers,
            json=payload
        )
        
        return response.json()
    
    def export_to_markdown(self, page_id):
        """导出页面为 Markdown"""
        response = requests.get(
            f'{self.base_url}/api/v1/pages/{page_id}/export',
            headers=self.headers,
            params={'format': 'markdown'}
        )
        
        return response.text

# 使用示例
client = AppFlowyClient("http://localhost:8000")

# 创建项目页面
project = client.create_page(
    title="AI 项目规划",
    parent_id="workspace-id-here"
)
print(f"Created project: {project['id']}")

# 添加任务
task = client.create_task(
    title="完成需求分析",
    status='in_progress',
    due_date='2026-04-20'
)
print(f"Created task: {task['id']}")

评价

AppFlowy 在开源协作工具领域展现出巨大的潜力。它成功地在用户体验和开源灵活性之间找到了平衡点,界面设计简洁直观,功能足够丰富。对于那些希望摆脱云服务依赖,同时又不想牺牲使用体验的用户,AppFlowy 是一个极具吸引力的选择。虽然项目仍处于积极开发中,部分高级功能还在完善中,但凭借清晰的路线图和活跃的社区,AppFlowy 的未来值得期待。

6. NocoDB:开源 Airtable 替代方案

项目概述

NocoDB 是一个开源的低代码平台,定位为 Airtable 的开源替代方案。它允许用户通过直观的表格界面快速构建数据库应用,无需编写大量后端代码。项目采用 Node.js 开发,支持 MySQL、PostgreSQL、SQL Server、SQLite 等多种数据库作为后端存储。

NocoDB 的核心价值在于将传统数据库转化为类似电子表格的友好界面,让非技术人员也能轻松创建和管理复杂的数据应用,同时保留了 SQL 的全部能力供高级用户使用。

核心功能

表格视图:将数据库表以电子表格的形式呈现,支持排序、筛选、分组、冻结列等熟悉的数据操作。

多种视图:除了表格视图,还支持看板视图、画廊视图、日历视图、网格视图等,满足不同数据展示需求。

关系管理:支持多种关系类型(一对多、多对多、自引用),可以轻松建立表之间的关联。

公式字段:类电子表格的公式系统,支持复杂的字段计算和数据处理。

自动化:内置自动化工作流,支持基于事件的 actions,如 webhook 触发、邮件通知、脚本执行等。

API 生成:自动生成 RESTful 和 GraphQL API,方便与其他系统集成。

角色权限:细粒度的访问控制,支持基于角色和视图的权限设置。

适用场景

快速原型:创业团队可以快速构建产品原型,验证业务假设。

业务应用:企业内部管理系统,如客户关系管理(CRM)、库存管理、项目跟踪等。

数据协作:团队共享和协作处理结构化数据。

低代码开发:为非技术人员提供构建简单应用的能力。

安装方式

NocoDB 提供多种部署选项:

Docker 快速部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 使用 MySQL 作为后端数据库
docker run -d \
    --name nocodb \
    -p 8080:8080 \
    -e NC_DB="mysql2://host.docker.internal:3306?u=root&p=password&d=root" \
    -e NC_AUTH_JWT_SECRET="your-32-char-secret-key-here" \
    nocodb/nocodb:latest

# 使用 SQLite(适合小型部署)
docker run -d \
    --name nocodb \
    -p 8080:8080 \
    -v nocodb-data:/data \
    nocodb/nocodb:latest

Docker Compose 完整配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
version: '3'

services:
  nocodb:
    container_name: nocodb
    image: nocodb/nocodb:latest
    ports:
      - "8080:8080"
    volumes:
      - nocodb-data:/data
    environment:
      - NC_DB=mysql2://db:3306?u=root&p=password&d=root
      - NC_AUTH_JWT_SECRET=${JWT_SECRET:-change-this-secret-key}
      - NC_PUBLIC_URL=http://localhost:8080
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: mysql:8.0
    container_name: nocodb-db
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=root
    volumes:
      - mysql-data:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: unless-stopped

  redis:
    image: redis:alpine
    container_name: nocodb-redis
    restart: unless-stopped

volumes:
  nocodb-data:
  mysql-data:

Kubernetes 部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nocodb
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nocodb
  template:
    metadata:
      labels:
        app: nocodb
    spec:
      containers:
      - name: nocodb
        image: nocodb/nocodb:latest
        ports:
        - containerPort: 8080
        envFrom:
        - secretRef:
            name: nocodb-secrets
        resources:
          limits:
            memory: 1Gi
          requests:
            memory: 512Mi
---
apiVersion: v1
kind: Service
metadata:
  name: nocodb
spec:
  selector:
    app: nocodb
  ports:
  - port: 80
    targetPort: 8080

代码示例

以下是使用 NocoDB API 的 Python 示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import requests
import json

class NocoDBClient:
    def __init__(self, base_url, api_token):
        self.base_url = base_url.rstrip('/')
        self.headers = {
            'xc-token': api_token,
            'Content-Type': 'application/json'
        }
    
    def list_records(self, table_name, params=None):
        """列出表中的记录"""
        response = requests.get(
            f'{self.base_url}/api/v1/db/data/v1/{table_name}',
            headers=self.headers,
            params=params or {}
        )
        return response.json()
    
    def create_record(self, table_name, data):
        """创建新记录"""
        response = requests.post(
            f'{self.base_url}/api/v1/db/data/v1/{table_name}',
            headers=self.headers,
            json=data
        )
        return response.json()
    
    def update_record(self, table_name, record_id, data):
        """更新记录"""
        response = requests.patch(
            f'{self.base_url}/api/v1/db/data/v1/{table_name}/{record_id}',
            headers=self.headers,
            json=data
        )
        return response.json()
    
    def delete_record(self, table_name, record_id):
        """删除记录"""
        response = requests.delete(
            f'{self.base_url}/api/v1/db/data/v1/{table_name}/{record_id}',
            headers=self.headers
        )
        return response.status_code == 200

# 使用示例
client = NocoDBClient(
    base_url="http://localhost:8080",
    api_token="your-nocodb-token"
)

# 创建项目记录
project = client.create_record("Projects", {
    "Name": "AI 助手开发",
    "Status": "Active",
    "Budget": 50000,
    "StartDate": "2026-04-01",
    "TeamMembers": ["Alice", "Bob", "Charlie"]
})

print(f"Created project with ID: {project['Id']}")

# 批量创建任务
tasks = [
    {"Project": project['Id'], "Task": "需求分析", "Status": "Done"},
    {"Project": project['Id'], "Task": "架构设计", "Status": "In Progress"},
    {"Project": project['Id'], "Task": "开发实现", "Status": "Todo"},
]

for task in tasks:
    client.create_record("Tasks", task)

# 查询所有进行中的任务
active_tasks = client.list_records("Tasks", {
    "where": "(Status,eq,In Progress)"
})

print(f"Found {len(active_tasks['list'])} active tasks")

评价

NocoDB 为企业提供了一个强大的数据库前端解决方案,让非技术人员也能参与到数据应用的构建中来。它成功地将数据库的灵活性与现代 SaaS 应用的易用性结合起来。项目文档完善,API 设计清晰,社区活跃度高。对于需要快速构建内部工具或数据管理应用的企业,NocoDB 是一个值得考虑的选择。

7. Appwrite:开源后端即服务

项目概述

Appwrite 是一个开源的后端即服务(Backend-as-a-Service, BaaS)平台,为开发者提供构建现代应用所需的所有后端服务。该项目采用 PHP 开发自研,提供了身份验证、数据库、存储、云函数、消息队列等一站式后端解决方案。

与商业 BaaS 服务(如 Firebase)不同,Appwrite 可以在任何服务器上自托管,确保数据主权完全属于开发者。其现代化的 UI 和直观的 API 设计,大大降低了后端开发的复杂度。

核心功能

身份验证与用户管理:支持邮箱密码、手机号、OAuth2(Google、GitHub、Twitter 等)等多种登录方式,提供完整的用户注册、登录、密码重置等功能。

数据库:NoSQL 风格的文档数据库,支持复杂的查询、关系管理、索引设置等。

文件存储:类似 AWS S3 的对象存储服务,支持图片压缩、CDN 加速、访问控制等。

云函数:支持多种运行时(Node.js、Python、PHP、Ruby、Dart)的事件驱动函数。

实时订阅:基于 WebSocket 的实时数据订阅,支持数据库变更、文件上传、消息等实时事件。

消息队列:内置消息队列系统,支持异步任务处理和定时任务。

地域部署:支持多地域部署,优化全球用户的访问延迟。

适用场景

移动应用后端:为 iOS、Android、Flutter 应用提供后端服务。

Web 应用后端:快速构建现代 Web 应用的后端能力。

SaaS 产品:快速搭建 SaaS 产品的核心后端架构。

原型验证:创业项目快速验证产品概念的理想选择。

安装方式

Appwrite 提供 Docker 一键部署:

Docker 部署(推荐)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 安装 Docker 和 Docker Compose 后执行

# 创建部署目录
mkdir appwrite
cd appwrite

# 下载 docker-compose.yml
curl -L https://appwrite.io/docker-compose.yml > docker-compose.yml

# 编辑配置(可选)
# vim docker-compose.yml

# 启动所有服务
docker-compose up -d

# 查看启动状态
docker-compose ps

# 访问 http://localhost 并完成设置

自定义 Docker Compose 配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
version: '3'

services:
  traefik:
    image: traefik:v2.5
    container_name: appwrite-traefik
    command: --providers.docker=true --providers.docker.exposedbydefault=false --entrypoints.web.address=:80 --entrypoints.websecure.address=:443
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

  appwrite:
    image: appwrite/appwrite:latest
    container_name: appwrite
    restart: unless-stopped
    environment:
      - _APP_ENV=production
      - _APP_DOMAIN=appwrite.example.com
      - _APP_OPENSSL_KEY_V1=your-32-char-secret-key
      - _APP_STORAGE_LIMIT=30000000000
    volumes:
      - appwrite-uploads:/storage/uploads
      - appwrite-cache:/storage/cache
      - appwrite-config:/storage/config
      - appwrite-certificates:/storage/certificates
    depends_on:
      - mariadb
      - redis
      - influxdb
    labels:
      - traefik.enable=true
      - traefik.http.routers.appwrite.rule=Host(`appwrite.example.com`)
      - traefik.http.routers.appwrite.entrypoints=websecure

  mariadb:
    image: mariadb:10.7
    container_name: appwrite-mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=appwrite
    volumes:
      - appwrite-mysql:/var/lib/mysql
    restart: unless-stopped

  redis:
    image: redis:7.0-alpine
    container_name: appwrite-redis
    restart: unless-stopped

  influxdb:
    image: influxdb:2.0
    container_name: appwrite-influxdb
    volumes:
      - appwrite-influxdb:/var/lib/influxdb2
    restart: unless-stopped

volumes:
  appwrite-uploads:
  appwrite-cache:
  appwrite-config:
  appwrite-certificates:
  appwrite-mysql:
  appwrite-influxdb:

代码示例

以下是使用 Appwrite SDK 的示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from appwrite.client import Client
from appwrite.services.databases import Databases
from appwrite.services.storage import Storage
from appwrite.services.functions import Functions

class AppwriteClient:
    def __init__(self, endpoint, project_id, api_key):
        self.client = Client()
        self.client.set_endpoint(endpoint)
        self.client.set_project(project_id)
        self.client.set_key(api_key)
        
        self.databases = Databases(self.client)
        self.storage = Storage(self.client)
        self.functions = Functions(self.client)
    
    def create_document(self, database_id, collection_id, document_id, data):
        """创建文档"""
        return self.databases.create_document(
            database_id=database_id,
            collection_id=collection_id,
            document_id=document_id,
            data=data
        )
    
    def upload_file(self, file_path, bucket_id):
        """上传文件"""
        with open(file_path, 'rb') as f:
            return self.storage.create_file(
                bucket_id=bucket_id,
                file_id='unique()',
                file=f
            )

# 使用示例
appwrite = AppwriteClient(
    endpoint="https://cloud.appwrite.io/v1",
    project_id="your-project-id",
    api_key="your-api-key"
)

# 创建用户文档
user = appwrite.create_document(
    database_id="users-db",
    collection_id="users",
    document_id="unique()",
    data={
        "name": "张三",
        "email": "[email protected]",
        "role": "admin",
        "created_at": "2026-04-14"
    }
)

# 上传头像
avatar = appwrite.upload_file(
    file_path="./avatar.png",
    bucket_id="avatars"
)

print(f"User created: {user['$id']}")
print(f"Avatar uploaded: {avatar['$id']}")

评价

Appwrite 在开源 BaaS 领域表现出色,为开发者提供了 Firebase 的一个强大开源替代方案。其自托管能力确保了数据安全性和法规合规性,而现代化的 UI 和清晰的文档使得上手相对容易。对于需要快速构建应用后端同时又不想被云服务锁定的团队,Appwrite 是理想的选择。

8. Hoppscotch:开源 API 开发工具

项目概述

Hoppscotch 是一个开源的 API 开发工具,定位为 Postman 的轻量级开源替代方案。项目采用 TypeScript 和 Vue.js 开发,提供直观的 Web 界面和高效的 API 测试体验。其设计理念强调快速、简洁、无广告,让开发者能够专注于 API 本身而不是工具本身。

作为一个 PWA(渐进式 Web 应用),Hoppscotch 支持离线使用,同时提供浏览器扩展和桌面应用,满足不同使用场景的需求。

核心功能

API 测试:完整的 HTTP 请求支持,包括 GET、POST、PUT、PATCH、DELETE 等方法,支持自定义 Headers、Query 参数和 Body。

环境管理:支持多环境配置(开发、测试、生产等),方便在不同环境间切换。

集合管理:组织和分享 API 集合,支持导入 Postman Collection 格式。

GraphQL 支持:原生支持 GraphQL 查询,提供 Schema 自动完成功能。

WebSocket 测试:支持 WebSocket 连接测试。

实时协作:通过轻量级协作功能,支持团队共享 API 测试环境。

代理模式:支持通过代理绕过 CORS 限制。

适用场景

API 开发测试:前后端分离开发中的 API 接口测试。

第三方 API 探索:学习和探索第三方 API 服务。

团队协作:团队内部共享 API 设计和测试结果。

教学演示:API 设计和测试的教学演示。

安装方式

Hoppscotch 提供多种部署方式:

官方托管版:访问 hoppscotch.io 直接使用。

Docker 部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 拉取并运行
docker run -d \
    --name hoppscotch \
    -p 3000:3000 \
    -e PROXY_URL="https://proxy.hoppscotch.io" \
    hoppscotch/hoppscotch:latest

# 使用 Docker Compose
version: '3'
services:
  hoppscotch:
    image: hoppscotch/hoppscotch:latest
    container_name: hoppscotch
    ports:
      - "3000:3000"
    environment:
      - PROXY_URL=https://proxy.hoppscotch.io
      - NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX
    restart: unless-stopped

自托管完整部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 克隆仓库
git clone https://github.com/hoppscotch/hoppscotch.git
cd hoppscotch

# 安装依赖
pnpm install

# 配置环境变量
cp .env.example .env
# 编辑 .env 文件

# 构建
pnpm build

# 运行
pnpm start

代码示例

Hoppscotch 提供 CLI 工具,以下是一个集成示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 使用 hopp-cli 运行 API 测试

# 创建测试脚本 test-collection.json
{
  "name": "API Tests",
  "requests": [
    {
      "name": "Get Users",
      "method": "GET",
      "url": "https://api.example.com/users",
      "headers": [
        { "key": "Authorization", "value": "Bearer {{token}}" }
      ],
      "tests": [
        {
          "name": "Status is 200",
          "condition": "statusCode == 200"
        },
        {
          "name": "Response has data",
          "condition": "response.body.data.length > 0"
        }
      ]
    },
    {
      "name": "Create User",
      "method": "POST",
      "url": "https://api.example.com/users",
      "headers": [
        { "key": "Content-Type", "value": "application/json" }
      ],
      "body": {
        "name": "Test User",
        "email": "[email protected]"
      }
    }
  ]
}

# 运行测试
hopp test test-collection.json --env production

评价

Hoppscotch 以其简洁的设计和高效的体验赢得了开发者的喜爱。对于那些觉得 Postman 过于臃肿的用户,Hoppscotch 提供了一个更轻量但功能足够的替代方案。其开源特性和自托管能力对于有数据隐私要求的团队尤为重要。持续的更新和活跃的社区确保了项目的长期可用性。

9. Infisical:开源密钥管理平台

项目概述

Infisical 是一个开源的密钥管理平台,专注于解决现代开发团队面临的环境变量和密钥管理难题。项目提供类似 1Password 的团队密钥管理体验,同时支持与 CI/CD 流水线、服务器、应用的无缝集成。

在 DevOps 实践中,环境变量和敏感信息的管理一直是个痛点。Infisical 通过提供统一的密钥管理解决方案,帮助团队更安全、更高效地管理敏感配置信息。

核心功能

集中化管理:统一管理所有环境变量和密钥,支持按项目、环境、Secret 类型进行分类。

密钥轮换:自动轮换密钥,降低密钥泄露风险。

访问控制:基于角色的细粒度权限控制,支持团队协作。

审计日志:完整的密钥访问和操作审计记录。

集成支持:与 GitHub Actions、AWS、Terraform、Kubernetes 等主流工具深度集成。

加密存储:所有密钥在传输和静态时都经过加密处理。

适用场景

环境配置管理:管理开发、测试、生产环境的配置变量。

CI/CD 流水线:安全地将密钥注入到 CI/CD 流程中。

应用密钥管理:在多个应用和服务间安全地共享密钥。

团队密钥协作:多人团队安全地管理共享密钥。

安装方式

Infisical 提供自托管部署:

Docker 部署

1
2
3
4
5
6
7
8
# 快速部署
docker run -d \
    --name infisical \
    -p 8080:8080 \
    -e DATABASE_URL="postgresql://user:password@localhost:5432/infisical" \
    -e JWT_SECRET="your-jwt-secret-min-32-chars" \
    -e ENCRYPTION_KEY="your-encryption-key-min-32-chars" \
    infisical/infisical:latest

Docker Compose 完整配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
version: '3'
services:
  infisical:
    image: infisical/infisical:latest
    container_name: infisical
    ports:
      - "8080:8080"
    environment:
      - DATABASE_URL=postgresql://postgres:postgres@db:5432/infisical
      - JWT_SECRET=${JWT_SECRET}
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}
      - REDIS_URL=redis://redis:6379
    depends_on:
      - db
      - redis
    restart: unless-stopped

  db:
    image: postgres:15-alpine
    container_name: infisical-db
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - postgres-data:/var/lib/postgresql/data
    restart: unless-stopped

  redis:
    image: redis:7-alpine
    container_name: infisical-redis
    restart: unless-stopped

volumes:
  postgres-data:

代码示例

以下是使用 Infisical CLI 的示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 安装 Infisical CLI
brew install infisical/infisical-cli/infisical-cli

# 登录
infisical login

# 初始化项目
infisical init

# 设置环境变量
infisical secrets set DATABASE_URL="postgresql://localhost:5432/db" --env=production
infisical secrets set API_KEY="your-api-key" --env=production

# 在应用中注入环境变量
source <(infisical export --env=production)

# 或者直接运行命令
infisical run --env=production -- ./start-app.sh

Kubernetes 集成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: v1
kind: Secret
metadata:
  name: infisical-secret
type: Opaque
stringData:
  # Infisical 自动注入这些值
  DATABASE_URL: ${INFISICAL_DATABASE_URL}
  API_KEY: ${INFISICAL_API_KEY}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  template:
    spec:
      containers:
      - name: myapp
        image: myapp:latest
        envFrom:
        - secretRef:
            name: infisical-secret

评价

Infisical 填补了开源密钥管理领域的空白,为团队提供了一个安全、高效的密钥管理解决方案。其与主流 DevOps 工具的深度集成使得采用门槛相对较低。对于注重安全性的开发团队,Infisical 是管理环境变量和密钥的理想选择。

10. Supabase:开源 Firebase 替代方案

项目概述

Supabase 是一个开源的 Firebase 替代方案,提供 PostgreSQL 数据库、身份验证、存储、实时订阅、边缘函数等后端服务。项目基于 PostgreSQL 构建,充分利用了 PostgreSQL 的强大功能,同时提供了现代化的开发者体验。

作为开源领域的热门项目,Supabase 已经获得了超过 30,000 颗 GitHub 星标,被数千家企业用于生产环境。

核心功能

PostgreSQL 数据库:完整的 PostgreSQL 实例,支持所有 PostgreSQL 特性和扩展。

实时订阅:基于 PostgreSQL 的逻辑复制,实现毫秒级的数据库变更推送。

身份验证:支持邮箱、魔法链接、OAuth、2FA 等多种认证方式。

存储:类似 S3 的文件存储服务,带有图像处理能力。

边缘函数:Deno 运行时的边缘函数,支持全球低延迟部署。

自动 API:基于数据库 schema 自动生成 RESTful 和 GraphQL API。

行级安全:基于 PostgreSQL RLS 的细粒度访问控制。

适用场景

Web/Mobile 应用后端:快速构建现代应用的后端服务。

数据分析应用:需要 PostgreSQL 强大查询能力的应用。

实时协作应用:需要实时数据同步的应用。

内容管理系统:基于 PostgreSQL 的 CMS 后端。

安装方式

Supabase 主要以云服务形式提供,但也可以本地开发使用:

本地开发

1
2
3
4
5
6
7
8
# 安装 Supabase CLI
npm install -g supabase-cli

# 启动本地开发环境
supabase init
supabase start

# 访问本地 Dashboard http://localhost:54323

自托管部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 克隆部署脚本
git clone https://github.com/supabase/supabase.git
cd docker

# 配置环境变量
cp .env.example .env
# 编辑 .env 文件

# 启动服务
docker-compose up -d

Docker Compose 配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
version: '3'
services:
  studio:
    image: supabase/studio:latest
    ports:
      - "54323:3000"
    environment:
      - POSTGRES_Migrations_URL=postgres://postgres:postgres@kong:5432/supabase

  kong:
    image: kong:latest
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_DATABASE=kong
      - KONG_DECLARATIVE_CONFIG=/kongDeclarative.yml
    volumes:
      - ./kong.yml:/kongDeclarative.yml:ro

  rest:
    image: postgrest/postgrest:latest
    depends_on:
      - postgres
    environment:
      - PGRST_DB_URI=postgres://postgres:postgres@postgres:5432/postgres
      - PGRST_DB_SCHEMAS=public,storage,graphql_public

  realtime:
    image: supabase/realtime:latest
    depends_on:
      - postgres
    environment:
      - DB_HOST=postgres
      - DB_PORT=5432
      - DB_USER=postgres
      - DB_PASSWORD=postgres
      - DB_NAME=postgres

  postgres:
    image: supabase/postgres:latest
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./docker-compose:/docker-compose
    environment:
      - POSTGRES_PASSWORD=postgres

  gotrue:
    image: supabase/gotrue:latest
    depends_on:
      - postgres
    environment:
      - GOTRUE_DB_DRIVER=postgres
      - GOTRUE_DATABASE_URL=postgres://postgres:postgres@postgres:5432/gotrue

volumes:
  postgres-data:

代码示例

以下是使用 Supabase JavaScript SDK 的示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import { createClient } from '@supabase/supabase-js'

// 初始化客户端
const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_ANON_KEY
)

// 数据库操作
async function queryExamples() {
  // 插入数据
  const { data, error } = await supabase
    .from('posts')
    .insert([
      { 
        title: 'Hello Supabase',
        content: 'This is my first post!',
        author_id: 'user-uuid-here'
      }
    ])
    .select()

  // 查询数据
  const { data: posts } = await supabase
    .from('posts')
    .select('*, author:authors(*)')
    .eq('status', 'published')
    .order('created_at', { ascending: false })
    .limit(10)

  // 实时订阅
  supabase
    .channel('public:posts')
    .on('postgres_changes', {
      event: 'INSERT',
      schema: 'public',
      table: 'posts'
    }, (payload) => {
      console.log('New post:', payload.new)
    })
    .subscribe()
}

// 认证操作
async function authExamples() {
  // 注册
  const { data, error } = await supabase.auth.signUp({
    email: '[email protected]',
    password: 'secure-password'
  })

  // 登录
  const { data: { session }, error } = await supabase.auth.signInWithPassword({
    email: '[email protected]',
    password: 'secure-password'
  })

  // OAuth 登录(GitHub)
  const { data, error } = await supabase.auth.signInWithOAuth({
    provider: 'github',
    options: {
      redirectTo: 'http://localhost:3000/callback'
    }
  })

  // 监听认证状态变化
  supabase.auth.onAuthStateChange((event, session) => {
    if (event === 'SIGNED_IN') {
      console.log('User signed in:', session.user)
    }
  })
}

// 存储操作
async function storageExamples() {
  // 上传文件
  const { data, error } = await supabase.storage
    .from('avatars')
    .upload('avatar.png', fileObject, {
      cacheControl: '3600',
      upsert: false
    })

  // 获取公开 URL
  const { data: { publicUrl } } = supabase.storage
    .from('avatars')
    .getPublicUrl('avatar.png')
}

评价

Supabase 是开源后端服务领域最成功的项目之一。它充分利用 PostgreSQL 的强大功能,同时提供了现代开发者期望的易用性。活跃的社区、完善的文档、持续的功能更新使其成为构建现代应用的可靠选择。对于需要强大数据库能力同时又希望享受 BaaS 便利性的团队,Supabase 是首选方案。

结语

本期每日开源速递涵盖了十个各具特色的优秀开源项目,涵盖了 AI 对话界面、自托管 PaaS、智能家居、协作工具、后端服务等多个领域。这些项目共同的特点是:开源免费、完全自托管、社区活跃、功能完善。

在这个数据主权日益受到重视的时代,这些项目为开发者提供了摆脱商业服务锁定的可能性,同时保持甚至超越了商业产品的使用体验。建议开发者根据实际需求,选择合适的工具来提升工作效率和生活质量。


Current time: Tuesday, April 14th, 2026 — 6:00 AM (Asia/Shanghai) / 2026-04-13 22:00 UTC

技术栈

HTML & CSS JavaScript Vue.js React Python Go Node.js Git Docker Linux Hugo CI/CD

联系方式