部署outline知识库服务器
- 准备docker环境(部署服务器底层系统使用centos7)

- 准备docker镜像。

- 安装
redis
docker run -d \
--name redis \
--restart=always \
-p 6379:6379 \
-v ~/docker-data/redis-data:/data \
redis:7.4.2-alpine \
redis-server --save 60 1 --loglevel warning --requirepass xxxxxx # xxxxxx为redis的密码
Postgres
docker run -d \
--name postgres \
--restart=always \
-e POSTGRES_PASSWORD=xxxxxx \ # xxxxxx为postgres的密码
-e POSTGRES_USER=outline \ # outline为postgres的用户名(可以变更与outline容器中保持一致)
-v ~/docker-data/postgres-data:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:15
minio
docker run -d \
--name minio \
--restart=always \
-p 9000:9000 \
-p 9001:9001 \
-e MINIO_REGION_NAME="cn-homelab-1" \ # cn-homelab-1 这个名字自定义outline会用到,设置minio是会自动出现
-e MINIO_ROOT_USER="outline" \ # outline为minio的用户名(可以变更后期登陆minio使用)
-e MINIO_ROOT_PASSWORD="xxxxxx" \ # xxxxxx为minio的密码
-v ~/docker-data/minio-data:/data \
minio/minio:RELEASE.2025-03-12T18-04-18Z server /data --console-address ":9001" # 9001是outline中使用与设置minio的9000不一样
使用ip:9001进入设置界面填写用户名密码。

新建一个名为 outline的Buckets,填个名称就行,其他的都默认。

server location 中是自动出现的不用管(这个值是后面的 AWS_REGION的值),comment必须填写不然会报错(随便填个数字即可),点击保存后重启。这样minio设置就完了。
keycloak
docker run -d \
--name keycloak \
--restart=always \
-p 8080:8080 \
-e KC_DB=postgres \
-e KC_DB_URL=jdbc:postgresql://ip:5432/postgres \ # 文中出现的ip全部为服务器本机ip、5432为端口号、postgres为数据库名称
-e KC_DB_USERNAME=outline \ # outline为keycloak的数据库用户名
-e KC_DB_PASSWORD=xxxxxx \ # xxxxxx为keycloak的数据库密码
-e KC_BOOTSTRAP_ADMIN_USERNAME=keycloak \ # keycloak为keycloak的登陆用户名
-e KC_BOOTSTRAP_ADMIN_PASSWORD=xxxxxx \ # xxxxxx为keycloak的登陆密码
keycloak/keycloak:26.1.4 start-dev
通过ip:8080 进入设置,然后开始创建realm,名称填 outline





Root URL: http://xxxx.example.com:3000/
Home URL: http://xxxx.example.com:3000/
Valid redirect URIs: http://xxxx.example.com:3000/* # 全部按照格式填写 *也要写 不然报错进不去

-
这个是下面要用到的
OIDC_CLIENT_SECRET值接着创建一个用来登录的用户,后面就是跳转到keycloak然后用这个用户登录进去


#下面是禁用outline的ssl
docker exec -it keycloak bash
/opt/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080 --realm master --user 用户名 #这个用户名是keycload
然后输入设置的密码,再执行下面这行
/opt/keycloak/bin/kcadm.sh update realms/outline -s sslRequired=NONE
部署outline(里面替换的全部替换完成)
docker run -d \
-p 3000:3000 \
--name outline \
--restart=always \
-v ~/docker-data/outline-data:/var/lib/outline/data \
-e DATABASE_URL=postgres://outline:xxxxxx@ip:5432/postgres \
-e REDIS_URL=redis://:xxxxxx@ip:6379/0 \
-e PGSSLMODE=disable \
-e FORCE_HTTPS=false \
-e SECRET_KEY= \ # 使用openssl rand -hex 32 生成
-e UTILS_SECRET= \ # 使用openssl rand -hex 32 生成
-e URL=http://ip:3000 \
-e OIDC_CLIENT_ID=outline \
-e OIDC_CLIENT_SECRET=xxxxxxxxxxxx \ #设置keycloak时需要拷贝,Credentials选项卡的Client Secret内容
-e OIDC_AUTH_URI=http://ip:8080/realms/outline/protocol/openid-connect/auth \ #8080端口看个人设置与自己的相同
-e OIDC_TOKEN_URI=http://ip:8080/realms/outline/protocol/openid-connect/token \ #与上相同
-e OIDC_USERINFO_URI=http://ip:8080/realms/outline/protocol/openid-connect/userinfo \ #与上相同
-e OIDC_USERNAME_CLAIM=preferred_username \
-e OIDC_DISPLAY_NAME=keycloak \
-e AWS_ACCESS_KEY_ID=outline \
-e AWS_SECRET_ACCESS_KEY=xxxxxx \
-e AWS_S3_UPLOAD_BUCKET_URL=http://ip:9000 \
-e AWS_S3_UPLOAD_BUCKET_NAME=outline \
-e AWS_REGION=cn-homelab-1 \
-e FILE_STORAGE_UPLOAD_MAX_SIZE=26214400 \
-e AWS_S3_FORCE_PATH_STYLE=true \
-e AWS_S3_ACL=private \
outlinewiki/outline:0.82.0
DATABASE_URL: 指定postgre数据库的连接信息
REDIS_URL:指定redis的连接信息
PGSSLMODE:不用ssl连接postgre数据库
FORCE_HTTPS:禁用强制https
SECRET_KEY:不知道有什么用,可以通过openssl rand -hex 32生成
UTILS_SECRET: 不知道有什么用,可以通过openssl rand -hex 32生成
URL:outline的访问地址,就是ip加上-p映射的端口
OIDC_CLIENT_ID: 这个是在keycloak里设置的Clients里的Client ID
OIDC_CLIENT_SECRET: 这个就算Credentials里的Client Secret
OIDC_AUTH_URI:这个链接的构成:http://keycloak的域名:keycloak的端口/realms/keycloak的realm/protocol/openid-connect/auth
OIDC_TOKEN_URI:跟上面一样
OIDC_USERINFO_URI:跟上面一样
OIDC_USERNAME_CLAIM:不知道有什么用,照抄吧
OIDC_DISPLAY_NAME:没什么用
AWS_ACCESS_KEY_ID:minio用户名
AWS_SECRET_ACCESS_KEY:minio密码
AWS_S3_UPLOAD_BUCKET_URL:minio连接地址,端口是9000,不是9001(这个是web界面的地址)
AWS_S3_UPLOAD_BUCKET_NAME:bucket的名称
AWS_REGION:region
FILE_STORAGE_UPLOAD_MAX_SIZE:设置上传的最大大小,这个数字是25M
AWS_S3_FORCE_PATH_STYLE:不知道什么用
AWS_S3_ACL:不知道什么用
以下是没有添加--restart=always 参数解决办法
创建一个新的 .service文件,例如 /etc/systemd/system/mydockercontainers.service:
[Unit]
Description=Start multiple Docker containers on boot
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c 'docker start mycontainer1; docker start mycontainer2; docker start mycontainer3'
[Install]
WantedBy=multi-user.target
sudo systemctl enable mydockercontainers.service
sudo systemctl start mydockercontainers.service
以上为内网部署outline的步骤,如果想外网访问可以搭建专用网络访问,使用单纯的内网穿透是不行的,单独穿透一个端口无法访问。
文章参考大神制作 https://www.cnblogs.com/kanadeblisst/p/18801543
评论区