Installer des applications sous Guacamole avec Docker

Guide d'installation de Guacamole qui va vous permettre de rendre accessible sur le web vos applications bureautiques.

Installer des applications sous Guacamole avec Docker
docker guacamole

Au sommaire :

  • 1-Qu'est-ce que Guacamole ?
  • 2-Prérequis
  • 3-Déploiement
  • 4-Des exemples d'applications

1-Qu'est-ce que Guacamole ?

Apache Guacamole est une passerelle pour la prise en main à distance d'applications bureautiques.

En plus de supporter des protocoles tels que VNC, RDP et SSH, il est "clientless", c'est à dire qu'il ne nécessite aucun client pour être utilisé, tout se fais via le navigateur web grâce au HTML5.

Pour ceux qui ont des applications sous Citrix en entreprise, cela ne devrait pas vous être inconnu.

Apache Guacamole™

2-Prérequis

Pour déployer Guacamole, 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 des conteneurs

Aujourd'hui, je vous ai préparé une configuration vous permettant de déployer 15 conteneurs sous Guacamole préparés par l'équipe LinuxServer.

Home | LinuxServer.io

Vous n'allez pas déployer Guacamole mais des applications sous Guacamole qui pré-configurés et fournis clés en main.

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:
# default network
  default:
    driver: bridge
    
services:

  audacity:
    image: lscr.io/linuxserver/audacity:latest
    container_name: audacity
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/audacity:/config    
    ports:
      - 9000:3000
    restart: unless-stopped
    
  blender:
    image: lscr.io/linuxserver/blender:latest
    container_name: blender
    security_opt:
      - seccomp:unconfined #optional
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
      - SUBFOLDER=/ #optional
      - KEYBOARD=en-us-qwerty #optional
    volumes:
      - ${APPDATA}/blender:/config
    ports: 
      - 9001:3000
    devices:
      - /dev/dri:/dev/dri #optional
    restart: unless-stopped
    
  darktable:
    image: lscr.io/linuxserver/darktable:latest
    container_name: darktable
    security_opt:
      - seccomp:unconfined #optional
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/darktable:/config    
    ports:
      - 9002:3000
    restart: unless-stopped
    
  digikam:
    image: lscr.io/linuxserver/digikam:latest
    container_name: digikam
#    network_mode: host
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
      - SUBFOLDER=/ #optional
      - KEYBOARD=en-us-qwerty #optional
    volumes:
      - ${APPDATA}/digikam:/config    
    ports:
      - 9003:3000 #optional
    restart: unless-stopped
    
  doublecommander:
    image: lscr.io/linuxserver/doublecommander:latest
    container_name: doublecommander
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/doublecommander:/config      
      - ${APPDATA}/doublecommander/data:/data
    ports:
      - 9004:3000
    restart: unless-stopped
    
  filezilla:
    image: lscr.io/linuxserver/filezilla:latest
    container_name: filezilla
    security_opt:
      - seccomp:unconfined #optional
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/filezilla:/config    
    ports:
      - 9005:3000
    restart: unless-stopped
    
  firefox:
    image: lscr.io/linuxserver/firefox:latest
    container_name: firefox
    security_opt:
      - seccomp:unconfined #optional
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/firefox:/config    
    ports:
      - 9006:3000
    shm_size: "1gb"
    restart: unless-stopped
    
  kdenlive:
    image: lscr.io/linuxserver/kdenlive:latest
    container_name: kdenlive
    security_opt:
      - seccomp:unconfined #optional
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
      - SUBFOLDER=/ #optional
      - KEYBOARD=en-us-qwerty #optional
    volumes:
      - ${APPDATA}/kdenlive:/config    
    ports:
      - 9007:3000
    devices:
      - /dev/dri:/dev/dri #optional
    shm_size: "1gb" #optional
    restart: unless-stopped
    
  libreoffice:
    image: lscr.io/linuxserver/libreoffice:latest
    container_name: libreoffice
    security_opt:
      - seccomp:unconfined #optional
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/libreoffice:/config    
    ports:
      - 9008:3000
    restart: unless-stopped
    
  mysql-workbench:
    image: lscr.io/linuxserver/mysql-workbench:latest
    container_name: mysql-workbench
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/mysql-workbench:/config    
    ports:
      - 9009:3000
    cap_add:
      - IPC_LOCK
    restart: unless-stopped
    
  pidgin:
    image: lscr.io/linuxserver/pidgin:latest
    container_name: pidgin
    security_opt:
      - seccomp:unconfined #optional
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/pidgin:/config    
    ports:
      - 9010:3000
    restart: unless-stopped
    
  qdirstat:
    image: lscr.io/linuxserver/qdirstat:latest
    container_name: qdirstat
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/qdirstat:/config      
      - ${APPDATA}/qdirstat/data:/data
    ports:
      - 9011:3000
    restart: unless-stopped
    
  remmina:
    image: lscr.io/linuxserver/remmina:latest
    container_name: remmina
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/remmina:/config    
    ports:
      - 9012:3000
    restart: unless-stopped
    
  sqlitebrowser:
    image: lscr.io/linuxserver/sqlitebrowser:latest
    container_name: sqlitebrowser
    security_opt:
      - seccomp:unconfined #optional
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/sqlitebrowser:/config    
    ports:
      - 9013:3000
    restart: unless-stopped
    
  wireshark:
    image: lscr.io/linuxserver/wireshark:latest
    container_name: wireshark
    cap_add:
      - NET_ADMIN
    security_opt:
      - seccomp:unconfined #optional
