Installer Heimdall avec Docker

Guide d'installation de Heimdall sous Docker

Installer Heimdall avec Docker
heimdall docker

Au sommaire :

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

1-Qu'est-ce que Heimdall ?

Heimdall est tout comme Homarr un frontend qui va réunir toutes vos applications en une seule page et les rendre accessible de manière simple et efficace.

Il est un peu plus ancien que Homarr et plus orienté applications (pas de widgets).

2-Prérequis

Pour déployer heimdall, 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.

Sécurisation et 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.

Gestion des accès avec Authelia : Pour renforcer la sécurité, implémentez une solution de gestion des accès telle qu'Authelia. Ce guide vous fournira les étapes nécessaires :

Installer Authelia avec Docker
Guide d’installation de Authelia.

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:

  heimdall:
    image: lscr.io/linuxserver/heimdall:latest
    container_name: heimdall
    volumes:
      - ${APPDATA}/heimdall/configs:/configs
    ports:
      - 80:80
      - 443:443
    restart: unless-stopped

Pour les options communes :

  • network : en bridge (l'adresse IP sera celle de la machine virtuelle ou du conteneur LXC)
  • services : c'est là qu'il faudra ajouter les configurations de vos conteneurs
  • image : nom du registry suivi du nom de l'application (lscr.io/linuxserver/app_name)
  • container_name : le nom du conteneur, sinon Docker en choisira un de manière aléatoire (mieux vaut le nommer vous même)
  • environment : il y a les variables de base (PUID, PGID, TZ) qui correspondent à l'utilisateur, le groupe et le fuseau horaire.
  • 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 (changez les ports par défaut par 3000:80 et 3001:443)
  • 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

Téléchargez l'image et déployez le conteneur.

docker compose pull && docker compose create

Puis démarrez le conteneur.

docker start heimdall

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.

Cliquez sur "Application Type" pour choisir l'une des application dans la liste (Plex pour l'exemple) ainsi que sur "URL" pour indiquer l'adresse locale ou le nom de domaine de votre instance.

Immédiatement, Heimdall me trouve l'icône et une description pour mon instance.

Cliquez sur "Save".

C'est aussi simple que ça. Tout comme Omarr, Heimdall est parfait pour lister toutes vos applications (Docker ou non), il vous suffit juste ensuite de la mettre en page de démarrage de votre navigateur et vous obtenez un gain de temps non négligeable.

5-Exposer son instance avec Traefik et Authelia

Voici la configuration avec Traefik et Authelia.

Cochez la section ports si vous ne souhaitez pas accéder à l'application en local.

Ensuite, si vous avez suivi les guides de Traefik et Authelia, il vous faudra ajouter les labels adéquat pour pouvoir exposer l'application sur internet et activer l'authentification SFA ou MFA.

Comme d'habitude, suivez les parties 6 et 7 du guide de Traefik pour ouvrir les ports de votre box internet et ajouter les entrées DNS pour pouvoir accéder à l'application.

Et n'oubliez JAMAIS :

  • D'éditer le fichier "configuration.yml" de Authelia.
  • D'ajouter le nom de domaine de l'application
  • De redémarrer l'application avec "docker compose restart authelia" pour que la modification soit prise en compte.
networks:
# default network
  default:
    driver: bridge
# Traefik network
  web:
    name: web
    driver: bridge

services:

  traefik:
    container_name: traefik
    image: traefik:v2
    restart: always
    network:
      web:
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${APPDATA}/traefik/logs:/logs
      - ${APPDATA}/traefik/traefik.yml:/traefik.yml
      - ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
      - ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik-dash.entrypoints=websecure
      - traefik.http.routers.traefik-dash.rule=Host(`traefik.<domain_name>.ovh`)
      - traefik.http.routers.traefik-dash.service=api@internal
      - "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"
      
  authelia:
    image: authelia/authelia
    container_name: authelia
    volumes:
      - ${APPDATA}/authelia:/config
    networks:
      - web
    labels:
      - traefik.enable=true
      - traefik.http.routers.authelia.entrypoints=websecure
      - traefik.http.routers.authelia.rule=Host(`authelia.<domain_name>`)
      - traefik.http.routers.authelia.tls.certresolver=letsencrypt
    ports:
      - 9091:9091
    restart: unless-stopped
    healthcheck:
      disable: true
    environment:
      - TZ=${TZ}

  heimdall:
    image: lscr.io/linuxserver/heimdall:latest
    container_name: heimdall
    volumes:
      - ${APPDATA}/heimdall/configs:/configs
#    ports:
#      - 80:80
#      - 443:443
    restart: unless-stopped
    labels:
      - traefik.enable=true
      - traefik.http.routers.heimdall.entrypoints=websecure
      - traefik.http.routers.heimdall.tls.certresolver=letsencrypt
      - traefik.http.routers.heimdall.rule=Host(`heimdall.<domain_name>`)
      - traefik.http.routers.heimdall.service=heimdall-svc
      - traefik.http.services.heimdall-svc.loadbalancer.server.port=80
      - 'traefik.http.routers.metube.middlewares=chain-authelia@file'