【Outline】纯Docker部署指南

本文介绍了使用Docker部署Outline知识管理系统的完整流程。
主要内容包括:

  1. 部署PostgreSQL 12数据库并创建用户;
  2. 安装Redis 6缓存服务;
  3. 配置Minio对象存储服务替代AWS S3;
  4. 搭建SSO单点登录服务器;
  5. 准备Outline容器镜像和环境变量配置。

这里直接使用纯 Docker 的方式进行部署。

Outline依赖 PostgreSQL (v9.5+)Redis (v4+)Minio, S3, or S3 兼容对象存储服务

还要另外配置一个登录授权的服务器,这里我采用的是自建的服务器

这个部署起来还真是麻烦,不过用起来是很舒服了,有种 Typora 的在线版的感觉

  1. 安装 Docker
  2. 部署 postgres 12
docker run -d \--name postgres_12 \--restart=always \-e POSTGRES_PASSWORD=mysecretpassword \-e PGDATA=/var/lib/postgresql/data/pgdata \-v postgres_12:/var/lib/postgresql/data \-p 5432:5432 \postgres:12.10

创建用户和数据库

# 进入数据库命令行
docker exec -it --user postgres postgres_12 psql -U postgres# 创建用户
CREATE USER outline WITH PASSWORD '123456';# 创建数据库
CREATE DATABASE outline OWNER outline;
CREATE DATABASE outline_test OWNER outline;# 退出
\q
  1. 部署 Redis
docker run -d \--name redis_6 \--restart=always \-p 6379:6379 \redis:6.2.7
  1. 部署 minio,用来代替 AWS S3

参考

# 创建容器
docker run -d \--name minio \--restart=always \-p 9000:9000 \-p 9001:9001 \-e MINIO_ROOT_USER="6m2lx2ffmbr9ikod" \-e MINIO_ROOT_PASSWORD="2k78fpraq7rs5xlrti5p6cvb767a691h3jqi47ihbu75cx23twkzpok86sf1aw1e" \-e MINIO_REGION_NAME="cn-homelab-1" \-e MINIO_BROWSER="on" \-e MINIO_SERVER_URL="http://192.168.100.155:9000/" \-e MINIO_BROWSER_REDIRECT_URL="http://192.168.100.155:9001/" \--volume minio:/data \minio/minio:RELEASE.2021-09-03T03-56-13Z server /data --console-address ":9001"

MINIO_ROOT_USER 使用小写字母加数字长度为16位的随机数

MINIO_ROOT_PASSWORD 使用小写字母加数字长度为64位的随机数

MINIO_SERVER_URL 是API地址,反向代理请务必开启 proxy_pass,否则会无法连接,导致附件及图片无法上传

比如说使用了 Nginx Proxy Manager,就要在代理的高级选项中加入以下字段(IP需要使用自己的)

location / {proxy_pass              http://192.168.100.155:9000;proxy_set_header        Host            $http_host;proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header        X-Scheme        $scheme;proxy_set_header        X-Script-Name   /;
}

MINIO_BROWSER_REDIRECT_URL 是管理地址,即反代后的地址比如 https://file-admin.lab.com/,不反代就老老实实用原始访问的地址

这边还需要访问这个页面,创建一个新的 Buckets,名称为 outline,不创建的话到时候上传不了图片,也导出不了文件

  1. 搭建 OIDC 服务器(sso-server),用于代替 slack 或 google 登录

项目地址

docker run -d \--name=sso-server \-e CLIENT_NAME="My SSO Service" \-e CLIENT_ID="b8c40013-cc03-4bc5-b3a5-6a31046fa415" \-e CLIENT_SECRET="26272010-37d9-4bea-a58e-6b0a382d7626" \-e USER_PASS="password" \-p 3000:80 \soulteary/sso-server:1.1.5

CLIENT_NAME 是随机的

CLIENT_ID 是随机的,格式如上面所示

CLIENT_SECRET 是随机的,格式如上面所示

USER_PASS 是默认的密码

启动后就可以有一个挺好看的登录页可访问:http://localhost:3000/login

默认的用户名是 username,密码是 USER_PASS 字段所设置的

  1. 先拉取一下 outline
docker pull outlinewiki/outline:0.63.0
  1. 编辑一个 .env 的本地文件

参考 .env.sample

