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-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.

Virtualiser Ubuntu Server sur Proxmox VE
Guide d’installation de Ubuntu Server sur Proxmox VE avec mes meilleurs réglages.

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.

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

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.

Installer Docker
Guide d’installation de Docker.

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.

Installer Traefik avec Docker
Guide d’installation de Traefik.

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 :

Installer Authelia avec Docker
Guide d’installation de Authelia.

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 :

Docker