Installer Guacamole avec Docker

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

Installer 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

Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.

Voici le guide pour ceux qui veulent repartir de zéro.

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

Si vous voulez gagner du temps, utilisez un template cloud-init.

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

Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.

Installer Docker
Guide d’installation de Docker.

Enfin, pour exposer l'application sur l'internet public, il vous faudra déployer Traefik.

Installer Traefik avec Docker
Guide d’installation de Traefik.

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.

version: "3.7"

networks:
  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)