This article is outdated and may not work correctly for current operating systems or software.
Grav is an open source flat-file, (no database needed), CMS written in PHP. Grav source code is publicly hosted on GitHub. This guide will show you how to install Grav CMS on a fresh FreeBSD 11 x64 Vultr instance by using PHP 7.2 and Nginx.
Web Server (Nginx, Apache, LiteSpeed, or IIS). In this guide we will use Nginx.
PHP version 5.5.9 or greater.
Check the FreeBSD version.
uname -ro
# FreeBSD 11.2-RELEASE
Ensure that your FreeBSD system is up to date.
freebsd-update fetch install
pkg update && pkg upgrade -y
Install sudo
, vim
, unzip
, wget
and bash
packages if they are not present on your system.
pkg install -y sudo vim unzip wget bash
Create a new user account with your preferred username (we will use johndoe
).
adduser
# Username: johndoe
# Full name: John Doe
# Uid (Leave empty for default): <Enter>
# Login group [johndoe]: <Enter>
# Login group is johndoe. Invite johndoe into other groups? []: wheel
# Login class [default]: <Enter>
# Shell (sh csh tcsh nologin) [sh]: bash
# Home directory [/home/johndoe]: <Enter>
# Home directory permissions (Leave empty for default): <Enter>
# Use password-based authentication? [yes]: <Enter>
# Use an empty password? (yes/no) [no]: <Enter>
# Use a random password? (yes/no) [no]: <Enter>
# Enter password: your_secure_password
# Enter password again: your_secure_password
# Lock out the account after creation? [no]: <Enter>
# OK? (yes/no): yes
# Add another user? (yes/no): no
# Goodbye!
Run the visudo
command and uncomment the %wheel ALL=(ALL) ALL
line, to allow members of the wheel
group to execute any command.
# Uncomment by removing the hash (#) sign
%wheel ALL=(ALL) ALL
Now, switch to your newly created user with su
command.
su - johndoe
NOTE: Replace johndoe
with your username.
Set up the timezone.
sudo tzsetup
Install PHP and necessary extensions.
sudo pkg install -y php72 php72-curl php72-gd php72-json php72-mbstring php72-xml php72-zip php72-opcache php72-pecl-APCu php72-ctype php72-dom php72-simplexml php72-openssl php72-session php72-hash php72-filter
Check the version.
php --version
# PHP 7.2.10 (cli) (built: Oct 2 2018 01:30:18) ( NTS )
# Copyright (c) 1997-2018 The PHP Group
# Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
# with Zend OPcache v7.2.10, Copyright (c) 1999-2018, by Zend Technologies
Soft-link php.ini-production
to php.ini
.
sudo ln -s /usr/local/etc/php.ini-production /usr/local/etc/php.ini
Enable and start PHP-FPM.
sudo sysrc php_fpm_enable=yes
sudo service php-fpm start
Install the Nginx package.
sudo pkg install -y nginx
Check the version.
nginx -v
# nginx version: nginx/1.14.0
Enable and start Nginx.
sudo sysrc nginx_enable=yes
sudo service nginx start
Run sudo vim /usr/local/etc/nginx/grav.conf
and configure Nginx for Grav.
server {
listen 80;
server_name example.com;
root /usr/local/www/grav;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
location ~ /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # Run sockstat -4 -6 | grep php-fpm
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
}
Save the file and exit.
Now we need to include grav.conf
with the main nginx.conf
file.
Run sudo vim /usr/local/etc/nginx/nginx.conf
and add the following line to the http {}
block.
include grav.conf;
Test the configuration.
sudo nginx -t
Reload Nginx.
sudo service nginx reload
Create a document root directory.
sudo mkdir -p /usr/local/www/grav
Change ownership of the /usr/local/www/grav
directory to johndoe
.
sudo chown -R johndoe:johndoe /usr/local/www/grav
Navigate to the document root directory.
cd /usr/local/www/grav
Using wget
, download Grav. Don't forget to bump up the version numbers if there is a newer release.
wget https://getgrav.org/download/core/grav-admin/1.5.3
Uncompress the zip archive.
unzip 1.5.3
Move all of the installation files to the document root directory.
mv grav-admin/* . && mv grav-admin/.* .
Remove unnecessary files from the document root directory.
rm -rf grav-admin 1.5.3
Change ownership of the /usr/local/www/grav
directory to www
.
sudo chown -R www:www /usr/local/www/grav
Open http://example.com
or http://YOUR_VULTR_IP_ADDRESS
in your web browser and follow the on-screen instructions.
To access Grav admin, append /admin
to your URL.