Administrator
Published on 2025-09-16 / 1 Visits
0
0

casdoor + outline 企业级知识库完全私有部署解决方案

前言

企业级、可审计、私有化的知识库系统,使用 Casdoor 作为对外的身份认证与企业微信(钉钉/企业微信)其他支持登录入口,Casdoor 部署在公网并通过安全策略暴露 OIDC;Outline 部署于局域网(仅内网可访问,保证知识库绝对安全),使用 Casdoor 的 OIDC 完成认证,从而实现对 Outline 的强身份验证与统一身份管理及方便登录。

设计原则

  • 最小暴露面:只将 Casdoor(认证入口)暴露到公网,Outline 不直接暴露公网,只能由内网或经受控跳板访问。

  • 统一 SSO:所有用户通过企业微信登录 Casdoor,由 Casdoor 发放 OIDC token/ID token 给 Outline。

  • TLS 全程加密:公网 <-> Casdoor HTTPS/TLS。

  • 最小权限与审计:Casdoor 配置企业级角色映射,开启登录/审计日志;Outline 使用团队/组权限控制内容访问。

网络示意图

                             Internet
                                |
                              DNS(auth.example.com)
                                |
                     +---------------------------+
                     |  公网 LB / WAF (可选)     |
                     +---------------------------+
                                |
                        +-------------------+
                        |  反向代理 (Nginx) |
                        |  TLS Termination  |
                        +-------------------+
                                |
                        +-------------------+
                        |     Casdoor       |  <- 公网可访问 (OIDC endpoints)
                        |  (auth.example.com)|
                        +-------------------+
                                |
  ---------------------------------------------------------------
  |   企业内部网络 / VPN / 专线 (仅内部可达)                       |
  |                                                             |
  |   +-------------------+       +---------------------------+  |
  |   |   Internal Users   |<----->|   Reverse Proxy (optional)|  |
  |   +-------------------+       +---------------------------+  |
  |                |                        |                     |
  |                |                        |                     |
  |         +-------------------+     +-------------------+      |
  |         |     Outline       |<----|  Bastion / Admin   |      |
  |         | (KB server, 10.0.0.10)|  |  (管理/运维入口)   |      |
  |         +-------------------+     +-------------------+      |
  |                 ^                                   ^        |
  |                 |                                   |        |
  |          (HTTPS to)                        (SSH/管理)        |
  ---------------------------------------------------------------
​
Notes:
- Outline 需要从内部发起到 Casdoor 的 HTTP 请求以完成 OIDC 登录流程。
- Casdoor 可限制允许的回调 URL(只允许 Outline 的内部回调地址)。
- 若 Outline 的用户来自外部,需要 VPN 或端口代理(不要把 Outline 直接暴露到公网)。

