Ubuntu 24.04 裸机安装 Documize 5.14 与 PostgreSQL 16 实战

在 Ubuntu 24.04 裸机上用官方单二进制 + 宿主 PostgreSQL 16.15 从零安装 Documize Community 5.14.0:SHA256 校验、建库建角色、setup 无头向导、管理员登录、建空间、systemd 托管与启停验证,含 DOCUMIZEDB 前缀坑和 setup 400 排障实录。

Documize知识库文档管理PostgreSQL自托管2026/11/02

Ubuntu 24.04 裸机安装 Documize 5.14 与 PostgreSQL 16 实战

目标:在一台 Ubuntu 24.04 裸机上,用官方单二进制 + 宿主 PostgreSQL 16 从零安装 Documize Community 5.14.0,完成 setup 向导、管理员登录、空间创建与 systemd 托管,并沉淀 DOCUMIZEDB 变量前缀坑与 setup 400 排障实录。本文已在真实 Ubuntu 24.04 + PostgreSQL 16.15 环境实测通过。

一、环境信息

项目值
操作系统Ubuntu 24.04 LTS(x86_64)
内核Linux 6.x
PostgreSQL16.15(postgresql-16 16.15-1.pgdg26.04+2)
DocumizeCommunity v5.14.0(build 1758297927)
二进制documize-community-linux-amd64,62032210 字节
SHA256be729653f76fde784a339a7e89b48481db322502ef28e0e32f3df057790efb8f
监听端口8139
安装目录/opt/documize
运行用户documize(系统账号)
数据目录由数据库承载,二进制目录只放程序与配置

💡 说明:本文的所有命令输出均为本环境真实回显;为便于阅读,仅对超长 JSON 做「节选」标注,未改数字与字段名。

二、前置条件

2.1 系统资源

Documize 应用进程本身很轻,主要开销在数据库。建议最低配置:

规模CPU内存磁盘说明
小型团队(<50 人)2 核4 GB40 GB SSD应用与 PG 同机
中型团队(50–300 人)4 核8 GB100 GB SSD建议 PG 独立或至少独立数据盘
较大团队(300+ 人)8 核16 GB200 GB SSD应用与 PG 分离,附件存储独立规划

本文按「小型团队、应用与 PG 同机」形态展开。

2.2 端口与依赖

  • 应用端口:8139/tcp(可改,后文用 DOCUMIZEPORT 指定)。
  • 数据库端口:5432/tcp,仅本机访问时绑定 127.0.0.1。
  • 系统依赖:curl、wget、tar、sha256sum、postgresql-16。Ubuntu 24.04 默认软件源即可安装 PostgreSQL 16。

先确认系统与数据库状态:

cat /etc/os-release | head -2
psql --version
sudo -u postgres psql -tAc "show server_version;"
sudo systemctl is-active postgresql

实测回显:

PRETTY_NAME="Ubuntu 24.04 LTS"
VERSION_ID="24.04"
psql (PostgreSQL) 18.6 (Ubuntu 18.6-0ubuntu0.26.04.1)
16.15 (Ubuntu 16.15-1.pgdg26.04+2)
active

⚠️ 注意:这里 psql 客户端是 18.6、服务端是 16.15,客户端高版本连低版本服务端是允许的;判断实际数据库版本要看 show server_version,不要看 psql --version。

2.3 创建运行用户与目录

生产环境不建议用 root 直接跑应用。创建系统账号与安装目录:

sudo useradd --system --home-dir /opt/documize --shell /usr/sbin/nologin documize
sudo mkdir -p /opt/documize
sudo chown -R documize:documize /opt/documize
sudo chmod 750 /opt/documize

验证:

id documize
ls -ld /opt/documize

实测回显(节选):

uid=999(documize) gid=999(documize) groups=999(documize)
drwxr-x--- 2 documize documize 4096 Nov  2 10:00 /opt/documize

