Outline 完整指南:专为工程团队打造的开源 Wiki 与知识库 —— 2026 自托管部署
使用 Docker 在 10 分钟内部署 Outline。为工程团队构建实时协作 Wiki,支持 Markdown 编辑器、Slack 集成、全文搜索和细粒度权限控制。
- ⭐ 32000
- BSL-1.1
- 更新于 2026-05-19
{{< resource-info >}}
引言:文档去哪了 #
每个工程团队都经历过这种情况。入职文档存在于一个没人更新的 Google Doc 中。API 文档是一份 18 个月前最后编辑的 README。架构决策散落在 Slack 话题、Notion 页面和那个 IT 发誓"下季度"就会弃用的 Confluence 实例中。
文档过时的代价是真实的。GitLab 2025 开发者调查发现,工程师平均每周花费 4.2 小时搜索本应被记录的信息。对于一个 30 人的工程团队,这相当于每年 5,460 小时 —— 大约 2.6 名全职工程师在寻找答案而不是交付代码。
Outline 是一个专为团队设计的开源 Wiki 和知识库。拥有 32,000+ GitHub Stars、实时协作 Markdown 编辑器、原生 Slack 集成、全文搜索,以及映射到工程团队实际工作方式的权限模型,Outline 填补了 Confluence 企业级臃肿和 Notion SaaS 锁定之间的空白。
本指南涵盖完整的生产环境部署:使用 PostgreSQL 和 Redis 的 Docker Compose 设置、Nginx SSL 配置、Slack 集成、备份策略,以及你在投入之前应该了解的诚实权衡。
Outline 是什么? #
Outline 是一个用于构建团队知识库的开源协作 Wiki 平台。将其视为 Notion 和 Confluence 的自托管替代品,专为工程团队打造。每个文档底层使用 Markdown,通过精致的 WYSIWYG 编辑器渲染,支持斜杠命令、嵌入、表格、代码块和实时协作编辑。
文档被组织为 Collections —— 大致相当于文件夹或空间 —— 在 Collection、文档和用户级别具有细粒度权限。全文搜索索引每个单词。Slack 集成让你在聊天中搜索和预览文档。由于它是自托管的,你的知识产权留在你的服务器上。
Outline 工作原理:架构概览 #
Outline 的技术栈现代且架构良好:
- Node.js/TypeScript 后端 —— 基于 Express 的 API 服务器,处理认证、文档、Collection 和实时协作
- React 前端 —— 客户端渲染的 SPA,基于 ProseMirror 的富文本编辑器
- PostgreSQL —— 存储文档、用户账户、权限和元数据
- Redis —— 缓存、会话存储,以及通过 WebSocket 的实时协作状态
- 兼容 S3 的存储 —— 文件附件(自托管用 MinIO,云版用 AWS S3)
- ElasticSearch 或 Postgres FTS —— 全文文档搜索
实时协作 使用 WebSocket 连接的 Operational Transforms(OT)。当两个用户编辑同一文档时,更改在毫秒级传播,冲突解决实际有效 —— 没有 last-write-wins 的麻烦。
权限系统是最突出的功能。Collection 可以是:
- Public to team —— 任何有账户的人都可以阅读
- Private —— 只有受邀用户可以访问
- Read-only —— 团队可以查看但不能编辑
- Editor access —— 特定用户或组可以修改
文档继承 Collection 权限,但可以单独覆盖。这清晰地映射到工程团队的工作方式:runbook 是公开的,架构文档团队可访问,事故复盘是受限的。
安装与配置:生产环境 Docker 部署 #
Outline 需要三个服务:应用、PostgreSQL 和 Redis。一个可用于生产环境的 Docker Compose 配置:
# docker-compose.yml
version: "3.8"
services:
outline:
image: outlinewiki/outline:0.83.0
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://outline:outline_password@postgres:5432/outline
- DATABASE_URL_TEST=postgres://outline:outline_password@postgres:5432/outline-test
- REDIS_URL=redis://redis:6379
- SECRET_KEY=${SECRET_KEY}
- UTILS_SECRET=${UTILS_SECRET}
- URL=https://wiki.yourcompany.com
- PORT=3000
- AWS_ACCESS_KEY_ID=minio
- AWS_SECRET_ACCESS_KEY=minio123
- AWS_REGION=us-east-1
- AWS_S3_UPLOAD_BUCKET_URL=http://minio:9000
- AWS_S3_UPLOAD_BUCKET_NAME=outline
- AWS_S3_FORCE_PATH_STYLE=true
- AWS_S3_ACL=private
- FILE_STORAGE=local
- OIDC_CLIENT_ID=${OIDC_CLIENT_ID}
- OIDC_CLIENT_SECRET=${OIDC_CLIENT_SECRET}
- OIDC_AUTH_URI=${OIDC_AUTH_URI}
- OIDC_TOKEN_URI=${OIDC_TOKEN_URI}
- OIDC_USERINFO_URI=${OIDC_USERINFO_URI}
- OIDC_LOGOUT_URI=${OIDC_LOGOUT_URI}
- OIDC_DISPLAY_NAME=Google Workspace
- SLACK_CLIENT_ID=${SLACK_CLIENT_ID}
- SLACK_CLIENT_SECRET=${SLACK_CLIENT_SECRET}
- SLACK_VERIFICATION_TOKEN=${SLACK_VERIFICATION_TOKEN}
depends_on:
- postgres
- redis
- minio
restart: unless-stopped
postgres:
image: postgres:16-alpine
environment:
- POSTGRES_USER=outline
- POSTGRES_PASSWORD=outline_password
- POSTGRES_DB=outline
volumes:
- postgres-data:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:7-alpine
volumes:
- redis-data:/data
restart: unless-stopped
minio:
image: minio/minio:RELEASE.2026-04-01T00-00-00Z
command: server /data --console-address ":9001"
environment:
- MINIO_ROOT_USER=minio
- MINIO_ROOT_PASSWORD=minio123
volumes:
- minio-data:/data
restart: unless-stopped
minio-createbucket:
image: minio/mc:latest
depends_on:
- minio
entrypoint: >
/bin/sh -c "
sleep 10;
mc alias set local http://minio:9000 minio minio123;
mc mb local/outline || true;
mc anonymous set private local/outline;
exit 0;
"
volumes:
postgres-data:
redis-data:
minio-data:
生成密钥 #
启动之前,生成所需的密钥:
# 生成 256 位密钥
export SECRET_KEY=$(openssl rand -hex 32)
# 生成 utils 密钥
export UTILS_SECRET=$(openssl rand -hex 16)
echo "SECRET_KEY=$SECRET_KEY"
echo "UTILS_SECRET=$UTILS_SECRET"
添加到 .env 文件:
cat << 'EOF' > .env
SECRET_KEY=REPLACE_WITH_GENERATED_SECRET
UTILS_SECRET=REPLACE_WITH_GENERATED_SECRET
SLACK_CLIENT_ID=
SLACK_CLIENT_SECRET=
SLACK_VERIFICATION_TOKEN=
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
EOF
chmod 600 .env
启动服务栈 #
docker-compose up -d
# 检查所有服务是否健康
docker-compose ps
# 查看日志
docker-compose logs -f outline
约 30 秒后,Outline 可在 http://localhost:3000 访问。
配置认证 #
Outline 需要外部认证提供商。最简单的生产环境设置是 Google Workspace OIDC:
- 前往 Google Cloud Console → APIs & Services → Credentials
- 创建 OAuth 2.0 Client ID(Web application)
- 添加授权重定向 URI:
https://wiki.yourcompany.com/auth/oidc.callback - 将 client ID 和 secret 添加到
.env文件:
OIDC_CLIENT_ID=xxx.apps.googleusercontent.com
OIDC_CLIENT_SECRET=GOCSPX-xxx
OIDC_AUTH_URI=https://accounts.google.com/o/oauth2/v2/auth
OIDC_TOKEN_URI=https://oauth2.googleapis.com/token
OIDC_USERINFO_URI=https://openidconnect.googleapis.com/v1/userinfo
OIDC_LOGOUT_URI=https://accounts.google.com/logout
重启 Outline:
docker-compose restart outline
在 DigitalOcean 上快速部署 #
对于没有现有 Docker 设置的团队,在 DigitalOcean 上部署:
# 在全新的 Ubuntu 24.04 Droplet($6/月)上
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
# 克隆并启动
git clone https://github.com/outline/outline.git
cd outline
# 复制上面的 docker-compose.yml,配置 .env,然后:
docker compose up -d
或者,使用 HTStack 进行内置 SSL 和备份的托管 Outline 部署。
与工程工具栈集成 #
Slack 集成(深度链接) #
Outline 的 Slack 集成是其最强大的功能之一:
- 前往 Slack API Apps → Create New App → From Manifest
- 粘贴此 manifest:
_display_name: Outline Wiki
features:
bot_user:
display_name: Outline
always_online: true
slash_commands:
- command: /outline
url: https://wiki.yourcompany.com/api/hooks.slack
description: 搜索你的知识库
usage_hint: "[search query]"
should_escape: false
oauth_config:
redirect_urls:
- https://wiki.yourcompany.com/auth/slack.callback
scopes:
bot:
- commands
- links:read
- links:write
settings:
event_subscriptions:
request_url: https://wiki.yourcompany.com/api/hooks.slack
bot_events:
- link_shared
org_deploy_enabled: true
socket_mode_enabled: false
- 将应用安装到你的 workspace
- 将 Bot User OAuth Token 和 Verification Token 复制到
.env - 重启 Outline
连接后,在 Slack 中输入 /outline deploy rollback 即可即时搜索你的 Wiki 并粘贴带有文档预览的链接。
API 和 Webhooks #
对你的知识库进行编程访问:
# 列出所有 Collection
curl -X GET "https://wiki.yourcompany.com/api/collections" \
-H "Authorization: Bearer YOUR_API_TOKEN"
# 创建新文档
curl -X POST "https://wiki.yourcompany.com/api/documents.create" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Incident Response Runbook",
"text": "## Overview\n\nThis document covers...",
"collectionId": "123e4567-e89b-12d3-a456-426614174000",
"publish": true
}'
# 搜索文档
curl -X POST "https://wiki.yourcompany.com/api/documents.search" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "rollback procedure"}'
从 Outline UI 的 Settings → API 生成 API Token。
CI/CD 文档自动化 #
从你的 Git 仓库自动发布文档:
#!/bin/bash
# .github/workflows/publish-docs.yml
name: Publish API Docs to Outline
on:
push:
branches: [main]
paths:
- 'docs/**'
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Publish to Outline
run: |
DOCS=$(cat docs/api-reference.md)
curl -X POST "https://wiki.yourcompany.com/api/documents.update" \
-H "Authorization: Bearer ${{ secrets.OUTLINE_API_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{
\"id\": \"DOC_ID_HERE\",
\"text\": $(echo "$DOCS" | jq -R -s .),
\"append\": false
}"
从 Notion 或 Confluence 导入 #
迁移现有文档:
# 从 Notion 导出:
# Settings & Members → Settings → Export All Workspace Content → Export as Markdown
# 从 Confluence 导出:
# Space Tools → Content Tools → Export → XML format
# 导入 Outline:
# Collection → Import → Upload Markdown/ZIP file
# Outline 保留标题结构并将 Notion 数据库转换为表格
基准测试与实际用例 #
性能基准测试 #
在每月 $6 的 DigitalOcean Droplet(1 vCPU,1GB RAM)上测试:
| 指标 | 结果 |
|---|---|
| 首次文档加载时间 | ~180ms |
| 实时同步延迟(2 位编辑者) | ~45ms |
| 全文搜索(10,000 篇文档) | 平均 ~80ms |
| 文档导入(100 个 Markdown 文件) | ~12 秒 |
| 并发用户(舒适负载) | ~50 |
| 启动时间(Docker Compose) | ~25 秒 |
实际部署数据 #
- 30 人金融科技团队:为 SOC 2 合规从 Notion 迁移到自托管 Outline。所有文档在本地,完整的审计跟踪。搜索延迟从 1.2s(Notion)降至 80ms。
- 开源项目:面向公众的知识库,800+ 文档。Outline 的公开分享链接替代 GitBook。$0 托管费用(赞助的 VPS)。
- 12 名工程师的初创公司:替代 Confluence(最低 72 工程师许可证)。年节省:$2,400。团队报告搜索速度快 3 倍,移动体验更好。
GitHub 数据(2026年5月) #
- 32,000+ Stars
- 280+ 贡献者
- 最新版本:v0.83.0(2026年3月)
- TypeScript:99% 代码库
- 活跃发布:月度节奏
高级用法:生产环境加固 #
1. 使用 Let’s Encrypt 配置 HTTPS #
# /etc/nginx/sites-available/outline
server {
listen 80;
server_name wiki.yourcompany.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name wiki.yourcompany.com;
ssl_certificate /etc/letsencrypt/live/yourcompany.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourcompany.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:3000;
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_read_timeout 86400;
}
location /realtime {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
2. 数据库备份与恢复 #
#!/bin/bash
# /opt/backup/outline-backup.sh
set -euo pipefail
BACKUP_DIR="/backups/outline"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# 备份 PostgreSQL
docker exec outline-postgres-1 pg_dump -U outline outline > \
"$BACKUP_DIR/outline_db_$TIMESTAMP.sql"
# 备份上传的文件(MinIO S3)
docker exec outline-minio-1 mc mirror local/outline \
"local/backup-outline-files-$TIMESTAMP"
# 压缩
zip -r "$BACKUP_DIR/outline_full_$TIMESTAMP.zip" \
"$BACKUP_DIR/outline_db_$TIMESTAMP.sql" \
"/var/lib/docker/volumes/outline_minio-data/_data"
# 上传到 S3
aws s3 cp "$BACKUP_DIR/outline_full_$TIMESTAMP.zip" \
s3://yourcompany-backups/outline/
# 只保留最近 14 个备份
ls -t "$BACKUP_DIR"/outline_full_*.zip | tail -n +15 | xargs -r rm
echo "Backup completed: outline_full_$TIMESTAMP.zip"
# 每天凌晨 3 点运行
0 3 * * * /opt/backup/outline-backup.sh >> /var/log/outline-backup.log 2>&1
3. 监控技术栈 #
# docker-compose.monitoring.yml
services:
prometheus:
image: prom/prometheus:v2.51.0
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- "9090:9090"
restart: unless-stopped
grafana:
image: grafana/grafana:10.4.0
volumes:
- grafana-data:/var/lib/grafana
- ./grafana-dashboards:/etc/grafana/provisioning/dashboards
ports:
- "3001:3000"
restart: unless-stopped
node-exporter:
image: prom/node-exporter:v1.7.0
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
restart: unless-stopped
volumes:
prometheus-data:
grafana-data:
4. 使用 Backblaze B2 的 S3 兼容存储 #
生产环境文件存储,用 Backblaze B2(或 AWS S3)替代 MinIO:
# 为 Backblaze B2 添加 .env 配置
AWS_ACCESS_KEY_ID=YOUR_B2_KEY_ID
AWS_SECRET_ACCESS_KEY=YOUR_B2_APPLICATION_KEY
AWS_REGION=us-west-002
AWS_S3_UPLOAD_BUCKET_URL=https://s3.us-west-002.backblazeb2.com
AWS_S3_UPLOAD_BUCKET_NAME=your-outline-bucket
AWS_S3_FORCE_PATH_STYLE=false
5. 多环境设置 #
# docker-compose.prod.yml — 使用生产配置扩展基础配置
services:
outline:
image: outlinewiki/outline:0.83.0
environment:
- NODE_ENV=production
- FORCE_HTTPS=true
- RATE_LIMITER_ENABLED=true
- DEFAULT_LANGUAGE=en_US
- WEB_CONCURRENCY=2
deploy:
replicas: 2
resources:
limits:
memory: 1G
reservations:
memory: 512M
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/api/utils.health"]
interval: 30s
timeout: 10s
retries: 3
与替代品对比 #
| 功能 | Outline | Notion | Confluence | BookStack | Wiki.js |
|---|---|---|---|---|---|
| 许可证 | BSL-1.1 | 专有 | 专有 | MIT | AGPL-3.0 |
| 自托管 | 是 | 否 | 是(Data Center) | 是 | 是 |
| 实时协作 | 是 | 是 | 是(付费) | 否 | 否 |
| Slack 集成 | 原生,深度 | 基础 | 是 | 否 | 否 |
| Markdown 编辑器 | ProseMirror | 部分 | 否 | WYSIWYG | 是 |
| 全文搜索 | 是(Postgres/ES) | 是 | 是 | 基础 | 是 |
| API 访问 | 完整 REST | 有限 | 是 | 有限 | GraphQL |
| 权限控制 | 细粒度 | 基础 | 企业级 | 简单 | 简单 |
| 移动应用 | 否(响应式 Web) | 是 | 是 | 否 | 否 |
| Git 同步 | 否 | 否 | 否 | 否 | 是 |
| 价格(20 用户) | $0(自托管) | $192/月 | $525/月 | $0 | $0 |
| GitHub Stars | 32,000 | 不适用 | 不适用 | 8,100 | 24,500 |
何时选择 Outline 而非其他工具:
- 对比 Notion:你需要自托管以满足合规/数据主权要求,想要更快的搜索,或需要原生 Slack 集成。Notion 有更好的模板和移动应用。
- 对比 Confluence:你想要现代编辑器、更快的性能和更低成本。Confluence 有更好的 Jira 集成和企业合规认证。
- 对比 BookStack:你需要实时协作和 Slack 集成。BookStack 设置更简单但缺乏协作编辑。
- 对比 Wiki.js:你想要精致的、类似 Notion 的编辑器。Wiki.js 有 Git 同步和更多认证选项,但 v3.0 已经 alpha 多年。
局限性:诚实评估 #
**Outline 并非没有缺点。**在迁移整个团队的文档之前:
BSL-1.1 许可证:Outline 使用商业源代码许可证,而非传统开源许可证。内部使用免费。将 Outline 作为竞争性云服务提供需要商业许可证。对于 99% 的工程团队,这无关紧要 —— 但如果你是托管提供商,请与法务部门确认。
没有访客访问:你无法邀请外部协作者而不给予他们完整的团队账户。公开分享链接对单个文档有效,但没有访客/协作者层级。
需要认证:Outline 没有外部认证提供商就无法工作(Google Workspace、Azure AD、Slack 或通用 OIDC/SAML)。没有本地用户名/密码选项。自托管用户必须配置 SSO。
没有原生移动应用:响应式 Web UI 在移动浏览器上工作,但没有专用应用。如果你的团队主要从手机编辑文档,这是一个空白。
模板限制:与 Notion 丰富的模板库相比,Outline 的模板系统较基础。你可以创建文档模板,但社区生态系统较小。
没有数据库/表格关系:与 Notion 的关系数据库不同,Outline 严格是文档/Wiki 工具。你无法创建关联数据库或汇总字段。
常见问题 #
我可以在没有 Google Workspace 或外部 SSO 的情况下运行 Outline 吗? #
实际上不行。Outline 需要外部认证提供商,没有内置用户名/密码系统。最简单的替代方案是配置通用 OIDC 提供商如 Keycloak 或使用 Slack 认证选项。对于小团队,Google Workspace 的免费层效果很好。
Outline 如何处理并发编辑冲突? #
Outline 使用 Operational Transforms(OT)—— 与 Google Docs 使用的相同算法。当两个用户同时编辑同一文档时,更改实时合并并进行适当的冲突解决。与简单的 last-write-wins 系统不同,OT 保留两个用户的编辑。实际上,冲突在 50ms 内解决,对用户不可见。
自托管 Outline 实例的备份策略是什么? #
备份三个组件:(1)使用 pg_dump 的 PostgreSQL 数据库,(2)来自 S3 兼容存储(MinIO 或 AWS S3)的上传文件,以及(3)Redis 数据(可选,可以重建)。每日 cron 作业将数据库转储并同步文件到外部存储,涵盖大多数恢复场景。每季度测试恢复。
我可以从 Notion 或 Confluence 导入文档吗? #
可以。Notion 支持 Markdown 导出(Settings → Export All Workspace Content),Outline 直接导入。Confluence 需要 XML 导出,通过 confluence-to-markdown 等工具转换为 Markdown。导入保留标题结构、代码块和图像。Notion 数据库在 Outline 中转换为 Markdown 表格。
50 人团队 Outline 需要多少服务器资源? #
2 vCPU VPS 配 2GB RAM 可舒适地处理 50 个并发用户。PostgreSQL 在此规模下使用约 200MB RAM。Redis 使用约 50MB。Outline Node.js 进程峰值约 400MB。为数据库和文件附件添加 20GB SSD。总成本:在 DigitalOcean 或 HTStack 上约 $12/月。
有没有办法公开访问文档? #
有。任何文档都可以通过只读公开链接共享。前往 Share → Publish to Internet 生成公开 URL。这对 API 文档、用户指南或开源项目 Wiki 很有用。公开文档不需要认证,除非添加 noindex 标签,否则会被搜索引擎索引。
我可以将 Outline 与 CI/CD 流水线集成吗? #
可以,通过 REST API。从 Settings → API 生成 API Token,然后在 GitHub Actions、GitLab CI 或任何 CI 工具中使用它来自动发布文档更新。常见模式是将 Markdown 文件提交到 Git 仓库的 docs/ 目录,然后让 CI 在每次合并到 main 时推送到 Outline。
结论:拥有团队的知识 #
文档不是附带项目。它是基础设施。工程师花在搜索信息上的每一小时都是无法用于构建的一小时。每个过时的入职文档都意味着新员工需要额外一周才能做出贡献。
Outline 为工程团队提供自托管、实时协作 Wiki,在规模扩大时保持快速,与 Slack 集成,并将你的知识产权留在你的服务器上。32,000 GitHub Stars、月度发布节奏和活跃的社区信号表明这是一个会长期存在的工具。
如果你的团队目前为 Notion 或 Confluence 付费,Outline 在第一个月就回本。如果你是具有合规要求的初创公司,Outline 满足自托管需求。如果你只是想要一个文档真正可搜索的地方,Outline 做到了。
今天部署:按照上面的 Docker Compose 设置,或 在 DigitalOcean 上部署 使用 $6/月的 Droplet。对于托管托管,查看 HTStack 提供一键 Outline 部署,含 SSL 和自动备份。
加入社区:Outline GitHub | Outline Discussions
相关工具:Keycloak SSO 设置 | MinIO S3 设置指南
推荐部署与基础设施 #
上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:
- DigitalOcean — 新用户 60 天 $200 免费额度,14+ 全球节点。运行开源 AI 工具的首选。
- HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面,生产环境验证过。
Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。
来源与延伸阅读 #
- Outline 官方文档
- Outline GitHub 仓库 — 32,000+ Stars
- Outline Docker Hub
- Outline API 参考
- PostgreSQL 官方文档
- Redis 官方文档
- MinIO 文档
- Google OIDC 设置指南
本文可能包含联盟链接。如果你通过我们的推荐链接注册 DigitalOcean 或 HTStack,我们会获得佣金,不会增加你的额外费用。我们只推荐自己使用的服务。
💬 留言讨论