github.com/dahs81/otto@v0.2.1-0.20160126165905-6400716cf085/builtin/app/node/data/aws-simple/build/build-node.sh.tpl (about) 1 #!/bin/bash 2 3 set -o nounset -o errexit -o pipefail -o errtrace 4 5 error() { 6 local sourcefile=$1 7 local lineno=$2 8 echo "ERROR at ${sourcefile}:${lineno}; Last logs:" 9 grep otto /var/log/syslog | tail -n 20 10 } 11 trap 'error "${BASH_SOURCE}" "${LINENO}"' ERR 12 13 oe() { "$@" 2>&1 | logger -t otto > /dev/null; } 14 ol() { echo "[otto] $@"; } 15 16 # cloud-config can interfere with apt commands if it's still in progress 17 ol "Waiting for cloud-config to complete..." 18 until [[ -f /var/lib/cloud/instance/boot-finished ]]; do 19 sleep 0.5 20 done 21 22 ol "Adding apt repositories and updating..." 23 oe sudo apt-get update -y 24 oe sudo apt-get install -y software-properties-common 25 oe sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7 26 echo 'deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main' | sudo tee /etc/apt/sources.list.d/passenger.list > /dev/null 27 oe sudo apt-get update 28 29 ol "Downloading Node {{ node_version }}..." 30 oe wget -q -O /tmp/node.tar.gz https://nodejs.org/dist/v{{ node_version }}/node-v{{ node_version }}-linux-x64.tar.gz 31 32 ol "Untarring Node..." 33 oe sudo tar -C /opt -xzf /tmp/node.tar.gz 34 35 ol "Setting up PATH..." 36 oe sudo ln -s /opt/node-v{{ node_version }}-linux-x64/bin/node /usr/local/bin/node 37 oe sudo ln -s /opt/node-v{{ node_version }}-linux-x64/bin/npm /usr/local/bin/npm 38 39 ol "Installing Passenger, Nginx, and other supporting packages..." 40 export DEBIAN_FRONTEND=noninteractive 41 oe sudo apt-get install -y bzr git mercurial build-essential \ 42 libpq-dev zlib1g-dev software-properties-common \ 43 apt-transport-https \ 44 nginx-extras passenger 45 46 ol "Extracting app..." 47 sudo mkdir -p /srv/otto-app 48 sudo tar zxf /tmp/otto-app.tgz -C /srv/otto-app 49 50 ol "Adding application user..." 51 oe sudo adduser --disabled-password --gecos "" otto-app 52 53 ol "Setting permissions..." 54 oe sudo chown -R otto-app: /srv/otto-app 55 56 ol "Configuring nginx..." 57 58 # This is required for passenger to get a reasonable environment where it can 59 # find executables like /usr/bin/env, /usr/bin/curl, etc. It also apparently 60 # needs to occur high in the config. Appending it is insufficient. :-| 61 sudo sed -i '1s/^/env PATH;\n/' /etc/nginx/nginx.conf 62 sudo sed -i '1s/^/# Otto: set PATH so passenger can see binaries\n/' /etc/nginx/nginx.conf 63 64 # Need to remove this so nginx reads our site 65 sudo rm /etc/nginx/sites-enabled/default 66 67 # These lines are present as comments in the passenger-packaged nginx.conf, but 68 # it's easier to drop a separate config than to sed out an uncomment. 69 cat <<NGINXCONF | sudo tee /etc/nginx/conf.d/passenger.conf > /dev/null 70 # Generated by Otto 71 passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; 72 NGINXCONF 73 74 cat <<NGINXCONF | sudo tee /etc/nginx/sites-enabled/otto-app.conf > /dev/null 75 # Generated by Otto 76 server { 77 listen 80; 78 root /srv/otto-app/public; 79 passenger_enabled on; 80 } 81 NGINXCONF 82 83 ol "Running npm..." 84 sudo -u otto-app -i /bin/bash -lc "cd /srv/otto-app && npm install && npm prune --production" 85 86 ol "...done!"