#    network_mode: host
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
    volumes:
      - ${APPDATA}/wireshark:/config    
    ports:
      - 9014:3000 #optional
    restart: unless-stopped
  • version : 3.7 (il y a plus récent mais c'est pour l'exemple)
  • network : en bridge (l'adresse IP sera celle de la machine virtuelle ou du conteeur 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) et des variables spécifiques aux applications (pas besoin d'y toucher)
  • volumes : variable ${APPDATA) (/home/user_name/appdata) suivi du nom de l'application (/app_name)
  • ports : 9000 à 9014 pour les 15 applications
  • restart : unless-stopped par défaut. Le daemon de Docker redémarrera automatiquement le conteneur sauf si vous l'arretez, il faudra le démarrer manuellement

Ne déployez pas tout les conteneurs d'un coup car chaque application consomme énormément en mémoire vive (jusqu'à 500 mo).

Téléchargez les images et créez les conteneurs.

docker compose pull && docker compose create

Ensuite vous aurez juste à déployer le conteneur que vous souhaitez comme par exemple Filezilla.

docker start filezilla

Accédez à l'application en tapant l'adresse IP du conteneur LXC ou de la machine virtuelle suivi du numéro de port.

4-Des exemples d'applications

Audacity (édition audio)

Lien : https://audacity.fr/

Blender (modélisation 3D)

Note : pas très utile si l'application n'a pas accès à la carte graphique (cela fera l'objet d'un tutoriel).

blender.org - Home of the Blender project - Free and Open 3D Creation Software
The Freedom to Create

Darktable (montage photo)

darktable
darktable is an open source photography workflow application and raw developer

Doublecommander (gestionnaire de fichiers)

Double Commander

Filezilla (client FTP, FTPS et SFTP)

FileZilla - The free FTP solution
FileZilla - The free FTP solution for both client and server. Filezilla is open source software distributed free of charge.

Firefox (navigateur web)

Téléchargez la version la plus rapide de Firefox
Un chargement des pages plus rapide, une consommation mémoire réduite et plein de fonctionnalités : le nouveau Firefox est là.

Libre-Office (suite bureautique)

Télécharger LibreOffice | Communauté LibreOffice francophone
LibreOffice, Download, download LibreOffice, download options, Windows, Linux, Mac OS X

Kdenlive (montage vidéo)

Kdenlive - Video Editing Freedom
Kdenlive is a powerful free and open source cross-platform video editing program made by the KDE community. Feature rich and production ready.

Mysql-workbench (gestion et d'administration de bases de données MySQL)

MySQL :: MySQL Workbench

QDirStat (analyse de l'espace de stockage)

GitHub - shundhammer/qdirstat: QDirStat - Qt-based directory statistics (KDirStat without any KDE - from the original KDirStat author)
QDirStat - Qt-based directory statistics (KDirStat without any KDE - from the original KDirStat author) - GitHub - shundhammer/qdirstat: QDirStat - Qt-based directory statistics (KDirStat without a...

Pidgin (client de messagerie)

Pidgin
Pidgin is a universal chat client, allowing you to consolidate all your different messaging apps into a single tool.

Remmina outil de prise en main à distance)

Remote desktop client with RDP, SSH, SPICE, VNC, and X2Go protocol support.
Remmina — X2Go, RDP, SSH, SPICE, VNC, and X2Go protocol remote desktop client.

SQLiteBrowser (gestion et d'administration de bases de données SQLite)

DB Browser for SQLite

Wireshark (analyseur de paquets)