docker-grav
docker-grav copied to clipboard
Docker Container for GRAV CMS
dsavell/grav
Grav is a Fast, Simple, and Flexible file-based Web-platform. There is Zero installation required. Although Grav follows principles similar to other flat-file CMS platforms, it has a different design philosophy than most.
The underlying architecture of Grav is built using well established and best-in-class technologies. This is to ensure that Grav is simple to use and easy to extend. Some of these key technologies include:
- Twig Templating: for powerful control of the user interface
- Markdown: for easy content creation
- YAML: for simple configuration
- Parsedown: for fast Markdown and Markdown Extra support
- Doctrine Cache: for performance
- Pimple Dependency Injection Container: for extensibility and maintainability
- Symfony Event Dispatcher: for plugin event handling
- Symfony Console: for CLI interface
- Gregwar Image Library: for dynamic image manipulation
Supported Architectures
We utilise the docker manifest for multi-platform awareness. More information is available from docker here.
Simply pulling dsavell/grav:admin should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
The architectures supported by this image are:
| Architecture | Available | Tag |
|---|---|---|
| x86-64 | ✅ | amd64-<version tag> |
| arm64 | ❌ | arm64v8-<version tag> |
| armhf | ❌ | arm32v7-<version tag> |
Version Tags
This image provides various versions that are available via tags.
| Tag | Available | Description |
|---|---|---|
| admin | ✅ | Stable Grav Core + Admin plugin releases |
| core | ✅ | Stabe Grav Core releases |
| admin-<date> | ✅ | Stable Grav Core + Admin plugin releases + date |
| core-<date> | ✅ | Stabe Grav Core releases + date |
| admin-<version tag> | ✅ | Pinned Grav Core + Admin plugin releases |
| core-<version tag> | ✅ | Pinned Grav Core releases |
| admin-<version tag>-<date> | ✅ | Pinned Grav Core + Admin plugin releases + date |
| core-<version tag>-<date> | ✅ | Pinned Grav Core releases + date |
Application Setup
WebUI can be found at http://<your-ip>
More information can be found on the official documentation here
Usage
Here are some example snippets to help you get started creating a container.
docker-compose
---
version: '2.1'
services:
grav:
image: dsavell/grav:<TAG>
container_name: grav
restart: unless-stopped
environment:
- DUID=1000
- DGID=1000
- TZ=Europe/London # optional
- GRAV_MULTISITE=subdirectory # optional
- ROBOTS_DISALLOW=false # optional
- GRAV_PLUGINS=devtools,precache # optional
volumes:
- /data/containers/grav/backup:/var/www/grav/backup
- /data/containers/grav/logs:/var/www/grav/log
- /data/containers/grav/user:/var/www/grav/user
ports:
- 80:80
docker cli (click here for more info)
docker create \
--name=grav \
--restart unless-stopped \
-e DUID=1000 \
-e DGID=1000 \
-p 80:80 \
-e TZ=Europe/London `# optional` \
-e GRAV_MULTISITE=subdirectory `# optional` \
-e ROBOTS_DISALLOW=false `# optional` \
-e GRAV_PLUGINS=devtools,precache `# optional` \
-v /data/containers/grav/backup:/var/www/grav/backup \
-v /data/containers/grav/logs:/var/www/grav/logs \
-v /data/containers/grav/user:/var/www/grav/user \
dsavell/grav:<TAG>
docker start grav
Parameters
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.
| Parameter | Function |
|---|---|
-p 80 |
Http webUI |
-e DUID=1000 |
for UserID - see below for explanation |
-e DGID=1000 |
for GroupID - see below for explanation |
-e TZ-e GRAV_MULTISITE=subdirectory |
Deploy a Grav multisite (subdirectory) installation. |
-e ROBOTS_DISALLOW=false |
Replace default /robots.txt file with one discouraging indexers. |
-e TZ=Europe/London |
Set your timezone |
-e GRAV_PLUGINS=devtools,precache |
Install extra plugins automaticall (must be comma separated) |
-v /var/www/backup |
Contains your location for Grav backups |
-v /var/www/logs |
Contains your location for your Grav log files |
-v /var/www/user |
Contains your Grav content |
User / Group Identifiers
When using volumes (-v flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.
Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.
In this instance PUID=1000 and PGID=1000, to find yours use id user as below:
$ id username
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
Issues
- Scheduler mentions cron is not available in the UI, however it works. issue has been raised
https://github.com/getgrav/grav-plugin-admin/issues/1744
Changelog
- 03/10/2023:
- 24/07/2022:
- Added moved from
master branchtomainbranch. - Added
commitlintfunction to verify proper commit messages. - Added
.editorconfigto ensure standards across IDE's. - Added
.gitattributesto ensure standards across git CLI. - Added build to NPM/YARN to locally verify code & commit messages.
- removed build shell script.
- Added GitHub Actions CI/CD workflows
- 1:00am everyday builds.
- Build on any new change to main branch.
- Code standards check.
- Docker lint check.
- Docker build check.
- Added prettier codebase formatting.
- Added pre-commit yaml to validate code syntax / format.
- Added MIT license.
- Added pre-commit husky utility to trigger pre-commit & commitlint with prettier for local development.
- Correct hadolint errors in the Dockerfiles.
- Added moved from
- 18/05/2022:
- Added
subdomainas an option forGRAV_MULTISITE - Added
NGINX_CLIENT_MAX_BODY_SIZEto specify the nginx config client_max_body_size - Updated to Grav 1.7.33
- Added
- 16/10/2021:
- Updated to Grav 1.7.23
- Updated curl script in Docker file to correctly pull latest version of grav.
- Updated to Debian 11.x (bullseye)
- Changed crontab logic, however it works, just complains in the UI, known bug in admin plugin above.
- Added check for
bin/grav/ scheduler -ito startup output. - Added check for
crontab -lto startup output.
- 15/04/2021:
- Updated to Grav 1.7.12
- Added nano text editor to the image.
- 10/04/2021:
- 11/10/2020:
- Updated to Grav 1.6.28
- 02/08/2020:
- Updated to Grav 1.6.26
- 01/06/2020:
- Updated to Grav 1.6.25
- 22/04/2020:
- 12/04/2020:
- Updated to Grav 1.6.23
- 20/02/2020:
- Updated to Grav 1.6.21
- 09/12/2019:
- 08/12/2019:
- Updated to Grav 1.6.19
- Fixed crontab schedules. Thanks to coldestheart #11
- 30/11/2019:
- Updated baseimage from stretch to buster. Thanks to coldestheart #10
- Added cron & added cronjob allows jobs to be run on a periodic basic, GRAV relies on this. Thanks to coldestheart #10
- Added php7.3-intl for Multilang support for twig tools. Thanks to coldestheart #10
- Enabled caching in Nginx for tools that analyze speed performance (like gtmetrix) Thanks to coldestheart #10
- Startup scripts now enable cron. Thanks to coldestheart #10
- 15/11/2019:
- 10/08/2019:
- 18/06/2019: The Better Release?
- Better File/Volume control
- Better tagging / versioning of GRAV Core.
- Better User/Group management.
- Better Documentation.
- 10/06/2019: The Refactor Release
- 10/04/2018: The Volume Release
- The /var/www volume can now be mounted.
- 02/01/2018: The 2018 Release
- Improved Code
- Now using github API to pull latest GRAV release
- 27/07/2017: The Automated Release
- Updated tag "blog" to now use github API to download latest Blog-Skeleton zip file
- Improved code on all tags
- Typo corrections on the README.md
- 29/06/2017: The Blog Release
- added tag blog This is a skeleton of Blog-Skeleton
- 28/06/2017: The Even Smaller Release
- Now uses image from ej52/alpine-nginx-php
- Size has reduced from 657 to 267mb & with admin plugin 277mb
- 22/06/2017: The Better Release
- Now uses image from php:7.0-apache
- Size has reduced from 1.2gb to 657mb & with admin plugin 682mb
- Corrected GRAV permissions
- Less packages installed during Docker build + cleanup
- 21/06/2017: Initial Release
- First Initial Release
- No Optimization
- Full Operating System of centos used
- No Custom Features