Webtop : Linux via son navigateur Internet

Sommaire
La flexibilité de Docker n’est plus à démontrer. Il m’est arrivé plusieurs fois d’être surpris par les possibilités de cet outil et par la créativité de certains développeurs dans l’intégration d’applications.
Mais si j’avais pour rôle de donner un prix pour l’image du moment, je le dédierais à Webtop.
Webtop est une image fournie par l’équipe Linuxserver.io qui a pour but de donner l’accès à un OS Linux complet, et ce via un serveur VNC accessible directement depuis son navigateur Web.
L’image permet d’installer automatiquement des logiciels sans avoir à modifier l’image, permet de placer le serveur web derrière un proxy, dispose d’un gestionnaire d’applications persistantes… Une pépite.
Installation
Voici les fichiers nécessaires pour installer Webtop. Le fichier docker-compose.yml
:
services:
webtop:
image: lscr.io/linuxserver/webtop:latest
container_name: webtop
hostname: webtop
env_file: webtop.env
cpus: 2
mem_limit: 2G
networks:
- nginx_proxy
volumes:
- /opt/webtop:/config
shm_size: "1gb"
restart: always
networks:
nginx_proxy:
external: true
- Par défaut, Linuxserver a choisi Alpine Linux comme distribution avec l’environnement de bureau Xfce. Après avoir fait plusieurs tests, elle est de loin la plus stable et la plus légère. Je vous conseille de rester sur celle-ci
- J’ai limité le conteneur à 2 CPUs et 2 Go de RAM pour éviter de mauvaises surprises. A changer aux besoins
shm_size: "1gb"
est nécessaire pour éviter des plantages du navigateur Chromium intégré- Pensez à ajouter les volumes à partager avec l’hôte pour y retrouver vos données
Mon serveur ne prenant pas en charge l’accélération matérielle, je ne l’ai pas activé. Si besoin, vous trouverez les infos sur la page de Webtop
Le fichier webtop.env
:
PUID=1000
PGID=1000
TZ=Europe/Paris
TITLE=Webtop
LC_ALL=fr_FR.UTF-8
START_DOCKER=false
DOCKER_MODS=linuxserver/mods:universal-package-install
INSTALL_PACKAGES=aspell|aspell-fr|colordiff|font-space-mono-nerd|git|htop|ncdu|neovim|onboard|papirus-icon-theme|parole|ripgrep|thunar-archive-plugin|tmux|xarchiver|zip
- la variable
START_DOCKER
permet de contrôler Docker via ce container. Il est désactivé dans cet exemple, car je n’en ai pas l’utilité : il est possible d’utiliser un terminal de ce conteneur comme rebond SSH vers votre serveur - la variable
INSTALL_PACKAGES
permet de lui préciser quels packages vous voulez installer après le déploiement, peu importe la distribution choisie. J’ai donc ajouté quelques outils qui m’ont semblé pertinent selon mes besoins - Là encore, j’ai laissé l’ID 1000, correspondant au 1er user de votre hôte. A changer selon vos besoins
Reverse proxy
Les fichiers de configuration ci-dessus sont prévus pour être utilisés avec un reverse proxy.
Pour rappel, un article dédié est disponible ici.
L’image Docker de Linuxserver.io propose un fichier sample de configuration, il vous suffit juste de modifier votre nom de domaine en conséquence :
sudo cp /opt/nginx/nginx/proxy-confs/webtop.subdomain.conf.sample /opt/nginx/nginx/proxy-confs/webtop.subdomain.conf
sudo sed -i "s,server_name webtop,server_name <votre_sous_domaine>,g" /opt/nginx/nginx/proxy-confs/webtop.subdomain.conf
Et enfin, un petit redémarrage pour la prise en compte du nouveau fichier :
sudo docker restart nginx
Point important sur la sécurité : il est possible de protéger l’accès à Webtop par un simple mot de passe, mais je vous conseille fortement d’utiliser l’outil d’authentification Authelia, qui propose de la double authentification
Configuration
Une fois votre conteneur déployé, vous allez vous retrouver avec un environnement Xfce par défaut… assez austère :

N’étant pas le plus sexy de base, je vous propose d’utiliser une configuration que je vous mets à disposition. Pour l’installer :
- Téléchargez le fichier suivant : webtop.tar.gz
- Arrêtez votre conteneur, supprimez le répertoire
/opt/webtop
(volume par défaut), et décompressez cette archive en remplacement de ce répertoire (utilisezsudo
) - Relancez votre conteneur, et profitez du changement 😊
Les changements sont les suivants :
- Personnalisation du thème : ajout des icônes “Papirus”, du Thème “Arc”, suppression des applets inutiles…
- Désactivation des icônes du bureau : le menu des applications est disponible de n’importe où via un clic droit, et la roulette permet de basculer entre les bureaux
- Masquage de certaines applications totalement inutiles
- Possibilité de lancer un terminal en plein écran via le raccourci
Ctrl + Entrée
- Ajout de configurations pour htop, neovim, tmux, ainsi que différents alias, dont
upgrade
adapté pour la distribution Alpine
Chromium
Petit point sur le navigateur Chromium. Par défaut, il utilise l’accélération matérielle, ce qui le rend inutilisable sur Webtop, du moins sans ajouter la prise en charge matérielle par le conteneur. Pensez donc à aller le désactiver :

PRoot ?
Allez, tous ensemble : “HA HA HA”… Maintenant qu’on a bien rigolé sur ce nom étrange, on va pouvoir dire ce que c’est 😄
PRoot est une solution créée par la team LinuxServer pour installer de manière isolée des applications sans privilèges élevés. Autrement dit : vous pouvez installer des applications indépendamment de l’image Docker, afin de retrouver votre environnement malgré un redéploiement de cette dernière.
Par exemple, pour installer FileZilla :
proot-apps install filezilla
La liste des applications est disponible à ce lien (“Click to expand”). Dans le lot, j’ai surtout utilisé un temps VSCodium pour modifier mes scripts (avant de repasser à Neovim…).
Vous pouvez également installer leur “store” d’applications. Il fonctionne, mais peut se montrer assez instable. A utiliser si vraiment les lignes de commande vous font peur :
proot-apps install gui
Conclusion
Disposer d’un Linux accessible de n’importe où peut vraiment être pratique. Je m’en sers surtout pour me connecter à mon serveur OVH, que j’ai protégé en forçant une connexion par clé RSA. Combiné à Authelia, je peux donc y accéder via une double authentification, la clé étant sur ce Linux.
Mais vu les applications qui sont proposées par l’équipe, vous trouverez sûrement un autre truc sympa à faire avec ! 😊