# –––––––––––––––– REQUIRED ––––––––––––––––# 生成一个十六进制编码的 32 字节随机密钥。你应该使用`openssl rand -hex 32`
# 在你的终端中生成一个随机值。
SECRET_KEY=6697a4fc3c47d879f42d73e4ed00cda076c79e845257acfab8661b2241532ea7# 生成唯一的随机密钥。格式并不重要,您仍然可以使用 `openssl rand -hex 32` 
# 在你的终端中生成。
UTILS_SECRET=9fb6973a0e562ca592999436c2f5ed4326a81e2fdff8c996b27cb58b5abff79a# 对于生产点这些在您的数据库中,在开发中默认应该开箱即用。
# 这里的 postgres_12 是上面创建的数据库容器的默认 Hostname,需要建立单独的网络或使用 --link
# outline:123456 是上面创建的数据库账户
DATABASE_URL=postgres://outline:123456@postgres_12:5432/outline
DATABASE_URL_TEST=postgres://outline:123456@postgres_12:5432/outline_test
DATABASE_CONNECTION_POOL_MIN=
DATABASE_CONNECTION_POOL_MAX=
# 取消注释以禁用 SSL 连接到 Postgres
PGSSLMODE=disable# 对于 redis,你可以像这样指定一个 ioredis 兼容的 url
# 这里的 redis_6 是上面创建的数据库容器的默认 Hostname,需要建立单独的网络或使用 --link
REDIS_URL=redis://redis_6:6379
# 或者,如果您想提供额外的连接选项,
# 使用 base64 编码的 JSON 连接选项对象。参考 ioredis 文档获取可用选项的列表。
# 示例:使用 Redis Sentinel 实现高可用性
# {"sentinels":[{"host":"sentinel-0","port":26379},{"host":"sentinel-1","port":26379}],"name":"mymaster"}
# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJzZW50aW5lbC0wIiwicG9ydCI6MjYzNzl9LHsiaG9zdCI6InNlbnRpbmVsLTEiLCJwb3J0IjoyNjM3OX1dLCJuYW1lIjoibXltYXN0ZXIifQ==# URL 应指向完全限定的、可公开访问的 URL。
# 如果使用代理 URL 和 PORT 中的端口可能不同。
# 简单的说就是第一个是反代后访问的地址
# PORT 是服务器默认打开的端口,是需要本地开放的端口
URL=http://192.168.100.155:13090
PORT=3000# 参见 [文档](docs/SERVICES.md) 运行单独的协作服务器,正常操作不需要设置。
COLLABORATION_URL=# 支持上传头像和文档附件的图片必须提供与 s3 兼容的存储。建议使用 AWS S3 进行冗余
# 但是,如果您想将所有文件存储保持在本地,则可以使用替代方法,例如
# minio (https://github.com/minio/minio) can be used.# 有关设置 S3 的更详细指南可在此处获得:
# => https://wiki.generaloutline.com/share/125de1cc-9ff6-424b-8415-0d58c809a40f
# AWS_ACCESS_KEY_ID 对应上面的 MINIO_ROOT_USER
# AWS_SECRET_ACCESS_KEY 对应上面的 MINIO_ROOT_PASSWORD
# AWS_REGION 对应上面的 MINIO_REGION_NAME
# AWS_S3_UPLOAD_BUCKET_URL 是 MINIO 的API地址,注意是API地址,不是管理地址 
AWS_ACCESS_KEY_ID=6m2lx2ffmbr9ikod
AWS_SECRET_ACCESS_KEY=2k78fpraq7rs5xlrti5p6cvb767a691h3jqi47ihbu75cx23twkzpok86sf1aw1e
AWS_REGION=cn-homelab-1
AWS_S3_ACCELERATE_URL=
AWS_S3_UPLOAD_BUCKET_URL=http://192.168.100.155:9000
AWS_S3_UPLOAD_BUCKET_NAME=outline
AWS_S3_UPLOAD_MAX_SIZE=26214400
AWS_S3_FORCE_PATH_STYLE=true
AWS_S3_ACL=private# –––––––––––––– 认证 ––––––––––––––# 第三方登录凭据,工作安装至少需要Google、Slack或Microsoft中的一个,否则您将没有登录选项。# 要配置 Slack 身份验证,您需要在
# => https://api.slack.com/apps
#
# 配置Client ID时,在“OAuth & Permissions”下添加重定向URL:
# https://<URL>/auth/slack.callback
SLACK_KEY=
SLACK_SECRET=# 要配置 Google 身份验证,您需要在以下位置创建 OAuth 客户端 ID
# => https://console.cloud.google.com/apis/credentials
#
# 配置Client ID时,添加Authorized redirect URI:
# https://<URL>/auth/google.callback
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=# 要配置 Microsoft/Azure 身份验证,您需要创建一个 OAuth 客户端。
# 查看有关设置 Azure 应用程序的详细信息的指南:
# => https://wiki.generaloutline.com/share/dfa77e56-d4d2-4b51-8ff8-84ea6608faa4
AZURE_CLIENT_ID=
AZURE_CLIENT_SECRET=
AZURE_RESOURCE_APP_ID=# 要配置通用 OIDC 身份验证,您需要某种身份提供者。
# 请参阅文档,了解您用于获取以下信息的任何 IdP:
# 重定向 URI 是 https://<URL>/auth/oidc.callback
# 此处的参数对应上面 OIDC 服务器的配置
# OIDC_CLIENT_ID 对应上面的 OIDC 服务器的 CLIENT_ID
# OIDC_CLIENT_SECRET 对应上面的 OIDC 服务器的 CLIENT_SECRET
# OIDC_AUTH_URI 是上面的 OIDC 服务器的对公网开放的地址
# OIDC_TOKEN_URI 和 OIDC_USERINFO_URI 应该是用 OIDC 服务器的对公网不开放的地址,当然用开放的也能用,不安全,我这里用开放的地址
OIDC_CLIENT_ID=b8c40013-cc03-4bc5-b3a5-6a31046fa415
OIDC_CLIENT_SECRET=26272010-37d9-4bea-a58e-6b0a382d7626
OIDC_AUTH_URI=http://192.168.100.155:3000/dialog/authorize
OIDC_TOKEN_URI=http://192.168.100.155:3000/oauth/token
OIDC_USERINFO_URI=http://192.168.100.155:3000/api/outline/oidc# 指定要从中派生用户信息的声明支持使用JWT负载的任何有效JSON路径
OIDC_USERNAME_CLAIM=preferred_username# OIDC 认证的显示名称
OIDC_DISPLAY_NAME=SZC_SSO# 空格分隔的身份验证范围。
OIDC_SCOPES=openid profile email# –––––––––––––––– 可选 ––––––––––––––––# 用于 HTTPS 终止的 Base64 编码私钥和证书。This is only
# required if you do not use an external reverse proxy. See documentation:
# https://wiki.generaloutline.com/share/1c922644-40d8-41fe-98f9-df2b67239d45
SSL_KEY=
SSL_CERT=# If using a Cloudfront/Cloudflare distribution or similar it can be set below.
# This will cause paths to javascript, stylesheets, and images to be updated to
# the hostname defined in CDN_URL. In your CDN configuration the origin server
# should be set to the same as URL.
CDN_URL=# 在生产中自动重定向到https。
# 默认值为true,但如果可以确保SSL在外部负载平衡器处终止,则可以将其设置为false。
FORCE_HTTPS=false# 通过向维护人员发送匿名统计信息,让安装人员检查更新情况
ENABLE_UPDATES=false# 应该产生多少进程。作为一个合理的规则,将服务器的可用内存除以512进行粗略估计
WEB_CONCURRENCY=1# 如果有嵌入图像的特别大的Word文档,可能需要覆盖文档导入的最大大小
MAXIMUM_IMPORT_SIZE=5120000# 如果您的反向代理已经记录了传入的http请求,并且结果是重复的,则可以删除这一行
DEBUG=http# 允许登录wiki的域的逗号分隔列表。如果未设置,则在使用Google OAuth登录时默认允许所有域
ALLOWED_DOMAINS=# 为了实现与搜索和发布到渠道的完整集成,还需要以下配置,以及更多详细信息
# => https://wiki.generaloutline.com/share/be25efd1-b3ef-4450-b8e5-c4a4fc11e02a
#
SLACK_VERIFICATION_TOKEN=your_token
SLACK_APP_ID=A0XXXXXXX
SLACK_MESSAGE_ACTIONS=true# 还可以选择启用google analytics来跟踪知识库中的页面浏览量
GOOGLE_ANALYTICS_ID=# 可选地启用Sentry(Sentry.io)来跟踪错误和性能
SENTRY_DSN=# 要支持发送“文档更新”或“您已被邀请”等传出事务性电子邮件,您需要为SMTP服务器提供身份验证
SMTP_HOST=
SMTP_PORT=
SMTP_USERNAME=
SMTP_PASSWORD=
SMTP_FROM_EMAIL=
SMTP_REPLY_EMAIL=
SMTP_TLS_CIPHERS=
SMTP_SECURE=true# 显示在认证屏幕上的自定义徽标,缩放至高度:60px
# TEAM_LOGO=https://example.com/images/logo.png# 默认的接口语言。有关可用语言代码及其大致翻译百分比的列表,请参见 translate.getoutline.com 。
DEFAULT_LANGUAGE=zh_CN

