From 5c959aaad6232ebf514c95ab4cf61d66e9b11248 Mon Sep 17 00:00:00 2001 From: Florian Heinemann Date: Thu, 6 Nov 2014 17:29:41 -0500 Subject: [PATCH] CHANGE to static compile --- README.md | 15 ++--- bin/compile | 160 +++++++++++++++++++++++++++++------------------- bin/detect | 4 +- bin/release | 12 ++-- conf/nginx.conf | 18 +++--- 5 files changed, 122 insertions(+), 87 deletions(-) diff --git a/README.md b/README.md index c5ea1e3..c46edad 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,8 @@ -# NGINX Buildpack +Dokku buildpack: Static Nginx +================================ -**Note**: This has only been tested with [dokku](https://github.com/progrium/dokku) - it may not work elsewhere. +For your static HTML site! -## Structure -* .nginx - File: its presence signals that this buildpack should be used -* www - Folder: holds all files to be served by nginx -* nginx.conf.erb - Optional File: overrides `conf/nginx.conf.erb` -* mime.types - Optional File: overrides `conf/mime.types` -* custom-build - Optional File: executes commands before build is finished. Note that this script does not run in the application root. To execute commands in the application root you must do `cd "$1"`. +Simply use this as the Dokku buildpack for your static repo and push to your Dokku server! -## Environment Variables -* root - Optional: overrides root directory +Make sure you have a file called `.static` in your root folder of your application. \ No newline at end of file diff --git a/bin/compile b/bin/compile index 364f8f0..881ac73 100755 --- a/bin/compile +++ b/bin/compile @@ -1,6 +1,10 @@ #!/usr/bin/env bash -set -e +# bin/compile +set -e +set -o pipefail + +# Nginx 1.6.2 NGINX_VERSION="1.6.2" NGINX_TARBALL="nginx-${NGINX_VERSION}.tar.gz" PCRE_VERSION="8.34" @@ -8,84 +12,116 @@ PCRE_TARBALL="pcre-${PCRE_VERSION}.tar.gz" ZLIB_VERSION="1.2.8" ZLIB_TARBALL="zlib-${ZLIB_VERSION}.tar.gz" -BINDIR=$(dirname "$0") -BUILDDIR="${1}" -CACHEDIR="${2}" +# parse and derive params +BUILD_DIR=$1 +CACHE_DIR=$2 +CUR_DIR=`cd $(dirname $0); cd ..; pwd` -mkdir -p $CACHEDIR/www_cache -mv $BUILDDIR/* $CACHEDIR/www_cache -mkdir -p $BUILDDIR/www -mv $CACHEDIR/www_cache/* $BUILDDIR/www +mkdir -p $BUILD_DIR $CACHE_DIR -cd $CACHEDIR +echo "-----> copy static files to www" +rm -rf $CACHE_DIR/www +mkdir -p $CACHE_DIR/www +mv $BUILD_DIR/* $CACHE_DIR/www +mkdir -p $BUILD_DIR/www +mv $CACHE_DIR/www/* $BUILD_DIR/www +rm -rf $CACHE_DIR/www + +cd $CACHE_DIR if [[ ! -d "${NGINX_TARBALL%.tar.gz}" ]]; then + echo "-----> download and unzip nginx" curl "http://nginx.org/download/${NGINX_TARBALL}" -o "${NGINX_TARBALL}" - tar xvzf "${NGINX_TARBALL}" && rm -f "${NGINX_TARBALL}" + tar xzf "${NGINX_TARBALL}" && rm -f "${NGINX_TARBALL}" fi if [[ ! -d "${PCRE_TARBALL%.tar.gz}" ]]; then + echo "-----> download and unzip pcre" curl "http://ftp.csx.cam.ac.uk/pub/software/programming/pcre/${PCRE_TARBALL}" -o "${PCRE_TARBALL}" - tar xvzf "${PCRE_TARBALL}" && rm -f "${PCRE_TARBALL}" + tar xzf "${PCRE_TARBALL}" && rm -f "${PCRE_TARBALL}" fi if [[ ! -d "${ZLIB_TARBALL%.tar.gz}" ]]; then + echo "-----> download and unzip zlib" curl "http://zlib.net/${ZLIB_TARBALL}" -o "${ZLIB_TARBALL}" - tar xvzf "${ZLIB_TARBALL}" && rm -rf "${ZLIB_TARBALL}" + tar xzf "${ZLIB_TARBALL}" && rm -rf "${ZLIB_TARBALL}" fi cd "nginx-${NGINX_VERSION}" -mkdir $BUILDDIR/nginx -./configure \ - --with-cpu-opt=generic \ - --prefix=$BUILDDIR/nginx \ - --with-pcre=../pcre-${PCRE_VERSION} \ - --sbin-path=. \ - --pid-path=./nginx.pid \ - --conf-path=./nginx.conf \ - --with-ld-opt="-static" \ - --with-http_spdy_module \ - --with-http_stub_status_module \ - --with-http_gzip_static_module \ - --with-file-aio \ - --with-zlib=../zlib-${ZLIB_VERSION} \ - --with-pcre \ - --with-cc-opt="-O2 -static -static-libgcc" \ - --without-http_charset_module \ - --without-http_ssi_module \ - --without-http_userid_module \ - --without-http_access_module \ - --without-http_auth_basic_module \ - --without-http_autoindex_module \ - --without-http_geo_module \ - --without-http_map_module \ - --without-http_split_clients_module \ - --without-http_referer_module \ - --without-http_proxy_module \ - --without-http_fastcgi_module \ - --without-http_uwsgi_module \ - --without-http_scgi_module \ - --without-http_memcached_module \ - --without-http_empty_gif_module \ - --without-http_browser_module \ - --without-http_upstream_ip_hash_module \ - --without-http_upstream_least_conn_module \ - --without-http_upstream_keepalive_module \ - --without-mail_pop3_module \ - --without-mail_imap_module \ - --without-mail_smtp_module - -sed -i "/CFLAGS/s/ \-O //g" objs/Makefile - -make -make install +if [[ ! -f "${CACHE_DIR}/bin/nginx" ]]; then + echo "-----> compile static nginx" + mkdir $BUILD_DIR/nginx + ./configure \ + --with-cpu-opt=generic \ + --prefix=$BUILD_DIR/nginx \ + --with-pcre=../pcre-${PCRE_VERSION} \ + --sbin-path=. \ + --pid-path=./nginx.pid \ + --conf-path=./nginx.conf \ + --with-ld-opt="-static" \ + --with-http_spdy_module \ + --with-http_stub_status_module \ + --with-http_gzip_static_module \ + --with-file-aio \ + --with-zlib=../zlib-${ZLIB_VERSION} \ + --with-pcre \ + --with-cc-opt="-O2 -static -static-libgcc" \ + --without-http_charset_module \ + --without-http_ssi_module \ + --without-http_userid_module \ + --without-http_access_module \ + --without-http_auth_basic_module \ + --without-http_autoindex_module \ + --without-http_geo_module \ + --without-http_map_module \ + --without-http_split_clients_module \ + --without-http_referer_module \ + --without-http_proxy_module \ + --without-http_fastcgi_module \ + --without-http_uwsgi_module \ + --without-http_scgi_module \ + --without-http_memcached_module \ + --without-http_empty_gif_module \ + --without-http_browser_module \ + --without-http_upstream_ip_hash_module \ + --without-http_upstream_least_conn_module \ + --without-http_upstream_keepalive_module \ + --without-mail_pop3_module \ + --without-mail_imap_module \ + --without-mail_smtp_module + + sed -i "/CFLAGS/s/ \-O //g" objs/Makefile -rm -rf "nginx-${NGINX_VERSION}" + make && make install -if [[ ! -f $BUILDDIR/nginx.conf ]]; then - cp $BINDIR/../conf/nginx.conf $BUILDDIR/nginx.conf + rm -rf $CACHE_DIR/bin && mkdir -p $CACHE_DIR/bin/ + cp -r $BUILD_DIR/nginx/* $CACHE_DIR/bin/ + +else + echo "-----> reuse nginx from cache" + mkdir -p $BUILD_DIR/nginx + cp -r $CACHE_DIR/bin/* $BUILD_DIR/nginx/ fi -if [[ ! -f $BUILDDIR/mime.types ]]; then - cp $BINDIR/../conf/mime.types $BUILDDIR/mime.types -fi +cd $CUR_DIR + +# build nginx config unless overridden by user +#if [ ! -f $BUILD_DIR/nginx/nginx.conf ] ; then +echo "-----> using default nginx.conf.erb" +cp conf/nginx.conf.erb $BUILD_DIR/nginx/nginx.conf.erb +#fi + +# build mime.types unless overridden by user +#if [ ! -f $BUILD_DIR/mime.types ] ; then +echo "-----> using default mime.types" +cp conf/mime.types $BUILD_DIR/nginx/mime.types +#fi + +# build a startup script +cat <"$BUILD_DIR/start_nginx" +#!/usr/bin/env bash +rm -f /app/nginx/nginx.conf +erb /app/nginx/nginx.conf.erb > /app/nginx/nginx.conf +exec nginx -p /app/nginx -c /app/nginx/nginx.conf +EOF +chmod +x "$BUILD_DIR/start_nginx" diff --git a/bin/detect b/bin/detect index 7c91c11..aac4809 100755 --- a/bin/detect +++ b/bin/detect @@ -1,8 +1,8 @@ #!/usr/bin/env bash set -e -if [[ -f $1/.nginx ]]; then - echo ".nginx" +if [[ -f $1/.static ]]; then + echo ".static" exit 0 else exit 1 diff --git a/bin/release b/bin/release index ccb594c..ae45a02 100755 --- a/bin/release +++ b/bin/release @@ -1,8 +1,12 @@ #!/usr/bin/env bash -set -e +# bin/release -cat << EOF +cat </\$PORT/g" /app/nginx.conf && /app/nginx/nginx -c /app/nginx.conf -EOF + web: /app/start_nginx +EOF \ No newline at end of file diff --git a/conf/nginx.conf b/conf/nginx.conf index 7b2b070..2189ddb 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -4,16 +4,16 @@ pid nginx.pid; daemon off; events { - worker_connections 768; + worker_connections 768; } http { - types_hash_max_size 2048; - include mime.types; - server { - listen ; - server_name _; - root /app/www; - index index.html; - } + types_hash_max_size 2048; + include mime.types; + server { + listen <%= ENV["PORT"] %>; + server_name _; + root /app/www; + index index.html; + } }