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!"