Skip to content

Commit

Permalink
Merge pull request dokku#7582 from dokku/6967-global-vhost-disable
Browse files Browse the repository at this point in the history
Add ability to disable vhosts for all apps
  • Loading branch information
josegonzalez authored Mar 10, 2025
2 parents a6dd27e + c584718 commit 9458642
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 14 deletions.
15 changes: 14 additions & 1 deletion docs/configuration/domains.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,29 @@ If an FQDN such as `dokku.org` is used as the application name, the global virtu

You can optionally override this in a plugin by implementing the `nginx-hostname` plugin trigger. If the `nginx-hostname` plugin has no output, the normal hostname algorithm will be executed. See the [plugin trigger documentation](/docs/development/plugin-triggers.md#nginx-hostname) for more information.

## Disabling VHOSTS
## Enabling and disabling VHOSTS

If desired, it is possible to disable vhosts with the domains plugin.

```shell
dokku domains:disable node-js-app
```

Vhosts can also be disabled for all apps:

```shell
dokku domains:disable --all
```

On subsequent deploys, the nginx virtualhost will be discarded. This is useful when deploying internal-facing services that should not be publicly routeable. As of 0.4.0, nginx will still be configured to proxy your app on some random high port. This allows internal services to maintain the same port between deployments. You may change this port by setting `DOKKU_PROXY_PORT` and/or `DOKKU_PROXY_SSL_PORT` (for services configured to use SSL.)

To re-enable, run the `domains:enable` subcommand:

```shell
dokku domains:enable node-js-app
dokku domains:enable --all
```

The domains plugin allows you to specify custom domains for applications. This plugin is aware of any ssl certificates that are imported via `certs:add`. Be aware that disabling domains (with `domains:disable`) will override any custom domains.

```shell
Expand Down
2 changes: 1 addition & 1 deletion docs/networking/proxies/nginx.md
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ See the [customizing hostnames documentation](/docs/configuration/domains.md#cus

### Disabling VHOSTS

See the [disabling vhosts documentation](/docs/configuration/domains.md#disabling-vhosts) for more information on how to disable domain usage for your app.
See the [enabling and disabling vhosts documentation](/docs/configuration/domains.md#enabling-and-disabling-vhosts) for more information on how to disable domain usage for your app.

### SSL Configuration

Expand Down
59 changes: 58 additions & 1 deletion plugins/domains/functions
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,57 @@ source "$PLUGIN_AVAILABLE_PATH/config/functions"
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x

fn-domains-clear() {
declare desc="clear all domains for one or more apps"
declare APP="$1"

if [[ "$APP" == "--all" ]]; then
for APP in $(dokku_apps); do
fn-domains-clear-app "$APP"
done
else
fn-domains-clear-app "$APP"
fi
}

fn-domains-clear-app() {
declare desc="clear all domains for an app"
declare APP="$1"

local APP_VHOST_PATH="$DOKKU_ROOT/$APP/VHOST"

rm -f "$APP_VHOST_PATH"
domains_setup "$APP"
plugn trigger post-domains-update "$APP" "clear"
dokku_log_info1 "Cleared domains in $APP"
}

fn-domains-disable() {
declare desc="disable domains/VHOST support"
declare APP="$1"

if [[ "$APP" == "--all" ]]; then
for APP in $(dokku_apps); do
domains_disable "$APP"
done
else
domains_disable "$APP"
fi
}

fn-domains-enable() {
declare desc="enable domains/VHOST support"
declare APP="$1"

if [[ "$APP" == "--all" ]]; then
for APP in $(dokku_apps); do
domains_enable "$APP"
done
else
domains_enable "$APP"
fi
}

disable_app_vhost() {
declare desc="disable vhost support for given application"
declare APP=$1 RESTART_APP="$2"
Expand All @@ -17,6 +68,9 @@ disable_app_vhost() {

[[ "$RESTART_APP" == "--no-restart" ]] && local CONFIG_SET_ARGS=$RESTART_APP
DOKKU_QUIET_OUTPUT=1 config_set $CONFIG_SET_ARGS $APP NO_VHOST=1
if [[ "$RESTART_APP" == "--no-restart" ]]; then
plugn trigger post-domains-update "$APP" "disable"
fi
}

domains_setup() {
Expand Down Expand Up @@ -110,7 +164,7 @@ domains_disable() {

touch "$APP_VHOST_PATH"
if [[ "$(is_app_vhost_enabled "$APP")" == "true" ]]; then
disable_app_vhost "$APP"
disable_app_vhost "$APP" --no-restart
else
dokku_log_info1 "Domains (VHOST) support is already disabled for app ($APP)"
fi
Expand Down Expand Up @@ -196,6 +250,9 @@ enable_app_vhost() {
plugn trigger pre-enable-vhost "$APP"
[[ "$RESTART_APP" == "--no-restart" ]] && local CONFIG_SET_ARGS=$RESTART_APP
DOKKU_QUIET_OUTPUT=1 config_set $CONFIG_SET_ARGS "$APP" NO_VHOST=0
if [[ "$RESTART_APP" == "--no-restart" ]]; then
plugn trigger post-domains-update "$APP" "enable"
fi
}

get_app_domains() {
Expand Down
9 changes: 2 additions & 7 deletions plugins/domains/subcommands/clear
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,8 @@ cmd-domains-clear() {
[[ "$1" == "$cmd" ]] && shift 1
declare APP="$1"

verify_app_name "$APP"
local APP_VHOST_PATH="$DOKKU_ROOT/$APP/VHOST"

rm -f "$APP_VHOST_PATH"
domains_setup "$APP"
plugn trigger post-domains-update "$APP" "clear"
dokku_log_info1 "Cleared domains in $APP"
[[ "$APP" == "--all" ]] || verify_app_name "$APP"
fn-domains-clear "$APP"
}

cmd-domains-clear "$@"
4 changes: 2 additions & 2 deletions plugins/domains/subcommands/disable
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ cmd-domains-disable() {
[[ "$1" == "$cmd" ]] && shift 1
declare APP="$1"

verify_app_name "$APP"
domains_disable "$APP"
[[ "$APP" == "--all" ]] && verify_app_name "$APP"
fn-domains-disable "$APP"
}

cmd-domains-disable "$@"
4 changes: 2 additions & 2 deletions plugins/domains/subcommands/enable
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ cmd-domains-enable() {
[[ "$1" == "$cmd" ]] && shift 1
declare APP="$1"

verify_app_name "$APP"
domains_enable "$APP"
[[ "$APP" == "--all" ]] && verify_app_name "$APP"
fn-domains-enable "$APP"
}

cmd-domains-enable "$@"

0 comments on commit 9458642

Please sign in to comment.