mirror of
https://github.com/dokku/buildpack-nginx.git
synced 2024-11-24 18:13:06 +00:00
89196adbf1
This allows folks the ability to restore the previous routing functionality used by static sites backed by VueJS (as an example). Note that all requests routed this way will respond with a '200 OK' on the server, potentially causing SEO issues. Closes #53
178 lines
6.0 KiB
Bash
Executable File
178 lines
6.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# bin/compile <build-dir> <cache-dir>
|
|
set -eo pipefail; [[ $TRACE ]] && set -x
|
|
|
|
NGINX_VERSION="1.17.0"
|
|
NGINX_TARBALL="nginx-${NGINX_VERSION}.tar.gz"
|
|
PCRE_VERSION="8.45"
|
|
PCRE_TARBALL="pcre-${PCRE_VERSION}.tar.gz"
|
|
SIGIL_VERSION="0.4.0"
|
|
SIGIL_TARBALL="sigil_${SIGIL_VERSION}_Linux_x86_64.tgz"
|
|
ZLIB_VERSION="1.2.11"
|
|
ZLIB_TARBALL="zlib-${ZLIB_VERSION}.tar.gz"
|
|
|
|
suppress() {
|
|
# shellcheck disable=SC2069
|
|
/bin/rm --force /tmp/surpress.out 2> /dev/null; "$@" 2>&1 > /tmp/surpress.out || cat /tmp/surpress.out; /bin/rm /tmp/surpress.out;
|
|
}
|
|
|
|
# parse and derive params
|
|
BUILD_DIR=$1
|
|
CACHE_DIR=$2
|
|
CUR_DIR=$(cd "$(dirname "$0")"; cd ..; pwd)
|
|
|
|
mkdir -p "$BUILD_DIR" "$CACHE_DIR"
|
|
|
|
if [[ ! -e "${BUILD_DIR}/www" ]]; then
|
|
echo "-----> Copy static files to www"
|
|
rm -rf "${CACHE_DIR}/www"
|
|
mkdir -p "${CACHE_DIR}/www"
|
|
|
|
# shellcheck disable=SC2086
|
|
mv $BUILD_DIR/* "${CACHE_DIR}/www"
|
|
mkdir -p "${BUILD_DIR}/www"
|
|
|
|
# shellcheck disable=SC2086
|
|
mv ${CACHE_DIR}/www/* "${BUILD_DIR}/www"
|
|
# Check for a copy the nginx conf file override to the build dir
|
|
[[ -f "${BUILD_DIR}/www/nginx.conf.erb" ]] && mv "${BUILD_DIR}/www/nginx.conf.erb" "${BUILD_DIR}"
|
|
[[ -f "${BUILD_DIR}/www/nginx.conf.sigil" ]] && mv "${BUILD_DIR}/www/nginx.conf.sigil" "${BUILD_DIR}"
|
|
[[ -f "${BUILD_DIR}/www/app-nginx.conf.sigil" ]] && mv "${BUILD_DIR}/www/app-nginx.conf.sigil" "${BUILD_DIR}"
|
|
[[ -f "${BUILD_DIR}/www/mime.types" ]] && mv "${BUILD_DIR}/www/mime.types" "${BUILD_DIR}"
|
|
[[ -f "${BUILD_DIR}/www/CHECKS" ]] && mv "${BUILD_DIR}/www/CHECKS" "${BUILD_DIR}"
|
|
[[ -f "${BUILD_DIR}/www/app.json" ]] && mv "${BUILD_DIR}/www/app.json" "${BUILD_DIR}"
|
|
rm -rf "${CACHE_DIR}/www"
|
|
fi
|
|
|
|
cd "$CACHE_DIR"
|
|
|
|
if [[ ! -d "${NGINX_TARBALL%.tar.gz}" ]]; then
|
|
echo "-----> Download and unzip nginx ${NGINX_VERSION} via http"
|
|
curl -sSL "http://nginx.org/download/${NGINX_TARBALL}" -o "${NGINX_TARBALL}"
|
|
tar xzf "${NGINX_TARBALL}" && rm -f "${NGINX_TARBALL}"
|
|
fi
|
|
|
|
if [[ ! -d "${PCRE_TARBALL%.tar.gz}" ]]; then
|
|
echo "-----> Download and unzip pcre ${PCRE_VERSION} via http"
|
|
curl -sSL "https://downloads.sourceforge.net/project/pcre/pcre/${PCRE_VERSION}/${PCRE_TARBALL}" -o "${PCRE_TARBALL}"
|
|
tar xzf "${PCRE_TARBALL}" && rm -f "${PCRE_TARBALL}"
|
|
fi
|
|
|
|
if [[ ! -d "${ZLIB_TARBALL%.tar.gz}" ]]; then
|
|
echo "-----> Download and unzip zlib ${ZLIB_VERSION} via http"
|
|
curl -sSL "https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz" -o "${ZLIB_TARBALL}"
|
|
tar xzf "${ZLIB_TARBALL}" && rm -rf "${ZLIB_TARBALL}"
|
|
fi
|
|
|
|
if [[ ! -f "sigil" ]]; then
|
|
echo "-----> Download and unzip sigil ${SIGIL_VERSION} via http"
|
|
curl -sSL "https://github.com/gliderlabs/sigil/releases/download/v${SIGIL_VERSION}/${SIGIL_TARBALL}" -o "${SIGIL_TARBALL}"
|
|
tar xzf "${SIGIL_TARBALL}" && rm -rf "${SIGIL_TARBALL}"
|
|
fi
|
|
|
|
mkdir -p "$BUILD_DIR/sigil"
|
|
cp -r sigil "$BUILD_DIR/sigil/"
|
|
|
|
cd "nginx-${NGINX_VERSION}"
|
|
if [[ ! -f "${CACHE_DIR}/bin/nginx" ]]; then
|
|
echo "-----> Compiling static nginx binary"
|
|
mkdir "$BUILD_DIR/nginx"
|
|
suppress ./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_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_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_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 \
|
|
--with-http_realip_module
|
|
|
|
sed -i "/CFLAGS/s/ \-O //g" objs/Makefile
|
|
|
|
suppress make && suppress make install
|
|
|
|
rm -rf "${CACHE_DIR:?}/bin" && mkdir -p "$CACHE_DIR/bin/"
|
|
# shellcheck disable=SC2086
|
|
cp -r $BUILD_DIR/nginx/* "$CACHE_DIR/bin/"
|
|
|
|
else
|
|
echo "-----> Reusing nginx binary from cache"
|
|
mkdir -p "$BUILD_DIR/nginx"
|
|
# shellcheck disable=SC2086
|
|
cp -r $CACHE_DIR/bin/* "$BUILD_DIR/nginx/"
|
|
fi
|
|
|
|
# Update the PATH
|
|
mkdir -p "$BUILD_DIR/.profile.d"
|
|
cat > "$BUILD_DIR/.profile.d/nginx.sh" <<"EOF"
|
|
export PATH="$PATH:$HOME/nginx"
|
|
EOF
|
|
|
|
cd "$CUR_DIR"
|
|
|
|
# Add support for app-nginx.conf.sigil
|
|
if [ -f "$BUILD_DIR/app-nginx.conf.sigil" ] ; then
|
|
echo "-----> Using user provided app-nginx.conf.sigil"
|
|
cp "$BUILD_DIR/app-nginx.conf.sigil" "$BUILD_DIR/nginx/app-nginx.conf.sigil"
|
|
|
|
# Allow deprecated nginx.conf.erb
|
|
elif [ -f "$BUILD_DIR/nginx.conf.erb" ] ; then
|
|
echo "-----> DEPRECATED: Using user provided nginx.conf.erb"
|
|
cp "$BUILD_DIR/nginx.conf.erb" "$BUILD_DIR/nginx/nginx.conf.erb"
|
|
|
|
# ...else, force default file
|
|
else
|
|
echo "-----> Using default app-nginx.conf.sigil"
|
|
cp conf/app-nginx.conf.sigil "$BUILD_DIR/nginx/app-nginx.conf.sigil"
|
|
fi
|
|
|
|
# build mime.types unless overridden by user
|
|
if [ -f "$BUILD_DIR/mime.types" ] ; then
|
|
echo "-----> Using user provided mime.types"
|
|
cp "$BUILD_DIR/mime.types" "$BUILD_DIR/nginx/mime.types"
|
|
|
|
else
|
|
echo "-----> Using default mime.types"
|
|
cp conf/mime.types "$BUILD_DIR/nginx/mime.types"
|
|
fi
|
|
|
|
# build a startup script
|
|
cat <<EOF >"$BUILD_DIR/start_nginx"
|
|
#!/usr/bin/env bash
|
|
rm -f /app/nginx/nginx.conf
|
|
if [[ -f /app/nginx/app-nginx.conf.sigil ]]; then
|
|
/app/sigil/sigil -f /app/nginx/app-nginx.conf.sigil NGINX_ROOT="\$NGINX_ROOT" NGINX_DEFAULT_REQUEST="\$NGINX_DEFAULT_REQUEST" PORT="\$PORT" | cat -s > /app/nginx/nginx.conf
|
|
else
|
|
erb /app/nginx/nginx.conf.erb > /app/nginx/nginx.conf
|
|
fi
|
|
exec /app/nginx/nginx -p /app/nginx -c /app/nginx/nginx.conf
|
|
EOF
|
|
chmod +x "$BUILD_DIR/start_nginx"
|