diff --git a/HISTORY.md b/HISTORY.md index bacb60464..733127eca 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,15 @@ # History +## 0.3.2 + +- #675: @michaelhobbs port wait-to-retire from broadly/dokku +- #765: @josegonzalez Ignore tls directory when listing apps +- #766: @josegonzalez Sort output of apps command +- #771: @josegonzalez Doc updates +- #518 #772: @nickl- Import ssl certificates +- #773: @alex-sherwin Support a way to not create nginx vhost +- #774: @josegonzalez Add the ability to customize an app's hostname using nginx-hostname pluginhook + ## 0.3.1 - 647b2157: @josegonzalez Update HISTORY.md for 0.3.0 diff --git a/Makefile b/Makefile index fc3eaf439..defbac45c 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ PLUGINHOOK_URL ?= https://s3.amazonaws.com/progrium-pluginhook/pluginhook_0.1.0_ STACK_URL ?= https://github.com/progrium/buildstep.git PREBUILT_STACK_URL ?= https://github.com/progrium/buildstep/releases/download/2014-03-08/2014-03-08_429d4a9deb.tar.gz DOKKU_ROOT ?= /home/dokku +PLUGINS_PATH ?= /var/lib/dokku/plugins # If the first argument is "vagrant-dokku"... ifeq (vagrant-dokku,$(firstword $(MAKECMDGOALS))) @@ -23,12 +24,12 @@ install: dependencies stack copyfiles plugin-dependencies plugins version copyfiles: addman cp dokku /usr/local/bin/dokku - mkdir -p /var/lib/dokku/plugins - find /var/lib/dokku/plugins -mindepth 2 -maxdepth 2 -name '.core' -printf '%h\0' | xargs -0 rm -Rf + mkdir -p ${PLUGINS_PATH} + find ${PLUGINS_PATH} -mindepth 2 -maxdepth 2 -name '.core' -printf '%h\0' | xargs -0 rm -Rf find plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do \ - rm -Rf /var/lib/dokku/plugins/$$plugin && \ - cp -R plugins/$$plugin /var/lib/dokku/plugins && \ - touch /var/lib/dokku/plugins/$$plugin/.core; \ + rm -Rf ${PLUGINS_PATH}/$$plugin && \ + cp -R plugins/$$plugin ${PLUGINS_PATH} && \ + touch ${PLUGINS_PATH}/$$plugin/.core; \ done addman: diff --git a/README.md b/README.md index ce422d53d..3a2134e98 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen. S To install the latest stable version of dokku, you can run the following bootstrapper command: - $ wget -qO- https://raw.github.com/progrium/dokku/v0.3.1/bootstrap.sh | sudo DOKKU_TAG=v0.3.1 bash + $ wget -qO- https://raw.github.com/progrium/dokku/v0.3.2/bootstrap.sh | sudo DOKKU_TAG=v0.3.2 bash ## Documentation diff --git a/contrib/dokku-installer.rb b/contrib/dokku-installer.rb index 6506fc176..9c32b8b87 100755 --- a/contrib/dokku-installer.rb +++ b/contrib/dokku-installer.rb @@ -21,7 +21,7 @@ if ARGV[0] == "onboot" exit end -version = "v0.3.1" +version = "v0.3.2" dokku_root = ENV["DOKKU_ROOT"] || "/home/dokku" admin_key = `cat /root/.ssh/authorized_keys`.split("\n").first hostname = `bash -c '[[ $(dig +short $HOSTNAME) ]] && echo $HOSTNAME || curl icanhazip.com'`.strip diff --git a/contrib/dokku_client.sh b/contrib/dokku_client.sh new file mode 100755 index 000000000..b7fdaafd1 --- /dev/null +++ b/contrib/dokku_client.sh @@ -0,0 +1,32 @@ +if [ -z "$DOKKU_HOST" ] +then + function dokku { + appname=$(git remote -v 2>/dev/null | grep dokku | head -n 1 | cut -f1 -d' ' | cut -f2 -d':' 2>/dev/null) + if [ "$?" != "0" ] + then + donotshift="YES" + fi + if [ "$1" = "create" ] + then + appname=$(echo "print(elfs.GenName())" | lua -l elfs) + if git remote add dokku dokku@$DOKKU_HOST:$appname + then + echo "-----> Dokku remote added at $DOKKU_HOST" + echo "-----> Application name is $appname" + else + echo "! Dokku remote not added! Do you already have a dokku remote?" + return + fi + git push dokku master + else + if [ -z "$donotshift" ] + then + ssh dokku@$DOKKU_HOST $* + exit + fi + verb=$1 + shift + ssh dokku@$DOKKU_HOST "$verb" "$appname" $@ + fi + } +fi diff --git a/docs/index.md b/docs/index.md index 73fe4e06e..96d368336 100644 --- a/docs/index.md +++ b/docs/index.md @@ -12,7 +12,7 @@ Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen. - [Remote commands](http://progrium.viewdocs.io/dokku/remote-commands) - [Plugins](http://progrium.viewdocs.io/dokku/plugins) - [Configuration management](http://progrium.viewdocs.io/dokku/configuration-management) -- [TLS/SPDY support](http://progrium.viewdocs.io/dokku/tls-spdy-support) +- [Nginx Configuration](http://progrium.viewdocs.io/dokku/nginx) - [DNS](http://progrium.viewdocs.io/dokku/dns) ## Things this project won't do diff --git a/docs/installation.md b/docs/installation.md index 92f20125e..301c9d760 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -11,7 +11,7 @@ Ubuntu 14.04 x64 x64. Ideally have a domain ready to point to your host. It's de To install the latest stable version of dokku, you can run the following bootstrapper command: ```bash -wget -qO- https://raw.github.com/progrium/dokku/v0.3.1/bootstrap.sh | sudo DOKKU_TAG=v0.3.1 bash +wget -qO- https://raw.github.com/progrium/dokku/v0.3.2/bootstrap.sh | sudo DOKKU_TAG=v0.3.2 bash ``` ## Configuring diff --git a/docs/tls-spdy-support.md b/docs/nginx.md similarity index 59% rename from docs/tls-spdy-support.md rename to docs/nginx.md index 80f472421..e3bb8dadf 100644 --- a/docs/tls-spdy-support.md +++ b/docs/nginx.md @@ -1,14 +1,18 @@ -# TLS/SPDY support +# Nginx + +Dokku uses nginx as it's server for routing requests to specific applications. + +## TLS/SPDY support Dokku provides easy TLS/SPDY support out of the box. This can be done app-by-app or for all subdomains at once. Note that whenever TLS support is enabled SPDY is also enabled. -## Per App +### Per App To enable TLS connection to to one of your applications, copy or symlink the `.crt`/`.pem` and `.key` files into the application's `/home/dokku/:app/tls` folder (create this folder if it doesn't exist) as `server.crt` and `server.key` respectively. Redeployment of the application will be needed to apply TLS configuration. Once it is redeployed, the application will be accessible by `https://` (redirection from `http://` is applied as well). -## All Subdomains +### All Subdomains To enable TLS connections for all your applications at once you will need a wildcard TLS certificate. @@ -23,8 +27,52 @@ The nginx configuration will need to be reloaded in order for the updated TLS co **Note**: TLS will not be enabled unless the application's VHOST matches the certificate's name. (i.e. if you have a cert for *.example.com TLS won't be enabled for something.example.org or example.net) -## HSTS Header +### HSTS Header The [HSTS header](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) is an HTTP header that can inform browsers that all requests to a given site should be made via HTTPS. dokku does not, by default, enable this header. It is thus left up to you, the user, to enable it for your site. Beware that if you enable the header and a subsequent deploy of your application results in an HTTP deploy (for whatever reason), the way the header works means that a browser will not attempt to request the HTTP version of your site if the HTTPS version fails. + +### Importing ssl certificates + +You can import ssl certificates via tarball using the following command: + +``` bash +dokku nginx:import-ssl myapp < archive-of-certs.tar +``` + +This archive should is expanded via `tar xvf`. It should contain `server.crt` and `server.key`. + +## Disabling VHOSTS + +If desired, it is possible to disable vhosts by setting the `NO_VHOST` environment variable: + +```bash +dokku config:set myapp NO_VHOST=1 +``` + +On subsequent deploys, the nginx virtualhost will be discarded. This is useful when deploying internal-facing services that should not be publicly routeable. + +## Customizing hostnames + +Applications typically have the following structure for their hostname: + +``` +scheme://subdomain.domain.tld +``` + +The `subdomain` is inferred from the pushed application name, while the `domain` is set during initial configuration in the `$DOKKU_ROOT/VHOST` file. + +You can optionally override this in a plugin by implementing the `nginx-hostname` pluginhook. For example, you can reverse the subdomain with the following sample `nginx-hostname` pluginhook: + +```bash +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +APP="$1"; SUBDOMAIN="$2"; VHOST="$3" + +NEW_SUBDOMAIN=`echo $SUBDOMAIN | rev` +echo "$NEW_SUBDOMAIN.$VHOST" +``` + +If the `nginx-hostname` has no output, the normal hostname algorithm will be executed. diff --git a/docs/plugins.md b/docs/plugins.md index c9207f96b..c67a780cc 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -28,125 +28,190 @@ If you create your own plugin: 3. edit this page and add a link to it below! 4. subscribe to the [dokku development blog](http://progrium.com) to be notified about API changes and releases +### Sample plugin + +The below plugin is a dummy `dokku hello` plugin. If your plugin exposes commands, this is a good template for your `commands` file: + +```bash +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +case "$1" in + hello) + [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 + [[ ! -d "$DOKKU_ROOT/$APP" ]] && echo "App $APP does not exist" && exit 1 + APP="$2"; + + echo "Hello $APP" + ;; + + hello:world) + echo "Hello world" + ;; + + help) + cat && cat< Says "Hello " + hello:world Says "Hello world" +EOF + ;; + + *) + exit $DOKKU_NOT_IMPLEMENTED_EXIT + ;; + +esac +``` + +A few notes: + +- You should always support `DOKKU_TRACE` as specified on the 2nd line of the plugin. +- If your command requires that an application exists, ensure you check for it's existence in the manner prescribed above. +- A `help` command is required, though it is allowed to be empty. +- Commands *should* be namespaced. +- As of 0.3.3, a catch-all should be implemented which exits with a `DOKKU_NOT_IMPLEMENTED_EXIT` code. This allows dokku to output a `command not found` message. + ## Community plugins Note: The following plugins have been supplied by our community and may not have been tested by dokku maintainers. -[Kloadut]: https://github.com/Kloadut -[jeffutter]: https://github.com/jeffutter -[jezdez]: https://github.com/jezdez -[blag]: https://github.com/blag -[luxifer]: https://github.com/luxifer -[stuartpb]: https://github.com/stuartpb -[hughfletcher]: https://github.com/hughfletcher -[Aomitayo]: https://github.com/Aomitayo -[jlachowski]: https://github.com/jlachowski -[apmorton]: https://github.com/apmorton -[statianzo]: https://github.com/statianzo -[sehrope]: https://github.com/sehrope -[wmluke]: https://github.com/wmluke -[krisrang]: https://github.com/krisrang -[scottatron]: https://github.com/scottatron -[pauldub]: https://github.com/pauldub -[dyson]: https://github.com/dyson -[musicglue]: https://github.com/musicglue -[motin]: https://github.com/motin -[neam]: https://github.com/neam -[cedricziel]: https://github.com/cedricziel -[pnegahdar]: https://github.com/pnegahdar -[fgrehm]: https://github.com/fgrehm -[alexanderbeletsky]: https://github.com/alexanderbeletsky -[thrashr888]: https://github.com/thrashr888 -[robv]: https://github.com/robv -[rlaneve]: https://github.com/rlaneve -[cef]: https://github.com/cef +[agco-adm]: https://github.com/agco-adm +[ademuk]: https://github.com/ademuk [alex-sherwin]: https://github.com/alex-sherwin +[alexanderbeletsky]: https://github.com/alexanderbeletsky +[Aomitayo]: https://github.com/Aomitayo +[apmorton]: https://github.com/apmorton +[blag]: https://github.com/blag +[cameron-martin]: https://github.com/cameron-martin +[cedricziel]: https://github.com/cedricziel +[cef]: https://github.com/cef +[darkpixel]: https://github.com/darkpixel +[dyson]: https://github.com/dyson [F4-Group]: https://github.com/F4-Group [fermuch]: https://github.com/fermuch -[Zenedith]: https://github.com/Zenedith +[fgrehm]: https://github.com/fgrehm +[gdi2290]: https://github.com/gdi2290 [heichblatt]: https://github.com/heichblatt -[michaelshobbs]: https://github.com/michaelshobbs +[hughfletcher]: https://github.com/hughfletcher [iskandar]: https://github.com/iskandar -[mikexstudios]: https://github.com/mikexstudios -[cameron-martin]: https://github.com/cameron-martin +[jeffutter]: https://github.com/jeffutter +[jezdez]: https://github.com/jezdez +[jlachowski]: https://github.com/jlachowski +[krisrang]: https://github.com/krisrang +[Kloadut]: https://github.com/Kloadut +[luxifer]: https://github.com/luxifer +[mlebkowski]: https://github.com/mlebkowski [matto1990]: https://github.com/matto1990 +[michaelshobbs]: https://github.com/michaelshobbs +[mikecsh]: https://github.com/mikecsh +[mikexstudios]: https://github.com/mikexstudios +[motin]: https://github.com/motin +[musicglue]: https://github.com/musicglue +[neam]: https://github.com/neam +[nornagon]: https://github.com/nornagon [ohardy]: https://github.com/ohardy -[agco-adm]: https://github.com/agco-adm +[pauldub]: https://github.com/pauldub +[pnegahdar]: https://github.com/pnegahdar +[RaceHub]: https://github.com/racehub +[rlaneve]: https://github.com/rlaneve +[robv]: https://github.com/robv +[scottatron]: https://github.com/scottatron +[sehrope]: https://github.com/sehrope +[statianzo]: https://github.com/statianzo +[stuartpb]: https://github.com/stuartpb +[thrashr888]: https://github.com/thrashr888 +[wmluke]: https://github.com/wmluke +[Zenedith]: https://github.com/Zenedith ### Datastores -| Plugin | Author | Compatibility | -| --- | --- | --- | -| [CouchDB](https://github.com/racehub/dokku-couchdb-plugin) | [RaceHub](https://github.com/racehub) | Compatible with 0.2.0 | -| [MariaDB](https://github.com/Kloadut/dokku-md-plugin) | [Kloadut][] | Compatible with 0.2.0 | -| [MariaDB (single container)](https://github.com/ohardy/dokku-mariadb) | [ohardy][] | Compatible with 0.2.0 | -| [MongoDB (single container)](https://github.com/jeffutter/dokku-mongodb-plugin) | [jeffutter][] | | -| [PostgreSQL](https://github.com/Kloadut/dokku-pg-plugin) | [Kloadut][] | Compatible with 0.2.0 | -| [PostgreSQL (single container)](https://github.com/jeffutter/dokku-postgresql-plugin) | [jeffutter][] | This plugin creates a single postgresql container that all your apps can use. Thus only one instance of postgresql running (good for servers without a ton of memory). | -| [PostgreSQL](https://github.com/jezdez/dokku-postgres-plugin) | [jezdez][] | Compatible with 0.2.0 | -| [PostgreSQL (single container)](https://github.com/ohardy/dokku-psql) | [ohardy][] | Compatible with 0.2.0 | -| [PostGIS](https://github.com/fermuch/dokku-pg-plugin) | [fermuch][] | | -| [Redis](https://github.com/jezdez/dokku-redis-plugin) | [jezdez][] | Requires https://github.com/rlaneve/dokku-link; compatible with 0.2.0 | -| [Redis](https://github.com/luxifer/dokku-redis-plugin) | [luxifer][] | | -| [Redis (single container)](https://github.com/ohardy/dokku-redis) | [ohardy][] | Compatible with 0.2.0 | -| [RethinkDB](https://github.com/stuartpb/dokku-rethinkdb-plugin) | [stuartpb][] | 2014-02-22: targeting dokku @ [latest][217d00a]; will fail with Dokku earlier than [28de3ec][]. | -| [RiakCS (single container)](https://github.com/jeffutter/dokku-riakcs-plugin) | [jeffutter][] | Incompatible with 0.2.0 (checked at [dccee02][]) | -| [MySQL](https://github.com/hughfletcher/dokku-mysql-plugin) | [hughfletcher][] | | -| [Memcached](https://github.com/jezdez/dokku-memcached-plugin) | [jezdez][] | Compatible with 0.2.0 | -| [Neo4j](https://github.com/Aomitayo/dokku-neo4j-plugin) | [Aomitayo][] | | -| [RabbitMQ](https://github.com/jlachowski/dokku-rabbitmq-plugin) | [jlachowski][] | IP & PORT available directly in linked app container env variables (requires link plugin)| -| [RabbitMQ (single container)](https://github.com/jlachowski/dokku-rabbitmq-single-plugin) | [jlachowski][] | IP & PORT available directly in linked app container env variables (requires link plugin)| -| [Postgresql](https://github.com/jlachowski/dokku-pg-plugin) | [jlachowski][] | IP & PORT available directly in linked app container env variables (requires link plugin)| -| [Memcached](https://github.com/jlachowski/dokku-memcached-plugin) | [jlachowski][] | IP & PORT available directly in linked app container env variables (requires link plugin)| -| [Varnish](https://github.com/Zenedith/dokku-varnish-plugin) | [Zenedith][] | Varnish cache between nginx and application with base configuration| +#### Relational + +| Plugin | Author | Compatibility | +| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- | +| [MariaDB](https://github.com/Kloadut/dokku-md-plugin) | [Kloadut][] | Compatible with 0.2.0 | +| [MariaDB (single container)](https://github.com/ohardy/dokku-mariadb) | [ohardy][] | Compatible with 0.2.0 | +| [MySQL](https://github.com/hughfletcher/dokku-mysql-plugin) | [hughfletcher][] | | +| [PostgreSQL](https://github.com/Kloadut/dokku-pg-plugin) | [Kloadut][] | Compatible with 0.2.0 | +| [PostgreSQL](https://github.com/jezdez/dokku-postgres-plugin) | [jezdez][] | Compatible with 0.2.0 | +| [PostgreSQL](https://github.com/jlachowski/dokku-pg-plugin) | [jlachowski][] | IP & PORT available directly in linked app container env variables (requires link plugin)| +| [PostgreSQL (single container)](https://github.com/jeffutter/dokku-postgresql-plugin) | [jeffutter][] | This plugin creates a single postgresql container that all your apps can use. Thus only one instance of postgresql running (good for servers without a ton of memory). | +| [PostgreSQL (single container)](https://github.com/ohardy/dokku-psql) | [ohardy][] | Compatible with 0.2.0 | +| [PostGIS](https://github.com/fermuch/dokku-pg-plugin) | [fermuch][] | | + +#### Caching + +| Plugin | Author | Compatibility | +| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- | +| [Memcached](https://github.com/jezdez/dokku-memcached-plugin) | [jezdez][] | Compatible with 0.2.0 | +| [Memcached](https://github.com/jlachowski/dokku-memcached-plugin) | [jlachowski][] | IP & PORT available directly in linked app container env variables (requires link plugin)| +| [Redis](https://github.com/jezdez/dokku-redis-plugin) | [jezdez][] | Requires https://github.com/rlaneve/dokku-link; compatible with 0.2.0 | +| [Redis](https://github.com/luxifer/dokku-redis-plugin) | [luxifer][] | | +| [Redis (single container)](https://github.com/ohardy/dokku-redis) | [ohardy][] | Compatible with 0.2.0 | +| [Varnish](https://github.com/Zenedith/dokku-varnish-plugin) | [Zenedith][] | Varnish cache between nginx and application with base configuration| + +#### Queuing + +| Plugin | Author | Compatibility | +| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- | +| [RabbitMQ](https://github.com/jlachowski/dokku-rabbitmq-plugin) | [jlachowski][] | IP & PORT available directly in linked app container env variables (requires link plugin)| +| [RabbitMQ (single container)](https://github.com/jlachowski/dokku-rabbitmq-single-plugin) | [jlachowski][] | IP & PORT available directly in linked app container env variables (requires link plugin)| + +#### Other + +| Plugin | Author | Compatibility | +| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- | +| [CouchDB](https://github.com/racehub/dokku-couchdb-plugin) | [RaceHub][] | Compatible with 0.2.0 | +| [MongoDB (single container)](https://github.com/jeffutter/dokku-mongodb-plugin) | [jeffutter][] | | +| [RethinkDB](https://github.com/stuartpb/dokku-rethinkdb-plugin) | [stuartpb][] | 2014-02-22: targeting dokku @ [latest][217d00a]; will fail with Dokku earlier than [28de3ec][]. | +| [RiakCS (single container)](https://github.com/jeffutter/dokku-riakcs-plugin) | [jeffutter][] | Incompatible with 0.2.0 (checked at [dccee02][]) | +| [Neo4j](https://github.com/Aomitayo/dokku-neo4j-plugin) | [Aomitayo][] | | [dccee02]: https://github.com/jeffutter/dokku-riakcs-plugin/commit/dccee02702e7001851917b7814e78a99148fb709 ### Process Managers -| Plugin | Author | Compatibility | -| --- | --- | --- | -| [Circus](https://github.com/apmorton/dokku-circus) | [apmorton][] | | -| [Shoreman ](https://github.com/statianzo/dokku-shoreman) | [statianzo][] | Compatible with 0.2.0 | -| [Supervisord](https://github.com/statianzo/dokku-supervisord) | [statianzo][] | Compatible with 0.2.0 | -| [Logging Supervisord](https://github.com/sehrope/dokku-logging-supervisord) | [sehrope][] | Works with dokku @ [c77cbf1][] - no 0.2.0 compatibility | -| [Forego](https://github.com/iskandar/dokku-forego) | [iskandar][] | Compatible with 0.2.x | +| Plugin | Author | Compatibility | +| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- | +| [Circus](https://github.com/apmorton/dokku-circus) | [apmorton][] | | +| [Shoreman ](https://github.com/statianzo/dokku-shoreman) | [statianzo][] | Compatible with 0.2.0 | +| [Supervisord](https://github.com/statianzo/dokku-supervisord) | [statianzo][] | Compatible with 0.2.0 | +| [Logging Supervisord](https://github.com/sehrope/dokku-logging-supervisord) | [sehrope][] | Works with dokku @ [c77cbf1][] - no 0.2.0 compatibility | +| [Forego](https://github.com/iskandar/dokku-forego) | [iskandar][] | Compatible with 0.2.x | [c77cbf1]: https://github.com/progrium/dokku/commit/c77cbf1d3ae07f0eafb85082ed7edcae9e836147 [28de3ec]: https://github.com/progrium/dokku/commit/28de3ecaa3231a223f83fd8d03f373308673bc40 ### Dokku Features -| Plugin | Author | Compatibility | -| --- | --- | --- | -| [Custom Domains](https://github.com/neam/dokku-custom-domains) | [motin][] | Compatible with 0.2.* and master | -| [Multiple Domains](https://github.com/wmluke/dokku-domains-plugin)4 | [wmluke][] | Compatible with 0.2.0 . | -| [git rev-parse HEAD in env](https://github.com/nornagon/dokku-git-rev) | [nornagon](https://github.com/nornagon) | Compatible with 0.2.0 | -| [Rebuild application](https://github.com/scottatron/dokku-rebuild) | [scottatron][] | Compatible with 0.2.x | -| [Multi-Buildpack](https://github.com/pauldub/dokku-multi-buildpack) | [pauldub][] | | -| [Docker Options](https://github.com/dyson/dokku-docker-options) | [dyson][] | Requires dokku >= [c77cbf1][] | -| [Persistent Storage](https://github.com/dyson/dokku-persistent-storage) | [dyson][] | Requires dokku >= [c77cbf1][] | -| [Volume (persistent storage)](https://github.com/ohardy/dokku-volume) | [ohardy][] | Compatible with 0.2.0 | -| [user-env-compile](https://github.com/musicglue/dokku-user-env-compile)1 | [musicglue][] | Compatible with dokku master branch | -| [user-env-compile](https://github.com/motin/dokku-user-env-compile)1 | [motin][] | Compatible with 0.2.1 | -| [registry](https://github.com/agco-adm/dokku-registry)5 | [agco-adm](https://github.com/agco-adm) | | -| [SSH Deployment Keys](https://github.com/cedricziel/dokku-deployment-keys)2 | [cedricziel][] | 2014-01-17: compatible with upstream/master | -| [SSH Hostkeys](https://github.com/cedricziel/dokku-hostkeys-plugin)3 | [cedricziel][] | 2014-01-17: compatible with upstream/master | -| [Link Containers](https://github.com/rlaneve/dokku-link) | [rlaneve][] | Requires dokku >= [c77cbf1][] | -| [Host Port binding](https://github.com/stuartpb/dokku-bind-port) | [stuartpb][] | Requires dokku >= [c77cbf1][]. 2014-02-17: [a043e98][] targeting dokku @ [latest][217d00a] | -| [Docker name](https://github.com/alex-sherwin/dokku-name) | [alex-sherwin][] | Requires dokku >= [c77cbf1][] | -| [No VHOST](https://github.com/alex-sherwin/dokku-novhost) | [alex-sherwin][] | Requires dokku >= [c77cbf1][] | -| [Docker Direct](https://github.com/heichblatt/dokku-docker-direct) | [heichblatt][] | | -| [Ports](https://github.com/heichblatt/dokku-ports) | [heichblatt][] | | -| [Debug](https://github.com/heichblatt/dokku-debug) | [heichblatt][] | | -| [Pre-Deploy Tasks](https://github.com/michaelshobbs/dokku-app-predeploy-tasks) | [michaelshobbs][] | | -| [Hostname](https://github.com/michaelshobbs/dokku-hostname) | [michaelshobbs][] | | -| [VHOSTS Custom Configuration](https://github.com/neam/dokku-nginx-vhosts-custom-configuration) | [motin][] | Compatible with 0.3.1+ | -| [Multiple domains and per-app custom nginx.conf](https://github.com/mikexstudios/dokku-nginx-alt) | [mikexstudios][] | Works with v0.2.3 | -| [Supply env vars to buildpacks](https://github.com/cameron-martin/dokku-build-env)| [cameron-martin][] | Works with v0.2.3 | -| [HTTP Auth Secure Apps](https://github.com/matto1990/dokku-secure-apps) | [matto1990][] | Works with v0.2.3 | -| [app-url](https://github.com/mikecsh/dokku-app-url) | [mikecsh](https://github.com/mikecsh) | Works with 0.2.0 | -| [dokku-registry](https://github.com/agco-adm/dokku-registry) | [agco-adm][] | | +| Plugin | Author | Compatibility | +| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- | +| [app-url](https://github.com/mikecsh/dokku-app-url) | [mikecsh][] | Works with 0.2.0 | +| [Custom Domains](https://github.com/neam/dokku-custom-domains) | [motin][] | Compatible with 0.2.* | +| [Debug](https://github.com/heichblatt/dokku-debug) | [heichblatt][] | | +| [Docker Direct](https://github.com/heichblatt/dokku-docker-direct) | [heichblatt][] | | +| [Docker Options](https://github.com/dyson/dokku-docker-options) | [dyson][] | dokku >= [c77cbf1][] | +| [Dokku Name](https://github.com/alex-sherwin/dokku-name) | [alex-sherwin][] | dokku >= [c77cbf1][] | +| [Dokku Registry](https://github.com/agco-adm/dokku-registry) | [agco-adm][] | | +| [git rev-parse HEAD in env](https://github.com/nornagon/dokku-git-rev) | [nornagon][] | Compatible with 0.2.0 | +| [HTTP Auth Secure Apps](https://github.com/matto1990/dokku-secure-apps) | [matto1990][] | Works with v0.2.3 | +| [Host Port binding](https://github.com/stuartpb/dokku-bind-port) | [stuartpb][] | dokku >= [c77cbf1][]. 2014-02-17: [a043e98][] targeting dokku @ [latest][217d00a] | +| [Hostname](https://github.com/michaelshobbs/dokku-hostname) | [michaelshobbs][] | | +| [Link Containers](https://github.com/rlaneve/dokku-link) | [rlaneve][] | dokku >= [c77cbf1][] | +| [Multi-Buildpack](https://github.com/pauldub/dokku-multi-buildpack) | [pauldub][] | | +| [Multiple Domains](https://github.com/wmluke/dokku-domains-plugin)4 | [wmluke][] | Compatible with 0.2.0 | +| [Nginx-Alt](https://github.com/mikexstudios/dokku-nginx-alt) | [mikexstudios][] | Works with v0.2.3 | +| [Persistent Storage](https://github.com/dyson/dokku-persistent-storage) | [dyson][] | Requires dokku >= [c77cbf1][] | +| [Ports](https://github.com/heichblatt/dokku-ports) | [heichblatt][] | | +| [Pre-Deploy Tasks](https://github.com/michaelshobbs/dokku-app-predeploy-tasks) | [michaelshobbs][] | | +| [Rebuild application](https://github.com/scottatron/dokku-rebuild) | [scottatron][] | Compatible with 0.2.x | +| [SSH Deployment Keys](https://github.com/cedricziel/dokku-deployment-keys)2 | [cedricziel][] | 2014-01-17: compatible with upstream/master | +| [SSH Hostkeys](https://github.com/cedricziel/dokku-hostkeys-plugin)3 | [cedricziel][] | 2014-01-17: compatible with upstream/master | +| [Supply env vars to buildpacks](https://github.com/cameron-martin/dokku-build-env) | [cameron-martin][] | Works with v0.2.3 | +| [user-env-compile](https://github.com/musicglue/dokku-user-env-compile)1 | [musicglue][] | Compatible with dokku master branch | +| [user-env-compile](https://github.com/motin/dokku-user-env-compile)1 | [motin][] | Compatible with 0.2.1 | +| [VHOSTS Custom Configuration](https://github.com/neam/dokku-nginx-vhosts-custom-configuration) | [motin][] | Compatible with 0.3.1 | +| [Volume (persistent storage)](https://github.com/ohardy/dokku-volume) | [ohardy][] | Compatible with 0.2.0 | [8fca220]: https://github.com/progrium/dokku/commit/8fca2204edb0017796d6915ca9157c05b1238e28 [217d00a]: https://github.com/progrium/dokku/commit/217d00a1bc47a7e24d8847617bb08a1633025fc7 @@ -165,21 +230,21 @@ Note: The following plugins have been supplied by our community and may not have ### Other Add-ons -| Plugin | Author | Compatibility | -| --- | --- | --- | -| [Node](https://github.com/pnegahdar/dokku-node) | [pnegahdar](https://github.com/pnegahdar) | | -| [Node](https://github.com/ademuk/dokku-nodejs) | [ademuk](https://github.com/ademuk) | | -| [Chef cookbooks](https://github.com/fgrehm/chef-dokku) | [fgrehm][] | | -| [Bower install](https://github.com/alexanderbeletsky/dokku-bower-install) | [alexanderbeletsky][] | | -| [Bower/Grunt](https://github.com/thrashr888/dokku-bower-grunt-build-plugin) | [thrashr888][] | | -| [Bower/Gulp](https://github.com/gdi2290/dokku-bower-gulp-build-plugin) | [gdi2290](https://github.com/gdi2290) | | -| [Elasticsearch](https://github.com/robv/dokku-elasticsearch) | [robv][] | | -| [Elasticsearch](https://github.com/jezdez/dokku-elasticsearch-plugin) | [jezdez][] | Compatible with 0.2.0 | -| [Elasticsearch](https://github.com/blag/dokku-elasticsearch-plugin)1 | [blag][] | Compatible with 0.2.0 | -| [HipChat Notifications](https://github.com/cef/dokku-hipchat) | [cef][] | | -| [Graphite/statsd] (https://github.com/jlachowski/dokku-graphite-plugin) | [jlachowski][] | | -| [APT](https://github.com/F4-Group/dokku-apt) | [F4-Group][] | | -| [User ACL](https://github.com/mlebkowski/dokku-acl) | [Maciej Łebkowski](https://github.com/mlebkowski) | | -| [PrimeCache](https://github.com/darkpixel/dokku-prime-cache) | [darkpixel](https://github.com/darkpixel/) | | +| Plugin | Author | Compatibility | +| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- | +| [Node](https://github.com/pnegahdar/dokku-node) | [pnegahdar][] | | +| [Node](https://github.com/ademuk/dokku-nodejs) | [ademuk][] | | +| [Chef cookbooks](https://github.com/fgrehm/chef-dokku) | [fgrehm][] | | +| [Bower install](https://github.com/alexanderbeletsky/dokku-bower-install) | [alexanderbeletsky][] | | +| [Bower/Grunt](https://github.com/thrashr888/dokku-bower-grunt-build-plugin) | [thrashr888][] | | +| [Bower/Gulp](https://github.com/gdi2290/dokku-bower-gulp-build-plugin) | [gdi2290][] | | +| [Elasticsearch](https://github.com/robv/dokku-elasticsearch) | [robv][] | | +| [Elasticsearch](https://github.com/jezdez/dokku-elasticsearch-plugin) | [jezdez][] | Compatible with 0.2.0 | +| [Elasticsearch](https://github.com/blag/dokku-elasticsearch-plugin)1 | [blag][] | Compatible with 0.2.0 | +| [HipChat Notifications](https://github.com/cef/dokku-hipchat) | [cef][] | | +| [Graphite/statsd](https://github.com/jlachowski/dokku-graphite-plugin) | [jlachowski][] | | +| [APT](https://github.com/F4-Group/dokku-apt) | [F4-Group][] | | +| [User ACL](https://github.com/mlebkowski/dokku-acl) | [Maciej Łebkowski][] | | +| [PrimeCache](https://github.com/darkpixel/dokku-prime-cache) | [darkpixel][] | | 1 Forked from [jezdez/dokku-elasticsearch-plugin](https://github.com/jezdez/dokku-elasticsearch-plugin): uses Elasticsearch 1.2 (instead of 0.90), doesn't depend on dokku-link, runs as elasticsearch user instead of root, and turns off multicast autodiscovery for use in a VPS environment. diff --git a/docs/template.html b/docs/template.html index a66d9b40b..e0540238a 100644 --- a/docs/template.html +++ b/docs/template.html @@ -54,8 +54,15 @@ list-style-position: outside; padding-left: 20px; } + th:nth-of-type(1) { + width: 230px; + } + th:nth-of-type(2) { + width: 140px; + } tr, td { - text-align: center; + line-height: 24px; + text-align: left; } #gistbody h1:first-child { border-bottom: 1px solid #dadada; diff --git a/dokku b/dokku index 2f0ec3b93..c8c5839e6 100755 --- a/dokku +++ b/dokku @@ -1,14 +1,20 @@ #!/usr/bin/env bash set -eo pipefail + +export DOKKU_DISTRO=${DOKKU_DISTRO:="ubuntu"} +export DOKKU_IMAGE=${DOKKU_IMAGE:="progrium/buildstep"} export DOKKU_ROOT=${DOKKU_ROOT:="/home/dokku"} + export PLUGIN_PATH=${PLUGIN_PATH:="/var/lib/dokku/plugins"} +export DOKKU_NOT_IMPLEMENTED_EXIT=10 +export DOKKU_VALID_EXIT=0 [[ -f $DOKKU_ROOT/dokkurc ]] && source $DOKKU_ROOT/dokkurc [[ $DOKKU_TRACE ]] && set -x -if [[ $(id -un) != "dokku" && $1 != plugins-install* ]]; then - sudo -u dokku -H $0 "$@" +if [[ $(id -un) != "dokku" && $1 != plugins-install* && $1 != "plugins-update" ]]; then + sudo -u dokku -E -H $0 "$@" exit fi @@ -36,7 +42,7 @@ case "$1" in build) APP="$2"; IMAGE="dokku/$APP"; CACHE_DIR="$DOKKU_ROOT/$APP/cache" - id=$(cat | docker run -i -a stdin progrium/buildstep /bin/bash -c "mkdir -p /app && tar -xC /app") + id=$(cat | docker run -i -a stdin $DOKKU_DISTRO /bin/bash -c "mkdir -p /app && tar -xC /app") test $(docker wait $id) -eq 0 docker commit $id $IMAGE > /dev/null [[ -d $CACHE_DIR ]] || mkdir $CACHE_DIR @@ -130,6 +136,10 @@ case "$1" in pluginhook dependencies ;; + plugins-update) + pluginhook update + ;; + # temporary hack for https://github.com/progrium/dokku/issues/82 deploy:all) for app in $(ls -d $DOKKU_ROOT/*/CONTAINER); do @@ -139,17 +149,36 @@ case "$1" in ;; help|'') + echo "Usage: dokku COMMAND [command-specific-options]" + echo "" + cat<" +Create a new app. +.TP +.BI apps:destroy " " +Permanantly destroy an app. +.TP +.B apps +List your apps. +.TP .BI backup:import " file" Import dokku config files. .TP @@ -33,18 +42,22 @@ Set one or more config vars for an app. .BI config:unset " KEY1" \fR\ (KEY2\ \.\.\.) Remove one or more config vars from an app. .TP -.BI delete " " -Delete an application. -.TP .B help Print the list of commands. .TP .B logs \ \fI \fR[\fI-t\fR] Show the last logs for an application (-t follows) .TP +.BI nginx:import-ssl " " +Imports a tarball from stdin which should contain +server\.crt and server\.key +.TP .B plugins-install Install active plugins. .TP +.B plugins-update +Update active plugins. +.TP .B plugins Print active plugins. .TP diff --git a/plugins/00_dokku-standard/commands b/plugins/00_dokku-standard/commands index 8e4c36cb9..e30fb6eb3 100755 --- a/plugins/00_dokku-standard/commands +++ b/plugins/00_dokku-standard/commands @@ -8,13 +8,13 @@ case "$1" in logs) if [[ -z $2 ]]; then - echo "Please specify an app to run the command on" - exit 1 + echo "Please specify an app to run the command on" + exit 1 fi APP="$2"; if [[ ! -d "$DOKKU_ROOT/$APP" ]]; then - echo "App $APP does not exist" - exit 1 + echo "App $APP does not exist" + exit 1 fi if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then @@ -55,7 +55,7 @@ case "$1" in if [[ -f "$DOKKU_ROOT/$APP/URL" ]]; then echo $(< "$DOKKU_ROOT/$APP/URL") fi - ;; + ;; version) cat "$DOKKU_ROOT/VERSION" || { @@ -73,4 +73,8 @@ case "$1" in EOF ;; + *) + exit $DOKKU_NOT_IMPLEMENTED_EXIT + ;; + esac diff --git a/plugins/00_dokku-standard/install b/plugins/00_dokku-standard/install index 9625e8fdc..99e3bf41e 100755 --- a/plugins/00_dokku-standard/install +++ b/plugins/00_dokku-standard/install @@ -7,7 +7,9 @@ fi # temporary hack for https://github.com/progrium/dokku/issues/82 # redeploys all apps after a reboot -cat< /etc/init/dokku-redeploy.conf +case "$DOKKU_DISTRO" in + ubuntu) + cat< /etc/init/dokku-redeploy.conf description "Dokku app redeploy service" start on (started docker) @@ -17,3 +19,21 @@ script sudo -i -u dokku /usr/local/bin/dokku deploy:all end script EOF + ;; + + opensuse) + cat< /etc/systemd/system/dokku-redeploy.service +[Unit] +Description=Dokku app redeploy service +After=docker.target + +[Service] +Type=simple +User=dokku +ExecStart=/usr/local/bin/dokku deploy:all + +[Install] +WantedBy=multi-user.target +EOF + ;; +esac diff --git a/plugins/apps/commands b/plugins/apps/commands index 673238045..8cf943943 100755 --- a/plugins/apps/commands +++ b/plugins/apps/commands @@ -64,7 +64,7 @@ case "$1" in pluginhook post-delete $APP ;; - help) + help | apps:help) cat && cat< Create a new app @@ -72,4 +72,8 @@ case "$1" in EOF ;; + *) + exit $DOKKU_NOT_IMPLEMENTED_EXIT + ;; + esac diff --git a/plugins/backup/commands b/plugins/backup/commands index 4c41037fc..959fa3200 100755 --- a/plugins/backup/commands +++ b/plugins/backup/commands @@ -85,11 +85,15 @@ case "$1" in echo "Import complete." ;; - help) + help | backup:help) cat && cat< Display the config vars for an app config:get KEY Display a config value for an app config:set KEY1=VALUE1 [KEY2=VALUE2 ...] Set one or more config vars config:unset KEY1 [KEY2 ...] Unset one or more config vars EOF - ;; + ;; + + *) + exit $DOKKU_NOT_IMPLEMENTED_EXIT + ;; esac diff --git a/plugins/git/commands b/plugins/git/commands index 0b90005e5..9ddbd2855 100755 --- a/plugins/git/commands +++ b/plugins/git/commands @@ -6,7 +6,7 @@ git_archive_all() { TMP_WORK_DIR=$(mktemp -d) chmod 755 $TMP_WORK_DIR unset GIT_DIR GIT_WORK_TREE - git clone $DOKKU_ROOT/$APP $TMP_WORK_DIR &> /dev/null + git clone -q $DOKKU_ROOT/$APP $TMP_WORK_DIR &> /dev/null pushd $TMP_WORK_DIR > /dev/null git config advice.detachedHead false git checkout $REV &> /dev/null @@ -34,6 +34,13 @@ case "$1" in done ;; + git-upload-pack) + APP="$(echo $2 | perl -pe 's/(? Imports a tarball from stdin; should contain server.crt and server.key +EOF + ;; + + *) + exit $DOKKU_NOT_IMPLEMENTED_EXIT + ;; + +esac diff --git a/plugins/nginx-vhosts/dependencies b/plugins/nginx-vhosts/dependencies index 04914f084..dbb5a7325 100755 --- a/plugins/nginx-vhosts/dependencies +++ b/plugins/nginx-vhosts/dependencies @@ -1,8 +1,15 @@ #!/bin/bash set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x -# latest stable NGINX 1.4.x with websocket support -apt-get install -qq -y software-properties-common python-software-properties -add-apt-repository -y ppa:nginx/stable -apt-get update -apt-get install -qq -y nginx dnsutils +case "$DOKKU_DISTRO" in + ubuntu) + apt-get install -qq -y software-properties-common python-software-properties + add-apt-repository -y ppa:nginx/stable + apt-get update + apt-get install -qq -y nginx dnsutils + ;; + + opensuse) + zypper -q in -y nginx bind-utils + ;; +esac diff --git a/plugins/nginx-vhosts/install b/plugins/nginx-vhosts/install index ae5fa5079..afe9e20b0 100755 --- a/plugins/nginx-vhosts/install +++ b/plugins/nginx-vhosts/install @@ -1,12 +1,18 @@ #!/usr/bin/env bash set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x -if ! grep -q dokku-nginx-reload "/etc/sudoers"; then - touch /etc/sudoers.tmp - cp /etc/sudoers /tmp/sudoers.new - echo "%dokku ALL=(ALL)NOPASSWD:/etc/init.d/nginx reload # dokku-nginx-reload" >> /tmp/sudoers.new - EDITOR="cp /tmp/sudoers.new" visudo - rm /tmp/sudoers.new +if [[ ! -f /etc/sudoers.d/dokku-nginx ]]; then + case "$DOKKU_DISTRO" in + ubuntu) + echo "%dokku ALL=(ALL) NOPASSWD:/etc/init.d/nginx reload" >> /etc/sudoers.d/dokku-nginx + ;; + + opensuse) + echo "%dokku ALL=(ALL) NOPASSWD:/sbin/service nginx reload" >> /etc/sudoers.d/dokku-nginx + ;; + esac + + chmod 0440 /etc/sudoers.d/dokku-nginx fi # if dokku.conf has not been created, create it @@ -25,10 +31,19 @@ ssl_prefer_server_ciphers on; #ssl_certificate_key $DOKKU_ROOT/tls/server.key; EOF fi -sed -i 's/# server_names_hash_bucket_size/server_names_hash_bucket_size/' /etc/nginx/nginx.conf + +echo 'server_names_hash_bucket_size 64' >| /etc/nginx/conf.d/server_names_hash_bucket_size.conf if [[ ! -f "$DOKKU_ROOT/VHOST" ]]; then [[ $(dig +short $(< "$DOKKU_ROOT/HOSTNAME")) ]] && cp "$DOKKU_ROOT/HOSTNAME" "$DOKKU_ROOT/VHOST" fi -/etc/init.d/nginx start +case "$DOKKU_DISTRO" in + ubuntu) + /etc/init.d/nginx start + ;; + + opensuse) + /sbin/service nginx start + ;; +esac diff --git a/plugins/nginx-vhosts/post-delete b/plugins/nginx-vhosts/post-delete index 3c0ea3ce5..ab0578794 100755 --- a/plugins/nginx-vhosts/post-delete +++ b/plugins/nginx-vhosts/post-delete @@ -1,4 +1,12 @@ #!/usr/bin/env bash set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x -sudo /etc/init.d/nginx reload > /dev/null +case "$DOKKU_DISTRO" in + ubuntu) + sudo /etc/init.d/nginx reload > /dev/null + ;; + + opensuse) + sudo /sbin/service nginx reload > /dev/null + ;; +esac diff --git a/plugins/nginx-vhosts/post-deploy b/plugins/nginx-vhosts/post-deploy index 19d5f04fc..d1f07ae96 100755 --- a/plugins/nginx-vhosts/post-deploy +++ b/plugins/nginx-vhosts/post-deploy @@ -5,13 +5,24 @@ APP="$1"; PORT="$2" WILDCARD_SSL="$DOKKU_ROOT/tls" SSL="$DOKKU_ROOT/$APP/tls" -if [[ -f "$DOKKU_ROOT/VHOST" ]]; then +set +e +NO_VHOST=$(dokku config:get $APP NO_VHOST) +set -e + +if [[ -z "$NO_VHOST" ]]; then + echo "-----> NO_VHOST config detected" +fi + +if [[ -f "$DOKKU_ROOT/VHOST" && ! -z "$NO_VHOST" ]]; then VHOST=$(< "$DOKKU_ROOT/VHOST") SUBDOMAIN=${APP/%\.${VHOST}/} - if [[ "$APP" == *.* ]] && [[ "$SUBDOMAIN" == "$APP" ]]; then - hostname="${APP/\//-}" - else - hostname="${APP/\//-}.$VHOST" + hostname=$(: | pluginhook nginx-hostname $APP $SUBDOMAIN $VHOST) + if [[ ! -n $hostname ]]; then + if [[ "$APP" == *.* ]] && [[ "$SUBDOMAIN" == "$APP" ]]; then + hostname="${APP/\//-}" + else + hostname="${APP/\//-}.$VHOST" + fi fi if [[ -e "$SSL/server.crt" ]] && [[ -e "$SSL/server.key" ]]; then @@ -26,9 +37,9 @@ EOF SSL_DIRECTIVES="" fi - # ssl based nginx.conf if [[ -n "$SSL_INUSE" ]]; then - cat< $DOKKU_ROOT/$APP/nginx.conf + echo "-----> Creating ssl nginx.conf" + cat< $DOKKU_ROOT/$APP/nginx.conf upstream $APP { server 127.0.0.1:$PORT; } server { listen [::]:80; @@ -61,10 +72,10 @@ $SSL_DIRECTIVES } EOF - echo "https://$hostname" > "$DOKKU_ROOT/$APP/URL" -else -# default nginx.conf - cat< $DOKKU_ROOT/$APP/nginx.conf + echo "https://$hostname" > "$DOKKU_ROOT/$APP/URL" + else + echo "-----> Creating non-ssl nginx.conf" + cat< $DOKKU_ROOT/$APP/nginx.conf upstream $APP { server 127.0.0.1:$PORT; } server { listen [::]:80; @@ -85,10 +96,40 @@ server { } EOF - echo "http://$hostname" > "$DOKKU_ROOT/$APP/URL" + echo "http://$hostname" > "$DOKKU_ROOT/$APP/URL" fi + echo "-----> Running nginx-pre-reload" pluginhook nginx-pre-reload $APP $PORT + echo " Reloading nginx" - sudo /etc/init.d/nginx reload > /dev/null + case "$DOKKU_DISTRO" in + ubuntu) + sudo /etc/init.d/nginx reload > /dev/null + ;; + + opensuse) + sudo /sbin/service nginx reload > /dev/null + ;; + esac +else + if [[ -f "$DOKKU_ROOT/$APP/URL" ]]; then + echo "------> NO_VHOST set, deleting $APP/URL" + rm "$DOKKU_ROOT/$APP/URL" + fi + if [[ -f "$DOKKU_ROOT/$APP/nginx.conf" ]]; then + echo "------> NO_VHOST set, deleting $APP/nginx.conf" + rm "$DOKKU_ROOT/$APP/nginx.conf" + echo "------> NO_VHOST set, reloading nginx after nginx.conf deletion" + case "$DOKKU_DISTRO" in + ubuntu) + sudo /etc/init.d/nginx reload > /dev/null + ;; + + opensuse) + sudo /sbin/service nginx reload > /dev/null + ;; + esac + sudo /etc/init.d/nginx reload > /dev/null + fi fi