假设与前提

  • 企业已有域名(例如 auth.example.com 指向 Casdoor);内部 LAN 域或直连 IP 用于 Outline(如 outline.lan10.0.0.10)。

  • 能够配合企业微信(WeCom)配置第三方应用/企业号,并可获得 CorpIDSecret 等凭证供 Casdoor 使用。

  • 有能力配置防火墙 / NAT / 反向代理(如 Nginx、Traefik)和 TLS 证书(Let's Encrypt / 企业 CA)。

安装教程

安装docker

docker安装教程:https://halo.blog360.sbs/archives/dockeran-zhuang-jiao-cheng

下载安装目录

outline 完整目录如下

.
├── casdoor-conf     
│   └── app.conf  # casdoor配置文件宿主机挂载映射目录
├── data          # outline 静态文件存储宿主机挂载目录
│   └── uploads
├── docker-compose.yml # 完整docker启动yml 占用宿主机端口8000 和3000 可自定义
├── docker-compose.yml.bak # 完整docker启动yml备份
├── init-databases.sh # casdoor连接数据库初始
├── .env #outline 配置文件信息
└── postgres-data # postgres 宿主机数据卷挂载
    ├── base

修改配置文件“vim .env”

# Outline 访问地址
URL=http://192.168.73.129:3000
FORCE_HTTPS=false
# 数据库(Postgres 推荐,如必须 MySQL -> 需兼容层)
#DATABASE_URL=mysql://user:password@192.168.1.10:3306/outline
DATABASE_URL=postgres://outline:password@postgres:5432/outline
PGSSLMODE=disable
​
# Redis
REDIS_URL=redis://redis:6379/0
# 外部 Redis 用户名 + 密码(Redis 6 ACL 模式)
#REDIS_URL=redis://:myStrongRedisPass@192.168.1.11:6379/0
# 文件存储(本地)
FILE_STORAGE=local
FILE_STORAGE_PATH=/var/lib/outline/data
​
#smtp
#SMTP_DISABLED=true
SMTP_HOST=smtp.qq.com  # 配置 SMTP 发送注册/找回密码邮件
SMTP_PORT=465
SMTP_USERNAME=admin@qq.com
SMTP_PASSWORD=password
SMTP_FROM_EMAIL=admin@qq.com  # 发件人邮箱
NODE_TLS_REJECT_UNAUTHORIZED=0
​
# 启用 OIDC
# Outline 本身的配置(省略你已有的)
​
​
OIDC_CLIENT_ID=8db86819d0068fdd4648
OIDC_CLIENT_SECRET=5b37bd8c6b1965588fba2a2b7cc77f4902a0dd78
# OIDC / Casdoor 配置
OIDC_AUTH_URI=http://192.168.73.129:8000/login/oauth/authorize
OIDC_TOKEN_URI=http://192.168.73.129:8000/api/login/oauth/access_token
OIDC_USERINFO_URI=http://192.168.73.129:8000/api/get-account
OIDC_ISSUER=http://192.168.73.129:8000
​
# Outline 登录按钮显示的文字
OIDC_DISPLAY_NAME=Casdoor sso
​
# OIDC 返回的用户字段
OIDC_USERNAME_CLAIM=name
OIDC_SCOPES=openid profile email
# 安全配置
SECRET_KEY=3a2b947687eb6d251b2a57b73ff0c54c0b6b7d22d157334111fe516d93d17b3e
UTILS_SECRET=3a2b947687eb6d251b2a57b73ff0c54c0b6b7d22d157334111fe516d93d17b3e

启动容器

docker compose up -d

发布教程

发布Casdoor

添加配置域名发布文件

server {
​
    listen 80;
    server_name test.blog360.sbs;
​
    client_max_body_size 20m;
  # 主请求代理
  location / {
    proxy_pass http://172.30.0.2:80;
​
    # 关键头信息传递 (解决混合内容问题)
        proxy_set_header Host $http_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;  # 告知Discourse使用HTTPS
​
        # WebSocket支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
​
        # 缓存优化
        proxy_cache_bypass $http_upgrade;
​
        # 修复静态资源路径
        sub_filter_once off;
        sub_filter_types text/html text/css application/javascript;
  }
​
}

申请免费证书(ssl证书可选)

安装Certbot工具

# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx
​
# CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx

申请ssl证书(nginx)

sudo certbot --nginx -d your-domain.com
  • 替换 your-domain.com 为你的域名

使用教程

1.outline 配置集成smtp

这里的设置非常简单,在.env文件中已经配置完成了,如下:

SMTP_HOST=smtp.qq.com  # 配置 SMTP 发送注册/找回密码邮件
SMTP_PORT=465
SMTP_USERNAME=admin@qq.com
SMTP_PASSWORD=password
SMTP_FROM_EMAIL=admin@qq.com  # 发件人邮箱
NODE_TLS_REJECT_UNAUTHORIZED=0

2.outline 集成 Casdoor OIDC标准认证

这里分为两步,

  1. 前往Casdoor 创建好应用,获取到OIDC_CLIENT_IDOIDC_CLIENT_SECRET还可以顺手改给log

    1. 修改.env文件修改key和SECRET

    ​
    OIDC_CLIENT_ID=8db86819d0068fdd4648 # 修改为自己的配置
    OIDC_CLIENT_SECRET=5b37bd8c6b1965588fba2a2b7cc77f4902a0dd78 # 修改为自己的配置
    #修改正确域名或者IP
    # OIDC / Casdoor 配置 注意 Outline 》= V0.87.3
    OIDC_AUTH_URI=http://192.168.73.129:8000/login/oauth/authorize
    OIDC_TOKEN_URI=http://192.168.73.129:8000/api/login/oauth/access_token
    OIDC_USERINFO_URI=http://192.168.73.129:8000/api/get-account
    OIDC_ISSUER=http://192.168.73.129:8000
    1. 完成后打开页面,点击Casdoor sso跳转Casdoor 页面登录,注意配置Casdoor 用户邮箱参数

3.Casdoor 集成企业微信(包括其他像钉钉,qq...)认证

  1. 添加供应商,以企业微信为例子

    1. 创建供应商,配置对应参数

    配置企业微信id,应用编号,企业密钥

    1. 为应用选择供应商

    为应用选取企业微信(注意权限)

    1. 测试企业微信登录注册是否生效(注意企业微信不返回邮箱,需要手动或者给应用授权)

outline 知识库架构

outline 是以文档集 --》 文档 --》文档 创建根节点文档集 下可以创建任意文档,而文档下还可以不断创建文档

4.outline 权限及用户使用教程

  1. 用户群组,创建一个用户集合,方便用于范围授权

  2. 用户,权限用户最小单位,用于精细级别授权

拓展-outline 分享公网功能

拓展- LangChain + OutlineRetriever 使用 本地模型实现内部知识库机器人



Comment