请注意:该文件没写完整,补充可以参考

该配置文件适用于版本 0.63.0,新版可能需要重新进行更改

  1. 运行前需要先迁移数据库
docker run --rm \--env-file=.env \--link postgres_12 \--link redis_6 \outlinewiki/outline:0.63.0 \yarn db:migrate --env production-ssl-disabled
  1. 运行
docker run -d \--restart=always \--name=outline \--env-file=.env \--link postgres_12 \--link redis_6 \-p 13090:3000 \outlinewiki/outline:0.63.0docker logs outline
  1. 访问浏览器 http://192.168.100.155:13090

来自: 【Outline】纯Docker部署指南 - BitEax

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86575.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

终止分区表变更操作时误删数据字典缓存导致MySQL崩溃分析

终止分区表变更操作时误删数据字典缓存导致MySQL崩溃分析 1. 问题简述 在 MySQL 中&#xff0c;当终止一个处于 committing alter table to storage engine 阶段的分区表操作时&#xff0c;InnoDB 会尝试进行回滚并清理数据字典缓存。不幸的是&#xff0c;过程中发生了误删表…

进程关系与守护进程全解析

进程关系和守护进程 进程组 每一个进程除了有一个进程ID(PID)之外还属于一个进程组。进程组是一个或者多个进程的集合&#xff0c; 一个进程组可以包含多个进程&#xff0c;每一个进程组也有一个唯一的进程组ID(PGID)&#xff0c; 并且这个PGID 类似于进程ID&#xff0c; 同样…

