Installer Node.js sur Debian : binaires, Nix ou Docker ?

Voir aussi : vidéo peertube - vidéo youtube - dépôt git

Node.js est un outils très classique pour développer des applications web côté-serveur en JavaScript. La version LTS actuelle de Node.js est la 8. Malheureusement, Debian (Stretch) propose seulement la version 4, sans le gestionnaire de paquets NPM, ce qui n’est pas satisfaisant pour développer en Node.js correctement. Ce tutoriel présente plusieurs méthodes pour installer une version plus récente de Node.js.

Installation locale

mkdir -p ~/opt
cd ~/opt
curl http://nodejs.org/dist/latest-v8.x/node-v8.12.0-linux-x64.tar.gz | tar xz
echo "export NODEJS_HOME=$HOME/opt/node-v8.12.0-linux-x64/bin" >> ~/.bashrc
echo "export PATH=$NODEJS_HOME:$PATH" >> ~/.bashrc
source ~/.bashrc
npm install
npm run start
...

Installation système avec nodesource

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

Avec Nix

curl https://nixos.org/nix/install | sh
echo ". ~/.nix-profile/etc/profile.d/nix.sh" >> ~/.bashrc
source ~/.bashrc
nix-env -iA nixpkgs.nodejs

Avec Docker

sudo apt-get update -y
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt-get update -y
sudo apt-get install -y docker-ce

sudo usermod -aG docker `id -un`
# deconnecter/reconnecter
docker run hello-world
docker run --rm -v `pwd`:/tmp -p 3000:3000 -it node bash
cd /tmp
npm install
npm run start
alias npm='docker run --rm -v `pwd`:/tmp -p3000:3000 -e USER_ID=`id -u` nokomprendo/node npm'
npm install
npm run start

Dockerfile :

FROM nixos/nix
RUN nix-channel --add https://nixos.org/channels/nixos-unstable nixpkgs
RUN nix-channel --update
RUN nix-env -iA nixpkgs.gosu 
RUN nix-env -iA nixpkgs.nodejs
RUN nix-env -iA nixpkgs.shadow
COPY entrypoint.sh /root/entrypoint.sh
ENTRYPOINT ["/root/entrypoint.sh"]
WORKDIR /tmp

entrypoint.sh :

#!/bin/sh
adduser -D -u ${USER_ID} toto
exec gosu toto "$@"

Récapitulatif