linux上directus需用pnpm启动而非安装,依赖node.js≥v18.17.0、openssl≥3.0,须正确配置全大写无引号的.env(如db_client=sqlite3)、运行pnpm approve-builds和bootstrap,放行8055端口,并设置token_secret与admin_password强密码。

Linux 上不能“安装” Directus,只能启动它——它是个 Node.js 应用,不是.deb 或.rpm 包。跳过版本校验、漏配 .env 关键项、或用错包管理器,服务会静默失败或登录页空白。
确认 Node.js 和 pnpm 版本是否达标
Directus 官方要求 Node.js ≥ v18.17.0(部分新功能需 v20+),且明确推荐 pnpm 而非 npm,因为依赖解析更严格,能避免 @directus/sdk 等包的 peer dep 冲突。
- 运行
node -v:若低于v18.17.0,在 Ubuntu/Debian 上执行curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo bash - && sudo apt-get install -y nodejs - 运行
pnpm -v:若未安装,用npm install -g pnpm(不要加sudo pnpm,否则权限污染) - 旧系统(如 Ubuntu 20.04)还需检查
openssl version≥ 3.0;OpenSSL 1.1.1 会导致npx directus start启动后立即退出,且无日志
初始化项目并配置 .env(SQLite 场景)
不建议全局安装 CLI,也不要用 npx create-directus-project(已弃用)。正确路径是本地依赖 + 显式初始化。
- 新建空目录,
cd进入后执行pnpm add directus(不是install,避免嵌套node_modules/.pnpm) - 手动创建
.env,关键项必须全大写、无空格、无引号:DB_CLIENT=sqlite3、DB_FILENAME=./database.sqlite - 首次运行前必须执行
pnpm approve-builds,否则npx directus bootstrap会卡在 “Approving builds…” 无提示 -
npx directus bootstrap成功后,检查database.sqlite文件大小是否 >1KB;若为空,大概率是.env中字段名拼错(比如写成db_client而非DB_CLIENT)
启动服务并放开 8055 端口
默认监听 0.0.0.0:8055,但 Linux 发行版常默认屏蔽该端口。问题往往不是服务没起来,而是被防火墙拦住。
- 运行
npx directus start后,立刻执行curl -I http://127.0.0.1:8055;返回HTTP/1.1 200 OK才说明服务正常 - 若超时,先用
ss -tlnp | grep :8055确认端口是否真在监听 - Ubuntu/Debian 用户执行
sudo ufw allow 8055;CentOS/RHEL 用sudo firewall-cmd --permanent --add-port=8055/tcp && sudo firewall-cmd --reload - 云服务器(阿里云/腾讯云)必须在安全组中显式放行
8055端口——仅开80/443没用 - 别用
nohup npx directus start &后台运行:它无法响应SIGTERM,机器重启后残留进程可能锁死 SQLite 文件
最易被忽略的是 TOKEN_SECRET 和 ADMIN_PASSWORD 的强约束:前者必须是任意长度随机字符串(漏设则 JWT 签发失败),后者至少 8 位且不能纯数字;这两项缺失不会在启动时报错,而是在你点登录按钮那一刻崩在 Knex 层,日志里只显示 error: column "id" does not exist 这类误导信息。