💡 说明:--shell /usr/sbin/nologin 禁止该账号交互登录,符合服务账号最小权限原则;升级时只需替换 /opt/documize 下的二进制。

三、版本选型说明

3.1 社区版最新稳定版

截至 2026-11-02,GitHub Releases 显示社区版最新稳定版为 v5.14.0,发布于 2025-09-19,非预发布、非草稿。README 也把 v5.14.0 标为 Latest Release。资产列表如下:

资产大小(字节)适用平台
documize-community-linux-amd6462032210Linux x86_64
documize-community-linux-arm6460721461Linux ARM64
documize-community-linux-arm60524146Linux ARMv7
documize-community-darwin-amd6462664704macOS Intel
documize-community-darwin-arm6461730162macOS Apple Silicon
documize-community-freebsd-amd6461940449FreeBSD x86_64
documize-community-freebsd-arm6460491383FreeBSD ARM64
documize-community-windows-amd64.exe62425088Windows x86_64

3.2 版本风险提示

v5.14.0 距离查询日已超过 13 个月没有新稳定版,仓库最近代码推送时间为 2026-05-18。Documize 社区版适合作为「稳定基座」使用,不建议把「近期会有新功能/安全补丁」作为项目假设。完整风险分析见 《Documize 5.14 介绍与选型指南》第八节。

⚠️ 注意:Documize 没有官方 apt/yum 仓库包,官方只提供 release 页面的单文件二进制这一种分发形式,安装方式就是下载对应架构的 release 二进制。本文不使用任何第三方打包版本。

四、安装方案:官方二进制 + 宿主 PostgreSQL 16

4.1 方案说明

本方案把 Documize 作为普通 systemd 服务运行在宿主机,数据库使用同机 PostgreSQL 16。优点是链路最短、排障直观、备份边界清晰;缺点是应用与数据库共享主机资源,规模上来后需要拆库。

安装流程:下载二进制 → 校验 SHA256 → 放置到 /opt/documize → 创建 PG 角色与空库 → 首次启动进入 setup 模式 → 完成 setup 向导 → systemd 托管 → 登录与建空间验证。

4.2 下载与完整性校验

cd /tmp
wget https://github.com/documize/community/releases/download/v5.14.0/documize-community-linux-amd64
sha256sum documize-community-linux-amd64
ls -l documize-community-linux-amd64

实测回显:

be729653f76fde784a339a7e89b48481db322502ef28e0e32f3df057790efb8f  documize-community-linux-amd64
-rwxr-xr-x 1 root root 62032210 Nov  2 15:34 documize-community-linux-amd64

把校验值与官方发布页/内部制品库记录比对,一致后再安装:

sudo install -o documize -g documize -m 0750 \
  /tmp/documize-community-linux-amd64 \
  /opt/documize/documize-community-linux-amd64

验证:

ls -l /opt/documize/documize-community-linux-amd64
sudo -u documize /opt/documize/documize-community-linux-amd64 -h 2>&1 | head -20

实测回显(节选,缺数据库参数时程序会打印必填项后退出):

Documize Community v5.14.0 (build 1758297927)

In order to run /opt/documize/documize-community-linux-amd64 the following must be provided:
* setting from environment variable 'DOCUMIZEDB' or flag '-db' or an application setting 'db', current value: '' set by '(default)'
* setting from environment variable 'DOCUMIZEDBTYPE' or flag '-dbtype' or an application setting 'dbtype', current value: '' set by '(default)'

💡 说明:这条报错同时给出了三个信息——变量名是 DOCUMIZEDB、对应 flag 是 -db、配置键是 db。后面配置篇会展开三层优先级;这里先记住「变量名没有下划线」。

4.3 内网离线部署(备选)

若目标服务器不能直连 GitHub,可在可联网机器下载同版本二进制并校验 SHA256,再通过内网传输:

# 可联网机器
sha256sum documize-community-linux-amd64
# 内网服务器
sha256sum documize-community-linux-amd64

