diff --git a/config/nginx.conf b/config/nginx.conf new file mode 100644 index 0000000..de13f47 --- /dev/null +++ b/config/nginx.conf @@ -0,0 +1,27 @@ +upstream oldhaven { + server unix:/tmp/unicorn.oldhaven.sock fail_timeout=0; +} + +server { + listen 80 default deferred; + server_name beathaven.org www.beathaven.org; + root /home/www/apps/oldhaven/current/public; + + location ^~ /assets/ { + gzip_static on; + expires max; + add_header Cache-Control public; + } + + try_files $uri/index.html $uri @oldhaven; + location @oldhaven { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_pass http://oldhaven; + } + + error_page 500 502 503 504 /500.html; + client_max_body_size 4G; + keepalive_timeout 10; +} diff --git a/config/unicorn.rb b/config/unicorn.rb index c3652b8..a818a39 100644 --- a/config/unicorn.rb +++ b/config/unicorn.rb @@ -1,2 +1,11 @@ -worker_processes 2 # amount of unicorn workers to spin up -timeout 30 # restarts workers that hang for 30 seconds \ No newline at end of file +PROJECT = "oldhaven" + +root = "/home/www/apps/#{PROJECT}/current" +working_directory root +pid "#{root}/tmp/pids/unicorn.pid" +stderr_path "#{root}/log/unicorn.log" +stdout_path "#{root}/log/unicorn.log" + +listen "/tmp/unicorn.#{PROJECT}.sock" +worker_processes 2 +timeout 30 diff --git a/config/unicorn.sh b/config/unicorn.sh new file mode 100644 index 0000000..3b52291 --- /dev/null +++ b/config/unicorn.sh @@ -0,0 +1,85 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: unicorn +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Manage unicorn server +# Description: Start, stop, restart unicorn server for a specific application. +### END INIT INFO +set -e + +# Feel free to change any of the following variables for your app: +PROJECT=oldhaven +TIMEOUT=${TIMEOUT-60} +APP_ROOT="/home/www/apps/$PROJECT/current" +PID=$APP_ROOT/tmp/pids/unicorn.pid +CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" +AS_USER=www +set -u + +OLD_PIN="$PID.oldbin" + +sig () { + test -s "$PID" && kill -$1 `cat $PID` +} + +oldsig () { + test -s $OLD_PIN && kill -$1 `cat $OLD_PIN` +} + +run () { + if [ "$(id -un)" = "$AS_USER" ]; then + eval $1 + else + su -c "$1" - $AS_USER + fi +} + +case "$1" in +start) + sig 0 && echo >&2 "Already running" && exit 0 + run "$CMD" + ;; +stop) + sig QUIT && exit 0 + echo >&2 "Not running" + ;; +force-stop) + sig TERM && exit 0 + echo >&2 "Not running" + ;; +restart|reload) + sig HUP && echo reloaded OK && exit 0 + echo >&2 "Couldn't reload, starting '$CMD' instead" + run "$CMD" + ;; +upgrade) + if sig USR2 && sleep 2 && sig 0 && oldsig QUIT + then + n=$TIMEOUT + while test -s $OLD_PIN && test $n -ge 0 + do + printf '.' && sleep 1 && n=$(( $n - 1 )) + done + echo + + if test $n -lt 0 && test -s $OLD_PIN + then + echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds" + exit 1 + fi + exit 0 + fi + echo >&2 "Couldn't upgrade, starting '$CMD' instead" + run "$CMD" + ;; +reopen-logs) + sig USR1 + ;; +*) + echo >&2 "Usage: $0 " + exit 1 + ;; +esac