Directus 无头 CMS 部署教程
Directus 是一款开源的无头内容管理系统(Headless CMS),能够将任何 SQL 数据库转化为可通过 REST 和 GraphQL API 访问的内容后端。它提供了直观的管理面板,让非技术人员也能轻松管理数据内容。Directus 支持 PostgreSQL、MySQL、SQLite、Oracle 和 MS SQL 等多种数据库。本文将介绍如何在搬瓦工 VPS 上使用 Docker 部署 Directus。部署前请确保已安装好 Docker 和 Docker Compose。
一、系统要求
- 操作系统:Ubuntu 20.04+ 或 Debian 11+。
- 内存:至少 1GB,建议 2GB 以上。
- 磁盘:至少 10GB 可用空间。
- 域名:建议绑定域名并配置 SSL。
二、创建项目目录
mkdir -p /opt/directus/{uploads,extensions}
cd /opt/directus
三、编写 Docker Compose 配置
创建 docker-compose.yml,使用 PostgreSQL 作为数据库:
cat > /opt/directus/docker-compose.yml <<'EOF'
version: '3.8'
services:
postgres:
image: postgres:15-alpine
restart: always
environment:
POSTGRES_DB: directus
POSTGRES_USER: directus
POSTGRES_PASSWORD: your_db_password
volumes:
- postgres_data:/var/lib/postgresql/data
cache:
image: redis:7-alpine
restart: always
directus:
image: directus/directus:latest
restart: always
depends_on:
- postgres
- cache
ports:
- "8055:8055"
environment:
KEY: "your-random-key-here"
SECRET: "your-random-secret-here"
DB_CLIENT: "pg"
DB_HOST: "postgres"
DB_PORT: "5432"
DB_DATABASE: "directus"
DB_USER: "directus"
DB_PASSWORD: "your_db_password"
CACHE_ENABLED: "true"
CACHE_STORE: "redis"
REDIS: "redis://cache:6379"
ADMIN_EMAIL: "admin@example.com"
ADMIN_PASSWORD: "your_admin_password"
PUBLIC_URL: "https://cms.yourdomain.com"
volumes:
- /opt/directus/uploads:/directus/uploads
- /opt/directus/extensions:/directus/extensions
volumes:
postgres_data:
EOF
生成随机密钥填入 KEY 和 SECRET:
openssl rand -hex 16
openssl rand -hex 16
四、启动 Directus
cd /opt/directus
docker compose up -d
查看启动日志,确认无报错:
docker compose logs -f directus
五、配置 Nginx 反向代理
apt install nginx certbot python3-certbot-nginx -y
cat > /etc/nginx/sites-available/directus <<'EOF'
server {
listen 80;
server_name cms.yourdomain.com;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:8055;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
EOF
ln -s /etc/nginx/sites-available/directus /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d cms.yourdomain.com
六、使用管理面板
访问 https://cms.yourdomain.com,使用 Compose 中配置的管理员邮箱和密码登录。管理面板提供以下核心功能:
- 内容模块:浏览和编辑所有集合中的数据。
- 用户目录:管理系统用户和权限。
- 文件库:上传和管理媒体文件。
- 数据模型:可视化创建和修改集合(表)结构。
- 设置:配置项目全局设置、角色权限等。
七、创建内容模型
以创建一个博客系统为例,在管理面板中创建以下集合:
- articles:包含 title(文本)、content(富文本)、slug(文本)、published_date(日期)、status(下拉选择)、featured_image(文件)等字段。
- categories:包含 name(文本)、slug(文本)、description(文本)等字段。
- 在 articles 中添加一个 Many-to-One 关系字段,关联到 categories。
八、API 使用
Directus 自动为所有集合生成 REST 和 GraphQL API:
# REST API 示例
# 获取文章列表
curl https://cms.yourdomain.com/items/articles
# 带过滤和排序
curl "https://cms.yourdomain.com/items/articles?filter[status][_eq]=published&sort=-published_date&limit=10"
# GraphQL 查询
curl -X POST https://cms.yourdomain.com/graphql \
-H "Content-Type: application/json" \
-d '{"query": "{ articles(filter: {status: {_eq: \"published\"}}) { title content } }"}'
九、权限与角色管理
Directus 拥有灵活的权限系统。你可以创建不同的角色,为每个角色精确控制对每个集合的 CRUD 操作权限和字段级别的访问控制。Public 角色用于控制未认证用户可以访问的内容。
十、数据备份
# 备份数据库
docker exec directus-postgres-1 pg_dump -U directus directus > /opt/directus/backup_$(date +%Y%m%d).sql
# 备份上传文件
tar -czf /opt/directus/uploads_backup_$(date +%Y%m%d).tar.gz /opt/directus/uploads/
十一、常见问题
上传文件失败
检查 uploads 目录权限和 Nginx 的 client_max_body_size 配置。
API 请求返回 403
检查 Public 角色的权限配置,确保已授权相应集合的读取权限。使用 Token 认证时确保在请求头中携带正确的 Token。
总结
Directus 是一款功能丰富的无头 CMS,特别适合需要将内容管理与前端展示分离的项目。在搬瓦工 VPS 上部署后,你可以用它为任何前端框架(React、Vue、Next.js 等)提供内容 API。更多教程请参考:Strapi 部署、Outline Wiki 部署、Docker 安装教程。选购搬瓦工 VPS 请参考全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。