DEV Community

Cover image for Grav CMS on OpenBSD: Installation via Composer
Heddi Nabbisen
Heddi Nabbisen

Posted on

Grav CMS on OpenBSD: Installation via Composer

Summary

Grav is one of CMS frameworks, which is open source and MIT Licensed. It is developed as a flat-file based one using Symfony PHP framework. Symfony officially introduces it on their own website.
This post shows how to install it on OpenBSD.

Environment

Installation

Preparation

Composer

Install with OpenBSD's Ports:

$ doas pkg_add composer
Enter fullscreen mode Exit fullscreen mode

OpenBSD httpd and PHP-FPM

Confirm the required daemons, httpd and php-fpm, are started:

$ # enabled? (optional)
$ doas rcctl ls on | grep -E "(httpd|php)"
httpd
php74_fpm

$ # started?
$ doas rcctl ls started | grep -E "(httpd|php)"
httpd
php74_fpm
Enter fullscreen mode Exit fullscreen mode

When they are not shown, which means they are not ready, prepare them. There are examples of documentations:

OpenBSD httpd

PHP-FPM

Project creation and configuration

Here goes the main part.

Creation

Let's get the Grav project template and install dependencies:

$ composer create-project getgrav/grav <grav-dir>
Enter fullscreen mode Exit fullscreen mode

The output is:

Creating a "getgrav/grav" project at "./"
Installing getgrav/grav (1.7.18)
  - Installing getgrav/grav (1.7.18): Extracting archive
Created project in /(...)/<grav-dir>/.
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 103 installs, 0 updates, 0 removals
  - Downloading behat/gherkin (v4.8.0)
(...)
  - Downloading phpstan/phpstan-deprecation-rules (0.12.6)
  - Installing antoligy/dom-string-iterators (v1.0.1): Extracting archive
(...)
  - Installing willdurand/negotiation (3.0.0): Extracting archive
Generating autoload files
57 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> bin/grav install

Installing vendor dependencies
Installing dependencies from lock file
Verifying lock file contents can be installed on current platform.
Package operations: 0 installs, 0 updates, 52 removals
  - Removing webmozart/assert (1.10.0)
(...)
  - Removing behat/gherkin (v4.8.0)
    0 [>---------------------------]    0 [>---------------------------]    0 [>---------------------------]Generating optimized autoload files
Class ParsedownExtraTest located in ./vendor/erusev/parsedown-extra/test/ParsedownExtraTest.php does not comply with psr-0 autoloading standard. Skipping.
24 packages you are using are looking for funding.
Use the `composer fund` command to find out more!


Cloning Bits
============

Cloning into 'user/plugins/problems'...
(...)
SUCCESS cloned https://github.com/getgrav/grav-plugin-problems -> /(...)/<grav-dir>/user/plugins/problems

Cloning into 'user/plugins/error'...
(...)
SUCCESS cloned https://github.com/getgrav/grav-plugin-error -> /(...)/<grav-dir>/user/plugins/error

Cloning into 'user/plugins/markdown-notices'...
(...)
SUCCESS cloned https://github.com/getgrav/grav-plugin-markdown-notices -> /(...)/<grav-dir>/user/plugins/markdown-notices

Cloning into 'user/themes/quark'...
(...)
SUCCESS cloned https://github.com/getgrav/grav-theme-quark -> /(...)/<grav-dir>/user/themes/quark
Enter fullscreen mode Exit fullscreen mode

Done.

Configuration

There are two parts: Admin panel installation (optional) and OpenBSD httpd configuration.

Admin panel (optional)

Well, Admin panel is very useful to manage Grav sites, so I recommend installing it.
Use GPM, grav package manager, to install it:

$ cd <grav-dir>

$ php bin/gpm install admin
Enter fullscreen mode Exit fullscreen mode

The output is:

GPM Releases Configuration: Stable



The following dependencies need to be installed...
  |- Package form
  |- Package login
  |- Package email
  |- Package flex-objects

 Install these packages? [Y|n]  (yes/no) [yes]:
 > 

Preparing to install Form [v5.0.3]
(...)
  '- Success!  

Preparing to install Login [v3.4.4]
(...)
  '- Success!  

Preparing to install Email [v3.1.3]
(...)
  '- Success!  

Preparing to install Flex Objects [v1.0.16]
(...)
  '- Success!  


Dependencies are OK

Preparing to install Admin Panel [v1.10.18]
  |- Downloading package...   100%
  |- Checking destination...  ok
  |- Installing package...    ok                             
  '- Success!  


Clearing cache

Cleared:  /(...)/<grav-dir>/cache/doctrine/*
Cleared:  /(...)/<grav-dir>/cache/compiled/*

Touched: /(...)/<grav-dir>/user/config/system.yaml
Enter fullscreen mode Exit fullscreen mode
OpenBSD httpd

Let's add a server to serve a Grav site.

$ doas nvim /etc/httpd.conf
Enter fullscreen mode Exit fullscreen mode

OpenBSD httpd.conf should be like this:

server "<fqdn>" {
    root "/(...care about `chroot`...)/<grav-dir>"
    #directory no index

    # security
    location "*/.git*"                      { block }

    # assets
    location "*.html"                       { pass }
    location "*.css"                        { pass }
    location "*.js"                         { pass }
    location "*.jpg"                        { pass }
    location "*.jpeg"                       { pass }
    location "*.png"                        { pass }
    location "*.webp"                       { pass }
    location "*.gif"                        { pass }
    location "*.mp4"                        { pass }
    location "*.woff"                       { pass }
    location "*.woff2"                      { pass }
    location "*.ttf"                        { pass }
    # robots.txt
    location "/robots.txt"                  { pass }

    location "*" { 
        root "/(...care about `chroot`...)/<grav-dir>/index.php"
        fastcgi socket "/run/php-fpm.sock"
    }
}
Enter fullscreen mode Exit fullscreen mode

Then restart the server:

$ doas rcctl restart httpd
Enter fullscreen mode Exit fullscreen mode

Done.

Conclusion

Access http(s)://<fqdn>/ and you will see:

installation successful

The admin panel is available :)

admin panel login

The admin panel dashboard looks like this:

admin panel

Discussion (0)