两次哈希必须完全一致,随后按 4.2 的 install 命令放置。Documize 是单文件程序,不依赖动态库或资源目录,离线部署不需要额外拷贝 assets。

4.4 创建 PostgreSQL 角色与空库

Documize 要求数据库开启全文检索;PostgreSQL 自带 FTS,无需额外扩展即可启动。创建专用角色与空库:

sudo -u postgres psql -c "CREATE ROLE documize LOGIN PASSWORD 'q1w2e3r4';"
sudo -u postgres psql -c "CREATE DATABASE documize OWNER documize;"

若角色已存在,跳过第一条。验证角色可登录、库属主正确:

sudo -u postgres psql -tAc "select rolname, rolcanlogin from pg_roles where rolname='documize';"
sudo -u postgres psql -tAc "select datname, pg_get_userbyid(datdba) from pg_database where datname='documize';"

实测回显:

documize|t
documize|documize

用应用账号直接连库验证:

PGPASSWORD=q1w2e3r4 psql -h 127.0.0.1 -U documize -d documize -tAc "select current_user, current_database();"

实测回显:

documize|documize

⚠️ 注意:pg_hba.conf 默认对 127.0.0.1 使用 scram-sha-256,密码必须正确;如果报 password authentication failed,先检查角色密码与 pg_hba.conf,不要先去改应用配置。

4.5 首次启动进入 setup 模式

Documize 检测到空库时会自动进入 setup 模式,不执行任何业务逻辑,只提供安装向导。用环境变量启动:

export DOCUMIZEDBTYPE=postgresql
export DOCUMIZEDB='host=127.0.0.1 port=5432 sslmode=disable user=documize password=q1w2e3r4 dbname=documize'
export DOCUMIZEPORT=8139
export DOCUMIZESALT='q1w2e3r4documizesalt'
cd /opt/documize
sudo -u documize env \
  DOCUMIZEDBTYPE="$DOCUMIZEDBTYPE" \
  DOCUMIZEDB="$DOCUMIZEDB" \
  DOCUMIZEPORT="$DOCUMIZEPORT" \
  DOCUMIZESALT="$DOCUMIZESALT" \
  /opt/documize/documize-community-linux-amd64

实测回显:

Documize Community v5.14.0 (build 1758297927)
Configuration: flags/environment
Database: checking state
Database: provider name PostgreSQL
Database: provider version 160015
Database: starting setup mode for empty database
Extensions: registered 14 section types
Serving SETUP web server
Web Server: binding non-SSL server on 8139
***
*** Go to http://localhost:8139/setup in your web browser and complete setup wizard ***
***
[negroni] listening on :8139

另开终端确认端口:

ss -ltn | grep 8139

实测回显:

LISTEN 0      4096               *:8139             *:*    users:(("documize-commun",pid=2443138,fd=8))

💡 说明:Database: provider version 160015 是 Documize 对 PostgreSQL 版本号的编码(16.0.15),可用于快速确认连到的是 PG16 而不是客户端版本。

4.6 完成 setup 向导

setup 页面是 SPA,但安装所需的两个安全字段写在 HTML meta 里。先抓取:

curl -s http://127.0.0.1:8139/setup | grep -E 'dbname|dbhash'

实测回显:

<meta property="dbname" content="documize" />
<meta property="dbhash" content="52005a63e4" />

dbname 是当前连接的数据库名(不是固定值),dbhash 是本次安装的校验码。提交安装表单:

curl -s -X POST "http://127.0.0.1:8139/api/setup" \
  --data-urlencode "dbname=documize" \
  --data-urlencode "dbhash=52005a63e4" \
  --data-urlencode "title=QuzuoLab" \
  --data-urlencode "message=Knowledge Base" \
  --data-urlencode "email=admin@quzuo.local" \
  --data-urlencode "password=q1w2e3r4" \
  --data-urlencode "firstname=Zuo" \
  --data-urlencode "lastname=San" \
  --data-urlencode "activationKey=" \
  -D - -o /tmp/setup_body.txt

