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

  • OS: OpenBSD 6.9
  • Web server: OpenBSD httpd
  • App server: PHP 7.4 with PHP-FPM and Composer 2.0
  • CMS: Grav 1.7

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 tutorials:

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

Logo

更多推荐