Installer Grav avec Docker

Guide d'installation de Grav sous Docker

Installer Grav avec Docker
grav docker blog cms

Au sommaire :

  • 1-Qu'est-ce que Grav ?
  • 2-Prérequis
  • 3-Déploiement
  • 4-Configuration
  • 5-Exposer son instance avec Traefik

1-Qu'est-ce que Grav ?

Grav est un CMS (Content Management System) open-source programmé en langage PHP qui tout comme Wordpress, Joomla, Drupal et Ghost va vous permettre de déployer un blog ou un site web.

À la différence de ses concurrents qui sont des CMS dis "monolithique", Grav est un CMS dis "Flat Files" (statique), c'est à dire qu'il ne nécessite aucune de base de données.

Les fichiers de configuration ainsi que le contenu sont écris en langage YAML et JSON.

Dans la liste des CMS de ce type, vous avez :

2-Prérequis

Pour déployer Grav, vous devez disposer d'une machine virtuelle fonctionnant sous Ubuntu Server.

Création de la machine virtuelle :

Virtualisation avec Proxmox VE : Si vous partez de zéro, suivez mon guide détaillé pour virtualiser Ubuntu sur Proxmox VE avec des réglages optimisés.

Virtualiser Ubuntu Server sur Proxmox VE
Guide d’installation de Ubuntu Server sur Proxmox VE avec mes meilleurs réglages.

Automatisation avec Cloud-Init : Pour gagner du temps lors de la configuration, utilisez un template Cloud-Init. Cela permet d'automatiser et de simplifier l'initialisation de vos machines virtuelles. Retrouvez les instructions dans ce guide.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Installation des outils nécessaires :

Docker et Docker Compose : Une fois la machine virtuelle prête, installez Docker et Docker Compose, indispensables pour gérer et orchestrer vos conteneurs. Ce guide vous accompagnera dans l'installation.

Installer Docker
Guide d’installation de Docker.

Exposition de l'application :

Proxy inverse avec Traefik : Pour exposer vos applications sur Internet de manière sécurisée, configurez un proxy inverse. Traefik est une solution recommandée. Suivez ce guide pour l'installation.

Installer Traefik avec Docker
Guide d’installation de Traefik.

3-Déploiement

Commencez par créer un dossier "docker" à la racine du dossier utilisateur"

mkdir -p ~/docker

Créez un fichier nommé "compose.yml"

touch ~/docker/compose.yml

Ouvrez le fichier "compose.yml" et copiez cette configuration.

networks:
# Docker Bridge Network
  default:
    driver: bridge

services:
    
  grav:
    image: lscr.io/linuxserver/grav:latest
    container_name: grav
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ${APPDATA}/grav:/config
    ports:
      - 80:80
    restart: unless-stopped
  • services : c'est là qu'il faudra ajouter les configuration de vos conteneurs
  • image : nom du registry suivi du nom de l'application et du tag "latest" (lscr.io/linuxserver/grav)
  • container_name : le nom du conteneur, sinon Docker en choisira un de manière aléatoire
  • environment : indiquez les variables de base des applications Linuxserver.io comme le PUID (utilisateur), le PGID (groupe) et la TZ (timezone)
  • volumes : variable ${APPDATA) (/home/user_name/appdata) suivi du nom de l'application (/app_name)
  • ports : le port d'écoute pour accéder à l'interface web
  • restart : unless-stopped par défaut. Le daemon de Docker redémarrera automatiquement le conteneur sauf si vous l’arrêtez, il faudra le démarrer manuellement

Enregistrez le fichier "compose.yml" et déployez le conteneur.

docker compose up -d

4-Configuration

Une fois l'application démarrée, tapez l'adresse IP de votre machine virtuelle suivi du numéro de port que vous aurez choisi.

Il va falloir créer un utilisateur :

  • Username : nom de l'utilisateur
  • Email : adresse email
  • Password/Confirme Password : mot de passe
  • Full name : nom complet
  • Title : votre intitulé (j'ai laissé Administrator)

Cliquez sur "Create User".

Vous aurez un "404 page not found" si vous avez changé le port d'écoute (le port 80 étant occupé par un reverse proxy en général).

Tapez l'adresse IP suivi du numéro de port et de "/admin" (http://IP_Address:listening_port).

Pour accéder à l'interface d'administration, la même chose suivi de "/admin" (http://IP_Address:listening_port/admin).

Basics
Grav documentation

5-Exposer son instance avec Traefik

networks:
# default network
  default:
    driver: bridge
# Traefik network
  web:
    name: web
    driver: bridge

services:

  traefik:
    container_name: traefik
    image: traefik:v2
    restart: always
    networks:
      - web
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${APPDATA}/traefik/traefik.yml:/traefik.yml
      - ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
      - ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
      - ${APPDATA}/traefik/shared:/shared
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik.entrypoints=websecure
      - traefik.http.routers.traefik.rule=Host(`traefik.<domain_name>`)
      - traefik.http.routers.traefik.service=api@internal
      - "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"

  grav:
    image: lscr.io/linuxserver/grav:latest
    container_name: grav
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ${APPDATA}/grav:/config
    networks:
      - web
    restart: unless-stopped
    labels:
      - traefik.enable=true
      - traefik.http.routers.grav.entrypoints=websecure
      - traefik.http.routers.grav.rule=Host(`grav.<domain_name>`)
      - traefik.http.routers.grav.service=grav-svc
      - traefik.http.services.grav-svc.loadbalancer.server.port=80
      - traefik.http.routers.grav.tls.certresolver=letsencrypt