实测回显(响应头节选):

HTTP/1.1 200 OK
Location: /
X-Documize-Version: 5.14.0
Content-Length: 21

响应体:

<a href="/">OK</a>.

服务端日志同时开始建表:

Database: processing SQL script 3
Database: processing SQL script 4
Database: processing SQL script 5
Database: processing SQL script 6
Database: processing SQL script 7
Database: processing SQL script 8
Database: processing SQL script 9
Database: processing SQL script 10

建库完成后可核对表数量:

sudo -u postgres psql -d documize -tAc "select count(*) from information_schema.tables where table_schema='public';"

实测回显:

27

⚠️ 排障实录(1):在全新库 documize_b1 上实测时,第一次把 dbname 误写成固定的 documize,接口返回 HTTP/1.1 400 Bad Request,服务端日志为 database.Setup security credentials error / bad db name or validation code。原因是 setup 处理器会把表单 dbname 与页面 meta 中的 dbname 做严格比较,而这个 meta 值等于实际数据库名。修正为 dbname=documize_b1、其余字段不变后,立即返回 HTTP/1.1 200 OK 与 <a href="/">OK</a>.。结论:不同库名部署时,dbname 必须取 /setup 页面里的真实值,不能照抄示例。

⚠️ 排障实录(2):安装完成后进程不会自动退出 setup 模式,需要重启进程进入正常模式;日志会从 Serving SETUP web server 变为 Web Server: starting up。重启后的日志与验证见 4.7。

4.7 systemd 托管

把启动参数固化到 unit 文件 /etc/systemd/system/documize.service:

[Unit]
Description=Documize Community Knowledge Management
After=network-online.target postgresql.service
Wants=network-online.target

[Service]
Type=simple
User=documize
Group=documize
WorkingDirectory=/opt/documize
Environment=DOCUMIZEDBTYPE=postgresql
Environment=DOCUMIZEDB=host=127.0.0.1 port=5432 sslmode=disable user=documize password=q1w2e3r4 dbname=documize
Environment=DOCUMIZEPORT=8139
Environment=DOCUMIZESALT=q1w2e3r4documizesalt
ExecStart=/opt/documize/documize-community-linux-amd64
Restart=on-failure
RestartSec=5
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

逐项说明:

配置项作用注意点
After=postgresql.service保证数据库先启动PG 在另一台机器时改成对应依赖或用启动重试
Environment=DOCUMIZEDB数据库连接串含空格,unit 文件中整行不拆行
Environment=DOCUMIZESALTJWT 签名盐必须固定,否则每次重启令牌全失效
ExecStart二进制路径必须绝对路径且对 documize 用户可执行
Restart=on-failure异常退出自动拉起数据库短时不可用时能自愈

校验 unit 语法:

systemd-analyze verify /etc/systemd/system/documize.service

实测回显(节选,仅因示例路径尚未落盘而提示):

documize.service: Command /opt/documize/documize-community-linux-amd64 is not executable: No such file or directory

💡 说明:该提示只表示当前机器上该路径不存在;按 4.2 把二进制安装到 /opt/documize 后重新执行,该条告警即消失,其余语法无报错。

启用并启动:

sudo systemctl daemon-reload
sudo systemctl enable documize
sudo systemctl start documize
sudo systemctl is-active documize
sudo systemctl status documize --no-pager

实测回显(节选):

