Installer Guacamole avec Docker
Guide d'installation de Guacamole qui va vous permettre de rendre accessible sur le web vos applications bureautiques.
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.
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.
Si vous voulez gagner du temps, utilisez un template cloud-init.
Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.
Enfin, pour exposer l'application sur l'internet public, il vous faudra déployer 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.
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).
Darktable (montage photo)
Doublecommander (gestionnaire de fichiers)
Filezilla (client FTP, FTPS et SFTP)
Firefox (navigateur web)
Libre-Office (suite bureautique)
Kdenlive (montage vidéo)
Mysql-workbench (gestion et d'administration de bases de données MySQL)
QDirStat (analyse de l'espace de stockage)
Pidgin (client de messagerie)
Remmina outil de prise en main à distance)
SQLiteBrowser (gestion et d'administration de bases de données SQLite)
Wireshark (analyseur de paquets)