Last active
July 24, 2024 15:05
-
-
Save garystafford/07fbfe8fde48c3f5810c to your computer and use it in GitHub Desktop.
Install the latest versions of Node.js and npm into a Docker Ubuntu container, with or without need for root access. Easily update both applications to the latest versions. Creates a new user account ('testuser') and installs common npm packages.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
############################################################################### | |
# Version 1: using ‘apt-get install’ | |
# Installs using apt-get | |
# Requires update to npm afterwards | |
# Harder to get latest copy of node | |
# Requires sudo to use npm | |
############################################################################### | |
# create new docker ubuntu container | |
sudo docker run -i -t ubuntu /bin/bash # drops you into container as root | |
# update and install all required packages (no sudo required as root) | |
# https://gist.github.com/isaacs/579814#file-only-git-all-the-way-sh | |
apt-get update -yq && apt-get upgrade -yq && \ | |
apt-get install -yq curl git nano | |
# install from nodesource using apt-get | |
# https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-an-ubuntu-14-04-server | |
curl -sL https://deb.nodesource.com/setup | sudo bash - && \ | |
apt-get install -yq nodejs build-essential | |
# fix npm - not the latest version installed by apt-get | |
npm install -g npm | |
# add user with sudo privileges within Docker container | |
# without adduser input questions | |
# http://askubuntu.com/questions/94060/run-adduser-non-interactively/94067#94067 | |
USER="testuser" && \ | |
adduser --disabled-password --gecos "" $USER && \ | |
sudo usermod -a -G sudo $USER && \ | |
echo "$USER:abc123" | chpasswd && \ | |
su - $USER # switch to testuser | |
# install common full-stack JavaScript packages globally | |
# http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation | |
sudo npm install -g yo grunt-cli bower express | |
# optional, check locations and packages are correct | |
which node; node -v; which npm; npm -v; \ | |
npm ls -g --depth=0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
############################################################################### | |
# Version 2: using curl, make, and npmjs.org’s install script | |
# Installs using make and shell script | |
# Easier to update node and npm versions in future | |
# Requires sudo to use npm | |
############################################################################### | |
# create new docker ubuntu container | |
sudo docker run -i -t ubuntu /bin/bash # drops you into container as root | |
# update and install all required packages (no sudo required as root) | |
# https://gist.github.com/isaacs/579814#file-only-git-all-the-way-sh | |
apt-get update -yq && apt-get upgrade -yq && \ | |
apt-get install -yq g++ libssl-dev apache2-utils curl git python make nano | |
# install latest Node.js and npm | |
# https://gist.github.com/isaacs/579814#file-node-and-npm-in-30-seconds-sh | |
mkdir ~/node-latest-install && cd $_ && \ | |
curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1 && \ | |
make install && \ # takes a few minutes to build... | |
curl https://www.npmjs.org/install.sh | sh | |
# add user with sudo privileges within Docker container | |
# without adduser input questions | |
# http://askubuntu.com/questions/94060/run-adduser-non-interactively/94067#94067 | |
USER="testuser" && \ | |
adduser --disabled-password --gecos "" $USER && \ | |
sudo usermod -a -G sudo $USER && \ | |
echo "$USER:abc123" | chpasswd && \ | |
su - $USER # switch to testuser | |
# install common full-stack JavaScript packages globally | |
# http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation | |
sudo npm install -g yo grunt-cli bower express | |
# optional, check locations and packages are correct | |
which node; node -v; which npm; npm -v; \ | |
npm ls -g --depth=0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
############################################################################### | |
# Version 3: version 2 without requiring ‘sudo’ to use npm | |
# Does NOT require sudo to use npm | |
############################################################################### | |
# create new docker ubuntu container | |
sudo docker run -i -t ubuntu /bin/bash # drops you into container as root | |
# update and install all required packages (no sudo required as root) | |
# https://gist.github.com/isaacs/579814#file-only-git-all-the-way-sh | |
apt-get update -yq && apt-get upgrade -yq && \ | |
apt-get install -yq g++ libssl-dev apache2-utils curl git python make nano | |
# add user with sudo privileges within Docker container | |
# without adduser input questions | |
# http://askubuntu.com/questions/94060/run-adduser-non-interactively/94067#94067 | |
USER="testuser" && \ | |
adduser --disabled-password --gecos "" $USER && \ | |
sudo usermod -a -G sudo $USER && \ | |
echo "$USER:abc123" | chpasswd && \ | |
su - $USER # switch to testuser | |
# setting up npm for global installation without sudo | |
# http://stackoverflow.com/a/19379795/580268 | |
MODULES="local" && \ | |
echo prefix = ~/$MODULES >> ~/.npmrc && \ | |
echo "export PATH=\$HOME/$MODULES/bin:\$PATH" >> ~/.bashrc && \ | |
. ~/.bashrc && \ | |
mkdir ~/$MODULES | |
# install Node.js and npm | |
# https://gist.github.com/isaacs/579814#file-node-and-npm-in-30-seconds-sh | |
mkdir ~/node-latest-install && cd $_ && \ | |
curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1 && \ | |
./configure --prefix=~/$MODULES && \ | |
make install && \ # takes a few minutes to build... | |
curl https://www.npmjs.org/install.sh | sh | |
# install common fullstack JavaScript packages globally | |
npm install -g yo grunt-cli bower express | |
# optional, check locations and packages are correct | |
which node; node -v; which npm; npm -v; \ | |
npm ls -g --depth=0 |
In the first example it is the
apt-get install npm
is missing after apt-get install -yq curl git nano
or simply replace it with:
apt-get install -yq curl git nano npm
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi Gary, I am facing an issue with other image to upgrade the nodejs not sure you can give me some advice.
I found out my NAS can install docker and run different images recently. That's lots of fun. Homebridge is the image I am trying to do, and one of the plugin required to install the latest node.js. I can upgrade the node by using npm but the image failed to startup with the following -
017-04-13 04:24:14 stdout NODE_MODULE_VERSION 51. Please try re-compiling or re-installing
2017-04-13 04:24:14 stdout NODE_MODULE_VERSION 48. This version of Node.js requires
2017-04-13 04:24:14 stdout was compiled against a different Node.js version using
2017-04-13 04:24:14 stdout Error: The module '/usr/lib/node_modules/homebridge/node_modules/mdns/build/Release/dns_sd_bindings.node'
Do you have any hints with that? That will be great if you can give some help. Cheers