PyAutoGUI 测试框架

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】

Git安装避坑指南

Git高速下载 程序员面试资料大全&#xff5c;各种技术书籍等资料-1000G 一、安装前准备&#xff1a;避免环境冲突 1. 检查系统残留&#xff08;Windows&#xff09; # 检查旧版Git残留 where git where git.exe# 检查环境变量 $env:PATH -split ; | Select-String git# 清理…

MATLAB中的并行加速技术与工具

文章目录 MATLAB中的并行加速技术与工具1. 多线程计算&#xff08;隐式并行&#xff09;2. Parallel Computing Toolbox (并行计算工具箱)2.1 parfor (并行for循环)2.2 spmd (单程序多数据)2.3 parfeval (异步并行执行) 3. GPU计算4. 分布式计算 (MATLAB Parallel Server)5. 批…

GR00T N1.5 技术报告 -- Nvidia -- 2025.6.11 -- 开源

0. 前言 GR00T N1 的详细介绍 Isaac-GR00T 在6.11 进行了全面升级&#xff0c;从 N1 进化为 N1.5&#xff0c;但基本还是基于之前的架构&#xff0c;官方发布了一个技术报告&#xff0c;并更新了github库&#xff0c;之前的N1也做了独立版本 N1 N 1.5 github 技术报告 model…

SRS WebRTC 入门

什么是 SRS WebRTC? SRS (Simple Realtime Server) 是一个支持 WebRTC 流媒体的开源媒体服务器。它允许你建立基于 WebRTC 的低延迟直播和实时通信应用。 快速开始 1. 安装 SRS bash # 使用 Docker 快速安装 docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080…

从手机随拍到标准扫描件:AI如何智能校正证件照片(Python+OpenCV)

目录 一、概述二、解决方案2.1 核心挑战&#xff1a;AI眼中的“三座大山”2.2 设计思路&#xff1a;给AI一个“智能提示”2.3 实现流程&#xff1a;四步搞定 三、代码实现3.1 依赖库3.2 代码 四、结语 一、概述 在当今的线上业务中&#xff0c;要求用户上传身份证、驾驶证等证…

基于OpenCV图像分割与PyTorch的增强图像分类方案

在图像分类任务中&#xff0c;背景噪声和复杂场景常常会对分类准确率产生负面影响。为了应对这一挑战&#xff0c;本文介绍了一种结合OpenCV图像分割与PyTorch深度学习框架的增强图像分类方案。通过先对图像进行分割提取感兴趣区域&#xff08;Region of Interest&#xff0c;R…

