Installer Open VS Code Server avec Docker
Guide d'installation de Open VS Code Server, le IDE open-source de référence
Au sommaire :
- 1-Qu'est-ce que Open VS Code Server ?
- 2-Prérequis
- 3-Déploiement
- 4-Configuration
- 5-Exposer son instance avec Traefik
1-Qu'est-ce que Open VS Code Server ?
Open VS Code Server est la version open-source de VS Code Server (nommé Codium en version bureautique). C'est exactement la même application sans les outils de télémétrie de Microsoft.
Plus besoin de le présenter, c'est l'IDE de référence, une sorte de super-application avec un riche catalogue de plugins adapté à vos besoins.
Open VS Code Server vous permet de coder en local ou à distance à travers votre navigateur web. Avec une bonne politique de synchronisation du code (Github, Gitlab) et des données (Rclone), vous allez pouvoir travailler en toute sécurité sans risquer de tout perdre sur votre PC portable (un accident est si vite arrivé).
2-Prérequis
Pour déployer Open VS Code Server, 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.
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.
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.
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.
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 :
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:
# default network
default:
driver: bridge
services:
openvscode-server:
image: lscr.io/linuxserver/openvscode-server:latest
container_name: openvscode-server
environment:
PUID: ${PUID}
PGID: ${PGID}
TZ: ${TZ}
CONNECTION_TOKEN: supertsecrettoken
# CONNECTION_SECRET: #optional
SUDO_PASSWORD: your_password
# SUDO_PASSWORD_HASH: #optional
volumes:
- ${APPDATA}/openvscodeserver:/config
ports:
- 3000:3000
restart: unless-stopped
- 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 et du tag "latest pour obtenir la dernière version à jour (lscr.io/linuxserver/openvscode-server:latest)
- 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 à l'application
- CONNECTION_TOKEN : je le préconise pour éviter qu'un utilisateur du réseau local y accède (on sais jamais). Par exemple si vous mettez "supersecrettoken", il vous faudra taper sur votre navigateur l'adresse http://<your-ip>:9003/?tkn=supersecrettoken
- CONNECTION_SECRET : fichier à l'intérieur du conteneur que l'on charge (supplante CONNECTION_TOKEN si utilisé)
- SUDO_PASSWORD : le mot de passe pour le terminal de l'application (recommandé)
- SUDO_PASSWORD_HASH : le mot de passe pour le terminal mais crypté (supplante SUDO_PASSWORD si utilisé)
- volumes : /home/user_name/appdata/opnvscodeserver
- ports : pour l'exemple, j'indique 9003 comme port d'écoute à l'extérieur du conteneur (3000 est celui du conteneur en interne)
- 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
Choisissez bien votre mot de passe dans CONNECTION_TOKEN et SUDO_PASSWORD (ce sont que des exemples, rien de plus).
À l'intérieur du dossier "docker', déployez le conteneur avec la commande suivante.
docker compose up -d
4-Configuration
Indiquez l'adresse IP de votre serveur hôte suivi de :9000 (ex : http://ip_adress:9003).
http://<your-ip>:9003/?tkn=supersecrettoken (si vous avez activer l'option CONNECTION_TOKEN).
Vous devriez vous retrouver devant la page d'accueil.
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}
openvscode-server:
image: lscr.io/linuxserver/openvscode-server:latest
container_name: openvscode-server
environment:
PUID: ${PUID}
PGID: ${PGID}
TZ: ${TZ}
CONNECTION_TOKEN: supertsecrettoken
# CONNECTION_SECRET: #optional
SUDO_PASSWORD: your_password
# SUDO_PASSWORD_HASH: #optional
volumes:
- ${APPDATA}/openvscodeserver:/config
ports:
- 3000:3000
restart: unless-stopped
labels:
- traefik.enable=true
- traefik.http.routers.openvscode-server.entrypoints=websecure
- traefik.http.routers.openvscode-server.rule=Host(`openvscode-server.<domain_name>`)
- traefik.http.routers.openvscode-server.service=openvscode-server-svc
- traefik.http.services.openvscode-server-svc.loadbalancer.server.port=3000
- traefik.http.routers.openvscode-server.tls.certresolver=letsencrypt
- 'traefik.http.routers.metube.middlewares=chain-authelia@file'
Enregistrez le fichier "compose.yml" et déployez les conteneurs.
docker compose create && docker start traefik openvscode-server
Open VS Code Server est l'une des applications que j'utilise au quotidien. Il y a énormément de choses à dire du fait que c'est une sorte de super-app mais on aura l'occasion d'en reparler plus en détails pour apporter quelques astuces de productivité.
Sources :