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-Sauvegarder vos données
- 5-Configuration 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
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.
Avoir suivi le guide d'installation de Synapse et Element.
Enfin, pour exposer et sécuriser l'application sur internet, il vous faudra déployer Traefik.
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.
version: "3.7"
networks:
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
- 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 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
Tapez l'adresse IP de la machine virtuelle ou du conteneur LXC accompagné de son numéro de port (9003 pour l'exemple).
http://<your-ip>:9003/?tkn=supersecrettoken (si vous avez activer l'option CONNECTION_TOKEN).
Vous devriez vous retrouver devant la page d'accueil.
6-Configuration Traefik
Si vous souhaitez exposer votre application sur l'internet public, suivez mon guide sur le reverse proxy Traefik.
On va ajouter les labels habituels ainsi que le middleware "basic-auth" pour protéger un minimum l’accès à l'application.
version: "3.9"
networks:
web:
services:
traefik:
container_name: traefik
image: traefik:latest
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.<votredomaine>.ovh`)
- traefik.http.routers.traefik-dash.service=api@internal
- "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"
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.<votredomaine>.ovh`)
- 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.openvscode-server.middlewares=middlewares-basic-auth@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 :