华为云对象存储OBS 支持安卓/iOS/鸿蒙UTS组件

华为云对象存储OBS 支持安卓/iOS/鸿蒙UTS组件 介绍使用前须知vue代码调用示例权限说明API调用说明初始化配置&#xff08;openClient&#xff09;创建桶&#xff08;createBucket&#xff09;列举桶&#xff08;listBuckets&#xff09;删除桶&#xff08;deleteBucket&#xf…

Buildroot 2025.05 中文手册【AI高质量翻译】

译文在 Github 仓库 和 Gitee 仓库 保持最新&#xff0c;其它平台发的文档可能不会与之同步。 希望能够共同维护这个 仓库的 Buildroot 手册 中文译文&#xff0c;帮助更多人真正深入学习理解&#xff0c;更好的工作、生活和创造。 关于 AI 提示词 以及 更多工具 的收集&#…

采用ArcGIS10.8.2 进行插值图绘制

一、最终成果图展示 二、软件下载 链接: 百度网盘 请输入提取码 密码:azay 三、软件安装 1、在安装之前需要关闭电脑的防火墙及杀毒软件 设置-隐私和安全性-Windows安全中心-防火墙和网络保护 2、软件解压 (1)【ArcGIS_Desktop_1082_180......】“以管理员身份运行”…

Python网安-zip文件暴力破解(仅供学习)

目录 源码在这里 需要的模块 准备一个密码本和需要破解的ZIP文件 一行一行地从密码文件中读取每个密码。 核心部分 注意&#xff0c;需要修改上段代码注释里的这段具有编码问题的代码&#xff1a; 源码在这里 https://github.com/Wist-fully/Attack/tree/cracker 需要的…

如何让ChatGPT模仿人类写作,降低AIGC率?

在AI技术日益普及的当下&#xff0c;ChatGPT 等大语言模型已成为许多学术与写作任务中的得力助手。然而&#xff0c;学境思源&#xff0c;随着各类“AI检测系统”的出现&#xff0c;一键生成论文初稿&#xff01;我们也遇到一个新的问题&#xff1a;如何让AI写作看起来不像AI写…

科大讯飞2025AI开发者大赛-用户新增赛道时间规则解析

根据训练集中的时间规则&#xff0c;对测试集中的数据推断用户标签&#xff08;新用户或老用户&#xff09;。 时间规则如下: 针对训练集和测试集中都存在的did&#xff1a; 找到在训练集中标记为新用户最晚的时间点&#xff0c;则测试集中对应did的数据在此时间点前全部为新用…

.NET C# async/定时任务的异步线程池调度方案最大线程数‌ = 处理器核心数 × 250

关于.NET中Threading.Timer的线程机制&#xff0c;结合线程池特性和异步协作原理分析如下&#xff1a; 一、线程复用机制 ‌共享进程级线程池‌ Threading.Timer的回调任务‌不会每次新建线程‌&#xff0c;而是提交到.NET进程全局线程池统一调度&#xff0c;该线程池与async/…

Redis 高可用分片集群:主从模式与哨兵机制详解

一、为何需要分片集群&#xff1f; 在讨论具体方案之前&#xff0c;我们先明确分片集群要解决的问题&#xff1a; 单节点瓶颈&#xff1a;无论是内存容量还是处理能力&#xff08;QPS&#xff09;&#xff0c;单个 Redis 实例都有物理上限。高可用性需求&#xff1a;单点故障…

Qt readyRead信号避坑:不产生readyRead信号的解决方法

Qt readyRead信号避坑&#xff1a;不产生readyRead信号的解决方法 引言一、QSerialport的readyRead1.1 版本问题1.2 缓存问题1.3 阻塞问题 二、Q(Tcp)Socket的readyRead2.1 阻塞问题2.2 运行一段时间&#xff0c;突然不发信号2.3 和具体数据有关&#xff1f; 引言 目前没遇到相…

大事件项目记录10-文章分类接口开发-更新文章分类

四、更新文章分类。 CategoryController.java&#xff1a; PutMappingpublic Result update(RequestBody Validated Category category){categoryService.update(category);return Result.success();} CategoryService&#xff1a; //更新分类void update(Category category); …

AI接口使用–阿里云百炼

原文地址&#xff1a;AI接口使用–阿里云百炼 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 最近开发了一个抖音AI起名小程序&#xff0c;已经在抖音上线了&#xff0c;欢迎大家来使用。其中用到了 AI文本生成 功能&#xff0c;我用的是 阿里云…