forked from coolaj86/node-installer.sh
Compare commits
4 Commits
Author | SHA1 | Date |
---|---|---|
AJ ONeal | cdab3cb1ef | |
AJ ONeal | 6f016e8d68 | |
AJ ONeal | 9c64d17f30 | |
AJ ONeal | 78942427c6 |
140
README.md
140
README.md
|
@ -2,93 +2,110 @@
|
|||
|
||||
| Sponsored by [ppl](https://ppl.family) |
|
||||
|
||||
Simple node.js installer for macOS and Linux
|
||||
Automated node.js installers for OS X and Ubuntu
|
||||
|
||||
## QuickStart
|
||||
**node.js only** (no dev tools)
|
||||
|
||||
```bash
|
||||
curl -fsL bit.ly/node-installer | bash
|
||||
# install node.js without development dependencies
|
||||
curl -fsSL https://bit.ly/node-installer | bash -s -- --no-dev-deps
|
||||
|
||||
# using wget instead of curl (Ubuntu)
|
||||
wget -nv https://bit.ly/node-installer -O - | bash -s -- --no-dev-deps
|
||||
```
|
||||
|
||||
*Note*: [bit.ly/node-installer](https://bit.ly/node-installer) is a redirect to <https://git.coolaj86.com/coolaj86/node-installer.sh/raw/master/install.sh>
|
||||
**node.js + dev tools**
|
||||
|
||||
Install node.js and basic development tools - git, node, gcc, pkg-config, etc
|
||||
|
||||
```bash
|
||||
curl -fsSL https://bit.ly/node-installer -o ./node-installer.sh; bash ./node-installer.sh --dev-deps
|
||||
|
||||
# or wget
|
||||
wget -nv https://bit.ly/node-installer -O - ./node-installer.sh; bash ./node-installer.sh --dev-deps
|
||||
```
|
||||
|
||||
*Note*: [bit.ly/node-installer](https://bit.ly/node-installer) simple redirects to <https://git.coolaj86.com/coolaj86/node-installer.sh/raw/master/install.sh>
|
||||
|
||||
## Screencast
|
||||
|
||||
[How to Setup a VPS for node.js Development](https://www.youtube.com/watch?v=ypjzi1axH2A) - [(3:06 installing node.js](https://www.youtube.com/watch?v=ypjzi1axH2A#t=186))
|
||||
|
||||
## Installer Options
|
||||
## Options
|
||||
|
||||
* [x] version
|
||||
* [x] install location
|
||||
* [x] tools for building native modules
|
||||
### Choosing a specific version
|
||||
|
||||
### Choose Version
|
||||
|
||||
The latest version of node is installed by default.
|
||||
|
||||
You can choose a specific version by defining `NODE_VERSION` in the format `vX`, `vX.Y`, or `v.X.Y.Z`:
|
||||
**Latest**
|
||||
|
||||
```bash
|
||||
NODE_VERSION=v10
|
||||
export NODEJS_VER=""
|
||||
```
|
||||
|
||||
Usage:
|
||||
**Exact**
|
||||
|
||||
```bash
|
||||
export NODE_VERSION=v10.10
|
||||
curl -fsSL https://bit.ly/node-installer | bash
|
||||
export NODEJS_VER="v10.2.1"
|
||||
```
|
||||
|
||||
### Location
|
||||
|
||||
By default node will be installed to `/usr/local`, without root if possible.
|
||||
|
||||
You can choose a specific location by setting **both** `NPM_CONFIG_PREFIX` **and** `NODE_PATH`:
|
||||
**Latest of vX.Y.Z**
|
||||
|
||||
```bash
|
||||
export NPM_CONFIG_PREFIX=$HOME/.local
|
||||
export NODE_PATH=$NPM_CONFIG_PREFIX/lib/node_modules
|
||||
curl -fsSL https://bit.ly/node-installer | bash
|
||||
export NODEJS_VER="v8.1"
|
||||
```
|
||||
|
||||
If you want to add the install location to your `PATH`, add `/bin` to the custom location used above and append it like so:
|
||||
**Latest of vX.YY.Z**
|
||||
|
||||
```bash
|
||||
PATH=$PATH:$HOME/.local/bin
|
||||
# latest of v8.11.x
|
||||
export NODEJS_VER="v8.11"
|
||||
```
|
||||
|
||||
### Development Tools
|
||||
|
||||
If you plan on building or creating native node modules, you'll want to install `gcc`, `pgk-config`, and a few other required tools and niceties.
|
||||
|
||||
In fact, it's fairly common for modules to have both native module and pure js dependencies, so you'll probably want (or need) to install these even if you don't plan to use them directly.
|
||||
|
||||
* [x] curl & wget
|
||||
* [x] git
|
||||
* [x] rsync
|
||||
* [x] xcode, brew (on macOS), build-essential (Linux)
|
||||
* [x] gcc, pkg-config
|
||||
* [x] pkg-config
|
||||
* [x] node.js, jshint
|
||||
|
||||
Pass `--dev-deps` to the installer script and it will use either `brew` (on macOS) or `apt` (on Linux) to install the development tools.
|
||||
**Latest of vX.Y**
|
||||
|
||||
```bash
|
||||
curl -fsSL https://bit.ly/node-installer | bash -s -- --dev-deps
|
||||
export NODEJS_VER="v10"
|
||||
```
|
||||
|
||||
Or, if you don't have `curl` installed yet you can use `wget`:
|
||||
Fun FYI, here's how the latest version is determined:
|
||||
|
||||
```bash
|
||||
wget -nv https://bit.ly/node-installer -O - | bash -s -- --dev-deps
|
||||
NODEJS_VER=$(curl -fsSL https://nodejs.org/dist/index.tab | tail -n +2 | cut -f 1 | head -1 )
|
||||
echo "The current node.js version is $NODEJS_VER"
|
||||
```
|
||||
|
||||
### Securing your server
|
||||
```bash
|
||||
BASE_VER="v10\\."
|
||||
NODEJS_VER=$(curl -fsSL https://nodejs.org/dist/index.tab | tail -n +2 | cut -f 1 | grep $BASE_VER | head -1 )
|
||||
echo "Latest node.js $BASE_VER is $NODEJS_VER"
|
||||
```
|
||||
|
||||
If you're running a node.js server on anything with a public ip address
|
||||
(an "edge" server), I'd highly recommend that you also install `fail2ban` to secure ssh -
|
||||
especially if you haven't switched your server to use key-only authentication (which you should also do).
|
||||
### Choosing an install location
|
||||
|
||||
See [The 15-Minute Guide to Secure VPS Access (for the Semi-Paranoid)](https://www.youtube.com/watch?v=YZzhIIJmlE0)
|
||||
Just set BOTH `NODE_PATH` and `NPM_CONFIG_PREFIX`.
|
||||
The install path will be the preceding `lib/node_modules`
|
||||
(which you usually want to be the same as `NPM_CONFIG_PREFIX` anyway).
|
||||
|
||||
```bash
|
||||
export NPM_CONFIG_PREFIX=/tmp/usr/local
|
||||
export NODE_PATH=/tmp/usr/local/lib/node_modules
|
||||
```
|
||||
|
||||
A more realistic example for a self-contained node app:
|
||||
```bash
|
||||
export NPM_CONFIG_PREFIX=/opt/my-app
|
||||
export NODE_PATH=/opt/my-app/lib/node_modules
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
curl -fsSL https://bit.ly/node-installer -o ./node-installer.sh; bash ./node-installer.sh --dev-deps
|
||||
```
|
||||
|
||||
If you want to add the install location to your `PATH`:
|
||||
|
||||
```bash
|
||||
PATH=$PATH:/tmp/user/local/bin
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
|
@ -128,17 +145,18 @@ curl -fsSL https://bit.ly/node-installer -o /tmp/node-installer.sh; bash /tmp/no
|
|||
wget -nv https://bit.ly/node-installer -O /tmp/node-installer.sh; bash /tmp/node-installer.sh --dev-deps
|
||||
```
|
||||
|
||||
### Automatic Version Detection
|
||||
### Other things you should know
|
||||
|
||||
Fun FYI, here's how the latest version is determined:
|
||||
This is what gets installed with the dev dependencies:
|
||||
|
||||
```bash
|
||||
NODE_VERSION=$(curl -fsSL https://nodejs.org/dist/index.tab | tail -n +2 | cut -f 1 | head -1 )
|
||||
echo "The current node.js version is $NODE_VERSION"
|
||||
```
|
||||
* rsync
|
||||
* curl
|
||||
* wget
|
||||
* git
|
||||
* xcode / brew / build-essential / pkg-config / gcc
|
||||
* node (including npm)
|
||||
* jshint
|
||||
|
||||
```bash
|
||||
BASE_VER="v10\\."
|
||||
NODE_VERSION=$(curl -fsSL https://nodejs.org/dist/index.tab | tail -n +2 | cut -f 1 | grep $BASE_VER | head -1 )
|
||||
echo "Latest node.js $BASE_VER is $NODE_VERSION"
|
||||
```
|
||||
**NOTE**: If you're running a node.js server on an edge server,
|
||||
I'd highly recommend that you also install `fail2ban` to secure ssh -
|
||||
especially if you haven't switched your server to use key-only authentication.
|
||||
|
|
|
@ -33,7 +33,7 @@ NO_FAIL2BAN="nope"
|
|||
OS="unsupported"
|
||||
ARCH=""
|
||||
SETUP_FILE=""
|
||||
my_tmp="$(mktemp -d -t node-installer.XXXXXXXX)"
|
||||
my_tmp=$(mktemp -d)
|
||||
export my_tmp
|
||||
|
||||
clear
|
||||
|
@ -231,12 +231,6 @@ fi
|
|||
# Which node.js VERSION ? #
|
||||
#########################
|
||||
|
||||
NODE_VERSION=${NODE_VERSION:-}
|
||||
NODEJS_VER=${NODEJS_VER:-}
|
||||
if [ -n "$NODE_VERSION" ]; then
|
||||
NODEJS_VER=$NODE_VERSION
|
||||
fi
|
||||
|
||||
if [ -z "${NODEJS_VER:-}" ]; then
|
||||
# For backwards compat
|
||||
if [ -f "$my_tmp/NODEJS_VER" ]; then
|
||||
|
@ -289,23 +283,9 @@ if [ -z "${NODE_PATH-}" ]; then
|
|||
# /usr/local/bin/node => /usr/local
|
||||
node_install_path="$(dirname $(dirname $(type -p node)))"
|
||||
echo "NODE_PATH is not set. Using existing node install path: '$node_install_path'"
|
||||
if ! echo "test" > $node_install_path/.test
|
||||
then
|
||||
echo "Node install path is not writable. Run: NODE_PATH=$HOME/.local/opt/node/lib/node_modules"
|
||||
if [ -f "$node_install_path"/.test ]; then
|
||||
rm "$node_install_path"/.test
|
||||
fi
|
||||
fi
|
||||
else
|
||||
node_install_path=$PREFIX/usr/local
|
||||
echo "NODE_PATH is not set. Using default install path '$node_install_path'"
|
||||
if ! echo "test" > $node_install_path/.test
|
||||
then
|
||||
echo "Node install path is not writable. Run: NODE_PATH=$HOME/.local/opt/node/lib/node_modules"
|
||||
if [ -f "$node_install_path"/.test ]; then
|
||||
rm "$node_install_path"/.test
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
node_install_path=$(dirname $(dirname $NODE_PATH))
|
||||
|
@ -396,5 +376,3 @@ if [ "--dev-deps" == "$deps_flag" ]; then
|
|||
|
||||
echo ""
|
||||
fi
|
||||
|
||||
rm -rf "$my_tmp"
|
||||
|
|
|
@ -9,7 +9,7 @@ set -u
|
|||
set -o pipefail
|
||||
|
||||
if [ -z "${my_tmp-}" ]; then
|
||||
my_tmp="$(mktemp -d -t node-installer.XXXXXXXX)"
|
||||
my_tmp=$(mkdir -p)
|
||||
fi
|
||||
if [ -z "${PREFIX-}" ]; then
|
||||
PREFIX=""
|
||||
|
@ -71,17 +71,10 @@ if [ -n "${NODEJS_VER}" ]; then
|
|||
mv ${NODEJS_UNTAR}/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH}/* ${NODEJS_UNTAR}/
|
||||
rm -rf ${NODEJS_UNTAR}/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH} # clean up the temporary unzip folder
|
||||
rm ${NODEJS_UNTAR}/{LICENSE,CHANGELOG.md,README.md}
|
||||
if [ -n "$(command -v rsync 2>/dev/null | grep rsync)" ]; then
|
||||
echo $sudo_cmd rsync -Krl "${NODEJS_UNTAR}/" "$node_install_path/"
|
||||
rsync -Krl "${NODEJS_UNTAR}/" "$node_install_path/" || $sudo_cmd rsync -Krl "${NODEJS_UNTAR}/" "$node_install_path/"
|
||||
else
|
||||
# due to symlink issues on Arch Linux, don't copy the share directory
|
||||
rm -rf ${NODEJS_UNTAR}/share
|
||||
echo $sudo_cmd cp -Hr "${NODEJS_UNTAR}/*" "$node_install_path/"
|
||||
cp -Hr "${NODEJS_UNTAR}"/* "$node_install_path/" || $sudo_cmd cp -Hr "${NODEJS_UNTAR}"/* "$node_install_path/"
|
||||
fi
|
||||
echo $sudo_cmd cp -PR "${NODEJS_UNTAR}/*" "$node_install_path/"
|
||||
cp -PR "${NODEJS_UNTAR}"/* "$node_install_path/" || $sudo_cmd cp -PR "${NODEJS_UNTAR}"/* "$node_install_path/"
|
||||
rm -rf "${NODEJS_UNTAR}"
|
||||
|
||||
chown -R $(whoami) "$node_install_path/lib/node_modules/" || $sudo_cmd chown -R $(whoami) "$node_install_path/lib/node_modules/"
|
||||
chown $(whoami) ""$node_install_path"/bin/" || $sudo_cmd chown $(whoami) ""$node_install_path"/bin/"
|
||||
fi
|
||||
fi
|
Loading…
Reference in New Issue