Grav是一款近年来颇受欢迎的Flat-file(平面文件)内容管理系统,用PHP编写,最大的特点就是完全不需要数据库。传统CMS如WordPress依赖MySQL存储内容,而Grav把所有页面、配置、用户数据都以Markdown和YAML文件的形式直接放在目录里,这让它在轻量云服务器上运行得非常流畅。本文将从环境准备开始,一步步演示如何在云服务器上完成Grav的部署与配置。

一、为什么选择Grav:零数据库架构的优势
Grav的核心设计理念是“内容即文件”。每个页面就是一个Markdown文件,配以同名的YAML元数据文件,前后台的配置同样以YAML文件保存。这种架构带来的直接好处是:不依赖MySQL或PostgreSQL,省去了数据库安装、备份、优化的全部工作。
在资源占用方面,一台1核1GB内存的入门级云服务器就能流畅运行Grav,而传统数据库驱动的CMS在这种配置下往往捉襟见肘。此外,备份网站只需打包一个目录,迁移服务器也只是复制文件加修改配置,几分钟就能完成。
对于以内容展示为主的博客、产品官网、文档站点,Grav的轻量化特性非常契合。当然,如果你的站点需要大量用户交互、评论系统或复杂的关系型数据,还是要慎重考虑。
二、部署前的环境准备
Grav对环境要求不高:PHP 7.3以上(推荐8.0或8.1)、一个Web服务器(Nginx或Apache均可)。下面以Ubuntu系统为例说明准备过程。
首先更新软件源并安装PHP及相关扩展:
apt update && apt install -y php php-fpm php-cli php-gd php-mbstring php-xml php-curl php-zip php-opcache
安装完成后,确认PHP版本满足要求:php -v。接着安装Web服务器,本文以Nginx为例:apt install -y nginx。如果你习惯使用Apache,后面的配置章节也会给出对应的写法。
需要特别注意的是,Grav依赖以下几个PHP扩展,缺少任何一个都可能导致安装失败或运行异常:gd(图片处理)、mbstring(多字节字符串)、xml、curl、zip。用php -m可以查看已启用的扩展列表,逐一核对即可。
三、下载并安装Grav
Grav提供两种安装方式:直接下载压缩包和使用Composer。对大多数用户来说,下载压缩包更简单直接。
方式一:使用wget下载官方最新版本并解压到站点目录:
cd /var/www
wget https://getgrav.org/download/core/grav/latest
unzip grav-latest.zip
mv grav/* /var/www/grav/
方式二:通过Composer安装,适合有PHP开发经验的用户:
composer create-project getgrav/grav /var/www/grav
解压完成后,先检查运行状态。Grav自带一个命令行工具,可以快速验证:
cd /var/www/grav
bin/grav clear-cache
如果命令能正常执行且没有报错,说明PHP环境基本没问题。
四、目录权限与属主配置
权限问题是最常见的部署故障来源。Grav在运行时需要对部分目录有写权限,包括cache、logs、images、assets、user/accounts等。
假设Web服务以www-data用户运行(Ubuntu默认),执行以下命令:
chown -R www-data:www-data /var/www/grav
find /var/www/grav -type d | xargs chmod 775
find /var/www/grav -type f | xargs chmod 664
配置完成后,可以访问临时页面测试。如果出现写入权限报错,重点检查backup和tmp两个目录是否也归属www-data用户。另外,使用FTP或SFTP上传文件后,别忘了重新执行chown命令,否则Web进程可能无法写入新文件。
五、Web服务器配置
Nginx配置
创建站点配置文件 /etc/nginx/sites-available/grav ,核心内容如下:
server {
listen 80;
server_name yourdomain.com;
root /var/www/grav;
index index.php;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
其中try_files这一行是关键,它把所有请求重写给index.php处理,也就是Grav的路由入口。注意fastcgi_pass中的PHP版本要与实际安装的版本对应,比如php8.1-fpm.sock或php8.0-fpm.sock。
保存后建立软链接并重载Nginx:ln -s /etc/nginx/sites-available/grav /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginx。
Apache配置
如果使用Apache,需要启用rewrite模块并配置.htaccess。Grav安装包自带一份现成的.htaccess文件,只需确保虚拟主机中AllowOverride为All:
<Directory /var/www/grav>
AllowOverride All
Require all granted
</Directory>
然后执行a2enmod rewrite并重启Apache即可。
六、安装后台管理插件Admin
Grav默认只有命令行管理方式,建议安装官方的Admin插件获得可视化后台。在站点目录执行:
bin/gpm install admin
安装完成后,首次访问 http://你的域名/admin 会引导你创建管理员账号。此时系统会在user/accounts目录下生成一个以用户名命名的YAML文件,包含加密后的密码散列。
建议创建账号时使用强密码,并勾选开启双因素认证相关的插件。后台创建页面非常直观,支持在线Markdown编辑、页面预览和多媒体上传,日常内容维护完全不需要接触服务器。
七、安全加固与性能优化建议
部署完成后,有几件事值得做。第一,配置HTTPS:使用Let's Encrypt免费证书,执行certbot工具可以自动完成证书申请和Nginx配置,全程只需一两分钟。第二,限制敏感目录访问:在Nginx配置中明确拒绝访问/user、/backup等目录,防止配置文件被直接下载。
性能方面,确保php-opcache已启用,它能显著降低PHP脚本的重复编译开销。Grav自身有完善的缓存机制,进入后台系统配置页面,开启缓存并根据服务器内存调整缓存驱动。对于流量较大的站点,可以在前面再加一层CDN或开启Nginx的静态文件缓存。
日常维护上,记得定期用bin/grav backup做整站备份,升级时先备份再执行bin/gpm selfupgrade升级核心,插件升级用bin/gpm update即可。整个流程没有数据库参与,回滚也只是恢复文件目录,操作容错率很高。
八、常见问题排查
如果访问首页出现白屏,多半是PHP扩展缺失或权限问题,查看/var/log/nginx/error.log和Grav的logs目录能快速定位原因。如果样式错乱或资源404,检查Web服务器的重写规则是否生效。如果后台无法登录,检查user/accounts目录权限以及PHP的session存储路径是否可写。
遇到“Cache directory not writable”类报错,直接对cache目录执行chown即可。这类文件权限问题在换用不同运行用户(比如从Apache切换到Nginx)时尤其高发,掌握“目录属主跟着Web进程走”这个原则,绝大多数权限故障都能自行解决。
结语
Grav的零数据库架构让建站这件事回归了简单本质:装好PHP、放好文件、配好Web服务器,一个完整的CMS就跑起来了。整个过程不涉及任何SQL操作,资源占用低,备份迁移方便,非常适合部署在轻量云服务器上。按照本文流程操作,通常半小时内就能完成从零到可访问的全部步骤。
Grav教程云服务器部署Flat-file CMS修改时间:2026-09-16 12:18:50