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

bash 复制代码
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

docker --version
docker compose version

域名与防火墙

将域名(如 wiki.example.com)A 记录解析到服务器 IP:

bash 复制代码
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

生成必要的密钥

Outline 需要几个随机密钥,提前生成好:

bash 复制代码
# 生成 SECRET_KEY(64位十六进制)
openssl rand -hex 32

# 生成 UTILS_SECRET
openssl rand -hex 32

将两个输出分别保存,稍后填入配置文件。

docker-compose.yml

创建项目目录:

bash 复制代码
mkdir -p ~/outline && cd ~/outline

创建 docker-compose.yml

yaml 复制代码
version: "3.8"

services:
  outline:
    image: outlinewiki/outline:latest
    container_name: outline_app
    env_file: .env
    depends_on:
      - postgres
      - redis
    restart: unless-stopped
    networks:
      - outline-net
    volumes:
      - ./data:/var/lib/outline/data

  postgres:
    image: postgres:15-alpine
    container_name: outline_postgres
    environment:
      POSTGRES_USER: outline
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: outline
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: unless-stopped
    networks:
      - outline-net

  redis:
    image: redis:7-alpine
    container_name: outline_redis
    restart: unless-stopped
    networks:
      - outline-net

  caddy:
    image: caddy:alpine
    container_name: outline_caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    restart: unless-stopped
    networks:
      - outline-net

volumes:
  pgdata:
  caddy_data:
  caddy_config:

networks:
  outline-net:
    driver: bridge

创建环境变量文件 .env

bash 复制代码
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
EOF

Caddy 反向代理配置

创建 Caddyfile

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
    }
}

启动服务

bash 复制代码
cd ~/outline

# 创建数据目录
mkdir -p data

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

# 查看启动日志
docker compose logs -f outline

# 执行数据库迁移(首次必须执行)
docker compose exec outline yarn db:migrate

数据库迁移完成后,访问 https://wiki.example.com 即可看到登录界面。

初始化配置

配置 OAuth 登录

Outline 不支持传统用户名/密码注册,必须通过 OAuth 或邮件邀请登录。最简单的方式是配置 GitHub OAuth:

  1. 进入 GitHub → Settings → Developer settings → OAuth Apps → New OAuth App
  2. 填写信息:
    • Application name:团队知识库
    • Homepage URL:https://wiki.example.com
    • Authorization callback URL:https://wiki.example.com/auth/github.callback
  3. 创建完成后,将 Client ID 和 Client Secret 填入 .env

如果团队使用 Google Workspace,也可以配置 Google OAuth(需要在 Google Cloud Console 创建应用):

bash 复制代码
# 在 .env 中添加
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret

修改 .env 后重启服务:

bash 复制代码
docker compose up -d

团队初始化

首次登录后:

  1. 创建工作区名称(即团队/公司名称)
  2. 通过「设置」→「成员」→「邀请成员」向同事发送邀请链接
  3. 在「集合」中创建第一个文档集合(类似 Notion 的空间)

推荐初始文档结构

复制代码
知识库
├── 工程规范
│   ├── 代码风格指南
│   ├── Git 提交规范
│   └── 代码审查流程
├── 产品文档
│   ├── 需求文档
│   └── 设计规范
├── 运维手册
│   ├── 部署流程
│   └── 故障处理 SOP
└── 会议记录
    └── 2026 年

常见问题

Q:登录后提示"工作区不存在"?

首次登录的用户会自动创建工作区。如果出现错误,检查数据库迁移是否完成:

bash 复制代码
docker compose exec outline yarn db:migrate

Q:图片上传失败?

检查数据目录权限:

bash 复制代码
# 确保容器内用户有写权限
docker compose exec outline ls -la /var/lib/outline/
# 如权限不足,在宿主机执行
chmod 777 ~/outline/data

Q:如何备份数据?

bash 复制代码
#!/bin/bash
# 保存为 ~/outline/backup.sh

DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=~/outline-backups
mkdir -p "$BACKUP_DIR"

# 备份数据库
docker exec outline_postgres pg_dump -U outline outline | \
  gzip > "$BACKUP_DIR/db-$DATE.sql.gz"

# 备份附件文件
tar -czf "$BACKUP_DIR/files-$DATE.tar.gz" ~/outline/data

# 保留最近 30 天
find "$BACKUP_DIR" -mtime +30 -delete

echo "备份完成: $DATE"
bash 复制代码
chmod +x ~/outline/backup.sh
# 每天凌晨 3 点自动备份
(crontab -l 2>/dev/null; echo "0 3 * * * ~/outline/backup.sh") | crontab -

Q:如何升级 Outline?

bash 复制代码
cd ~/outline
docker compose pull
docker compose up -d
# 新版本可能需要数据库迁移
docker compose exec outline yarn db:migrate

Q:实时协作不生效?

确认 Caddy 配置中包含了 WebSocket 代理规则(上方 Caddyfile 已包含),且防火墙允许 443 端口的 WebSocket 连接。


Outline 是 Notion 最强力的开源替代品,美观的块编辑器、实时协作、强大的全文搜索、灵活的权限控制,功能丝毫不逊于付费产品,而且数据完全自托管,不必担心数据主权和价格上涨问题。

相关推荐
出海小龙5 天前
从 Notion 到 Webflow:SaaS 联盟营销如何影响增长曲线?
notion
码途漫谈23 天前
把知识变成可运行系统:Notion 技术介绍
notion
沉浸式学习ing24 天前
B站视频怎么快速总结?AI自动生成要点+思维导图+逐字稿
人工智能·ai·自然语言处理·音视频·语音识别·notion
沉浸式学习ing24 天前
播客和视频怎么变成知识库里的笔记?音视频转结构化笔记完整方案
人工智能·笔记·gpt·学习·ai·音视频·notion
linfengfeiye1 个月前
AI时代的核心技能不是技术,是主动性——Notion产品负责人深度访谈
人工智能·notion
chushiyunen1 个月前
notion(模块化数字工作台)笔记
笔记·notion
蒸汽求职2 个月前
破局“无效互面”:跨国大厂视角的工业级 Mock Interview 价值解析
缓存·面试·职场和发展·金融·notion
倔强的石头1062 个月前
腾讯云Lighthouse一键部署OpenClaw,接入蓝耘MaaS打造微信知识库管家
notion·蓝耘·openclaw
蒸汽求职2 个月前
告别静态文档:利用 Notion 搭建“交互式”简历的降维展示策略
开发语言·缓存·面试·职场和发展·金融·notion