Installer Open VS Code Server avec Docker

Guide d'installation de Open VS Code Server, le IDE open-source de référence

Installer Open VS Code Server avec Docker
open vs code server docker ide

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.

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.

Avoir suivi le guide d'installation de Synapse et Element.

Installer Synapse et Element avec Docker
Guide d’installation de Synapse et Element sous Docker.

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

Installer Traefik avec Docker
Guide d’installation de 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.

Guide de déploiement de Traefik
Au sommaire : * Qu’est-ce que Traefik ? * Qu’est-ce qu’un reverse proxy ? * Prérequis * Acheter un nom de domaine * Configuration initiale de Traefik * Ouvrir les ports du routeur * Les adresse IP publiques partagés et dynamique * Déploiement de Traefik * Exposer une application 1-Qu’est…

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 :

Docker