Outline 自托管团队知识库/Wiki 搭建教程(Notion 替代方案)
Outline 自托管团队知识库/Wiki 搭建教程(Notion 替代方案)
团队知识管理是每个技术团队的刚需,Notion 固然好用,但数据托管在海外服务器、价格随团队规模线性增长、网络访问有时不稳定,这些痛点让很多团队开始寻找可以私有化部署的替代品。Outline 是目前开源社区中最接近 Notion 体验的知识库工具,支持 Markdown 编写、实时协作、文档嵌套、全文搜索、多种登录方式,界面美观现代。本文讲解如何用 Docker Compose + Caddy 完整部署 Outline。
Outline 核心特性
- Notion 式编辑器:块编辑器,支持标题、列表、代码块、表格、图片、内嵌内容
- 实时协作:多人同时编辑同一文档,变更实时同步
- 文档结构:支持集合(Collection)→ 文档→ 子文档三级嵌套
- 全文搜索:基于 PostgreSQL 全文索引,中英文搜索均支持
- SSO 登录:支持 Google、GitHub、Slack OAuth,以及 SAML/OIDC 企业登录
- API 接口:完整 REST API,可与其他工具集成
- 导出功能:支持导出为 Markdown、PDF,数据随时可迁移
服务器配置
Outline 依赖 PostgreSQL、Redis 和对象存储,整体内存需求适中。推荐使用2 核 4GB机型,可以流畅支持 10-50 人团队日常使用,文档量不受限制。
推荐选用雨云服务器 rainyun-com,注册填优惠码2026off领 5 折优惠券,2 核 4GB 机型性价比出色,比 Notion Team 版年费便宜得多,数据还完全掌控在自己手里。系统建议选 Ubuntu 22.04 LTS,磁盘至少 40GB(含文档附件存储)。
准备工作
安装 Docker 和 Docker Compose
curl-fsSLhttps://get.docker.com|shsudousermod-aGdocker$USERnewgrpdockerdocker--versiondockercompose version域名与防火墙
将域名(如wiki.example.com)A 记录解析到服务器 IP:
sudoufw allow80/tcpsudoufw allow443/tcpsudoufwenable生成必要的密钥
Outline 需要几个随机密钥,提前生成好:
# 生成 SECRET_KEY(64位十六进制)openssl rand-hex32# 生成 UTILS_SECRETopenssl rand-hex32将两个输出分别保存,稍后填入配置文件。
docker-compose.yml
创建项目目录:
mkdir-p~/outline&&cd~/outline创建docker-compose.yml:
version:"3.8"services:outline:image:outlinewiki/outline:latestcontainer_name:outline_appenv_file:.envdepends_on:-postgres-redisrestart:unless-stoppednetworks:-outline-netvolumes:-./data:/var/lib/outline/datapostgres:image:postgres:15-alpinecontainer_name:outline_postgresenvironment:POSTGRES_USER:outlinePOSTGRES_PASSWORD:${POSTGRES_PASSWORD}POSTGRES_DB:outlinevolumes:-pgdata:/var/lib/postgresql/datarestart:unless-stoppednetworks:-outline-netredis:image:redis:7-alpinecontainer_name:outline_redisrestart:unless-stoppednetworks:-outline-netcaddy:image:caddy:alpinecontainer_name:outline_caddyports:-"80:80"-"443:443"volumes:-./Caddyfile:/etc/caddy/Caddyfile-caddy_data:/data-caddy_config:/configrestart:unless-stoppednetworks:-outline-netvolumes:pgdata:caddy_data:caddy_config:networks:outline-net:driver:bridge创建环境变量文件.env:
cat>.env<<'EOF' # 应用基础配置 SECRET_KEY=替换为openssl生成的第一个密钥 UTILS_SECRET=替换为openssl生成的第二个密钥 URL=https://wiki.example.com PORT=3000 NODE_ENV=production # 数据库 DATABASE_URL=postgres://outline:替换为数据库密码@outline_postgres:5432/outline POSTGRES_PASSWORD=替换为数据库密码 # Redis REDIS_URL=redis://outline_redis:6379 # 文件存储(本地存储模式) FILE_STORAGE=local FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data FILE_STORAGE_UPLOAD_MAX_SIZE=262144000 # 语言和时区 DEFAULT_LANGUAGE=zh_CN TZ=Asia/Shanghai # 邮件(可选,用于邀请成员,暂时留空也能用) # SMTP_HOST= # SMTP_PORT= # SMTP_USERNAME= # SMTP_PASSWORD= # SMTP_FROM_EMAIL= # 登录方式(至少配置一种,这里演示 GitHub OAuth) # 在 GitHub Settings → Developer settings → OAuth Apps 创建应用 GITHUB_CLIENT_ID=替换为GitHub_OAuth_Client_ID GITHUB_CLIENT_SECRET=替换为GitHub_OAuth_Client_Secret # 允许创建账号(生产环境建议改为 false,通过邀请制管理) TEAM_LOGO= ENABLE_UPDATES=true EOFCaddy 反向代理配置
创建Caddyfile:
wiki.example.com { reverse_proxy outline_app:3000 # 支持上传附件 request_body { max_size 256MB } # 开启压缩 encode gzip # WebSocket 支持(实时协作需要) @websocket { header Connection *Upgrade* header Upgrade websocket } handle @websocket { reverse_proxy outline_app:3000 } }启动服务
cd~/outline# 创建数据目录mkdir-pdata# 启动所有服务dockercompose up-d# 查看启动日志dockercompose logs-foutline# 执行数据库迁移(首次必须执行)dockercomposeexecoutlineyarndb:migrate数据库迁移完成后,访问https://wiki.example.com即可看到登录界面。
初始化配置
配置 OAuth 登录
Outline 不支持传统用户名/密码注册,必须通过 OAuth 或邮件邀请登录。最简单的方式是配置 GitHub OAuth:
- 进入 GitHub → Settings → Developer settings → OAuth Apps → New OAuth App
- 填写信息:
- Application name:
团队知识库 - Homepage URL:
https://wiki.example.com - Authorization callback URL:
https://wiki.example.com/auth/github.callback
- Application name:
- 创建完成后,将 Client ID 和 Client Secret 填入
.env
如果团队使用 Google Workspace,也可以配置 Google OAuth(需要在 Google Cloud Console 创建应用):
# 在 .env 中添加GOOGLE_CLIENT_ID=your_google_client_idGOOGLE_CLIENT_SECRET=your_google_client_secret修改.env后重启服务:
dockercompose up-d团队初始化
首次登录后:
- 创建工作区名称(即团队/公司名称)
- 通过「设置」→「成员」→「邀请成员」向同事发送邀请链接
- 在「集合」中创建第一个文档集合(类似 Notion 的空间)
推荐初始文档结构
知识库 ├── 工程规范 │ ├── 代码风格指南 │ ├── Git 提交规范 │ └── 代码审查流程 ├── 产品文档 │ ├── 需求文档 │ └── 设计规范 ├── 运维手册 │ ├── 部署流程 │ └── 故障处理 SOP └── 会议记录 └── 2026 年常见问题
Q:登录后提示"工作区不存在"?
首次登录的用户会自动创建工作区。如果出现错误,检查数据库迁移是否完成:
dockercomposeexecoutlineyarndb:migrateQ:图片上传失败?
检查数据目录权限:
# 确保容器内用户有写权限dockercomposeexecoutlinels-la/var/lib/outline/# 如权限不足,在宿主机执行chmod777~/outline/dataQ:如何备份数据?
#!/bin/bash# 保存为 ~/outline/backup.shDATE=$(date+%Y%m%d_%H%M%S)BACKUP_DIR=~/outline-backupsmkdir-p"$BACKUP_DIR"# 备份数据库dockerexecoutline_postgres pg_dump-Uoutline outline|\gzip>"$BACKUP_DIR/db-$DATE.sql.gz"# 备份附件文件tar-czf"$BACKUP_DIR/files-$DATE.tar.gz"~/outline/data# 保留最近 30 天find"$BACKUP_DIR"-mtime+30-deleteecho"备份完成:$DATE"chmod+x ~/outline/backup.sh# 每天凌晨 3 点自动备份(crontab-l2>/dev/null;echo"0 3 * * * ~/outline/backup.sh")|crontab-Q:如何升级 Outline?
cd~/outlinedockercompose pulldockercompose up-d# 新版本可能需要数据库迁移dockercomposeexecoutlineyarndb:migrateQ:实时协作不生效?
确认 Caddy 配置中包含了 WebSocket 代理规则(上方 Caddyfile 已包含),且防火墙允许 443 端口的 WebSocket 连接。
Outline 是 Notion 最强力的开源替代品,美观的块编辑器、实时协作、强大的全文搜索、灵活的权限控制,功能丝毫不逊于付费产品,而且数据完全自托管,不必担心数据主权和价格上涨问题。
