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,给我一种很丝滑的体验。
荒岛























