静看光阴荏苒
不管不顾不问不说也不念

由法国政府开源的笔记软件:Docs

Docs这个项目我一直都在关注,奈何之前的部署方式只支持k8s,如果只是为了部署一个笔记软件去搭一个k8s的话,那真的是有点拿大炮打蚊子那味了= =最近发现这个项目支持用docker compose部署了,遂记录下部署过程与遇到的一些问题。

不得不说国家队还是牛B!这个笔记软件第一次用就感觉挺顺手的,前端UI简洁大气,自带AI功能,可以帮你美化、改写、总结、修正错别字、翻译等。自托管的实例所有功能都能使用,与官方实例1:1还原,而不是像某些“开源笔记”那样吃相难看。

缺点也还是有的,没有十全十美的东西= =目前虽然支持docker compose部署了,但部署起来还是比较麻烦。另外我在使用中发现一些小bug,例如:上传的文件名不能包含中文,有中文就会导致上传失败。导出的PDF文件显示中文是乱码,且不支持代码块等。如果你不介意这些问题的话,可以尝试一下。

本文根据Docs官方的文档编写,进行了一些修改:

1.将Keycloak更换为VoidAuth,因为Keycloak部署和配置都过于复杂。

2.将MinIO更换为Garage,因为开源的MinIO已经名存实亡了。

3.不使用官方的NGINX反向代理配置,因为我的服务器已经运行Ferron Web Server了。

如果你完全遵循本文的步骤来部署,则在开始前需要做好以下准备工作:

1.一个域名做好解析,本文示例域名:docs.example.com

2.部署Garage S3对象存储。本文示例域名:s3-garage.example.com

注:如果你使用Garage S3则无法使用Docs的历史版本与回退功能,这是由于目前Garage的S3实现不支持“版本控制”功能导致的,并不是Docs的问题。

3.部署VoidAuth OIDC身份验证服务。本文示例域名:voidauth.example.com

4.创建一个OPENAI的API KEY。

在Garage S3创建存储桶和key并授权:

docker exec -ti garage /garage bucket create docs-media-storage
docker exec -ti garage /garage key create docs-media-storage-app-key
docker exec -ti garage /garage bucket allow --read --write --owner docs-media-storage --key docs-media-storage-app-key

在VoidAuth创建OIDC APP:

务必将Redirect URLs设置为:

https://docs.example.com/api/v1.0/callback/

务必将PostLogout URL设置为:

https://docs.example.com/api/v1.0/logout-callback/

做好上面的准备工作后,现在可以正式部署Docs了,先在服务器内安装Docker:

apt -y update
apt -y install curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

下载compose文件以及需要用到的环境变量配置文件、NGINX配置文件:

cd /opt
mkdir -p docs/env.d
cd docs
curl -o compose.yaml https://raw.githubusercontent.com/suitenumerique/docs/refs/heads/main/docs/examples/compose/compose.yaml
curl -o env.d/common https://raw.githubusercontent.com/suitenumerique/docs/refs/heads/main/env.d/production.dist/common
curl -o env.d/backend https://raw.githubusercontent.com/suitenumerique/docs/refs/heads/main/env.d/production.dist/backend
curl -o env.d/yprovider https://raw.githubusercontent.com/suitenumerique/docs/refs/heads/main/env.d/production.dist/yprovider
curl -o env.d/postgresql https://raw.githubusercontent.com/suitenumerique/docs/refs/heads/main/env.d/production.dist/postgresql
curl -o default.conf.template https://raw.githubusercontent.com/suitenumerique/docs/refs/heads/main/docker/files/production/etc/nginx/conf.d/default.conf.template

设置PostgreSQL数据库密码:

nano env.d/postgresql

这里只列出需要修改的内容:

DB_PASSWORD=setyourdbpassword # 设置你的数据库密码。

设置YPROVIDER API KEY/COLLABORATION SECRET:

nano env.d/yprovider

这里只列出需要修改的内容:

Y_PROVIDER_API_KEY=randomkey # 使用openssl rand -hex 32生成
COLLABORATION_SERVER_SECRET=randomkey # 使用openssl rand -hex 32生成

编辑common环境变量配置文件:

nano env.d/common

这里只列出需要修改的内容:

DOCS_HOST=docs.example.com # 设置你的Docs实例域名
#KEYCLOAK_HOST=id.domain.tld # 注释掉这个变量,因为我们不使用KEYCLOAK
S3_HOST=s3-garage.example.com # 设置你的Garage S3端点域名
BUCKET_NAME=docs-media-storage # 如果你的S3桶名不是docs-media-storage请修改
#REALM_NAME=docs # 注释掉这个变量,因为我们不使用KEYCLOAK

编辑backend环境变量配置文件:

nano env.d/backend

这里只列出需要修改和增加的内容:

## Django
DJANGO_SECRET_KEY= # 使用openssl rand -hex 32生成
DOCUMENT_IMAGE_MAX_SIZE=2048000000 # 增加这个配置,修改默认文件上传大小到2048MB

# Mail
DJANGO_EMAIL_HOST=mail.example.com
DJANGO_EMAIL_HOST_USER=smtp
DJANGO_EMAIL_HOST_PASSWORD=smtppassword
DJANGO_EMAIL_PORT=587
DJANGO_EMAIL_FROM=smtp@example.com
DJANGO_EMAIL_USE_TLS=true

# Media
AWS_S3_REGION_NAME=garage # 因Garage S3强制要求区域,增加这个配置以适配Garage S3
AWS_S3_ACCESS_KEY_ID=
AWS_S3_SECRET_ACCESS_KEY=

# OIDC
OIDC_OP_JWKS_ENDPOINT=https://voidauth.example.com/oidc/jwks
OIDC_OP_AUTHORIZATION_ENDPOINT=https://voidauth.example.com/oidc/auth
OIDC_OP_TOKEN_ENDPOINT=https://voidauth.example.com/oidc/token
OIDC_OP_USER_ENDPOINT=https://voidauth.example.com/oidc/me
OIDC_OP_LOGOUT_ENDPOINT=https://voidauth.example.com/oidc/session/end
OIDC_RP_CLIENT_ID=
OIDC_RP_CLIENT_SECRET=

# AI
AI_FEATURE_ENABLED=true # is false by default
AI_BASE_URL=https://api.openai.com/v1
AI_API_KEY=sk-proj-3aFFuEBT...
AI_MODEL=gpt-4o-mini

编辑NGINX配置文件:

nano default.conf.template

修改上传大小与之前的配置对应:

# increase max upload size
client_max_body_size 2048m;

为了避免混淆,请注意这里的NGINX配置文件是给前端容器在容器内部使用的,并不是给主机NGINX用的。无论你用不用NGINX反代,都必须要有这个文件。

编辑compose文件:

nano compose.yaml

将前端容器的8083端口暴露出来:

...
  frontend:
    image: lasuite/impress-frontend:latest
    ...
    volumes:
      - ./default.conf.template:/etc/nginx/templates/docs.conf.template
    ports:
      - 127.0.0.1:8083:8083
...

启动Docs:

docker compose up -d

运行数据库迁移并创建Django管理员用户:

docker compose run --rm backend python manage.py migrate
docker compose run --rm backend python manage.py createsuperuser --email imlala@lala.im --password adminpassword

稍后你可以使用这个URL访问Docs的Django后台:docs.example.com/admin。请注意这里创建的用户仅作为Django管理员账号,与实际的用户账号不相关,用户账号始终使用OIDC登录。

配置Ferron反向代理:

nano /etc/ferron.kdl

写入如下内容:

docs.example.com {
   proxy "http://127.0.0.1:8083/"
   proxy_request_header_replace "Host" "{header:Host}"
}

重载Ferron:

systemctl reload ferron

看下使用效果,和AFFiNE一样,支持使用/命令呼出菜单:

选中一段内容可以使用AI功能:

AI改写:

用作提示:

gpt-4o-mini这排版感觉比我写的还好啊= =我艹了个DJ!把功能都试的差不多了,最后再补充点不太满意的地方。搜索功能弱了点,似乎不支持全文搜索。不支持密码分享文档。没有个人账号的信息页面,缺少上传头像之类的功能,这方面有点过于简洁了= =总的来说很牛B,给我一种很丝滑的体验。

赞(0)
未经允许不得转载:荒岛 » 由法国政府开源的笔记软件:Docs
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

分享创造快乐

广告合作资源投稿