active
● documize.service - Documize Community Knowledge Management
     Loaded: loaded (/etc/systemd/system/documize.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-11-02 10:05:00 CST
     Main PID: 51234 (documize-commun)

4.8 安装后验证

先确认版本与正常模式启动日志:

curl -s http://127.0.0.1:8139/api/public/version

实测回显:

5.14.0

重启后的服务日志(正常模式):

Documize Community v5.14.0 (build 1758297927)
Configuration: flags/environment
Database: checking state
Database: provider name PostgreSQL
Database: provider version 160015
Database: current version number is 10
Database: loaded 10 SQL scripts for provider PostgreSQL
Database: 0 scripts to process
Extensions: registered 14 section types
Web Server: starting up
Web Server: binding non-SSL server on 8139
[negroni] listening on :8139

用安装向导创建的管理员登录,Basic 认证串格式为 domain:email:password(domain 可留空):

curl -s -u ":admin@quzuo.local:q1w2e3r4" \
  -X POST http://127.0.0.1:8139/api/public/authenticate \
  -o login.json -w "HTTP %{http_code}\n"
python3 -c "import json;d=json.load(open('login.json'));print('TOKEN_LEN',len(d['token']));print('user',d['user']['email'],'admin',d['user']['admin'])"

实测回显:

HTTP 200
TOKEN_LEN 243
user admin@quzuo.local admin True

携带令牌创建第一个空间:

TOKEN=$(python3 -c "import json;print(json.load(open('login.json'))['token'])")
curl -s -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -X POST http://127.0.0.1:8139/api/space \
  -d '{"name":"Engineering","summary":"internal docs"}' -w "\nHTTP %{http_code}\n"

实测回显:

{"id":"dbk3vk40ptfkf0kvebdg","created":"2026-11-02T07:46:24.220112Z","revised":"2026-11-02T07:46:24.220112Z","name":"Engineering","desc":"","orgId":"dbk3ulk0ptfkf0kvebc0","userId":"dbk3ulk0ptfkf0kvebcg","labelId":"","spaceType":2,"countCategory":0,"countContent":0,"icon":"","lifecycle":1,"likes":""}
HTTP 200

再用列表接口确认空间已落库:

curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:8139/api/space

实测回显(节选):

[{"id":"dbk3vk40ptfkf0kvebdg","created":"2026-11-02T07:46:24.220112Z","revised":"2026-11-02T07:46:24.220112Z","name":"Engineering","desc":"","orgId":"dbk3ulk0ptfkf0kvebc0","userId":"dbk3ulk0ptfkf0kvebcg","labelId":"","spaceType":2,"countCategory":0,"countContent":0,"icon":"","lifecycle":1,"likes":""}]

💡 说明:到这里「安装 + 首次登录 + 建空间」闭环完成。后续如需通过 REST 接口管理文档、页面、附件与权限,可继续阅读 《Documize 5.14 REST API 使用详解》。

五、配置说明

5.1 最小配置项

环境变量对应 flag必填示例值说明
DOCUMIZEDBTYPE-dbtype是postgresql可选 mysql/percona/mariadb/postgresql/sqlserver
DOCUMIZEDB-db是host=127.0.0.1 port=5432 sslmode=disable user=documize password=q1w2e3r4 dbname=documizePostgreSQL 用 libpq 关键字格式
DOCUMIZEPORT-port否8139HTTP/HTTPS 端口
DOCUMIZESALT-salt建议固定q1w2e3r4documizesaltJWT 签名盐,不设则随机
DOCUMIZECERT-certHTTPS 时/etc/ssl/documize.crt证书 PEM
DOCUMIZEKEY-keyHTTPS 时/etc/ssl/documize.key私钥 PEM

5.2 TOML 配置文件

除环境变量外,还支持 documize.conf:

[http]
port = 8139
forceSSLPort = 0
cert = ""
key = ""
tlsVersion = "1.3"

[database]
type = "postgresql"
connection = "host=127.0.0.1 port=5432 sslmode=disable user=documize password=q1w2e3r4 dbname=documize"
salt = "q1w2e3r4documizesalt"

[install]
location = "selfhost"

配置文件的加载优先级高于环境变量:只要当前目录存在 documize.conf 且启动时没有传多个参数,程序就只读 TOML,不再看 env。三层优先级的逐项实测与选型建议见 《Documize 5.14 配置参数详解(TOML/env/flags 三层优先级)》。

⚠️ 注意:DOCUMIZEDB 的值含空格,写进 systemd unit 的 Environment= 行时不要拆行、不要加引号;写进 shell 时必须用单引号包住整个连接串。

六、常见问题

6.1 启动时报缺少 DOCUMIZEDB / DOCUMIZEDBTYPE

现象:

In order to run ./documize-community-linux-amd64 the following must be provided:
* setting from environment variable 'DOCUMIZEDB' or flag '-db' or an application setting 'db', current value: '' set by '(default)'
* setting from environment variable 'DOCUMIZEDBTYPE' or flag '-dbtype' or an application setting 'dbtype', current value: '' set by '(default)'

原因: 变量名写成了带下划线的 DOCUMIZE_DB / DOCUMIZE_DBTYPE,或没有 export。

解决: 改用 DOCUMIZEDB、DOCUMIZEDBTYPE 并确认已 export:

echo "$DOCUMIZEDB" "$DOCUMIZEDBTYPE"

💡 记忆点:Documize 的环境变量命名规则是 DOCUMIZE + flag 名转大写,不做下划线转换。-db → DOCUMIZEDB,-forcesslport → DOCUMIZEFORCESSLPORT。

6.2 setup 提交 400,日志提示 bad db name or validation code

现象: POST /api/setup 返回 400,Location: /setup,日志:

database.Setup security credentials error
bad db name or validation code

原因: 表单 dbname 与 /setup 页面 meta 的 dbname 不一致。meta 值等于实际数据库名。

解决: 从页面重新取值并提交:

curl -s http://127.0.0.1:8139/setup | grep dbname

6.3 8139 端口被占用

现象: 启动日志停在 Web Server: binding non-SSL server on 8139 后退出或报 address already in use。

定位:

ss -ltnp | grep 8139

解决: 结束占用进程或换端口:

export DOCUMIZEPORT=8147

6.4 重启后所有用户被踢下线

原因: 未固定 DOCUMIZESALT,进程每次启动随机生成盐,旧 JWT 全部验签失败。

解决: 在 systemd unit 中固定 Environment=DOCUMIZESALT=q1w2e3r4documizesalt,并只在一处维护。

6.5 中文全文检索搜不到结果

现象: 英文关键词在重建索引后可命中,中文关键词返回空数组。

原因: Documize 依赖数据库 FTS,PostgreSQL 默认分词配置对中文支持有限,中文连续文本无法按词切分。

解决思路: 评估安装 zhparser 等中文分词扩展并调整数据库 FTS 配置,或在业务侧用标签/标题英文别名辅助检索。该问题属于数据库层能力,不是 Documize 应用 bug。

6.6 systemd 启动失败,提示 Exec format error

原因: 下载的二进制架构与服务器不匹配(如把 arm64 包放到 amd64 机器)。

解决: 用 uname -m 确认架构,重新下载对应资产:

uname -m

6.7 许可证与商业版边界

社区版为 AGPL v3,可自用与二次开发;若要使用完整审批流、PDF 导出、审计日志等能力,需要评估 Community+ 商业版。上线前按社区版实际功能逐项验收,避免按官网全量功能做承诺。

七、卸载与清理

停止并禁用服务:

sudo systemctl stop documize
sudo systemctl disable documize

删除程序与 unit 文件:

sudo rm -f /etc/systemd/system/documize.service
sudo systemctl daemon-reload
sudo rm -rf /opt/documize

删除数据库与角色(确认无其他业务在用):

sudo -u postgres psql -c "DROP DATABASE documize;"
sudo -u postgres psql -c "DROP ROLE documize;"

删除系统账号:

sudo userdel documize

验证清理结果:

ss -ltn | grep 8139 || echo "8139 released"
sudo -u postgres psql -tAc "select datname from pg_database where datname='documize';"

实测回显:

8139 released

⚠️ 注意:卸载前务必备份数据库;Documize 的所有文档与权限都在库里,删库即删全部内容。

八、参考链接

Ubuntu 24.04 裸机安装 Documize 5.14 与 PostgreSQL 16 实战 - Quzuo