rebuild nginx config on domain change
This commit is contained in:
@@ -45,10 +45,17 @@ case "$1" in
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ $(grep $3 "$DOKKU_ROOT/$APP/VHOST" > /dev/null 2>&1; echo $?) -eq 0 ]]; then
|
||||||
|
echo "$3 is already defined for $APP"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
dokku domains:setup $APP
|
dokku domains:setup $APP
|
||||||
echo "$3" >> "$DOKKU_ROOT/$APP/VHOST"
|
echo "$3" >> "$DOKKU_ROOT/$APP/VHOST"
|
||||||
pluginhook post-domains-update $APP
|
pluginhook post-domains-update $APP
|
||||||
echo "-----> Added $3 to $APP"
|
echo "-----> Added $3 to $APP"
|
||||||
|
|
||||||
|
dokku nginx:build-config $APP
|
||||||
;;
|
;;
|
||||||
|
|
||||||
domains:clear)
|
domains:clear)
|
||||||
@@ -60,6 +67,8 @@ case "$1" in
|
|||||||
echo '' > "$DOKKU_ROOT/$APP/VHOST"
|
echo '' > "$DOKKU_ROOT/$APP/VHOST"
|
||||||
pluginhook post-domains-update $APP
|
pluginhook post-domains-update $APP
|
||||||
echo "-----> Cleared domains in $APP"
|
echo "-----> Cleared domains in $APP"
|
||||||
|
|
||||||
|
dokku nginx:build-config $APP
|
||||||
;;
|
;;
|
||||||
|
|
||||||
domains:remove)
|
domains:remove)
|
||||||
@@ -77,12 +86,13 @@ case "$1" in
|
|||||||
sed -i "/^$3$/d" "$DOKKU_ROOT/$APP/VHOST"
|
sed -i "/^$3$/d" "$DOKKU_ROOT/$APP/VHOST"
|
||||||
pluginhook post-domains-update $APP
|
pluginhook post-domains-update $APP
|
||||||
echo "-----> Removed $3 from $APP"
|
echo "-----> Removed $3 from $APP"
|
||||||
|
|
||||||
|
dokku nginx:build-config $APP
|
||||||
;;
|
;;
|
||||||
|
|
||||||
help | domains:help)
|
help | domains:help)
|
||||||
cat && cat<<EOF
|
cat && cat<<EOF
|
||||||
domains <app> List custom domains for app
|
domains <app> List custom domains for app
|
||||||
domains:help <app> This help message
|
|
||||||
domains:add <app> DOMAIN Add a custom domain to app
|
domains:add <app> DOMAIN Add a custom domain to app
|
||||||
domains:clear <app> Clear all custom domains for app
|
domains:clear <app> Clear all custom domains for app
|
||||||
domains:remove <app> DOMAIN Remove a custom domain from app
|
domains:remove <app> DOMAIN Remove a custom domain from app
|
||||||
|
|||||||
@@ -1,7 +1,91 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
restart_nginx () {
|
||||||
|
case "$DOKKU_DISTRO" in
|
||||||
|
ubuntu)
|
||||||
|
sudo /etc/init.d/nginx reload > /dev/null
|
||||||
|
;;
|
||||||
|
|
||||||
|
opensuse)
|
||||||
|
sudo /sbin/service nginx reload > /dev/null
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
nginx:build-config)
|
||||||
|
APP="$2"; PORT="$3"
|
||||||
|
[[ -z "$PORT" ]] && PORT=$(< "$DOKKU_ROOT/$APP/PORT")
|
||||||
|
VHOST_PATH="$DOKKU_ROOT/$APP/VHOST"
|
||||||
|
WILDCARD_SSL="$DOKKU_ROOT/tls"
|
||||||
|
SSL="$DOKKU_ROOT/$APP/tls"
|
||||||
|
NONSSL_VHOSTS=`cat $VHOST_PATH`
|
||||||
|
|
||||||
|
if [[ ! -n "$NO_VHOST" ]]; then
|
||||||
|
if [[ -e "$SSL/server.crt" ]] && [[ -e "$SSL/server.key" ]]; then
|
||||||
|
SSL_INUSE="$SSL"
|
||||||
|
SSL_DIRECTIVES=$(cat <<EOF
|
||||||
|
ssl_certificate $SSL_INUSE/server.crt;
|
||||||
|
ssl_certificate_key $SSL_INUSE/server.key;
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
elif [[ -e "$WILDCARD_SSL/server.crt" ]] && [[ -e "$WILDCARD_SSL/server.key" ]]; then
|
||||||
|
SSL_INUSE="$WILDCARD_SSL"
|
||||||
|
SSL_DIRECTIVES=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
NGINX_CONF="$PLUGIN_PATH/nginx-vhosts/templates/nginx.conf"
|
||||||
|
SCHEME="http"
|
||||||
|
if [[ -n "$SSL_INUSE" ]]; then
|
||||||
|
NGINX_CONF="$PLUGIN_PATH/nginx-vhosts/templates/nginx.ssl.conf"
|
||||||
|
SCHEME="https"
|
||||||
|
|
||||||
|
SSL_HOSTNAME=`openssl x509 -in $SSL_INUSE/server.crt -noout -subject | tr '/' '\n' | grep CN= | cut -c4-`
|
||||||
|
SSL_HOSTNAME=`echo "$SSL_HOSTNAME" | sed 's|\.|\\.|g' | sed 's/\*/\.\*/g'`
|
||||||
|
SSL_VHOSTS=`grep "$SSL_HOSTNAME" $VHOST_PATH`
|
||||||
|
NONSSL_VHOSTS=`grep -v "$SSL_HOSTNAME" $VHOST_PATH`
|
||||||
|
|
||||||
|
while read line; do
|
||||||
|
echo "-----> Configuring SSL for $line..."
|
||||||
|
SSL_SERVER_NAME=$line
|
||||||
|
eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf"
|
||||||
|
done <<< "$SSL_VHOSTS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
APP_NGINX_TEMPLATE="$DOKKU_ROOT/$APP/nginx.conf.template"
|
||||||
|
if [[ -f $APP_NGINX_TEMPLATE ]]; then
|
||||||
|
echo "-----> Overriding default nginx.conf with detected nginx.conf.template"
|
||||||
|
NGINX_CONF=$APP_NGINX_TEMPLATE
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat $VHOST_PATH | xargs -i echo "-----> Configuring {}..."
|
||||||
|
NOSSL_SERVER_NAME=`echo $NONSSL_VHOSTS | tr '\n' ' '`
|
||||||
|
|
||||||
|
echo "-----> Creating $SCHEME nginx.conf"
|
||||||
|
echo "upstream $APP { server 127.0.0.1:$PORT; }" > $DOKKU_ROOT/$APP/nginx.conf
|
||||||
|
eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf"
|
||||||
|
|
||||||
|
echo "-----> Running nginx-pre-reload"
|
||||||
|
pluginhook nginx-pre-reload $APP $PORT
|
||||||
|
|
||||||
|
echo " Reloading nginx"
|
||||||
|
restart_nginx
|
||||||
|
else
|
||||||
|
if [[ -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
|
||||||
|
echo "-----> NO_VHOST set, deleting $APP/VHOST"
|
||||||
|
rm "$DOKKU_ROOT/$APP/VHOST"
|
||||||
|
fi
|
||||||
|
if [[ -f "$DOKKU_ROOT/$APP/nginx.conf" ]]; then
|
||||||
|
echo "-----> NO_VHOST set, deleting nginx.conf"
|
||||||
|
rm "$DOKKU_ROOT/$APP/nginx.conf"
|
||||||
|
|
||||||
|
echo "-----> NO_VHOST set, reloading nginx after nginx.conf deletion"
|
||||||
|
restart_nginx
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
nginx:import-ssl)
|
nginx:import-ssl)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
||||||
@@ -23,6 +107,7 @@ case "$1" in
|
|||||||
help | nginx:help)
|
help | nginx:help)
|
||||||
cat && cat<<EOF
|
cat && cat<<EOF
|
||||||
nginx:import-ssl <app> Imports a tarball from stdin; should contain server.crt and server.key
|
nginx:import-ssl <app> Imports a tarball from stdin; should contain server.crt and server.key
|
||||||
|
nginx:build-config <app> (Re)builds nginx config for given app
|
||||||
EOF
|
EOF
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|||||||
@@ -2,91 +2,13 @@
|
|||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
APP="$1"; PORT="$2"
|
APP="$1"; PORT="$2"
|
||||||
VHOST_PATH="$DOKKU_ROOT/$APP/VHOST"
|
|
||||||
WILDCARD_SSL="$DOKKU_ROOT/tls"
|
|
||||||
SSL="$DOKKU_ROOT/$APP/tls"
|
|
||||||
|
|
||||||
set +e; NO_VHOST=$(dokku config:get $APP NO_VHOST); set -e
|
set +e; NO_VHOST=$(dokku config:get $APP NO_VHOST); set -e
|
||||||
|
|
||||||
restart_nginx () {
|
|
||||||
case "$DOKKU_DISTRO" in
|
|
||||||
ubuntu)
|
|
||||||
sudo /etc/init.d/nginx reload > /dev/null
|
|
||||||
;;
|
|
||||||
|
|
||||||
opensuse)
|
|
||||||
sudo /sbin/service nginx reload > /dev/null
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ -n "$NO_VHOST" ]]; then
|
if [[ -n "$NO_VHOST" ]]; then
|
||||||
echo "-----> NO_VHOST config detected"
|
echo "-----> NO_VHOST config detected"
|
||||||
elif [[ ! -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
|
elif [[ ! -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
|
||||||
dokku domains:setup $APP
|
dokku domains:setup $APP
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NONSSL_VHOSTS=`cat $VHOST_PATH`
|
dokku nginx:build-config $APP $PORT
|
||||||
|
|
||||||
if [[ ! -n "$NO_VHOST" ]]; then
|
|
||||||
if [[ -e "$SSL/server.crt" ]] && [[ -e "$SSL/server.key" ]]; then
|
|
||||||
SSL_INUSE="$SSL"
|
|
||||||
SSL_DIRECTIVES=$(cat <<EOF
|
|
||||||
ssl_certificate $SSL_INUSE/server.crt;
|
|
||||||
ssl_certificate_key $SSL_INUSE/server.key;
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
elif [[ -e "$WILDCARD_SSL/server.crt" ]] && [[ -e "$WILDCARD_SSL/server.key" ]]; then
|
|
||||||
SSL_INUSE="$WILDCARD_SSL"
|
|
||||||
SSL_DIRECTIVES=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
NGINX_CONF="$PLUGIN_PATH/nginx-vhosts/templates/nginx.conf"
|
|
||||||
SCHEME="http"
|
|
||||||
if [[ -n "$SSL_INUSE" ]]; then
|
|
||||||
NGINX_CONF="$PLUGIN_PATH/nginx-vhosts/templates/nginx.ssl.conf"
|
|
||||||
SCHEME="https"
|
|
||||||
|
|
||||||
SSL_HOSTNAME=`openssl x509 -in $SSL_INUSE/server.crt -noout -subject | tr '/' '\n' | grep CN= | cut -c4-`
|
|
||||||
SSL_HOSTNAME=`echo "$SSL_HOSTNAME" | sed 's|\.|\\.|g' | sed 's/\*/\.\*/g'`
|
|
||||||
SSL_VHOSTS=`grep "$SSL_HOSTNAME" $VHOST_PATH`
|
|
||||||
NONSSL_VHOSTS=`grep -v "$SSL_HOSTNAME" $VHOST_PATH`
|
|
||||||
|
|
||||||
while read line; do
|
|
||||||
echo "-----> Configuring SSL for $line..."
|
|
||||||
SSL_SERVER_NAME=$line
|
|
||||||
eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf"
|
|
||||||
done <<< "$SSL_VHOSTS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
APP_NGINX_TEMPLATE="$DOKKU_ROOT/$APP/nginx.conf.template"
|
|
||||||
if [[ -f $APP_NGINX_TEMPLATE ]]; then
|
|
||||||
echo "-----> Overriding default nginx.conf with detected nginx.conf.template"
|
|
||||||
NGINX_CONF=$APP_NGINX_TEMPLATE
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat $VHOST_PATH | xargs -i echo "-----> Configuring {}..."
|
|
||||||
NOSSL_SERVER_NAME=`echo $NONSSL_VHOSTS | tr '\n' ' '`
|
|
||||||
|
|
||||||
echo "-----> Creating $SCHEME nginx.conf"
|
|
||||||
echo "upstream $APP { server 127.0.0.1:$PORT; }" > $DOKKU_ROOT/$APP/nginx.conf
|
|
||||||
eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf"
|
|
||||||
|
|
||||||
echo "-----> Running nginx-pre-reload"
|
|
||||||
pluginhook nginx-pre-reload $APP $PORT
|
|
||||||
|
|
||||||
echo " Reloading nginx"
|
|
||||||
restart_nginx
|
|
||||||
else
|
|
||||||
if [[ -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
|
|
||||||
echo "-----> NO_VHOST set, deleting $APP/VHOST"
|
|
||||||
rm "$DOKKU_ROOT/$APP/VHOST"
|
|
||||||
fi
|
|
||||||
if [[ -f "$DOKKU_ROOT/$APP/nginx.conf" ]]; then
|
|
||||||
echo "-----> NO_VHOST set, deleting nginx.conf"
|
|
||||||
rm "$DOKKU_ROOT/$APP/nginx.conf"
|
|
||||||
|
|
||||||
echo "-----> NO_VHOST set, reloading nginx after nginx.conf deletion"
|
|
||||||
restart_nginx
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|||||||
Reference in New Issue
Block a user