Compare commits
248 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3585ee8612 | ||
|
|
5dbb31cf8a | ||
|
|
26d50b0140 | ||
|
|
c2fc3141a9 | ||
|
|
23c25d01ff | ||
|
|
de832c596a | ||
|
|
237dfe2bbd | ||
|
|
49a07e5210 | ||
|
|
a1983e0131 | ||
|
|
95a7a93cb9 | ||
|
|
455033703a | ||
|
|
0470d493ae | ||
|
|
c2858e5fb3 | ||
|
|
f85775b870 | ||
|
|
d50f3cd151 | ||
|
|
9b887b6262 | ||
|
|
f3cc2310da | ||
|
|
ce26004fc8 | ||
|
|
ff07842dc5 | ||
|
|
c389b213b5 | ||
|
|
e1e7fbcc52 | ||
|
|
84c0988fd8 | ||
|
|
9229e1a9a7 | ||
|
|
5f83476811 | ||
|
|
0bd06e70d5 | ||
|
|
c78bf267a3 | ||
|
|
c8c83703ed | ||
|
|
baac2ceda2 | ||
|
|
d465ceb045 | ||
|
|
8ed0193b1d | ||
|
|
1de54d52ac | ||
|
|
e1b5b1aafc | ||
|
|
344d48e01b | ||
|
|
279c49f084 | ||
|
|
2b64fe4666 | ||
|
|
2d109a20c5 | ||
|
|
804c822ace | ||
|
|
7f5c2caed6 | ||
|
|
de29abdab6 | ||
|
|
c250d170cd | ||
|
|
c48fe4e2a9 | ||
|
|
81c5173f5e | ||
|
|
ac04199963 | ||
|
|
a2985e082b | ||
|
|
8c24483fb7 | ||
|
|
cd3ce7de22 | ||
|
|
e28c75e56a | ||
|
|
f13796fa57 | ||
|
|
49d8cc4902 | ||
|
|
b22b04af8e | ||
|
|
39bf2a2100 | ||
|
|
b50df757db | ||
|
|
aaeae0d9cc | ||
|
|
4f6843104c | ||
|
|
bdd0f50dd9 | ||
|
|
77b3725d5b | ||
|
|
6c19414b7a | ||
|
|
b3f44e3f96 | ||
|
|
f705004975 | ||
|
|
39ba53607a | ||
|
|
d17cb43bd3 | ||
|
|
c8bcd67498 | ||
|
|
dcf34eb4d4 | ||
|
|
5a35c9a76c | ||
|
|
b23e5d1cbb | ||
|
|
a11b46058e | ||
|
|
b3041661b3 | ||
|
|
66833f12a0 | ||
|
|
18d6e1be3b | ||
|
|
6674d7823e | ||
|
|
f3959c38b0 | ||
|
|
8d0fbc0d1b | ||
|
|
9878c0b6fa | ||
|
|
79cc07d71b | ||
|
|
9d5d147a9c | ||
|
|
82475ab70d | ||
|
|
cc2c7be96e | ||
|
|
68e3f93b08 | ||
|
|
9b3d722eec | ||
|
|
994c54f6b1 | ||
|
|
695c0c2edf | ||
|
|
e155461eaa | ||
|
|
99a64e6f86 | ||
|
|
1f09ed3da4 | ||
|
|
8d2f465318 | ||
|
|
c793dca61a | ||
|
|
7d31c4fc1e | ||
|
|
b39039f231 | ||
|
|
56d8003818 | ||
|
|
9177036416 | ||
|
|
c885d23fe4 | ||
|
|
325bbdeda1 | ||
|
|
d079121b32 | ||
|
|
7f2cbed0c2 | ||
|
|
e9f7ef5d6e | ||
|
|
e76bc37988 | ||
|
|
0d15020dac | ||
|
|
8f3e194141 | ||
|
|
4accec2ac9 | ||
|
|
0a9db4174b | ||
|
|
6d3028271e | ||
|
|
7545d837f3 | ||
|
|
51935d4510 | ||
|
|
3adbdd0326 | ||
|
|
3550486070 | ||
|
|
f3dc6198f7 | ||
|
|
f9e636ddb1 | ||
|
|
4e75657638 | ||
|
|
91d2ed8449 | ||
|
|
e47121446d | ||
|
|
309a9740fb | ||
|
|
63d1963f19 | ||
|
|
3fb2ed6462 | ||
|
|
1781536dbe | ||
|
|
64040d1494 | ||
|
|
7d07cf03d4 | ||
|
|
4ce9f210b3 | ||
|
|
5d08b56e3f | ||
|
|
0e631e7254 | ||
|
|
689d1a78a7 | ||
|
|
5d1d0343c0 | ||
|
|
663f66e81a | ||
|
|
425b343340 | ||
|
|
b89b7fa62b | ||
|
|
12cd913130 | ||
|
|
ad5583190c | ||
|
|
e30a253522 | ||
|
|
eef75069e1 | ||
|
|
c372f4c054 | ||
|
|
e680a70d1a | ||
|
|
e653e1ea58 | ||
|
|
2550da65db | ||
|
|
3f9d770a79 | ||
|
|
ef3480703a | ||
|
|
1606276d7e | ||
|
|
a95fb1169a | ||
|
|
359d5ce2fd | ||
|
|
f58f3690c3 | ||
|
|
89b96a06ec | ||
|
|
e391dfbccc | ||
|
|
f80ecaf22a | ||
|
|
b81ec41e93 | ||
|
|
917e26ad82 | ||
|
|
d665dbacb9 | ||
|
|
d617d12c33 | ||
|
|
9010bc8fa4 | ||
|
|
1424df5697 | ||
|
|
0403c70ed4 | ||
|
|
8174faedc9 | ||
|
|
9b4434dd40 | ||
|
|
dfafb7d0c7 | ||
|
|
d7ee5cb7bc | ||
|
|
f36a0df86b | ||
|
|
b6c34cbf95 | ||
|
|
36f087f44a | ||
|
|
2e842da0eb | ||
|
|
bba7ee658e | ||
|
|
a8b4efb3cf | ||
|
|
fc85105a86 | ||
|
|
0048a631c6 | ||
|
|
f4102975f9 | ||
|
|
8df4404d93 | ||
|
|
d88de2b97c | ||
|
|
98616f50dc | ||
|
|
5c396da0df | ||
|
|
8a117aa59f | ||
|
|
d27b9b9705 | ||
|
|
31c5d82775 | ||
|
|
e9a7862a50 | ||
|
|
9878de5526 | ||
|
|
7f08489e9f | ||
|
|
b6cc3a65b5 | ||
|
|
c362d4b9e3 | ||
|
|
643bf8a3a8 | ||
|
|
59597aa10c | ||
|
|
f1860ab83d | ||
|
|
4c64470830 | ||
|
|
dc12388c93 | ||
|
|
5f6b9e2824 | ||
|
|
3005a5c2c6 | ||
|
|
843e2be8eb | ||
|
|
d2ad75daa4 | ||
|
|
f75cf277dd | ||
|
|
c8514d4590 | ||
|
|
50e35dd481 | ||
|
|
b1d985df19 | ||
|
|
89b24bef19 | ||
|
|
8b21b5dc13 | ||
|
|
5dfad4a89b | ||
|
|
d46221a4f5 | ||
|
|
18934c1b5b | ||
|
|
8a2f82efbf | ||
|
|
680db39ba9 | ||
|
|
e7e43141d6 | ||
|
|
19f66f69ee | ||
|
|
4c1cc38338 | ||
|
|
75b06bb02e | ||
|
|
fb5e5de6a3 | ||
|
|
01a6a5719e | ||
|
|
07e94de205 | ||
|
|
81523b3bd0 | ||
|
|
3a8f227355 | ||
|
|
85f785c93c | ||
|
|
2c8678ebd0 | ||
|
|
ee853a5b35 | ||
|
|
fe19ef15bc | ||
|
|
a7ec8dbd05 | ||
|
|
b776d4cfef | ||
|
|
629ed5cca6 | ||
|
|
4c002030d5 | ||
|
|
bd0377570d | ||
|
|
e0a89609ed | ||
|
|
92e9ab84ac | ||
|
|
40e869fe00 | ||
|
|
717ac8703b | ||
|
|
474ea3c9b3 | ||
|
|
781b8e9009 | ||
|
|
6b01da6dda | ||
|
|
b49cceefd7 | ||
|
|
c941a64eba | ||
|
|
03dee47d69 | ||
|
|
4512f76dd8 | ||
|
|
3ff11e0b9f | ||
|
|
a79834739e | ||
|
|
f8c9d9b823 | ||
|
|
9ace6cfec5 | ||
|
|
9e0f8dc7d1 | ||
|
|
7978aa9011 | ||
|
|
be1dc623db | ||
|
|
895b4d2c6a | ||
|
|
5e9c88ca63 | ||
|
|
e345cb6b93 | ||
|
|
8f2db587f2 | ||
|
|
80a2018c1f | ||
|
|
f25fabeae5 | ||
|
|
a8be09a866 | ||
|
|
616c3a6c50 | ||
|
|
b43422f544 | ||
|
|
dce98529d3 | ||
|
|
ec893fe330 | ||
|
|
c7820c0cf2 | ||
|
|
d11b976de3 | ||
|
|
fa033a2589 | ||
|
|
02d63b9d8d | ||
|
|
1aee4fdde8 | ||
|
|
92ec4462be | ||
|
|
2282b48ff1 | ||
|
|
9b9e983d2c |
@@ -58,6 +58,7 @@ etc). Please include:
|
||||
* The output of `docker version`.
|
||||
* The output of `docker -D info`.
|
||||
* The output of `dokku version`.
|
||||
* The output of `dokku plugin`.
|
||||
|
||||
Please also include the steps required to reproduce the problem if possible and
|
||||
applicable. This information will help us review and fix your issue faster.
|
||||
@@ -70,13 +71,15 @@ Description of problem:
|
||||
|
||||
Output of the following commands
|
||||
|
||||
- `dokku version`:
|
||||
- `dokku plugins`:
|
||||
- `docker version`:
|
||||
- `docker info`:
|
||||
- `uname -a`:
|
||||
- `docker version`:
|
||||
- `docker -D info`:
|
||||
- `dokku version`:
|
||||
- `dokku plugin`:
|
||||
- `docker inspect CONTAINER_ID` (if applicable):
|
||||
- `cat /home/dokku/<app>/nginx.conf` (if applicable):
|
||||
- Output of failing dokku commands with `dokku trace on`:
|
||||
- Output of failing dokku commands with `dokku trace on`
|
||||
(BEWARE: `trace on` will print environment variables for some commands, be sure you're not exposing any sensitive information when posting issues):
|
||||
|
||||
Environment details (AWS, VirtualBox, physical, etc.):
|
||||
|
||||
|
||||
164
HISTORY.md
@@ -1,5 +1,159 @@
|
||||
# History
|
||||
|
||||
## 0.4.4
|
||||
|
||||
This release adds a few interesting changes:
|
||||
|
||||
- The `dokku logs` command now roughly maps to the `heroku logs` command, and supports most available options.
|
||||
- Native Microsoft Azure support is now available!
|
||||
- Quite a few shellcheck issues were fixed thanks to @callahad!
|
||||
- Experimental debian installation support. Going forward, we will try and make dokku compatible with all systemd installations, as well as investigate dockerfile-based deployment to continue simplifying installation.
|
||||
|
||||
Thanks to all our contributors for making this release great!
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- #1606: @josegonzalez Install plugn 0.2.0 in Makefile installs
|
||||
- #1643: @Flink Fix generated nginx config when NO_VHOST=1
|
||||
- #1644: @mmerickel Watch dokku events through a logrotate
|
||||
- #1647: @callahad Resolve SC2115: 'Use "${var:?}" to ensure this never expands to /'
|
||||
- #1648: @callahad Resolve SC2154: 'variable is referenced but not assigned'
|
||||
- #1649: @callahad Resolve SC2164: 'Use cd ... || exit in case cd fails.'
|
||||
- #1650: @callahad Resolve SC2148: 'target shell is unknown'
|
||||
- #1651: @callahad Resolve SC2029: 'this expands on client side'
|
||||
- #1652: @callahad Resolve SC2143: 'Instead of [ -n $(foo | grep bar) ], use foo | grep -q bar'
|
||||
- #1653: @callahad Resolve SC2145: 'Argument mixes string and array.'
|
||||
- #1655: @callahad Resolve SC2162: 'read without -r mangles backslashes'
|
||||
- #1656: @callahad Resolve SC2001: 'See if you can use ${var//search/replace} instead'
|
||||
- #1660: @callahad Fixup debian/control for Debian
|
||||
- #1662: @xadh00m Only return users of group 'adm'
|
||||
|
||||
### New Features
|
||||
|
||||
- #1607: @josegonzalez Dokku support for Debian Jessie installation
|
||||
- #1610: @kdomanski Add post-stop plugn trigger
|
||||
- #1612: @Flink Add multiple options to the logs plugin
|
||||
- #1613: @kdomanski Add ps:restore to start applications which weren't manually stopped
|
||||
- #1628: @michaelshobbs Move RESTORE variable to DOKKU_APP namespace
|
||||
- #1634: @callahad Allow installation of bats via homebrew
|
||||
- #1645: @rvalyi Add ability to access git repo via ssh
|
||||
- #1664: @michaelshobbs Add $REV to pre-receive-app call
|
||||
|
||||
### Documentation
|
||||
|
||||
- #1605: @josegonzalez Make commented output a bit more readable
|
||||
- #1621: @josegonzalez Document `--force` option for `:destroy` commands
|
||||
- #1623: @sedouard Add Azure Documentation
|
||||
- #1624: @u2mejc Add trace to help output
|
||||
- #1626: @josegonzalez Add official dokku-copy-files-to-image plugin
|
||||
- #1630: @adamwolf Enabling tracing is actually 'dokku trace on'
|
||||
- #1633: @elia Add a warning regarding the use of `trace on`
|
||||
- #1635: @callahad Remove deprecated Linode stackscript
|
||||
- #1657: @kimausloos Various small doc updates
|
||||
|
||||
## 0.4.3
|
||||
|
||||
This release was mainly a documentation release/bugfix.
|
||||
|
||||
One major removal was is that as of 0.4.3, we no longer restart containers automatically on failure via docker. This feature was introduced in 0.4.0, and caused issues with duplicate containers being started on server reboot. Until the docker api for container restarts stabilizes, we will not be able to provide this functionality within Dokku.
|
||||
|
||||
If desired, you may replicate this functionality using the official `docker-options` plugin.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- #1560: @darklow Fixes issue where SSL and non-SSL templates cannot be used at the same time
|
||||
- #1566: @michaelshobbs Fix logic error in enabling nginx
|
||||
- #1568: @josegonzalez Remove 'connection closed' messages from dokku ssh client
|
||||
- #1574: @josegonzalez Ensure the user has a valid hostname set during installation
|
||||
- #1585: @michaelshobbs Ensure dokku can read nginx logs and don't remove other perms
|
||||
- #1589: @michaelshobbs Patch broken nginx 1.8.0 logrotate script
|
||||
- #1591: @michaelshobbs Remove docker restart policy until the docker api stabilizes
|
||||
- #1603: @josegonzalez Add missing plugin triggers
|
||||
Quiet client #1568
|
||||
|
||||
### New Features
|
||||
|
||||
- #1490: @vijayviji Add windows-specific vagrant setup
|
||||
- #1563: @kdomanski Cleanup all dead containers in dokku cleanup
|
||||
- #1590: @michaelshobbs Trigger docker-args-build for dockerfile deployments
|
||||
- #1600: @josegonzalez Upgrade to Herokuish 0.3.4
|
||||
- #1602: @josegonzalez Add pre-receive-app plugin trigger
|
||||
|
||||
### Documentation
|
||||
|
||||
- #1556: @josegonzalez Use proper cdn link for css asset
|
||||
- #1557: @josegonzalez Code styling changes
|
||||
- #1561: @josegonzalez Set dokku-acl compatibility to 0.4.0+
|
||||
- #1562: @josegonzalez Documentation Overhaul
|
||||
- #1573: @mateusortiz Add link to license
|
||||
- #1577: @Flink Add official redirect plugin
|
||||
- #1587: @josegonzalez Update "reporting other issues" to include `docker inspect`
|
||||
- #1598: @adamwolf Add missing bootstrap.sh step
|
||||
- #1599: @ssd532 Fix a few grammatical mistakes
|
||||
- #1601: @ojacquemart Fix typo
|
||||
- #1604: @josegonzalez Add every type of favicon to all templates
|
||||
|
||||
## 0.4.2
|
||||
|
||||
This release was mainly a documentation release, with a few notable features:
|
||||
|
||||
- You can now use the commercial version of docker-engine with dokku.
|
||||
- You can now name your containers using the official `named-containers` plugin
|
||||
|
||||
Huge thanks to @Flink for working on our official plugins and adding official [basic auth](https://github.com/dokku/dokku-http-auth), [couchdb](https://github.com/dokku/dokku-couchdb), and [site maintenance](https://github.com/dokku/dokku-maintenance) plugins!
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- #1530: @Flink Fix nginx configuration for SSL
|
||||
|
||||
### New Features
|
||||
|
||||
- #1515: @leonardodino Allow local prebuilt stack sourcing
|
||||
- #1536 #1537: @josegonzalez Add docker-engine-cs as docker-engine alternative
|
||||
- #1511: @Flink Add `named-containers` as a core plugin
|
||||
|
||||
### Documentation
|
||||
|
||||
- #1520: @kimausloos Add `dokku` command-prefix to `plugin:install` command
|
||||
- #1519: @3onyc Fix typos in documentation
|
||||
- #1521: @edm00se Use correct url to bootstrap.sh in README.md
|
||||
- #1522: @josegonzalez Avoid redirects and use raw.githubusercontent.com for github links
|
||||
- #1523 #1548: @callahad Make room for the longer bootstrap.sh URL
|
||||
- #1524: @callahad Document idiosyncracies with Linode
|
||||
- #1529: @pzula Adds helpful information regarding whitespacing when setting config
|
||||
- #1525 #1550: @josegonzalez Add gratipay shield to readme
|
||||
- #1544 #1545 #1547 #1551: @josegonzalez @Flink Update compatibility for community plugins
|
||||
- #1546: @josegonzalez Add missing description to history output in HISTORY.md
|
||||
- #1552 #1553 #1555: @josegonzalez Various documentation styling tweaks
|
||||
|
||||
## 0.4.1
|
||||
|
||||
This release is primarily a bugfix and documentation update. In 0.4.0, we incorrectly handled setting environment variables in certain cases, resulting in misconfigured applications. We recommend that all users upgrade from 0.4.1 as soon as possible.
|
||||
|
||||
One new feature is colorized logging output, which should make it easier to debug application logging output when deploying multiple processes.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- #1494: @callahad Correctly install packages for DOKKU_TAG=v0.4.0
|
||||
- #1496: @callahad Don't prompt users when installing dokku package
|
||||
- #1514: @michaelshobbs Do not use exit 0 in config functions and fix CURL environment variable setting
|
||||
|
||||
### New Features
|
||||
|
||||
- #1482: @Flink Strip the `dokku-` part from plugins on install
|
||||
- #1500: @jazzzz Log user name and fingerprint in events
|
||||
- #1512: @Flink Colorize output from logs
|
||||
|
||||
### Documentation
|
||||
|
||||
- #1485: @matto1990 Update Slack plugin compatability
|
||||
- #1488: @josegonzalez Update plugins list with compatibility changes
|
||||
- #1491: @josegonzalez Promote [maintenance](https://github.com/dokku/dokku-maintenance) and [http basic auth](https://github.com/dokku/dokku-http-auth) plugins to official status
|
||||
- #1492: @josegonzalez Upgrade hostname plugin to 0.4.0+ compatibility
|
||||
- #1501: @josegonzalez Clarify bootstrap installation documentation
|
||||
- #1502: @josegonzalez Update dokku-apt compatibility
|
||||
- #1504: @michaelshobbs Change plugin install doc to show one-step method
|
||||
|
||||
## 0.4.0
|
||||
|
||||
This is our first minor release in almost a year. Many new features and removals have occurred, so here is a neat summary:
|
||||
@@ -109,7 +263,7 @@ This release is a bugfix release covering dokku packaging.
|
||||
- #1397: @josegonzalez Use https docker apt repo
|
||||
- #1394: @josegonzalez Remove `dokku plugins-install` from postinst hook
|
||||
|
||||
### Docs Changes
|
||||
### Documentation
|
||||
|
||||
- #1395: @adrianmoya Adding fqdn requirement
|
||||
|
||||
@@ -136,7 +290,7 @@ This release is a bugfix release mostly covering installation and nginx issues.
|
||||
- #1359: @michaelshobbs allow DOKKU_WAIT_TO_RETIRE to be defined per app
|
||||
- #1365: @michaelshobbs support dockerfile images that don't include bash
|
||||
|
||||
### Docs Changes
|
||||
### Documentation
|
||||
|
||||
- #1305: @josegonzalez Updated documentation site
|
||||
- #1321: @fwolfst Mention alternative to nginx.conf templates: include-dir.
|
||||
@@ -175,7 +329,7 @@ This release is a general bugfix release, with improvements to handling of nginx
|
||||
- #1291: @michaelshobbs Refactored interface for managing global/local app configuration
|
||||
- #1299: @SonicHedgehog Set X-Forwarded-Proto header if TLS is enabled when running checks
|
||||
|
||||
### Docs Changes
|
||||
### Documentation
|
||||
|
||||
- #1273: @alessio Add docs for the events plugin
|
||||
- #1276: @josegonzalez Reorder and deprecate a few plugins
|
||||
@@ -216,7 +370,7 @@ This release pegs Dokku to Docker 1.6.2. Docker 1.7.0 introduced changes in `doc
|
||||
- #1251: @josegonzalez Fallback to using /etc/init.d/nginx reload directly to restart nginx
|
||||
- #1264: @josegonzalez Require lxc-docker-1.6.2
|
||||
|
||||
### Docs Changes
|
||||
### Documentation
|
||||
|
||||
- #1252: @josegonzalez Fix ssh port for vagrant installation. Closes #1139. [ci skip]
|
||||
- #1250: @josegonzalez SSL documentation is misleading
|
||||
@@ -243,7 +397,7 @@ This release pegs Dokku to Docker 1.6.2. Docker 1.7.0 introduced changes in `doc
|
||||
- #1227: @Flink Use --no-cache when building Dockerfile
|
||||
- #1246: @josegonzalez Ensure we call apt-get before installing packages
|
||||
|
||||
### Docs Changes
|
||||
### Documentation
|
||||
|
||||
- #1168: @cjblomqvist [docs] Update git-rev plugin to point to maintained version
|
||||
- #1180: @sherbondy [docs] Clarify usage around official dokku `docker-options` plugin
|
||||
|
||||
6
Makefile
@@ -1,7 +1,7 @@
|
||||
DOKKU_VERSION = master
|
||||
|
||||
SSHCOMMAND_URL ?= https://raw.github.com/progrium/sshcommand/master/sshcommand
|
||||
PLUGN_URL ?= https://github.com/progrium/plugn/releases/download/v0.1.0/plugn_0.1.0_linux_x86_64.tgz
|
||||
SSHCOMMAND_URL ?= https://raw.githubusercontent.com/progrium/sshcommand/master/sshcommand
|
||||
PLUGN_URL ?= https://github.com/progrium/dokku/releases/download/v0.4.0/plugn_0.2.0_linux_x86_64.tgz
|
||||
STACK_URL ?= https://github.com/gliderlabs/herokuish.git
|
||||
PREBUILT_STACK_URL ?= gliderlabs/herokuish:latest
|
||||
DOKKU_LIB_ROOT ?= /var/lib/dokku
|
||||
@@ -121,7 +121,7 @@ ifdef BUILD_STACK
|
||||
@echo "Start building herokuish from source"
|
||||
docker images | grep gliderlabs/herokuish || (git clone ${STACK_URL} /tmp/herokuish && cd /tmp/herokuish && IMAGE_NAME=gliderlabs/herokuish BUILD_TAG=latest VERSION=master make -e ${BUILD_STACK_TARGETS} && rm -rf /tmp/herokuish)
|
||||
else
|
||||
ifeq ($(shell echo ${PREBUILT_STACK_URL} | egrep -q 'http.*://' && echo $$?),0)
|
||||
ifeq ($(shell echo ${PREBUILT_STACK_URL} | egrep -q 'http.*://|file://' && echo $$?),0)
|
||||
@echo "Start importing herokuish from ${PREBUILT_STACK_URL}"
|
||||
docker images | grep gliderlabs/herokuish || curl --silent -L ${PREBUILT_STACK_URL} | gunzip -cd | docker import - gliderlabs/herokuish
|
||||
else
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Dokku [](https://circleci.com/gh/progrium/dokku/tree/master) [](https://packagecloud.io/dokku/dokku) [](https://webchat.freenode.net/?channels=dokku) [](http://progrium.viewdocs.io/dokku/)
|
||||
# Dokku [](https://circleci.com/gh/progrium/dokku/tree/master) [](https://packagecloud.io/dokku/dokku) [](https://webchat.freenode.net/?channels=dokku) [](http://progrium.viewdocs.io/dokku/) [](https://gratipay.com/dokku/)
|
||||
|
||||
Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen. Sponsored by our friends at [Deis](http://deis.io/).
|
||||
|
||||
@@ -10,8 +10,8 @@ Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen. S
|
||||
|
||||
To install the latest stable release, you can run the following commands as a user that has access to `sudo`:
|
||||
|
||||
wget https://raw.github.com/progrium/dokku/v0.4.0/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.4.0 bash bootstrap.sh
|
||||
wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh
|
||||
|
||||
### Upgrading
|
||||
|
||||
@@ -37,4 +37,4 @@ Dokku is currently sponsored by the enterprise grade, multi-host PaaS project [D
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
[MIT License](https://github.com/progrium/dokku/blob/master/LICENSE) © Jeff Lindsay
|
||||
|
||||
19
Vagrantfile
vendored
@@ -18,7 +18,6 @@ Vagrant::configure("2") do |config|
|
||||
config.ssh.forward_agent = true
|
||||
|
||||
config.vm.box = BOX_NAME
|
||||
config.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||
|
||||
config.vm.provider :virtualbox do |vb|
|
||||
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
|
||||
@@ -28,9 +27,14 @@ Vagrant::configure("2") do |config|
|
||||
vb.customize ["modifyvm", :id, "--memory", BOX_MEMORY]
|
||||
end
|
||||
|
||||
config.vm.provider :vmware_fusion do |v, override|
|
||||
v.vmx["memsize"] = BOX_MEMORY
|
||||
end
|
||||
|
||||
config.vm.define "empty", autostart: false
|
||||
|
||||
config.vm.define "dokku", primary: true do |vm|
|
||||
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||
vm.vm.network :private_network, ip: DOKKU_IP
|
||||
@@ -38,7 +42,17 @@ Vagrant::configure("2") do |config|
|
||||
vm.vm.provision :shell, :inline => "cd /root/dokku && make dokku-installer"
|
||||
end
|
||||
|
||||
# For windows users. Sharing folder from windows creates problem with sym links and so, sync the repo instead from GOS.
|
||||
config.vm.define "dokku-windows", autostart: false do |vm|
|
||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||
vm.vm.network :private_network, ip: DOKKU_IP
|
||||
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update > /dev/null && apt-get -qq -y install git > /dev/null"
|
||||
vm.vm.provision :shell, :inline => "cd /vagrant/ && export DOKKU_BRANCH=`git symbolic-ref -q --short HEAD 2>/dev/null` && export DOKKU_TAG=`git describe --tags --exact-match 2>/dev/null` && cd /root/ && cp /vagrant/bootstrap.sh ./ && bash bootstrap.sh"
|
||||
end
|
||||
|
||||
config.vm.define "dokku-deb", autostart: false do |vm|
|
||||
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||
vm.vm.network :private_network, ip: DOKKU_IP
|
||||
@@ -46,10 +60,11 @@ Vagrant::configure("2") do |config|
|
||||
end
|
||||
|
||||
config.vm.define "build", autostart: false do |vm|
|
||||
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||
vm.vm.network :private_network, ip: DOKKU_IP
|
||||
vm.vm.provision :shell, :inline => "apt-get update > /dev/null && DEBIAN_FRONTEND=noninteractive apt-get -qq -y install git > /dev/null && cd /root/dokku && #{make_cmd}"
|
||||
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update > /dev/null && apt-get -qq -y install git > /dev/null && cd /root/dokku && #{make_cmd}"
|
||||
vm.vm.provision :shell, :inline => "cd /root/dokku && make deb-all"
|
||||
end
|
||||
|
||||
|
||||
29
bootstrap.sh
@@ -24,6 +24,11 @@ if ! command -v apt-get &>/dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
hostname -f > /dev/null 2>&1 || {
|
||||
echo "This installation script requires that you have a hostname set for the instance. Please set a hostname for 127.0.0.1 in your /etc/hosts"
|
||||
exit 1
|
||||
}
|
||||
|
||||
apt-get update -qq > /dev/null
|
||||
which curl > /dev/null || apt-get install -qq -y curl
|
||||
[[ $(lsb_release -sr) == "12.04" ]] && apt-get install -qq -y python-software-properties
|
||||
@@ -47,6 +52,12 @@ dokku_install_package() {
|
||||
apt-get install -qq -y apt-transport-https
|
||||
|
||||
echo "--> Installing docker"
|
||||
if uname -r | grep -q linode; then
|
||||
echo "--> NOTE: Using Linode? Docker might complain about missing AUFS support."
|
||||
echo " See http://progrium.viewdocs.io/dokku/getting-started/install/linode/"
|
||||
echo " Installation will continue in 10 seconds."
|
||||
sleep 10
|
||||
fi
|
||||
curl -sSL https://get.docker.com/ | sh
|
||||
|
||||
echo "--> Installing dokku"
|
||||
@@ -55,9 +66,9 @@ dokku_install_package() {
|
||||
apt-get update -qq > /dev/null
|
||||
|
||||
if [[ -n $DOKKU_CHECKOUT ]]; then
|
||||
apt-get install dokku=$DOKKU_CHECKOUT
|
||||
apt-get install -y dokku=$DOKKU_CHECKOUT
|
||||
else
|
||||
apt-get install dokku
|
||||
apt-get install -y dokku
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -71,16 +82,16 @@ elif [[ -n $DOKKU_TAG ]]; then
|
||||
patch=$(echo $DOKKU_SEMVER | awk '{split($0,a,"."); print a[3]}')
|
||||
|
||||
# 0.3.13 was the first version with a debian package
|
||||
if [[ "$major" -eq "0" ]] && [[ "$minor" -ge "3" ]] && [[ "$patch" -ge "13" ]]; then
|
||||
if [[ "$major" -eq "0" ]] && [[ "$minor" -eq "3" ]] && [[ "$patch" -ge "13" ]]; then
|
||||
export DOKKU_CHECKOUT="$DOKKU_SEMVER"
|
||||
dokku_install_package
|
||||
echo "--> Running post-install dependency installation"
|
||||
# 0.4.0 implemented a `plugin` plugin
|
||||
if [[ "$major" -eq "0" ]] && [[ "$minor" -ge "4" ]] && [[ "$patch" -ge "0" ]]; then
|
||||
dokku plugin:install-dependencies --core
|
||||
else
|
||||
dokku plugins-install-dependencies
|
||||
fi
|
||||
dokku plugins-install-dependencies
|
||||
# 0.4.0 implemented a `plugin` plugin
|
||||
elif [[ "$major" -eq "0" ]] && [[ "$minor" -ge "4" ]] && [[ "$patch" -ge "0" ]]; then
|
||||
export DOKKU_CHECKOUT="$DOKKU_SEMVER"
|
||||
dokku_install_package
|
||||
dokku plugin:install-dependencies --core
|
||||
else
|
||||
export DOKKU_CHECKOUT="$DOKKU_TAG"
|
||||
dokku_install_source
|
||||
|
||||
@@ -6,7 +6,18 @@ if ARGV[0] == "onboot"
|
||||
File.open("/etc/init/dokku-installer.conf", "w") do |f|
|
||||
f.puts "start on runlevel [2345]"
|
||||
f.puts "exec #{File.absolute_path(__FILE__)} selfdestruct"
|
||||
end
|
||||
end if File.directory?("/etc/init")
|
||||
File.open("/etc/systemd/system/dokku-installer.service", "w") do |f|
|
||||
f.puts "[Unit]"
|
||||
f.puts "Description=Dokku web-installer"
|
||||
f.puts ""
|
||||
f.puts "[Service]"
|
||||
f.puts "ExecStart=#{File.absolute_path(__FILE__)} selfdestruct"
|
||||
f.puts ""
|
||||
f.puts "[Install]"
|
||||
f.puts "WantedBy=multi-user.target"
|
||||
f.puts "WantedBy=graphical.target"
|
||||
end if File.directory?("/etc/systemd/system")
|
||||
File.open("/etc/nginx/conf.d/dokku-installer.conf", "w") do |f|
|
||||
f.puts "upstream dokku-installer { server 127.0.0.1:2000; }"
|
||||
f.puts "server {"
|
||||
@@ -21,7 +32,7 @@ if ARGV[0] == "onboot"
|
||||
exit
|
||||
end
|
||||
|
||||
version = "v0.4.0"
|
||||
version = "v0.4.4"
|
||||
dokku_root = ENV["DOKKU_ROOT"] || "/home/dokku"
|
||||
admin_keys = `cat /root/.ssh/authorized_keys`.split("\n")
|
||||
hostname = `bash -c '[[ $(dig +short $HOSTNAME) ]] && echo $HOSTNAME || curl icanhazip.com'`.strip
|
||||
@@ -48,7 +59,7 @@ post "/setup" do
|
||||
end
|
||||
Thread.new {
|
||||
`rm /etc/nginx/conf.d/dokku-installer.conf && /etc/init.d/nginx stop && /etc/init.d/nginx start`
|
||||
`rm /etc/init/dokku-installer.conf && stop dokku-installer`
|
||||
`rm -f /etc/init/dokku-installer.conf /etc/systemd/system/dokku-installer.service && stop dokku-installer`
|
||||
}.run if ARGV[0] == "selfdestruct"
|
||||
end
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ random_name() {
|
||||
UPPER_APPNAME="${MOVES[${NUM1}]}-${MOVES[${NUM2}]}-${NAMES[${NUM3}]}"
|
||||
|
||||
[[ "$BASH_VERSION" =~ 4.* ]] && lower_appname=${UPPER_APPNAME,,}
|
||||
[[ -z "$lower_appname" ]] && lower_appname=$(echo $UPPER_APPNAME | tr '[:upper:]' '[:lower:]')
|
||||
[[ -z "$lower_appname" ]] && lower_appname=$(echo "$UPPER_APPNAME" | tr '[:upper:]' '[:lower:]')
|
||||
echo "$lower_appname"
|
||||
}
|
||||
|
||||
@@ -81,8 +81,7 @@ if [[ ! -z $DOKKU_HOST ]]; then
|
||||
counter=$((counter+1))
|
||||
fi
|
||||
done
|
||||
if git remote add dokku "dokku@$DOKKU_HOST:$appname"
|
||||
then
|
||||
if git remote add dokku "dokku@$DOKKU_HOST:$appname"; then
|
||||
echo "-----> Dokku remote added at $DOKKU_HOST"
|
||||
echo "-----> Application name is $appname"
|
||||
else
|
||||
@@ -94,7 +93,8 @@ if [[ ! -z $DOKKU_HOST ]]; then
|
||||
fi
|
||||
|
||||
if [[ -z "$donotshift" ]]; then
|
||||
ssh -t "dokku@$DOKKU_HOST" "$@"
|
||||
# shellcheck disable=SC2029
|
||||
ssh -o LogLevel=QUIET -t "dokku@$DOKKU_HOST" "$@"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
@@ -120,8 +120,8 @@ if [[ ! -z $DOKKU_HOST ]]; then
|
||||
done
|
||||
fi
|
||||
fi
|
||||
# shellcheck disable=SC2086
|
||||
ssh -t "dokku@$DOKKU_HOST" $long_args "$verb" "$appname" "${args[@]}"
|
||||
# shellcheck disable=SC2086,SC2029
|
||||
ssh -o LogLevel=QUIET -t "dokku@$DOKKU_HOST" $long_args "$verb" "$appname" "${args[@]}"
|
||||
}
|
||||
|
||||
if [[ "$0" == "dokku" ]] || [[ "$0" == *dokku_client.sh ]] || [[ "$0" == $(which dokku) ]]; then
|
||||
|
||||
@@ -1,174 +0,0 @@
|
||||
#!/bin/bash
|
||||
# <UDF name="hostname" default="" label="Hostname for dokku instance" example="example.com">
|
||||
# <UDF name="ssh_key" default="" label="Public SSH Key for root user" example="Sets the root user's public ssh key, which is also automatically imported into the dokku installer">
|
||||
# <UDF name="notify_email" default="" Label="Send Finish Notification To" example="Email address to send notification to when finished." />
|
||||
|
||||
logit() {
|
||||
# Simple logging function that prepends an easy-to-find marker '=> ' and a timestamp to a message
|
||||
TIMESTAMP=$(date -u +'%m/%d %H:%M:%S')
|
||||
MSG="=> ${TIMESTAMP} $1"
|
||||
echo ${MSG}
|
||||
}
|
||||
|
||||
set_ssh_key() {
|
||||
if [[ -n "${SSH_KEY}" ]]; then
|
||||
logit "Setting root ssh key"
|
||||
mkdir -p /root/.ssh
|
||||
chmod 700 /root/.ssh
|
||||
echo "$SSH_KEY" > /root/.ssh/authorized_keys
|
||||
chmod 600 /root/.ssh/authorized_keys
|
||||
chown -R root:root /root/.ssh
|
||||
fi
|
||||
}
|
||||
|
||||
set_passwordless_ssh() {
|
||||
logit "Turn off password authentication and root login for SSH"
|
||||
echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
|
||||
service ssh restart
|
||||
}
|
||||
|
||||
system_primary_ip() {
|
||||
# returns the primary IP assigned to eth0
|
||||
ifconfig eth0 | awk -F: '/inet addr:/ {print $2}' | awk '{ print $1 }'
|
||||
}
|
||||
|
||||
set_hostname() {
|
||||
logit "Set up hostname"
|
||||
if [[ -n "${HOSTNAME}" ]]; then
|
||||
echo $HOSTNAME > /etc/hostname
|
||||
echo $IPADDR $FQDN $HOSTNAME >> /etc/hosts
|
||||
else
|
||||
system_primary_ip > /etc/hostname
|
||||
echo "$(system_primary_ip) localhost" >> /etc/hosts
|
||||
fi
|
||||
|
||||
IPADDR=$(/sbin/ifconfig eth0 | awk '/inet / { print $2 }' | sed 's/addr://')
|
||||
hostname -F /etc/hostname
|
||||
}
|
||||
|
||||
postfix_install_loopback_only() {
|
||||
logit "Installing and configuring Postfix"
|
||||
# Installs postfix and configure to listen only on the local interface. Also
|
||||
# allows for local mail delivery
|
||||
|
||||
echo "postfix postfix/destinations string localhost.localdomain, localhost" | debconf-set-selections
|
||||
echo "postfix postfix/mailname string localhost" | debconf-set-selections
|
||||
echo "postfix postfix/main_mailer_type select Internet Site" | debconf-set-selections
|
||||
echo "postfix postfix/myhostname string localhost" | debconf-set-selections
|
||||
sudo apt-get install -qq -y postfix > /dev/null 2>&1
|
||||
/usr/sbin/postconf -e "inet_interfaces = loopback-only"
|
||||
#/usr/sbin/postconf -e "local_transport = error:local delivery is disabled"
|
||||
|
||||
touch /tmp/restart-postfix
|
||||
}
|
||||
|
||||
notify_install_via_email() {
|
||||
if [[ -n "${NOTIFY_EMAIL}" ]]; then
|
||||
logit "Sending notification email to ${NOTIFY_EMAIL}"
|
||||
/usr/sbin/sendmail "${NOTIFY_EMAIL}" <<EOD
|
||||
To: ${NOTIFY_EMAIL}
|
||||
Subject: Dokku installation is complete
|
||||
From: Dokku StackScript <no-reply@${HOSTNAME}>
|
||||
|
||||
Your Dokku installation is complete and now ready to be configured: http://$(system_primary_ip) . Please visit this url to complete the setup of your Dokku instance.
|
||||
|
||||
Enjoy using Dokku!
|
||||
EOD
|
||||
fi
|
||||
}
|
||||
|
||||
notify_restart_via_email() {
|
||||
if [[ -n "${NOTIFY_EMAIL}" ]]; then
|
||||
logit "Sending notification email to ${NOTIFY_EMAIL} of required restart"
|
||||
/usr/sbin/sendmail "${NOTIFY_EMAIL}" <<EOD
|
||||
To: ${NOTIFY_EMAIL}
|
||||
Subject: Dokku Linode instance must be restarted
|
||||
From: Dokku StackScript <no-reply@${HOSTNAME}>
|
||||
|
||||
The following linode instance must be restarted:
|
||||
|
||||
${LINODE_LISHUSERNAME}
|
||||
|
||||
Before restarting, please go to this url:
|
||||
|
||||
https://manager.linode.com/linodes/dashboard/${LINODE_LISHUSERNAME}
|
||||
|
||||
Then click "Edit" next to the selected configuration profile and make the following changes:
|
||||
|
||||
- Change the "Kernel" option to the current "pv-grub" release
|
||||
- Set the "Distro helper" option to "no"
|
||||
|
||||
Then save your changes. Next, reboot the instance from the Linode Dashboard. You'll receive an email once the instance is available to continue the dokku installation.
|
||||
EOD
|
||||
fi
|
||||
}
|
||||
|
||||
setup_linode() {
|
||||
logit "Installing via linode"
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -qq -y linux-virtual
|
||||
DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y grub2 grub-pc
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -qq -y grub
|
||||
mkdir -p /boot/grub
|
||||
update-grub -y
|
||||
sed -i 's/kopt=root=UUID=.* ro/kopt=root=\/dev\/xvda console=hvc0 ro quiet/g' /boot/grub/menu.lst
|
||||
sed -i 's/# groot=(hd0,0)/# groot=(hd0)/g' /boot/grub/menu.lst
|
||||
update-grub
|
||||
|
||||
cp /etc/rc.local /etc/rc.local-bak
|
||||
cat << "EOF" > /etc/rc.local
|
||||
#!/bin/sh -e
|
||||
sudo apt-get update >> /root/setup_linode.txt 2>&1
|
||||
sudo apt-get install -y linux-image-extra-"$(uname -r)" >> /root/setup_linode.txt 2>&1
|
||||
modprobe aufs >> /root/setup_linode.txt 2>&1
|
||||
|
||||
sudo apt-get install -y apparmor cgroup-lite >> /root/setup_linode.txt 2>&1
|
||||
|
||||
sudo apt-get install -y dokku >> /root/setup_linode.txt 2>&1
|
||||
|
||||
# Clean up this script so it only runs once
|
||||
rm -f /etc/rc.local
|
||||
mv /etc/rc.local-bak /etc/rc.local
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x /etc/rc.local
|
||||
}
|
||||
|
||||
install_prerequisites() {
|
||||
logit "Installing pre-requisites"
|
||||
sudo apt-get update -qq > /dev/null
|
||||
sudo apt-get install -qq -y apt-transport-https curl > /dev/null 2>&1
|
||||
|
||||
logit "Installing docker"
|
||||
curl -sSL https://get.docker.com/ | sh
|
||||
|
||||
logit "Installing dokku"
|
||||
curl -sSL https://packagecloud.io/gpg.key 2> /dev/null | apt-key add - > /dev/null 2>&1
|
||||
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" > /etc/apt/sources.list.d/dokku.list
|
||||
sudo apt-get update -qq > /dev/null
|
||||
}
|
||||
|
||||
install_dokku() {
|
||||
logit "Installing pre-requisites"
|
||||
sudo apt-get install -qq -y linux-image-extra-"$(uname -r)" > /dev/null 2>&1
|
||||
|
||||
logit "Installing dokku"
|
||||
sudo apt-get install -qq -y dokku > /dev/null 2>&1
|
||||
|
||||
logit "Done!"
|
||||
}
|
||||
|
||||
exec &> /root/stackscript.log
|
||||
|
||||
set_ssh_key
|
||||
set_passwordless_ssh
|
||||
postfix_install_loopback_only
|
||||
set_hostname
|
||||
install_prerequisites
|
||||
|
||||
if [[ -n "$LINODE_ID" ]]; then
|
||||
setup_linode
|
||||
notify_restart_via_email
|
||||
else
|
||||
install_dokku
|
||||
notify_install_via_email
|
||||
fi
|
||||
22
deb.mk
@@ -1,6 +1,6 @@
|
||||
HEROKUISH_DESCRIPTION = 'Herokuish uses Docker and Buildpacks to build applications like Heroku'
|
||||
HEROKUISH_REPO_NAME ?= gliderlabs/herokuish
|
||||
HEROKUISH_VERSION ?= 0.3.3
|
||||
HEROKUISH_VERSION ?= 0.3.4
|
||||
HEROKUISH_ARCHITECTURE = amd64
|
||||
HEROKUISH_PACKAGE_NAME = herokuish_$(HEROKUISH_VERSION)_$(HEROKUISH_ARCHITECTURE).deb
|
||||
|
||||
@@ -49,7 +49,7 @@ deb-all: deb-herokuish deb-dokku deb-gems deb-plugn deb-sshcommand
|
||||
deb-setup:
|
||||
echo "-> Updating deb repository and installing build requirements"
|
||||
sudo apt-get update -qq > /dev/null
|
||||
sudo apt-get install -qq -y gcc git ruby1.9.1-dev 2>&1 > /dev/null
|
||||
sudo apt-get install -qq -y gcc git ruby-dev ruby1.9.1 > /dev/null 2>&1
|
||||
command -v fpm > /dev/null || sudo gem install fpm --no-ri --no-rdoc
|
||||
ssh -o StrictHostKeyChecking=no git@github.com || true
|
||||
|
||||
@@ -69,7 +69,7 @@ deb-herokuish: deb-setup
|
||||
echo "sudo docker build -t gliderlabs/herokuish /var/lib/herokuish 1> /dev/null" >> /tmp/tmp/post-install
|
||||
|
||||
echo "-> Cloning repository"
|
||||
git clone -q "git@github.com:$(HEROKUISH_REPO_NAME).git" /tmp/tmp/herokuish > /dev/null
|
||||
git clone -q "https://github.com/$(HEROKUISH_REPO_NAME).git" /tmp/tmp/herokuish > /dev/null
|
||||
rm -rf /tmp/tmp/herokuish/.git /tmp/tmp/herokuish/.gitignore
|
||||
|
||||
echo "-> Copying files into place"
|
||||
@@ -77,7 +77,7 @@ deb-herokuish: deb-setup
|
||||
cp -rf /tmp/tmp/herokuish /tmp/build/var/lib/herokuish
|
||||
|
||||
echo "-> Creating $(HEROKUISH_PACKAGE_NAME)"
|
||||
sudo fpm -t deb -s dir -C /tmp/build -n herokuish -v $(HEROKUISH_VERSION) -a $(HEROKUISH_ARCHITECTURE) -p $(HEROKUISH_PACKAGE_NAME) --deb-pre-depends 'docker-engine' --after-install /tmp/tmp/post-install --url "https://github.com/$(HEROKUISH_REPO_NAME)" --description $(HEROKUISH_DESCRIPTION) --license 'MIT License' .
|
||||
sudo fpm -t deb -s dir -C /tmp/build -n herokuish -v $(HEROKUISH_VERSION) -a $(HEROKUISH_ARCHITECTURE) -p $(HEROKUISH_PACKAGE_NAME) --deb-pre-depends 'docker-engine | docker-engine-cs' --deb-pre-depends sudo --after-install /tmp/tmp/post-install --url "https://github.com/$(HEROKUISH_REPO_NAME)" --description $(HEROKUISH_DESCRIPTION) --license 'MIT License' .
|
||||
mv *.deb /tmp
|
||||
|
||||
deb-dokku: deb-setup
|
||||
@@ -121,16 +121,18 @@ deb-plugn: deb-setup
|
||||
mkdir -p /tmp/tmp /tmp/build
|
||||
|
||||
echo "-> Cloning repository"
|
||||
git clone -q "git@github.com:$(PLUGN_REPO_NAME).git" /tmp/tmp/plugn > /dev/null
|
||||
git clone -q "https://github.com/$(PLUGN_REPO_NAME).git" /tmp/tmp/plugn > /dev/null
|
||||
rm -rf /tmp/tmp/plugn/.git /tmp/tmp/plugn/.gitignore
|
||||
|
||||
echo "-> Copying files into place"
|
||||
mkdir -p /tmp/build/usr/local/bin $(GOPATH)
|
||||
sudo apt-get clean
|
||||
sudo apt-get update -qq > /dev/null
|
||||
sudo apt-get install -qq -y git golang mercurial 2>&1 > /dev/null
|
||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH) && cd /tmp/tmp/plugn && make deps
|
||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH) && cd /tmp/tmp/plugn && go build -o plugn
|
||||
mv /tmp/tmp/plugn/plugn /tmp/build/usr/local/bin/plugn
|
||||
sudo apt-get install -qq -y git golang mercurial > /dev/null 2>&1
|
||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH):/tmp/tmp/plugn && go get github.com/progrium/plugn
|
||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH):/tmp/tmp/plugn && cd /home/vagrant/gocode/src/github.com/progrium/plugn && make deps
|
||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH):/tmp/tmp/plugn && cd /home/vagrant/gocode/src/github.com/progrium/plugn && rm plugn && go build -o plugn
|
||||
mv /home/vagrant/gocode/src/github.com/progrium/plugn/plugn /tmp/build/usr/local/bin/plugn
|
||||
|
||||
echo "-> Creating $(PLUGN_PACKAGE_NAME)"
|
||||
sudo fpm -t deb -s dir -C /tmp/build -n plugn -v $(PLUGN_VERSION) -a $(PLUGN_ARCHITECTURE) -p $(PLUGN_PACKAGE_NAME) --url "https://github.com/$(PLUGN_REPO_NAME)" --description $(PLUGN_DESCRIPTION) --license 'MIT License' .
|
||||
@@ -141,7 +143,7 @@ deb-sshcommand: deb-setup
|
||||
mkdir -p /tmp/tmp /tmp/build
|
||||
|
||||
echo "-> Cloning repository"
|
||||
git clone -q "git@github.com:$(SSHCOMMAND_REPO_NAME).git" /tmp/tmp/sshcommand > /dev/null
|
||||
git clone -q "https://github.com/$(SSHCOMMAND_REPO_NAME).git" /tmp/tmp/sshcommand > /dev/null
|
||||
rm -rf /tmp/tmp/sshcommand/.git /tmp/tmp/sshcommand/.gitignore
|
||||
|
||||
echo "-> Copying files into place"
|
||||
|
||||
8
debian/control
vendored
@@ -1,9 +1,9 @@
|
||||
Package: dokku
|
||||
Version: 0.3.12
|
||||
Section: base
|
||||
Version: 0.4.4
|
||||
Section: web
|
||||
Priority: optional
|
||||
Architecture: amd64
|
||||
Depends: locales, git, make, curl, software-properties-common, docker-engine | lxc-docker, gcc, python-software-properties, man-db, herokuish, sshcommand
|
||||
Pre-Depends: nginx, dnsutils, ruby, ruby-dev, rubygem-rack, rubygem-rack-protection, rubygem-sinatra, rubygem-tilt, apparmor, cgroupfs-mount | cgroup-lite, plugn
|
||||
Depends: locales, git, make, curl, gcc, man-db, herokuish, sshcommand, docker-engine-cs | docker-engine | lxc-docker (>= 1.6.2) | docker.io (>= 1.6.2), software-properties-common, python-software-properties
|
||||
Pre-Depends: nginx (>= 1.4.6), dnsutils, apparmor, cgroupfs-mount | cgroup-lite, plugn, sudo, ruby, ruby-dev, rubygem-rack , rubygem-rack-protection, rubygem-sinatra, rubygem-tilt
|
||||
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>
|
||||
Description: Docker powered mini-Heroku in around 100 lines of Bash
|
||||
|
||||
4
debian/postinst
vendored
@@ -24,7 +24,7 @@ case "$1" in
|
||||
touch /var/lib/dokku/core-plugins/config.toml /var/lib/dokku/plugins/config.toml
|
||||
|
||||
# migrate old plugins
|
||||
find /var/lib/dokku/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do
|
||||
find /var/lib/dokku/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
||||
if [ "$plugin" = "available" ] || [ "$plugin" = "enabled" ]; then
|
||||
continue
|
||||
elif [ -f /var/lib/dokku/plugins/$plugin/.core ]; then
|
||||
@@ -35,7 +35,7 @@ case "$1" in
|
||||
done
|
||||
|
||||
# enable all core plugins
|
||||
find /var/lib/dokku/core-plugins/available -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do
|
||||
find /var/lib/dokku/core-plugins/available -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
||||
if [ ! -d /var/lib/dokku/plugins/available/$plugin ]; then
|
||||
ln -s /var/lib/dokku/core-plugins/available/$plugin /var/lib/dokku/plugins/available/$plugin;
|
||||
PLUGIN_PATH=/var/lib/dokku/core-plugins plugn enable $plugin
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
You can always install dokku straight from the latest - potentially unstable - master release via the following bash command:
|
||||
|
||||
```shell
|
||||
wget -qO- https://raw.github.com/progrium/dokku/master/bootstrap.sh | sudo DOKKU_BRANCH=master bash
|
||||
wget -qO- https://raw.githubusercontent.com/progrium/dokku/master/bootstrap.sh | sudo DOKKU_BRANCH=master bash
|
||||
```
|
||||
|
||||
## Development
|
||||
@@ -19,7 +19,7 @@ sudo make install
|
||||
The `Makefile` allows source URLs to be overridden to include customizations from your own repositories. The `DOCKER_URL`, `PLUGN_URL`, `SSHCOMMAND_URL` and `STACK_URL` environment variables may be set to override the defaults (see the `Makefile` for how these apply). Example:
|
||||
|
||||
```shell
|
||||
sudo SSHCOMMAND_URL=https://raw.github.com/yourusername/sshcommand/master/sshcommand make install
|
||||
sudo SSHCOMMAND_URL=https://raw.githubusercontent.com/yourusername/sshcommand/master/sshcommand make install
|
||||
```
|
||||
|
||||
## Bootstrap a server from your own repository
|
||||
@@ -27,7 +27,7 @@ sudo SSHCOMMAND_URL=https://raw.github.com/yourusername/sshcommand/master/sshcom
|
||||
The bootstrap script allows the dokku repository URL to be overridden to bootstrap a host from your own clone of dokku using the `DOKKU_REPO` environment variable. Example:
|
||||
|
||||
```shell
|
||||
wget https://raw.github.com/progrium/dokku/master/bootstrap.sh
|
||||
wget https://raw.githubusercontent.com/progrium/dokku/master/bootstrap.sh
|
||||
chmod +x bootstrap.sh
|
||||
sudo DOKKU_REPO=https://github.com/yourusername/dokku.git DOKKU_BRANCH=master ./bootstrap.sh
|
||||
```
|
||||
|
||||
@@ -1,105 +1,158 @@
|
||||
# Deploy an App
|
||||
# Deploying to Dokku
|
||||
|
||||
Now you can deploy apps on your Dokku. Let's deploy the [Heroku Node.js sample app](https://github.com/heroku/node-js-sample). All you have to do is add a remote to name the app. It's created on-the-fly.
|
||||
## Deploy tutorial
|
||||
|
||||
```
|
||||
$ cd node-js-sample
|
||||
$ git remote add dokku dokku@dokku.me:node-js-app
|
||||
$ git push dokku master
|
||||
Counting objects: 296, done.
|
||||
Delta compression using up to 4 threads.
|
||||
Compressing objects: 100% (254/254), done.
|
||||
Writing objects: 100% (296/296), 193.59 KiB, done.
|
||||
Total 296 (delta 25), reused 276 (delta 13)
|
||||
-----> Building node-js-app ...
|
||||
Node.js app detected
|
||||
-----> Resolving engine versions
|
||||
Once Dokku has been configured with at least one user, applications can be deployed via a `git push` command. To quickly see Dokku deployment in action, you can use the Heroku Ruby on Rails example app.
|
||||
|
||||
... blah blah blah ...
|
||||
|
||||
-----> Application deployed:
|
||||
http://node-js-app.dokku.me
|
||||
```shell
|
||||
git clone git@github.com:heroku/ruby-rails-sample.git
|
||||
```
|
||||
|
||||
You're done!
|
||||
### Create the app
|
||||
|
||||
Create the application on the Dokku host. You will need to ssh onto the host to run this command.
|
||||
|
||||
```shell
|
||||
dokku apps:create ruby-rails-sample
|
||||
```
|
||||
|
||||
### Create the backing services
|
||||
|
||||
When you create a new app, Dokku by default *does not* provide any datastores such as MySQL or PostgreSQL. You will need to install plugins to handle that, but fortunately [Dokku has official plugins](/dokku/plugins/#official-plugins-beta) for common datastores. Our sample app requires a PostgreSQL service:
|
||||
|
||||
```shell
|
||||
# install the postgres plugin
|
||||
# plugin installation requires root, hence the user change
|
||||
sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git
|
||||
|
||||
# create a postgres service with the name rails-database
|
||||
dokku postgres:create rails-database
|
||||
```
|
||||
|
||||
> Each services may take a few moments to create.
|
||||
|
||||
### Linking backing services to applications
|
||||
|
||||
Once the service creation is complete, set the `POSTGRES_URL` environment variable by linking the service.
|
||||
|
||||
```shell
|
||||
# each official datastore offers a `link` method to link a service to any application
|
||||
dokku postgres:link rails-database ruby-rails-sample
|
||||
```
|
||||
|
||||
> You can link a single service to multiple applications or use one service per application.
|
||||
|
||||
### Deploy the app
|
||||
|
||||
Now you can deploy the `ruby-rails-sample` app to your Dokku server. All you have to do is add a remote to name the app. Applications are created on-the-fly on the Dokku server.
|
||||
|
||||
```shell
|
||||
git remote add dokku dokku@dokku.me:ruby-rails-sample
|
||||
git push dokku master
|
||||
```
|
||||
|
||||
You should see output similar to the following:
|
||||
|
||||
```
|
||||
Counting objects: 231, done.
|
||||
Delta compression using up to 8 threads.
|
||||
Compressing objects: 100% (162/162), done.
|
||||
Writing objects: 100% (231/231), 36.96 KiB | 0 bytes/s, done.
|
||||
Total 231 (delta 93), reused 147 (delta 53)
|
||||
-----> Cleaning up...
|
||||
-----> Building ruby-rails-sample from herokuish...
|
||||
-----> Adding BUILD_ENV to build environment...
|
||||
-----> Ruby app detected
|
||||
-----> Compiling Ruby/Rails
|
||||
-----> Using Ruby version: ruby-2.2.1
|
||||
-----> Installing dependencies using 1.9.7
|
||||
Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
|
||||
Fetching gem metadata from https://rubygems.org/...........
|
||||
Fetching version metadata from https://rubygems.org/...
|
||||
Fetching dependency metadata from https://rubygems.org/..
|
||||
Using rake 10.4.2
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
When the deploy finishes, the application's URL will be shown.
|
||||
|
||||
```shell
|
||||
=====> Application deployed:
|
||||
http://ruby-rails-sample.dokku.me
|
||||
```
|
||||
|
||||
Dokku supports deploying applications via [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) with [Herokuish](https://github.com/gliderlabs/herokuish#buildpacks) or using a project's [dockerfile](https://docs.docker.com/reference/builder/).
|
||||
|
||||
### Removing a deployed app
|
||||
|
||||
You can also remove an application from your Dokku installation. This will unlink all linked services and destroy any config related to the application. Note that linked services will retain their data for later use (or removal).
|
||||
|
||||
```shell
|
||||
# replace APP with the name of your application
|
||||
dokku apps:destroy APP
|
||||
```
|
||||
|
||||
This will prompt you to verify the application's name before destroying it. You may also use the `--force` flag to circumvent this verification process:
|
||||
|
||||
```shell
|
||||
# replace APP with the name of your application
|
||||
dokku --force apps:destroy APP
|
||||
```
|
||||
|
||||
### Adding deploy users
|
||||
|
||||
While it is possible to use password-based authorization to push to Dokku, it is preferable to use key-based authentication for security. You can add your public key to the dokku user's `authorized_keys` file with the following command:
|
||||
|
||||
```shell
|
||||
# replace dokku.me with your domain name or the host's IP
|
||||
# replace root with your server's root user
|
||||
cat ~/.ssh/id_rsa.pub | ssh root@dokku.com "sudo sshcommand acl-add dokku [description]"
|
||||
```
|
||||
|
||||
### Deploying non-master branch
|
||||
|
||||
Dokku only supports deploying from its master branch, so if you'd like to deploy a different local branch use: ```git push dokku <local branch>:master```
|
||||
|
||||
Right now Herokuish supports buildpacks for Node.js, Ruby, Python, [and more](https://github.com/gliderlabs/herokuish#buildpacks).
|
||||
Please check the documentation for your particular build pack as you may need to include configuration files (such as a Procfile) in your project root.
|
||||
You can also support pushing multiple branches using the [receive-branch](/dokku/development/plugin-triggers/#receive-branch) plugin trigger in a custom plugin.
|
||||
|
||||
## Deploying to server over SSH
|
||||
### Deploying with private git submodules
|
||||
|
||||
Pushing to the dokku remote may prompt you to input a password for the dokku user. It's preferable, however, to use key-based authentication, and you can add your public key to the dokku user's authorized_keys file with:
|
||||
Dokku uses git locally (i.e. not a docker image) to build its own copy of your app repo, including submodules. This is done as the `dokku` user. Therefore, in order to deploy private git submodules, you'll need to drop your deploy key in `/home/dokku/.ssh/` and potentially add github.com (or your VCS host key) into `/home/dokku/.ssh/known_hosts`. The following test should help confirm you've done it correctly.
|
||||
|
||||
```
|
||||
cat ~/.ssh/id_rsa.pub | ssh [sudouser]@[yourdomain].com "sudo sshcommand acl-add dokku [description]"
|
||||
```
|
||||
|
||||
## Deploying with private git submodules
|
||||
|
||||
Dokku uses git locally (i.e. not a docker image) to build its own copy of your app repo, including submodules. This is done as the `dokku` user. Therefore, in order to deploy private git submodules, you'll need to drop your deploy key in `~dokku/.ssh` and potentially add github.com (or your VCS host key) into `~dokku/.ssh/known_hosts`. A decent test like this should help confirm you've done it correctly.
|
||||
|
||||
```
|
||||
```shell
|
||||
su - dokku
|
||||
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
|
||||
ssh -T git@github.com
|
||||
```
|
||||
|
||||
## Specifying a custom buildpack
|
||||
Note that if the buildpack or dockerfile build process require ssh key access for other reasons, the above may not always apply.
|
||||
|
||||
If buildpack detection isn't working well for you or you want to specify a custom buildpack for one repository you can create & commit a file in the root of your git repository named `.env` containing `export BUILDPACK_URL=<repository>` before pushing. This will tell herokuish to fetch the specified buildpack and use it instead of relying on the built-in buildpacks & their detection methods.
|
||||
### Specifying a custom buildpack
|
||||
|
||||
## Dockerfile deployment
|
||||
In certain cases you may want to specify a custom buildpack. While dokku uses herokuish to support all the [official heroku buildpacks](https://github.com/gliderlabs/herokuish#buildpacks), it is possible that the buildpack detection does not work well for your application. As well, you may wish to use a custom buildpack to handle specific application logic.
|
||||
|
||||
Deployment of `Dockerfile` repos is supported as of v0.3.15. Simply place a Dockerfile in the root of your repo and push to dokku. If you are converting from a heroku/dokku buildpack deployment, ensure you are not setting `$BUILDPACK_URL` or including a `.buildpacks` file in the root of your repo.
|
||||
To use a specific buildpack, you can run the following dokku command:
|
||||
|
||||
By default, we will extract the first `EXPOSE` port and tell nginx to proxy your app to that port. Alternatively, you can set `$DOKKU_DOCKERFILE_PORT` in your app's dokku configuration.
|
||||
|
||||
By default no arguments are passed to `docker run` when deploying the container and the `CMD` or `ENTRYPOINT` defined in the `Dockerfile` are executed. You can take advantage of docker ability of overriding the `CMD` or passing parameters to your `ENTRYPOINT` setting `$DOKKU_DOCKERFILE_START_CMD`. Let's say for example you are deploying a base nodejs image, with the following `ENTRYPOINT`:
|
||||
|
||||
```
|
||||
ENTRYPOINT ["node"]
|
||||
```shell
|
||||
# replace APP with the name of your application
|
||||
# replace REPOSITORY_URL with your buildpack's url
|
||||
dokku config:set APP BUILDPACK_URL=REPOSITORY_URL
|
||||
```
|
||||
|
||||
You can do:
|
||||
|
||||
```
|
||||
dokku config:set DOKKU_DOCKERFILE_START_CMD="--harmony server.js"
|
||||
```
|
||||
|
||||
To tell docker what to run.
|
||||
|
||||
Setting `$DOKKU_DOCKERFILE_CACHE_BUILD` to `true` or `false` will enable or disable docker's image layer cache. Lastly, for more granular build control, you may also pass any `docker build` option to `docker`, by setting `$DOKKU_DOCKER_BUILD_OPTS`.
|
||||
|
||||
## Default vhost
|
||||
|
||||
You might notice the default vhost for Nginx will be one of the apps. If an app doesn't exist, it will use this vhost and it may be confusing for it to go to another app. You can create a default vhost using a configuration under `sites-enabled`. You just have to change one thing in the main nginx.conf:
|
||||
|
||||
Swap both conf.d include line and the sites-enabled include line. From:
|
||||
```
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
include /etc/nginx/sites-enabled/*;
|
||||
```
|
||||
to
|
||||
```
|
||||
include /etc/nginx/sites-enabled/*;
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
```
|
||||
|
||||
Alternatively, you may push an app to your dokku host with a name like "00-default". As long as it lists first in `ls /home/dokku/*/nginx.conf | head`, it will be used as the default nginx vhost.
|
||||
Please check the documentation for your particular build pack as you may need to include configuration files (such as a Procfile) in your project root.
|
||||
|
||||
## Deploying to subdomains
|
||||
|
||||
The name of remote repository is used as the name of application to be deployed, as for example above:
|
||||
|
||||
$ git remote add dokku dokku@dokku.me:node-js-app
|
||||
$ git remote add dokku dokku@dokku.me:ruby-rails-sample
|
||||
$ git push dokku master
|
||||
|
||||
Is deployed to,
|
||||
|
||||
remote: -----> Application deployed:
|
||||
remote: http://node-js-app.dokku.me
|
||||
remote: http://ruby-rails-sample.dokku.me
|
||||
|
||||
You can also specify fully qualified names, say `app.dokku.me`, as
|
||||
|
||||
@@ -121,95 +174,22 @@ This is in particular useful, then you want to deploy to root domain, as
|
||||
remote: -----> Application deployed:
|
||||
remote: http://dokku.me
|
||||
|
||||
## Dokku/Docker Container Management Compatibility
|
||||
|
||||
Dokku is, at its core, a docker container manager. Thus, it does not necessarily play well with other out-of-band processes interacting with the docker daemon. One thing to note as in [issue #1220](https://github.com/progrium/dokku/issues/1220), dokku executes a cleanup function prior to every deployment. This function removes all exited containers and all 'unattached' images.
|
||||
|
||||
## Default vhost
|
||||
|
||||
See the [nginx documentation](/dokku/nginx/#default-site).
|
||||
|
||||
## Dockerfile deployment
|
||||
|
||||
See the [dockerfile documentation](/dokku/deployment/dockerfiles/).
|
||||
|
||||
## Zero downtime deploy
|
||||
|
||||
Following a deploy, dokku will now wait `DOKKU_DEFAULT_CHECKS_WAIT` seconds (default: `10`), and if the container is still running, then route traffic to the new container.
|
||||
|
||||
This can be problematic for applications whose boot up time can vary and can lead to `502 Bad Gateway` errors.
|
||||
|
||||
Dokku provides a way to run a set of more precise checks against the new container, and only switch traffic over if all checks complete successfully.
|
||||
|
||||
To specify checks, add a `CHECKS` file to the root of your project directory. This is a text file with one line per check. Empty lines and lines starting with `#` are ignored.
|
||||
|
||||
A check is a relative URL and may be followed by expected content from the page, for example:
|
||||
|
||||
```
|
||||
/about Our Amazing Team
|
||||
```
|
||||
|
||||
Dokku will wait `DOKKU_CHECKS_WAIT` seconds (default: `5`) before running the checks to give server time to start. For shorter/longer wait, change the `DOKKU_CHECKS_WAIT` environment variable. This can also be overridden in the CHECKS file by setting WAIT=nn.
|
||||
|
||||
Dokku will wait `DOKKU_WAIT_TO_RETIRE` seconds (default: `60`) before stopping the old container such that no existing connections to it are dropped.
|
||||
|
||||
Dokku will retry the checks DOKKU_CHECKS_ATTEMPTS times until the checks are successful or DOKKU_CHECKS_ATTEMPTS is exceeded. In the latter case, the deployment is considered failed. This can be overridden in the CHECKS file by setting ATTEMPTS=nn.
|
||||
|
||||
Checks can be skipped entirely by setting `DOKKU_SKIP_ALL_CHECKS` to `true` either globally or per application. You can choose to skip only default checks by setting `DOKKU_SKIP_DEFAULT_CHECKS` to `true` either globally or per application.
|
||||
|
||||
See [checks-examples.md](checks-examples.md) for examples and output.
|
||||
|
||||
## Removing a deployed app
|
||||
|
||||
SSH onto the server, then execute:
|
||||
|
||||
```shell
|
||||
dokku apps:destroy myapp
|
||||
```
|
||||
See the [zero-downtime deploy documentation](/dokku/checks-examples/).
|
||||
|
||||
## Image tagging
|
||||
|
||||
The dokku tags plugin allows you to add docker image tags to the currently deployed app image for versioning and subsequent deployment.
|
||||
|
||||
```
|
||||
tags <app> List all app image tags
|
||||
tags:create <app> <tag> Add tag to latest running app image
|
||||
tags:deploy <app> <tag> Deploy tagged app image
|
||||
tags:destroy <app> <tag> Remove app image tag
|
||||
```
|
||||
|
||||
Example:
|
||||
```
|
||||
root@dokku:~# dokku tags node-js-app
|
||||
=====> Image tags for dokku/node-js-app
|
||||
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
|
||||
dokku/node-js-app latest 936a42f25901 About a minute ago 1.025 GB
|
||||
|
||||
root@dokku:~# dokku tags:create node-js-app v0.9.0
|
||||
=====> Added v0.9.0 tag to dokku/node-js-app
|
||||
|
||||
root@dokku:~# dokku tags node-js-app
|
||||
=====> Image tags for dokku/node-js-app
|
||||
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
|
||||
dokku/node-js-app latest 936a42f25901 About a minute ago 1.025 GB
|
||||
dokku/node-js-app v0.9.0 936a42f25901 About a minute ago 1.025 GB
|
||||
|
||||
root@dokku:~# dokku tags:deploy node-js-app v0.9.0
|
||||
-----> Releasing node-js-app (dokku/node-js-app:v0.9.0)...
|
||||
-----> Deploying node-js-app (dokku/node-js-app:v0.9.0)...
|
||||
-----> Running pre-flight checks
|
||||
For more efficient zero downtime deployments, create a file CHECKS.
|
||||
See http://progrium.viewdocs.io/dokku/checks-examples.md for examples
|
||||
CHECKS file not found in container: Running simple container check...
|
||||
-----> Waiting for 10 seconds ...
|
||||
-----> Default container check successful!
|
||||
=====> node-js-app container output:
|
||||
Detected 512 MB available memory, 512 MB limit per process (WEB_MEMORY)
|
||||
Recommending WEB_CONCURRENCY=1
|
||||
> node-js-sample@0.1.0 start /app
|
||||
> node index.js
|
||||
Node app is running at localhost:5000
|
||||
=====> end node-js-app container output
|
||||
-----> Running post-deploy
|
||||
-----> Configuring node-js-app.dokku.me...
|
||||
-----> Creating http nginx.conf
|
||||
-----> Running nginx-pre-reload
|
||||
Reloading nginx
|
||||
-----> Shutting down old containers in 60 seconds
|
||||
=====> 025eec3fa3b442fded90933d58d8ed8422901f0449f5ea0c23d00515af5d3137
|
||||
=====> Application deployed:
|
||||
http://node-js-app.dokku.me
|
||||
|
||||
```
|
||||
|
||||
## Dokku/Docker Container Management Compatibility
|
||||
|
||||
Dokku is, at it's core, a docker container manager. Thus, it does not necessarily play well with other out-of-band processes interacting with the docker daemon. One thing to note as in [issue #1220](https://github.com/progrium/dokku/issues/1220), dokku executes a cleanup function prior to every deployment. This function removes all exited containers and all 'unattached' images.
|
||||
See the [image tagging documentation](/dokku/deployment/images).
|
||||
|
||||
BIN
docs/assets/dokku.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
docs/assets/favicons/android-chrome-144x144.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
docs/assets/favicons/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
docs/assets/favicons/android-chrome-36x36.png
Normal file
|
After Width: | Height: | Size: 829 B |
BIN
docs/assets/favicons/android-chrome-48x48.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
docs/assets/favicons/android-chrome-72x72.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
docs/assets/favicons/android-chrome-96x96.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
docs/assets/favicons/apple-touch-icon-114x114.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
docs/assets/favicons/apple-touch-icon-120x120.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
docs/assets/favicons/apple-touch-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
docs/assets/favicons/apple-touch-icon-152x152.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
docs/assets/favicons/apple-touch-icon-180x180.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
docs/assets/favicons/apple-touch-icon-57x57.png
Normal file
|
After Width: | Height: | Size: 867 B |
BIN
docs/assets/favicons/apple-touch-icon-60x60.png
Normal file
|
After Width: | Height: | Size: 938 B |
BIN
docs/assets/favicons/apple-touch-icon-72x72.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
docs/assets/favicons/apple-touch-icon-76x76.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
docs/assets/favicons/apple-touch-icon-precomposed.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
docs/assets/favicons/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
12
docs/assets/favicons/browserconfig.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square70x70logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-70x70.png"/>
|
||||
<square150x150logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-150x150.png"/>
|
||||
<square310x310logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-310x310.png"/>
|
||||
<wide310x150logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-310x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
BIN
docs/assets/favicons/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 455 B |
BIN
docs/assets/favicons/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 790 B |
BIN
docs/assets/favicons/favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
docs/assets/favicons/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
41
docs/assets/favicons/manifest.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "Dokku",
|
||||
"icons": [
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
||||
"sizes": "36x36",
|
||||
"type": "image\/png",
|
||||
"density": "0.75"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
||||
"sizes": "48x48",
|
||||
"type": "image\/png",
|
||||
"density": "1.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image\/png",
|
||||
"density": "1.5"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image\/png",
|
||||
"density": "2.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image\/png",
|
||||
"density": "3.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image\/png",
|
||||
"density": "4.0"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
docs/assets/favicons/mstile-144x144.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
docs/assets/favicons/mstile-150x150.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
docs/assets/favicons/mstile-310x150.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
docs/assets/favicons/mstile-310x310.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
docs/assets/favicons/mstile-70x70.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
@@ -1,12 +1,14 @@
|
||||
body {
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
font-weight: 400;
|
||||
padding-bottom: 40px;
|
||||
color: #5a5a5a;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #5a5a5a;
|
||||
font-family: 'montserrat', Optima, Segoe, "Segoe UI", Candara, Calibri, Arial, sans-serif;
|
||||
font-weight: 700;
|
||||
font-weight: 400;
|
||||
line-height: 1.1;
|
||||
margin-bottom: 12px;
|
||||
margin-top: 12px;
|
||||
@@ -20,12 +22,25 @@ h1 {
|
||||
color: #fff;
|
||||
font-size: 23px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding: 0 0 0 1em;
|
||||
}
|
||||
.header a {
|
||||
background-image: url(https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/dokku.png);
|
||||
color: #fff;
|
||||
text-indent: 40px;
|
||||
background-position: center left;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
-webkit-background-size: contain;
|
||||
-moz-background-size: contain;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.blurb {
|
||||
color: #424242;
|
||||
background-color: #ededed;
|
||||
background-image: url(gplaypattern.png);
|
||||
background-image: url(https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/gplaypattern.png);
|
||||
padding: 45px 0;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -41,7 +56,7 @@ h1 {
|
||||
font-size: 12px;
|
||||
line-height: 1.3em;
|
||||
margin: 45px auto;
|
||||
max-width: 650px;
|
||||
max-width: 750px;
|
||||
padding: 0;
|
||||
}
|
||||
.quickstart-code .title {
|
||||
@@ -87,6 +102,9 @@ h1 {
|
||||
.quickstart-code .command {
|
||||
color: #ffffcc;
|
||||
}
|
||||
.quickstart-code .line .output {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
.marketing .col-lg-4 {
|
||||
margin-bottom: 20px;
|
||||
text-align: center;
|
||||
@@ -107,7 +125,122 @@ h1 {
|
||||
.featurette-heading .text-muted {
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.list-group-item {
|
||||
border: none;
|
||||
font-size: 13px;
|
||||
font-weight: normal;
|
||||
padding: .2rem .5rem;
|
||||
color: #157577;
|
||||
}
|
||||
a.list-group-item {
|
||||
color: #666
|
||||
}
|
||||
.list-group-item.disabled:first-child, .list-group-item.disabled:first-child:focus, .list-group-item.disabled:first-child:hover {
|
||||
margin-top: 0;
|
||||
}
|
||||
.list-group-item.disabled, .list-group-item.disabled:focus, .list-group-item.disabled:hover {
|
||||
background: none;
|
||||
color: #bbb;
|
||||
cursor: default;
|
||||
font-weight: normal;
|
||||
font-size: 11px;
|
||||
margin-bottom: 1em;
|
||||
margin-top: 2em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.anchorjs-link {
|
||||
color: #24cbce;
|
||||
}
|
||||
.markdown-body {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
box-sizing: border-box;
|
||||
color: rgb(71, 74, 84);
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
text-align: left;
|
||||
}
|
||||
.markdown-body h1 {
|
||||
border-bottom: 1px solid #dfdfdf;
|
||||
color: #444;
|
||||
font-size: 24px;
|
||||
padding-bottom: 1em;
|
||||
margin-top: 0;
|
||||
text-rendering: optimizelegibility;
|
||||
}
|
||||
.markdown-body h2 {
|
||||
font-size: 17px;
|
||||
font-weight: 700;
|
||||
color: #555;
|
||||
margin-top: 3em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.markdown-body h3 {
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
color: #555;
|
||||
margin: 1em 0;
|
||||
}
|
||||
.markdown-body h4 {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #555;
|
||||
margin: 1em 0;
|
||||
}
|
||||
.markdown-body h1 + h2 {
|
||||
margin-top: 1em;
|
||||
}
|
||||
code {
|
||||
padding: 0;
|
||||
padding-top: 0.2em;
|
||||
padding-bottom: 0.2em;
|
||||
margin: 0;
|
||||
font-size: 85%;
|
||||
background-color: #fff;
|
||||
background-color: rgba(0,0,0,0.06);
|
||||
color: #333;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||||
}
|
||||
code:before {
|
||||
letter-spacing: -0.2em;
|
||||
content: "\00a0";
|
||||
}
|
||||
code:after {
|
||||
letter-spacing: -0.2em;
|
||||
content: "\00a0";
|
||||
}
|
||||
pre code:before, pre code:after {
|
||||
letter-spacing: 0;
|
||||
content: "";
|
||||
}
|
||||
pre {
|
||||
display: block;
|
||||
line-height: 1.428571429;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
border: 1px solid #cccccc;
|
||||
border-radius: 4px;
|
||||
font-size: 12px;
|
||||
box-shadow: 0 0 0 3px #eee;
|
||||
overflow: auto !important;
|
||||
padding: 10px;
|
||||
background-color: #fff;
|
||||
color: #4d4d4c;
|
||||
margin: 2em 0;
|
||||
}
|
||||
blockquote {
|
||||
border-left: 4px solid #5bc0de;
|
||||
background-color: #f4f8fa;
|
||||
padding: 15px 15px 1px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
blockquote.new-as-of {
|
||||
border-left: 4px solid #ef5b58;
|
||||
background-color: #f9ad76;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.quickstart-code {
|
||||
font-size: 14px;
|
||||
|
||||
@@ -1,4 +1,54 @@
|
||||
# Checks Examples
|
||||
# Zero Downtime Deploys
|
||||
|
||||
> New as of 0.3.0
|
||||
|
||||
Following a deploy, dokku will now wait `10` seconds before routing traffic to the new container. If the container is not running after this time, then the deploy is failed and your old container will continue serving traffic. You can modify this value using the following command:
|
||||
|
||||
```shell
|
||||
dokku config:set --global DOKKU_DEFAULT_CHECKS_WAIT=30
|
||||
```
|
||||
|
||||
If your application needs a longer period to boot up - perhaps to load data into memory, or because of slow boot time - you may also use dokku's `checks` functionality to more precisely check whether an application can serve traffic or not.
|
||||
|
||||
To specify checks, add a `CHECKS` file to the root of your project directory. This is a text file with one line per check. Empty lines and lines starting with `#` are ignored.
|
||||
|
||||
A check is a relative URL and may be followed by expected content from the page, for example:
|
||||
|
||||
```
|
||||
/about Our Amazing Team
|
||||
```
|
||||
|
||||
Dokku will wait `5` seconds before running the checks to give the server time to start. This value can be overridden on a per-app basis in the `CHECKS` file by setting `WAIT=nn`. You may also override this for the global dokku installation:
|
||||
|
||||
```shell
|
||||
dokku config:set --global DOKKU_CHECKS_WAIT=15
|
||||
```
|
||||
|
||||
Dokku will wait `60` seconds before stopping the old container so that existing connections are given a chance to complete. This value is also configurable globally:
|
||||
|
||||
```shell
|
||||
dokku config:set --global DOKKU_WAIT_TO_RETIRE=120
|
||||
```
|
||||
|
||||
> Note that during this time, multiple containers may be running on your server, which can be an issue for memory-hungry applications on memory-constrained servers.
|
||||
|
||||
Dokku will retry the checks `5` times until the checks are successful. If all 5 checks fail, the deployment is considered failed. This can be overridden in the `CHECKS` file by setting `ATTEMPTS=nn`. This number is also configurable globally:
|
||||
|
||||
```shell
|
||||
dokku config:set --global DOKKU_CHECKS_ATTEMPTS=2
|
||||
```
|
||||
|
||||
You can also choose to skip checks completely either globally or on a per-application basis:
|
||||
|
||||
```shell
|
||||
# globally
|
||||
dokku config:set --global DOKKU_SKIP_ALL_CHECKS=true
|
||||
|
||||
# for APP
|
||||
dokku config:set APP DOKKU_SKIP_ALL_CHECKS=true
|
||||
```
|
||||
|
||||
## Checks Examples
|
||||
|
||||
The CHECKS file may contain empty lines, comments (lines starting with #),
|
||||
settings (NAME=VALUE) and check instructions.
|
||||
@@ -6,36 +56,49 @@ settings (NAME=VALUE) and check instructions.
|
||||
The format of a check instruction is a path, optionally followed by the
|
||||
expected content. For example:
|
||||
|
||||
/ My Amazing App
|
||||
/stylesheets/index.css .body
|
||||
/scripts/index.js $(function()
|
||||
/images/logo.png
|
||||
```
|
||||
/ My Amazing App
|
||||
/stylesheets/index.css .body
|
||||
/scripts/index.js $(function()
|
||||
/images/logo.png
|
||||
```
|
||||
|
||||
To check an application that supports multiple hostnames, use relative URLs
|
||||
that include the hostname, for example:
|
||||
|
||||
//admin.example.com Admin Dashboard
|
||||
//static.example.com/logo.png
|
||||
```
|
||||
//admin.example.com Admin Dashboard
|
||||
//static.example.com/logo.png
|
||||
```
|
||||
|
||||
You can also specify the protocol to explicitly check HTTPS requests.
|
||||
|
||||
The default behavior is to wait for 5 seconds before running the first check,
|
||||
and timeout each check to 30 seconds.
|
||||
|
||||
```
|
||||
https://admin.example.com Admin Dashboard
|
||||
https://static.example.com/logo.png
|
||||
```
|
||||
|
||||
The default behavior is to wait for 5 seconds before running the first check, and timeout each check to 30 seconds.
|
||||
|
||||
By default, checks will be attempted 5 times. (Retried 4 times)
|
||||
|
||||
You can change these by setting WAIT, TIMEOUT and ATTEMPTS to different values, for
|
||||
You can change these by setting `WAIT`, `TIMEOUT` and `ATTEMPTS` to different values, for
|
||||
example:
|
||||
|
||||
WAIT=30 # Wait 1/2 minute
|
||||
TIMEOUT=60 # Timeout after a minute
|
||||
ATTEMPTS=10 # attempt checks 10 times
|
||||
```
|
||||
WAIT=30 # Wait 1/2 minute
|
||||
TIMEOUT=60 # Timeout after a minute
|
||||
ATTEMPTS=10 # attempt checks 10 times
|
||||
|
||||
# Example: Successful Rails Deployment
|
||||
In this example, a rails applicaiton is successfully deployed to dokku. The initial round of checks fails while the server is starting, but once it starts they succeed and the deployment is successful.
|
||||
ATTEMPTS is set to 6, but the third attempt succeeds.
|
||||
/ My Amazing App
|
||||
```
|
||||
|
||||
## CHECKS file
|
||||
## Example: Successful Rails Deployment
|
||||
|
||||
In this example, a rails applicaiton is successfully deployed to dokku. The initial round of checks fails while the server is starting, but once it starts they succeed and the deployment is successful. `ATTEMPTS` is set to 6, but the third attempt succeeds.
|
||||
|
||||
### CHECKS file
|
||||
|
||||
````
|
||||
WAIT=5
|
||||
@@ -45,7 +108,7 @@ ATTEMPTS=6
|
||||
|
||||
> check.txt is a text file returning the string 'simple_check'
|
||||
|
||||
## Deploy Output
|
||||
### Deploy Output
|
||||
|
||||
> Note: The output has been trimmed for brevity
|
||||
|
||||
@@ -101,12 +164,12 @@ curl: (7) Failed to connect to 172.17.0.155 port 5000: Connection refused
|
||||
http://myapp.dokku.example.com
|
||||
````
|
||||
|
||||
# Example: Failing Rails Deployment
|
||||
## Example: Failing Rails Deployment
|
||||
In this example, a Rails application fails to deploy. The reason for the failure is that the postgres database connection fails. The initial checks will fail while we wait for the server to start up, just like in the above example. However, once the server does start accepting connections, we will see an error 500 due to the postgres database connection failure.
|
||||
|
||||
Once the attempts have been exceeded, the deployment fails and we see the container output, which shows the Postgres connection errors.
|
||||
|
||||
## CHECKS file
|
||||
### CHECKS file
|
||||
|
||||
````
|
||||
WAIT=5
|
||||
@@ -116,7 +179,7 @@ ATTEMPTS=6
|
||||
|
||||
> The check to the root url '/' would normally access the database.
|
||||
|
||||
## Deploy Output
|
||||
### Deploy Output
|
||||
|
||||
> Note: The output has been trimmed for brevity
|
||||
|
||||
|
||||
@@ -1,16 +1,57 @@
|
||||
# Configuration management
|
||||
# Environment Variables
|
||||
|
||||
Typically an application will require some configuration to run properly. Dokku supports application configuration via environment variables. Environment variables may contain private data, such as passwords or API keys, so it is not recommended to store them in your application's repository.
|
||||
|
||||
The `config` plugin provides the following commands to manage your variables:
|
||||
|
||||
```
|
||||
config <app> - display the config vars for an app
|
||||
config:get <app> KEY - display a config value for an app
|
||||
config:set <app> KEY1=VALUE1 [KEY2=VALUE2 ...] - set one or more config vars
|
||||
config:unset <app> KEY1 [KEY2 ...] - unset one or more config vars
|
||||
config (<app>|--global) Display all global or app-specific config vars
|
||||
config:get (<app>|--global) KEY Display a global or app-specific config value
|
||||
config:set (<app>|--global) KEY1=VALUE1 [KEY2=VALUE2 ...] Set one or more config vars
|
||||
config:unset (<app>|--global) KEY1 [KEY2 ...] Unset one or more config vars
|
||||
```
|
||||
|
||||
The variables are available both at run time and during the application build/compilation step. You no longer need a `user-env` plugin as Dokku handles this functionality in a way equivalent to how Heroku handles it.
|
||||
The variables are available both at run time and during the application build/compilation step.
|
||||
|
||||
> Note: Global `BUILD_ENV` files are currently migrated into a global `ENV` file and sourced before app-specific variables. This means that app-specific variables will take precedence over global variables. Configuring your global `ENV` file is manual, and should be considered potentially dangerous as configuration applies to all applications.
|
||||
> Note: Global `ENV` files are sourced before app-specific `ENV` files. This means that app-specific variables will take precedence over global variables. Configuring your global `ENV` file is manual, and should be considered potentially dangerous as configuration applies to all applications.
|
||||
|
||||
You can set multiple environment variables at once:
|
||||
|
||||
```shell
|
||||
dokku config:set node-js-app ENV=prod COMPILE_ASSETS=1
|
||||
```
|
||||
|
||||
When setting variables with whitespaces, you need to escape them:
|
||||
|
||||
```shell
|
||||
dokku config:set node-js-app KEY=\"VAL\ WITH\ SPACES\"
|
||||
```
|
||||
|
||||
When setting or unsetting environment variables, you may wish to avoid an application restart. This is useful when developing plugins or when setting multiple environment variables in a scripted manner. To do so, use the `--no-restart` flag:
|
||||
|
||||
```shell
|
||||
dokku --no-restart config:set node-js-app ENV=prod
|
||||
```
|
||||
|
||||
If you wish to have the variables output in an `eval`-compatible form, you can use the `--export` flag:
|
||||
|
||||
```shell
|
||||
dokku config node-js-app --export
|
||||
# outputs variables in the form:
|
||||
#
|
||||
# export ENV='prod'
|
||||
# export COMPILE_ASSETS='1'
|
||||
|
||||
# source in all the node-js-app app environment variables
|
||||
eval $(dokku config node-js-app --export)
|
||||
```
|
||||
|
||||
You can also output the variables in a single-line for usage in command-line utilities with the `--shell` flag:
|
||||
|
||||
```shell
|
||||
dokku config node-js-app --shell
|
||||
|
||||
# outputs variables in the form:
|
||||
#
|
||||
# ENV='prod' COMPILE_ASSETS='1'
|
||||
```
|
||||
|
||||
41
docs/deployment/dockerfiles.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Dockerfile Deployment
|
||||
|
||||
> New as of 0.3.15
|
||||
|
||||
While Dokku normally defaults to using [heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) for deployment, you can also use docker's native `Dockerfile` system to define a container.
|
||||
|
||||
To use a dockerfiles for deployment, commit a valid `Dockerfile` to the root of your repository and push the repository to your Dokku installation. If this file is detected, Dokku will default to using it to construct containers **except** in the following two cases:
|
||||
|
||||
- The application has a `BUILDPACK_URL` environment variable set via the `dokku config:set` command or in a committed `.env` file. In this case, Dokku will use your specified buildpack.
|
||||
- The application has a `.buildpacks` file in the root of the repository. In this case, Dokku will use your specified buildpack(s).
|
||||
|
||||
## Exposed ports
|
||||
|
||||
By default, Dokku will extract the first `EXPOSE` tcp port and use said port with nginx to proxy your app to that port. For applications that have multiple ports exposed, you may override this port via the following command:
|
||||
|
||||
```shell
|
||||
# replace APP with the name of your application
|
||||
dokku config:set APP DOKKU_DOCKERFILE_PORT=8000
|
||||
```
|
||||
|
||||
Dokku will not expose other ports on your application without a [custom docker-option](/dokku/configuration/docker-options/).
|
||||
|
||||
If you do not have a port explicitly exposed, Dokku will automatically expose port `5000` for your application.
|
||||
|
||||
## Customizing the run command
|
||||
|
||||
By default no arguments are passed to `docker run` when deploying the container and the `CMD` or `ENTRYPOINT` defined in the `Dockerfile` are executed. You can take advantage of docker ability of overriding the `CMD` or passing parameters to your `ENTRYPOINT` setting `$DOKKU_DOCKERFILE_START_CMD`. Let's say for example you are deploying a base nodejs image, with the following `ENTRYPOINT`:
|
||||
|
||||
```
|
||||
ENTRYPOINT ["node"]
|
||||
```
|
||||
|
||||
You can do:
|
||||
|
||||
```
|
||||
dokku config:set APP DOKKU_DOCKERFILE_START_CMD="--harmony server.js"
|
||||
```
|
||||
|
||||
To tell docker what to run.
|
||||
|
||||
Setting `$DOKKU_DOCKERFILE_CACHE_BUILD` to `true` or `false` will enable or disable docker's image layer cache. Lastly, for more granular build control, you may also pass any `docker build` option to `docker`, by setting `$DOKKU_DOCKER_BUILD_OPTS`.
|
||||
57
docs/deployment/images.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# Image Tagging
|
||||
|
||||
> New as of 0.4.0
|
||||
|
||||
The dokku tags plugin allows you to add docker image tags to the currently deployed app image for versioning and subsequent deployment.
|
||||
|
||||
```
|
||||
tags <app> List all app image tags
|
||||
tags:create <app> <tag> Add tag to latest running app image
|
||||
tags:deploy <app> <tag> Deploy tagged app image
|
||||
tags:destroy <app> <tag> Remove app image tag
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
root@dokku:~# dokku tags node-js-app
|
||||
=====> Image tags for dokku/node-js-app
|
||||
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
|
||||
dokku/node-js-app latest 936a42f25901 About a minute ago 1.025 GB
|
||||
|
||||
root@dokku:~# dokku tags:create node-js-app v0.9.0
|
||||
=====> Added v0.9.0 tag to dokku/node-js-app
|
||||
|
||||
root@dokku:~# dokku tags node-js-app
|
||||
=====> Image tags for dokku/node-js-app
|
||||
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
|
||||
dokku/node-js-app latest 936a42f25901 About a minute ago 1.025 GB
|
||||
dokku/node-js-app v0.9.0 936a42f25901 About a minute ago 1.025 GB
|
||||
|
||||
root@dokku:~# dokku tags:deploy node-js-app v0.9.0
|
||||
-----> Releasing node-js-app (dokku/node-js-app:v0.9.0)...
|
||||
-----> Deploying node-js-app (dokku/node-js-app:v0.9.0)...
|
||||
-----> Running pre-flight checks
|
||||
For more efficient zero downtime deployments, create a file CHECKS.
|
||||
See http://progrium.viewdocs.io/dokku/checks-examples.md for examples
|
||||
CHECKS file not found in container: Running simple container check...
|
||||
-----> Waiting for 10 seconds ...
|
||||
-----> Default container check successful!
|
||||
=====> node-js-app container output:
|
||||
Detected 512 MB available memory, 512 MB limit per process (WEB_MEMORY)
|
||||
Recommending WEB_CONCURRENCY=1
|
||||
> node-js-app@0.1.0 start /app
|
||||
> node index.js
|
||||
Node app is running at localhost:5000
|
||||
=====> end node-js-app container output
|
||||
-----> Running post-deploy
|
||||
-----> Configuring node-js-app.dokku.me...
|
||||
-----> Creating http nginx.conf
|
||||
-----> Running nginx-pre-reload
|
||||
Reloading nginx
|
||||
-----> Shutting down old containers in 60 seconds
|
||||
=====> 025eec3fa3b442fded90933d58d8ed8422901f0449f5ea0c23d00515af5d3137
|
||||
=====> Application deployed:
|
||||
http://node-js-app.dokku.me
|
||||
|
||||
```
|
||||
147
docs/deployment/one-off-processes.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# One-off Processes
|
||||
|
||||
Sometimes you need to either inspect running containers or run a one-off command under an application. In those cases, Dokku makes it easy to either connect to a running container or run a fresh container.
|
||||
|
||||
## Run a command in an app environment
|
||||
|
||||
```
|
||||
run <app> <cmd> Run a command in the environment of an application
|
||||
```
|
||||
|
||||
The `run` command can be used to run a one-off process for a specific command. This will start a new container and run the desired command within that container. Note that this container will be stay around even after command completes. The container will be the same container as was used to start the currently deployed application.
|
||||
|
||||
```shell
|
||||
# runs `ls -lah` in the `/app` directory of the application `node-js-app`
|
||||
dokku run node-js-app ls -lah
|
||||
```
|
||||
|
||||
If you want to remove the container after a command has started, you can run the following command:
|
||||
|
||||
```shell
|
||||
# keep `run` containers around
|
||||
dokku config:set --global DOKKU_RM_CONTAINER=1
|
||||
|
||||
# revert the above setting and keep containers around
|
||||
dokku config:unset --global DOKKU_RM_CONTAINER
|
||||
```
|
||||
|
||||
You may also use the `--rm-container` or `--rm` dokku flags to remove the containers automatically:
|
||||
|
||||
```shell
|
||||
dokku --rm-container run node-js-app ls -lah
|
||||
dokku --rm run node-js-app ls -lah
|
||||
```
|
||||
|
||||
### Using `run` for cron tasks
|
||||
|
||||
You can always use a one-off container to run an application task:
|
||||
|
||||
```shell
|
||||
dokku --rm run node-js-app some-command
|
||||
dokku --rm-container run node-js-app some-command
|
||||
```
|
||||
|
||||
For tasks that should not be interrupted, run is the **preferred** method of handling cron tasks, as the container will continue running even during a deploy or scaling event. The trade-off is that there will be an increase in memory usage if there are multiple concurrent tasks running.
|
||||
|
||||
## Entering existing containers
|
||||
|
||||
> New as of 0.4.0
|
||||
|
||||
```
|
||||
enter <app> [<container-type> || --container-id <container-id>] Connect to a specific app container
|
||||
```
|
||||
|
||||
The `enter` command can be used to enter a running container. The following variations of the command exist:
|
||||
|
||||
```shell
|
||||
dokku enter node-js-app web
|
||||
dokku enter node-js-app web.1
|
||||
dokku enter node-js-app --container-id ID
|
||||
```
|
||||
|
||||
By default, it runs a `/bin/bash`, but can also be used to run a custom command:
|
||||
|
||||
```shell
|
||||
# just echo hi
|
||||
dokku enter node-js-app web echo hi
|
||||
|
||||
# run a long-running command, as one might for a cron task
|
||||
dokku enter node-js-app web python script/background-worker.py
|
||||
```
|
||||
|
||||
### Using `enter` for cron tasks
|
||||
|
||||
Your procfile can have the following entry:
|
||||
|
||||
```
|
||||
cron: while true; do sleep 10; done
|
||||
```
|
||||
|
||||
With the `cron` process scaled to `1`:
|
||||
|
||||
```shell
|
||||
dokku ps:scale node-js-app cron=1
|
||||
```
|
||||
|
||||
You can now run all your commands in that container:
|
||||
|
||||
```shell
|
||||
dokku enter api cron some-command
|
||||
```
|
||||
|
||||
Note that you can also run multiple commands at the same time to reduce memory usage, though that may result in polluting the container environment.
|
||||
|
||||
For tasks that will properly resume, you **should** use the above method, as running tasks will be interrupted during deploys and scaling events, and subsequent commands will always run with the latest container. Note that if you scale the cron container down, this may interrupt proper running of the task.
|
||||
|
||||
## General Cron Recommendations
|
||||
|
||||
Regularly scheduled tasks can be a bit of a pain with dokku. The following are general recommendations to follow to help ensure successful task runs.
|
||||
|
||||
- Add a `MAILTO` environment variable to ship cron emails to yourself.
|
||||
- Add a `PATH` environment variable or specify the full path to binaries on the host.
|
||||
- Add a `SHELL` environment variable to specify bash when running commands.
|
||||
- Keep your cron tasks in time-sorted order.
|
||||
- Keep your server time in UTC so you don't need to translate daylight saving's time when reading the cronfile.
|
||||
- Run tasks at the lowest traffic times if possible.
|
||||
- Use cron to **trigger** jobs, not run them. Use a real queuing system such as rabbitmq to actually process jobs.
|
||||
- Try to keep tasks quiet so that mails only send on errors.
|
||||
- Do not silence standard error or standard out. If you silence the former, you will miss failures. Silencing the latter means you should actually make application changes to handle log levels.
|
||||
- Use a service such as [Dead Man's Snitch](https://deadmanssnitch.com) to verify that cron tasks completed successfully.
|
||||
- Add lots of comments to your cronfile, including what a task is doing, so that you don't spend time deciphering the file later.
|
||||
- Place your cronfiles in a pattern such as `/etc/cron.d/APP`.
|
||||
- Do not use non-ascii characters in your cronfile names. Cron is finicky.
|
||||
- Remember to have trailing newlines in your cronfile! Cron is finicky.
|
||||
|
||||
The following is a sample cronfile that you can use for your applications:
|
||||
|
||||
```
|
||||
# server cron jobs
|
||||
MAILTO="mail@example.com"
|
||||
PATH=/usr/local/bin:/usr/bin:/bin
|
||||
SHELL=/bin/bash
|
||||
|
||||
# m h dom mon dow username command
|
||||
# * * * * * dokku command to be executed
|
||||
# - - - - -
|
||||
# | | | | |
|
||||
# | | | | +----- day of week (0 - 6) (Sunday=0)
|
||||
# | | | +------- month (1 - 12)
|
||||
# | | +--------- day of month (1 - 31)
|
||||
# | +----------- hour (0 - 23)
|
||||
# +----------- min (0 - 59)
|
||||
|
||||
### HIGH TRAFFIC TIME IS B/W 00:00 - 04:00 AND 14:00 - 23:59
|
||||
### RUN YOUR TASKS FROM 04:00 - 14:00
|
||||
### KEEP SORTED IN TIME ORDER
|
||||
|
||||
### PLACE ALL CRON TASKS BELOW
|
||||
|
||||
# removes unresponsive users from the subscriber list to decrease bounce rates
|
||||
0 0 * * * dokku dokku --rm run node-js-app some-command
|
||||
|
||||
# sends out our email alerts to users
|
||||
0 1 * * * dokku dokku ps:scale node-js-app cron=1 && dokku enter node-js-app cron some-other-command && dokku ps:scale node-js-app cron=0
|
||||
|
||||
### PLACE ALL CRON TASKS ABOVE, DO NOT REMOVE THE WHITESPACE AFTER THIS LINE
|
||||
|
||||
```
|
||||
@@ -5,11 +5,14 @@
|
||||
Dokku supports SSL/TLS certificate inspection and CSR/Self-signed certificate generation via the `certs` plugin. Note that whenever SSL/TLS support is enabled SPDY is also enabled.
|
||||
|
||||
```
|
||||
certs:add <app> CRT KEY Add an ssl endpoint to an app. Can also import from a tarball on stdin.
|
||||
certs:generate <app> DOMAIN Generate a key and certificate signing request (and self-signed certificate)
|
||||
certs:info <app> Show certificate information for an ssl endpoint.
|
||||
certs:remove <app> Remove an SSL Endpoint from an app.
|
||||
certs:update <app> CRT KEY Update an SSL Endpoint on an app. Can also import from a tarball on stdin
|
||||
certs:add <app> CRT KEY Add an ssl endpoint to an app. Can also import from a tarball on stdin.
|
||||
certs:generate <app> DOMAIN Generate a key and certificate signing request (and self-signed certificate)
|
||||
certs:info <app> Show certificate information for an ssl endpoint.
|
||||
certs:remove <app> Remove an SSL Endpoint from an app.
|
||||
certs:update <app> CRT KEY Update an SSL Endpoint on an app. Can also import from a tarball on stdin
|
||||
|
||||
# for 0.3.x
|
||||
dokku nginx:import-ssl <app> < certs.tar
|
||||
```
|
||||
|
||||
## Per-application certificate management
|
||||
@@ -22,7 +25,7 @@ The `certs:add` command can be used to push a `tar` containing a certificate `.c
|
||||
|
||||
```shell
|
||||
tar cvf cert-key.tar server.crt server.key
|
||||
# replace APP with your app name
|
||||
# replace APP with the name of your application
|
||||
dokku certs:add < cert-key.tar
|
||||
```
|
||||
|
||||
@@ -32,7 +35,7 @@ dokku certs:add < cert-key.tar
|
||||
|
||||
The `certs:generate` command will walk you through the correct `openssl` commands to create a key, csr and a self-signed cert for a given app/domain. We automatically put the self-signed cert in place as well as add the specified domain to the application configuration.
|
||||
|
||||
If you decide to obtain a CA signed certficate, you can import that certicate using the aformentioned `dokku certs:add` command.
|
||||
If you decide to obtain a CA signed certficate, you can import that certificate using the aformentioned `dokku certs:add` command.
|
||||
|
||||
### Certificate information
|
||||
|
||||
@@ -89,3 +92,23 @@ Once TLS is enabled, the application will be accessible by `https://` (redirecti
|
||||
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.
|
||||
|
||||
## Running behind a load balancer
|
||||
|
||||
> New as of 0.3.17
|
||||
|
||||
Your application has access to the HTTP headers `X-Forwarded-Proto`, `X-Forwarded-For` and `X-Forwarded-Port`. These headers indicate the protocol of the original request (HTTP or HTTPS), the port number, and the IP address of the client making the request, respectively. The default configuration is for Nginx to set these headers.
|
||||
|
||||
If your server runs behind an HTTP/S load balancer, then Nginx will see all requests as coming from the load balancer. If your load balancer sets the `X-Forwarded-` headers, you can tell Nginx to pass these headers from load balancer to your application by setting the `DOKKU_SSL_TERMINATED` environment variable:
|
||||
|
||||
```shell
|
||||
dokku config:set myapp DOKKU_SSL_TERMINATED=1
|
||||
```
|
||||
|
||||
Only use this option if:
|
||||
1. All requests are terminated at the load balancer, and forwarded to Nginx
|
||||
2. The load balancer is configured to send the `X-Forwarded-` headers (this may be off by default)
|
||||
|
||||
If it's possible to make HTTP/S requests directly to Nginx, bypassing the load balancer, or if the load balancer is not configured to set these headers, then it becomes possible for a client to set these headers to arbitrary values.
|
||||
|
||||
This could result in security issue, for example, if your application looks at the value of the `X-Forwarded-Proto` to determine if the request was made over HTTPS.
|
||||
|
||||
@@ -62,9 +62,10 @@ fi
|
||||
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
ubuntu)
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
debian|ubuntu)
|
||||
apt-get install --force-yes -qq -y nginx
|
||||
;;
|
||||
|
||||
@@ -436,6 +437,24 @@ APP="$1";
|
||||
dokku postgres:destroy $APP
|
||||
```
|
||||
|
||||
### `post-stop`
|
||||
|
||||
- Description: Can be used to run commands after an application is manually stopped
|
||||
- Invoked by: `dokku ps:stop`
|
||||
- Arguments: `$APP`
|
||||
- Example:
|
||||
|
||||
```shell
|
||||
#!/usr/bin/env bash
|
||||
# Marks an application as manually stopped
|
||||
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
APP="$1";
|
||||
|
||||
dokku config:set --no-restart $APP MANUALLY_STOPPED=1
|
||||
```
|
||||
|
||||
### `docker-args-build`
|
||||
|
||||
- Description:
|
||||
@@ -587,6 +606,25 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
nginx -t
|
||||
```
|
||||
|
||||
### `pre-receive-app`
|
||||
|
||||
- Description: Allows you to customize the contents of an application directory before they are processed for deployment. The `IMAGE_SOURCE_TYPE` can be any of `[herokuish, dockerfile]`
|
||||
- Invoked by: `dokku git-hook`, `dokku tar-build-locked`
|
||||
- Arguments: `$APP $IMAGE_SOURCE_TYPE $TMP_WORK_DIR $REV`
|
||||
- Example:
|
||||
|
||||
```shell
|
||||
#!/usr/bin/env bash
|
||||
# Adds a file called `dokku-is-awesome` to the repository
|
||||
# the contents will be the application name
|
||||
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
APP="$1"; IMAGE_SOURCE_TYPE="$2"; TMP_WORK_DIR="$3"; REV="$4"
|
||||
|
||||
echo "$APP" > "$TMP_WORK_DIR/dokku-is-awesome"
|
||||
```
|
||||
|
||||
### `receive-app`
|
||||
|
||||
- Description: Allows you to customize what occurs when an app is received. Normally just triggers an application build.
|
||||
|
||||
@@ -4,11 +4,20 @@ Dokku is released in intervals *at most* three weeks apart, though may be releas
|
||||
|
||||
To propose a release, the following tasks need to be performed:
|
||||
|
||||
- The installable version must be changed in the `docs/installation.md` file.
|
||||
- The installable version must be changed in the `contrib/dokku-installer.rb` file.
|
||||
- The installable version must be changed in the `debian/control` file.
|
||||
- The installable version must be changed in the `docs/home.html` file
|
||||
- The installable version must be changed in the `docs/index.md` file
|
||||
- The installable version must be changed in the `docs/installation.md` file.
|
||||
- The installable version must be changed in the `docs/template.html` file.
|
||||
- The installable version must be changed in the `README.md` file.
|
||||
- The installable version must be changed in the `contrib/dokku-installer.rb` file.
|
||||
- The embedded css should be cleared in the `docs/template.html` file.
|
||||
- The versioned links should be updated in the `docs/assets/favicons/browserconfig.xml` file.
|
||||
- The versioned links should be updated in the `docs/assets/favicons/manifest.json` file.
|
||||
- The versioned links should be updated in the `docs/assets/style.css` file.
|
||||
- The versioned links should be updated in the `docs/home.html` file.
|
||||
- The versioned links should be updated in the `docs/template.html` file.
|
||||
- The versioned links should be updated in the `docs/template.html` file.
|
||||
- A list of changes must be made in the `HISTORY.md`.
|
||||
- A tag must be created locally with your release version
|
||||
- Debian packages *must* be created via `vagrant up build`
|
||||
|
||||
53
docs/dns.md
@@ -1,52 +1,52 @@
|
||||
# Overview
|
||||
# DNS Configuration
|
||||
|
||||
This is a work in progress.
|
||||
> Note: This is a work in progress.
|
||||
|
||||
## DNS Versions
|
||||
### DNS Versions
|
||||
|
||||
There are many different DNS servers 'in the wild'. Some of the popular ones on Linux are BIND, dnsmasq, and pdns. Windows has its own built-in DNS server as well as Unbound, Posadis, and more. A full list of DNS packages can be found on Wikipedia under [Comparison of DNS Server Software](http://en.wikipedia.org/wiki/Comparison_of_DNS_server_software). In addition to the various DNS packages, there are tens of thousands of [Managed DNS Providers](http://en.wikipedia.org/wiki/List_of_managed_DNS_providers) out that all have different DNS interfaces.
|
||||
|
||||
## Focus
|
||||
### Focus
|
||||
|
||||
Because there are so many different DNS server packages out there as well as a tremendous number of Managed DNS Providers, we will focus on the concepts of DNS as well as providing examples in the 'BIND' format so you can adapt the information to your own server package or managed DNS provider.
|
||||
|
||||
## Assumptions
|
||||
### Assumptions
|
||||
|
||||
* We assume you have a passing familiarity with DNS. If not, you can read an [in-depth article](http://www.diaryofaninja.com/blog/2012/03/03/devops-dns-for-developers-ndash-now-therersquos-no-excuse-not-to-know) on DNS. But basically you need to know that DNS changes names (like example.tld) into addresses (like 127.0.0.1)
|
||||
* We assume you already have a domain name registered and pointed to your favorite Managed DNS Provider or have your own BIND DNS server running.
|
||||
* You have a server on the internet and are about to follow the instructions in the [README](https://github.com/progrium/dokku/blob/master/README.md) to get dokku installed. Don't do the install just yet though.
|
||||
|
||||
|
||||
## HELP!
|
||||
### HELP!
|
||||
|
||||
Don't be afraid to ask if you need help. Create a [new issue](https://github.com/progrium/dokku/issues) and someone will be glad to assist you.
|
||||
|
||||
|
||||
# Getting started
|
||||
|
||||
For the examples, we will use the domain name 'example.tld' and the IP address '127.0.0.1'.
|
||||
For the examples, we will use the domain name `example.tld` and the IP address `127.0.0.1`.
|
||||
|
||||
Dokku uses a DNS to differentiate between apps on your dokku-powered server. If you are using the domain 'example.tld', and you have two apps 'myapp1' and 'myapp2', dokku will make them available at 'myapp1.example.tld' and 'myapp2.example.tld'.
|
||||
Dokku uses DNS to differentiate between apps on your dokku-powered server. If you are using the domain `example.tld`, and you have two apps `myapp1` and `myapp2`, dokku will make them available at `myapp1.example.tld` and `myapp2.example.tld`.
|
||||
|
||||
To get started, you need to know the IP address of your dokku server. Connect in to it and run 'ifconfig' or 'ip addr' to see the IP address.
|
||||
To get started, you need to know the IP address of your dokku server. Connect to it and run `ifconfig` or `ip addr` to see the IP address.
|
||||
|
||||
# Caching
|
||||
|
||||
Please remember that DNS relies heavily on _caching_. Changes you make to DNS could take anywhere from a few seconds to a few *days* to 'propagate'. If you tried surfing to example.tld, then changed the IP address in DNS, it could be a while before your computer picks up on the changes.
|
||||
Please remember that DNS relies heavily on _caching_. Changes you make to DNS could take anywhere from a few seconds to a few *days* to propagate. If you tried surfing to example.tld, then changed the IP address in DNS, it could be a while before your computer picks up on the changes.
|
||||
|
||||
## The two methods
|
||||
|
||||
Now you have to make a decision about your domain. Do you want everything and anything at example.tld to go to your dokku server, or would you rather use a 'sub domain' for your dokku server?
|
||||
Now you have to make a decision about your domain. Do you want everything and anything at `example.tld` to go to your dokku server, or would you rather use a 'sub domain' for your dokku server?
|
||||
|
||||
In other words, do you want your applications on your dokku server accessible via myapp.example.tld or via myapp.myserver.example.tld?
|
||||
In other words, do you want your applications on your dokku server accessible via `myapp.example.tld` or via `myapp.myserver.example.tld`?
|
||||
|
||||
### Using a sub-domain (myapp.myserver.example.tld)
|
||||
|
||||
Using a sub-domain is easy. When you set up your server, you probably gave it a name like myserver.example.tld.
|
||||
Using a sub-domain is easy. When you set up your server, you probably gave it a name like `myserver.example.tld`.
|
||||
|
||||
Go in to your Managed DNS provider and create an 'A' record named 'myserver' and put in the IP address you got from your server a few moments ago.
|
||||
Go in to your Managed DNS provider and create an `A` record named `myserver` and put in the IP address you got from your server a few moments ago.
|
||||
|
||||
Hopefully your managed DNS provider also supports wildcards. Create a second 'A' record named '*.myserver' along with the IP address you got from your server a few moments ago.
|
||||
Hopefully your managed DNS provider also supports wildcards. Create a second `A` record named `*.myserver` along with the IP address you got from your server a few moments ago.
|
||||
|
||||
If you are using BIND, your zone file will look similar to this:
|
||||
|
||||
@@ -55,26 +55,23 @@ $ORIGIN example.tld
|
||||
$TTL 5m
|
||||
|
||||
myserver IN A 127.0.0.1
|
||||
*.myserver IN A 127.0.0.1
|
||||
*.myserver IN A 127.0.0.1
|
||||
```
|
||||
|
||||
You can verify your changes in Linux by trying one or more of the following commands:
|
||||
|
||||
* host myserver.example.tld
|
||||
|
||||
* dig -t A myserver.example.tld
|
||||
|
||||
* nslookup myserver.example.tld
|
||||
* `host myserver.example.tld`
|
||||
* `dig -t A myserver.example.tld`
|
||||
* `nslookup myserver.example.tld`
|
||||
|
||||
Now is a good time to remind you that the answers you get MAY BE CACHED.
|
||||
|
||||
If everything is working correctly, you should also be able to query for any other name 'under' myserver.example.tld and get back the IP address of your server. Try:
|
||||
If everything is working correctly, you should also be able to query for any other name under `myserver.example.tld` and get back the IP address of your server. Try:
|
||||
|
||||
* host test.myserver.example.tld
|
||||
* `host test.myserver.example.tld`
|
||||
* `host xyzzy.myserver.example.tld`
|
||||
|
||||
* host xyzzy.myserver.example.tld
|
||||
|
||||
If they all return your IP address, you have set DNS up properly for dokku. You should also be able to 'ssh root@myserver.example.tld' and access your server.
|
||||
If they all return your IP address, you have set DNS up properly for dokku. You should also be able to `ssh root@myserver.example.tld` and access your server.
|
||||
|
||||
Proceed with the setup instructions in the [README](https://github.com/progrium/dokku/blob/master/README.md)
|
||||
|
||||
@@ -84,5 +81,5 @@ This section is a work in progress. It is incomplete.
|
||||
|
||||
Using the 'root' of your domain is nearly identical to the previous example.
|
||||
|
||||
* hostname is under example.tld, still needs A record
|
||||
* Need to modify /home/dokku/HOSTNAME and /home/dokku/VHOST
|
||||
* hostname is under `example.tld`, still needs `A` record
|
||||
* Need to modify `/home/dokku/HOSTNAME` and `/home/dokku/VHOST`
|
||||
|
||||
@@ -1,57 +1,52 @@
|
||||
docker-options
|
||||
========================
|
||||
# Docker Container Options
|
||||
|
||||
Usage
|
||||
-----
|
||||
> New as of 0.3.17
|
||||
|
||||
```bash
|
||||
$ dokku help
|
||||
...
|
||||
docker-options <app> Display apps docker options for all phases
|
||||
docker-options <app> <phase(s)> Display apps docker options for phase (comma-separated phase list)
|
||||
docker-options:add <app> <phase(s)> OPTION Add docker option to app for phase (comma-separated phase list)
|
||||
docker-options:remove <app> <phase(s)> OPTION Remove docker option from app for phase (comma-separated phase list)
|
||||
...
|
||||
````
|
||||
```
|
||||
docker-options <app> Display apps docker options for all phases
|
||||
docker-options <app> <phase(s)> Display apps docker options for phase (comma-separated phase list)
|
||||
docker-options:add <app> <phase(s)> OPTION Add docker option to app for phase (comma-separated phase list)
|
||||
docker-options:remove <app> <phase(s)> OPTION Remove docker option from app for phase (comma-separated phase list)
|
||||
```
|
||||
|
||||
Add some options (first, for the deployed/running app and second when executing `dokku run`)
|
||||
Add some options (first, for the deployed/running app and second when executing `dokku run`):
|
||||
|
||||
```bash
|
||||
$ dokku docker-options:add myapp deploy "-v /host/path:/container/path"
|
||||
$ dokku docker-options:add myapp run "-v /another/container/path"
|
||||
```
|
||||
dokku docker-options:add myapp deploy "-v /host/path:/container/path"
|
||||
dokku docker-options:add myapp run "-v /another/container/path"
|
||||
```
|
||||
|
||||
Check what we added
|
||||
|
||||
```bash
|
||||
$ dokku docker-options myapp
|
||||
Deploy options:
|
||||
-v /host/path:/container/path
|
||||
Run options:
|
||||
-v /another/container/path
|
||||
```shell
|
||||
dokku docker-options myapp
|
||||
# Deploy options:
|
||||
# -v /host/path:/container/path
|
||||
# Run options:
|
||||
# -v /another/container/path
|
||||
```
|
||||
|
||||
Remove an option
|
||||
```bash
|
||||
$ dokku docker-options:remove myapp run "--link container_name:alias"
|
||||
|
||||
```shell
|
||||
dokku docker-options:remove myapp run "--link container_name:alias"
|
||||
```
|
||||
|
||||
Note about `dokku` phases and `docker-options`
|
||||
------------
|
||||
`dokku` deploys your application in multiple "phases" and the `docker-options` plugin allows you to pass arguments to the underlying docker container in the following 3 phases/containers
|
||||
### Note about `dokku` phases and `docker-options`
|
||||
|
||||
`dokku` deploys your application in multiple "phases" and the `docker-options` plugin allows you to pass arguments to the underlying docker container in the following 3 phases/containers:
|
||||
|
||||
- `build`: the container that executes the appropriate buildpack
|
||||
- `deploy`: the container that executes your running/deployed application
|
||||
- `run`: the container that executes any arbitrary command via `dokku run myapp`
|
||||
|
||||
|
||||
Advanced Usage (avoid if possible)
|
||||
------------
|
||||
## Advanced Usage (avoid if possible)
|
||||
|
||||
In your applications folder (`/home/dokku/app_name`) create a file called `DOCKER_OPTIONS_RUN` (or `DOCKER_OPTIONS_BUILD` or `DOCKER_OPTIONS_DEPLOY`).
|
||||
|
||||
Inside this file list one docker option per line. For example:
|
||||
|
||||
```bash
|
||||
```shell
|
||||
--link container_name:alias
|
||||
-v /host/path:/container/path
|
||||
-v /another/container/path
|
||||
@@ -59,7 +54,7 @@ Inside this file list one docker option per line. For example:
|
||||
|
||||
The above example will result in the following options being passed to docker during `dokku run`:
|
||||
|
||||
```bash
|
||||
```shell
|
||||
--link container_name:alias -v /host/path:/container/path -v /another/container/path
|
||||
```
|
||||
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
# Dokku Event Logs
|
||||
|
||||
> New as of 0.3.21
|
||||
|
||||
Docker provides an _events_ command to show system's real time events. Likewise, Dokku can record events as syslog entries and also provides a plugin to display the last ones.
|
||||
|
||||
```
|
||||
events [-t] Show the last events (-t follows)
|
||||
events:list List logged events
|
||||
events:on Enable events logger
|
||||
events:off Disable events logger
|
||||
events [-t] Show the last events (-t follows)
|
||||
events:list List logged events
|
||||
events:on Enable events logger
|
||||
events:off Disable events logger
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
11
docs/getting-started/install/azure.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Microsoft Azure
|
||||
|
||||
- If you don't already have one [generate an SSH key pair](https://help.github.com/articles/generating-ssh-keys/).
|
||||
|
||||
- Go to the [dokku on azure deployment page](https://azure.microsoft.com/en-us/documentation/templates/dokku-vm/) and click **Deploy to Azure**.
|
||||
|
||||
- You'll be prompted to enter a few parameters, including a unique storage account name and a unique name for the sub-domain used for your public IP address. For the `sshKeyData` parameter, copy and paste the contents of the **public** key file you just created. After a few minutes the Dokku instance will be deployed.
|
||||
|
||||
- In your browser of choice, navigate to `http://[[dnsNameForPublicIP]].[[location]].cloudapp.azure.com`. Where `[[dnsNameForPublicIP]]` and `[[location]]` are template parameters you used to deploy the template.
|
||||
|
||||
- Finish your dokku setup like you normally would by creating a **new** public/private key pair for your deployments using `ssh-keygen` (don't use the same one as you created in the first step). You should select 'Use Virtual Host Naming' and set the `Hostname` to a **public dns name** that you own such as one you would purchase from [namecheap](http://namecheap.com). Alternatively thanks to [xip.io]( http://xip.io/) you can just use yourAzurePublicIP.xip.io for free. For example, if your public IP is `44.44.44.44` then you would set it to `44.44.44.44.xip.io`.
|
||||
@@ -15,6 +15,7 @@ curl -sSL https://packagecloud.io/gpg.key | apt-key add -
|
||||
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" | sudo tee /etc/apt/sources.list.d/dokku.list
|
||||
sudo apt-get update -qq > /dev/null
|
||||
sudo apt-get install dokku
|
||||
sudo dokku plugin:install-dependencies --core
|
||||
```
|
||||
|
||||
## Unattended installation
|
||||
|
||||
@@ -1,36 +1,39 @@
|
||||
# Installing on Linode
|
||||
|
||||
Due to how Linode installs custom kernels, Linode instances *require* a reboot before they can fully work with Docker/Dokku. The Official Dokku StackScript should take care of this process for you, and will email notify you when the instance is running and you can proceed with installation.
|
||||
When installing Dokku on a Linode server, you'll likely see an error during Docker installation:
|
||||
|
||||
## Using StackScript
|
||||
> Warning: current kernel is not supported by the linux-image-extra-virtual package. We have no AUFS support. Consider installing the packages linux-image-virtual kernel and linux-image-extra-virtual for AUFS support.
|
||||
|
||||
Deploy using the following (experimental) Official StackScript:
|
||||
After 10 seconds, the installation will continue as normal.
|
||||
|
||||
- https://www.linode.com/stackscripts/view/11348
|
||||
This warning is the result of Linode using its own kernel, which does not support AUFS, instead of using the kernel supplied by Ubuntu. If you ignore the warning, Docker will fall back to using the DeviceMapper storage backend and Dokku will work normally. However, AUFS is better tested and will perform better.
|
||||
|
||||
## Without StackScript
|
||||
If you would like to use AUFS, follow the steps below to install Ubuntu's kernel and configure your server to boot it instead of Linode's.
|
||||
|
||||
* Build a Ubuntu 13.04 instance
|
||||
## Preparing your Linode for AUFS
|
||||
|
||||
* Follow these instructions: https://www.linode.com/docs/tools-reference/custom-kernels-distros/run-a-distributionsupplied-kernel-with-pvgrub#ubuntu-1304-raring
|
||||
__Warning__: These steps will delete *everything* on your Linode.
|
||||
|
||||
* If `apt-get update` no longer works:
|
||||
1. Open your server's dashboard in the [Linode Manager](https://manager.linode.com/).
|
||||
|
||||
* Verify if apt-get is trying to use ipv6 instead of ipv4 (e.g. you read something like "[Connecting to us.archive.ubuntu.com (2001:67c:1562::14)]" and apt-get would not proceed). In that case, follow these instructions: http://unix.stackexchange.com/questions/9940/convince-apt-get-not-to-use-ipv6-method (append "precedence ::ffff:0:0/96 100" to /etc/gai.conf)
|
||||
2. Make sure your Linode is [using KVM](https://www.linode.com/docs/platform/kvm#how-to-enable-kvm), not Xen, for virtualization.
|
||||
|
||||
* OR: change `/etc/apt/sources.list` to one mentioned in http://mirrors.ubuntu.com/mirrors.txt
|
||||
3. In the "Rebuild" tab, select "Ubuntu 14.04 LTS", set a root password, and rebuild.
|
||||
|
||||
* Run the following commands:
|
||||
4. Once your Linode has been created, click "Boot" and wait for it to complete.
|
||||
|
||||
```shell
|
||||
apt-get update
|
||||
5. SSH into your Linode as root and run the following commands:
|
||||
|
||||
apt-get install lxc wget bsdtar linux-image-extra-$(uname -r)
|
||||
apt-get update
|
||||
apt-get -qq upgrade
|
||||
apt-get -qq install linux-image-virtual linux-image-extra-virtual
|
||||
|
||||
modprobe aufs
|
||||
```
|
||||
* After this, you can install dokku the default way:
|
||||
6. When prompted, install Grub onto the first hard drive.
|
||||
|
||||
```shell
|
||||
wget -qO- https://raw.github.com/progrium/dokku/master/bootstrap.sh | sudo bash
|
||||
```
|
||||
7. Back in your server's dashboard, click "Edit" on its Configuration Profile
|
||||
|
||||
8. Change the "Kernel" option to "GRUB 2" and save your changes.
|
||||
|
||||
9. Lastly, reboot the Linode.
|
||||
|
||||
Once your server comes back online, you'll be running Ubuntu's default kernel. You can now follow Dokku's [normal installation instructions](http://progrium.viewdocs.io/dokku/installation) and `bootstrap.sh` will take care of everything else.
|
||||
|
||||
@@ -18,8 +18,8 @@ If you’re stumped, give us a holler in the Dokku IRC channel. Someone from the
|
||||
|
||||
If [here](http://webchat.freenode.net/?channels=dokku) for a web-based client IRC client.
|
||||
|
||||
## Stackoverflow
|
||||
## Stack Overflow
|
||||
|
||||
http://stackoverflow.com/
|
||||
|
||||
Tag your questions with `dokku` to enable existing users of stackoverflow to find your questions.
|
||||
Tag your questions with `dokku` to enable existing users of Stack Overflow to find your questions.
|
||||
|
||||
@@ -10,6 +10,28 @@
|
||||
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
|
||||
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon.ico">
|
||||
<meta name="apple-mobile-web-app-title" content="Dokku">
|
||||
<meta name="application-name" content="Dokku">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
|
||||
<style type="text/css">
|
||||
body{padding-bottom:40px;color:#5a5a5a}
|
||||
@@ -18,11 +40,12 @@
|
||||
.header .heading{color:#fff;font-size:23px;margin:0;padding:0}
|
||||
.blurb{color:#424242;background-color:#ededed;background-image:url(./assets/gplaypattern.png);padding:45px 0;text-align:center}
|
||||
.blurb p{font-size:17px;font-weight:300;margin:18px 0;text-align:center}
|
||||
.quickstart-code{display:block;font-size:12px;line-height:1.3em;margin:45px auto;max-width:650px;padding:0}
|
||||
.quickstart-code{display:block;font-size:12px;line-height:1.3em;margin:45px auto;max-width:750px;padding:0}
|
||||
.quickstart-code .title{background-color:#dfdfdf;background-image:linear-gradient(top,#f7f7f7 0%,#dfdfdf 7%,#ccc 100%);border-bottom:1px solid #111;color:#444;display:block;font-weight:400;font-size:14px;margin:0 20px;padding:3px 0;text-align:center;text-shadow:0 1px 0 rgba(255,255,255,0.5);border-radius:5px 5px 0 0;box-shadow:0 3px 0 rgba(0,0,0,0.5)}
|
||||
.quickstart-code .shell{background-color:#171717;font-family:Menlo,Consolas,"Courier New",Courier,"Liberation Mono",monospace;margin:0 20px;padding:20px;text-shadow:none;border-radius:0 0 5px 5px;box-shadow:0 5px 30px rgba(0,0,0,0.3)}
|
||||
.quickstart-code .line{display:block;margin:0;padding:0}
|
||||
.quickstart-code .line span{display:inline-block}
|
||||
.quickstart-code .line .output{color:#aaaaaa;}
|
||||
.quickstart-code .path{color:#2a8fbd;user-select:none}
|
||||
.quickstart-code .prompt{color:#f90;user-select:none}
|
||||
.quickstart-code .command{color:#ffc}
|
||||
@@ -52,7 +75,7 @@
|
||||
<h2>The smallest PaaS implementation you've ever seen</h2>
|
||||
<p>Docker powered mini-Heroku in around 200 lines of Bash</p>
|
||||
<div class="blurb-buttons">
|
||||
<a class="btn btn-lg btn-warning" href="http://progrium.viewdocs.io/dokku/installation">View Documentation</a>
|
||||
<a class="btn btn-lg btn-warning" href="/dokku/installation">View Documentation</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -64,12 +87,12 @@
|
||||
<p class="line">
|
||||
<span class="path">~</span>
|
||||
<span class="prompt">$</span>
|
||||
<span class="command">wget https://raw.github.com/progrium/dokku/v0.4.0/bootstrap.sh</span>
|
||||
<span class="command">wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh</span>
|
||||
</p>
|
||||
<p class="line">
|
||||
<span class="path">~</span>
|
||||
<span class="prompt">$</span>
|
||||
<span class="command">sudo DOKKU_TAG=v0.4.0 bash bootstrap.sh</span>
|
||||
<span class="command">sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh</span>
|
||||
</p>
|
||||
<p class="line">
|
||||
<span class="output"># => Go to your server's IP and follow the web installer</span>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<h2>The smallest PaaS implementation you've ever seen</h2>
|
||||
<p>Docker powered mini-Heroku in around 200 lines of Bash</p>
|
||||
<div class="blurb-buttons">
|
||||
<a class="btn btn-lg btn-warning" href="http://progrium.viewdocs.io/dokku/installation">View Documentation</a>
|
||||
<a class="btn btn-lg btn-warning" href="/dokku/installation">View Documentation</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -15,12 +15,12 @@
|
||||
<p class="line">
|
||||
<span class="path">~</span>
|
||||
<span class="prompt">$</span>
|
||||
<span class="command">wget https://raw.github.com/progrium/dokku/v0.4.0/bootstrap.sh</span>
|
||||
<span class="command">wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh</span>
|
||||
</p>
|
||||
<p class="line">
|
||||
<span class="path">~</span>
|
||||
<span class="prompt">$</span>
|
||||
<span class="command">sudo DOKKU_TAG=v0.4.0 bash bootstrap.sh</span>
|
||||
<span class="command">sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh</span>
|
||||
</p>
|
||||
<p class="line">
|
||||
<span class="output"># => Go to your server's IP and follow the web installer</span>
|
||||
|
||||
@@ -1,33 +1,49 @@
|
||||
# Installation
|
||||
# Getting Started with Dokku
|
||||
|
||||
## Requirements
|
||||
## What is Dokku?
|
||||
|
||||
- A fresh VM running Ubuntu `14.04 x64`
|
||||
- At least `1GB` of system memory ([workaround for 512MB machines](http://progrium.viewdocs.io/dokku/advanced-installation))
|
||||
- The VM should have a FQDN set before installation (check by running `sudo hostname -f`).
|
||||
Dokku is an extensible, open source Platform as a Service that runs on a single server of your choice.
|
||||
|
||||
Ubuntu 14.04 x64. Ideally have a domain ready to point to your host. It's designed for and is probably best to use a fresh VM. The bootstrapper will install everything it needs.
|
||||
To start using Dokku, you'll need a system with that meets the following minimum requirements:
|
||||
|
||||
## Installing the latest Stable version
|
||||
- A fresh installation of [Ubuntu 14.04 x64](http://www.ubuntu.com/download/) with the FQDN set <sup>[1]</sup>
|
||||
- At least `1GB` of system memory <sup>[2]</sup>
|
||||
|
||||
To install the latest stable version of dokku, you can run the following bootstrapper command:
|
||||
You can *optionally* have a domain name pointed at the host's IP, though this is not necessary.
|
||||
|
||||
Dokku is designed for usage on a fresh installation of Ubuntu, and should install all necessary dependencies if installing via the bootstrap method.
|
||||
|
||||
### Installing the latest stable version
|
||||
|
||||
To install the latest stable version of dokku, you can run the following shell commands:
|
||||
|
||||
```shell
|
||||
# installs dokku via apt-get
|
||||
wget https://raw.github.com/progrium/dokku/v0.4.0/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.4.0 bash bootstrap.sh
|
||||
|
||||
# By default, this will do cli-based setup, though you may *also*
|
||||
# go to your server's IP and follow the web installer
|
||||
wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh
|
||||
```
|
||||
|
||||
The installation process takes about 5-10 minutes, depending upon internet connection speed.
|
||||
|
||||
Once the installation is complete, you can open a browser to setup your SSH key and virtualhost settings. Open your browser of choice and navigate to the host's IP address - or the domain you assigned to that IP previously - and configure dokku via the web admin.
|
||||
|
||||
Once you save your settings, the web admin will self-terminate and you should be able to run or deploy to the dokku installation.
|
||||
|
||||
### Installing via other methods
|
||||
|
||||
For various reasons, certain hosting providers may have other steps that should be preferred to the above. If hosted on any of the following popular hosts, please follow the linked to instructions:
|
||||
|
||||
- [Digital Ocean Installation Notes](http://progrium.viewdocs.io/dokku/getting-started/install/digitalocean)
|
||||
- [Linode Installation Notes](http://progrium.viewdocs.io/dokku/getting-started/install/linode)
|
||||
- [Linode Installation Notes](http://progrium.viewdocs.io/dokku/getting-started/install/linode/)
|
||||
- [Microsoft Azure Installation Notes](http://progrium.viewdocs.io/dokku/getting-started/install/azure/)
|
||||
|
||||
As well, you may wish to customize your installation in some other fashion. or experiment with vagrant. The guides below should get you started:
|
||||
|
||||
- [Debian Package Installation Notes](http://progrium.viewdocs.io/dokku/getting-started/install/debian)
|
||||
- [Vagrant Installation Notes](http://progrium.viewdocs.io/dokku/getting-started/install/vagrant)
|
||||
- [Advanced Install Customization](http://progrium.viewdocs.io/dokku/advanced-installation)
|
||||
|
||||
---
|
||||
|
||||
- <sup>[1]: To check whether your system has an fqdn set, run `sudo hostname -f`</sup>
|
||||
- <sup>[2]: If your system has less than 1GB of memory, you can use ([this workaround](http://progrium.viewdocs.io/dokku/advanced-installation)).</sup>
|
||||
|
||||
160
docs/nginx.md
@@ -1,99 +1,28 @@
|
||||
# Nginx
|
||||
# Nginx Configuration
|
||||
|
||||
Dokku uses nginx as it's server for routing requests to specific applications. By default, access and error logs are written for each app to `/var/log/nginx/${APP}-access.log` and `/var/log/nginx/${APP}-error.log` respectively
|
||||
Dokku uses nginx as its server for routing requests to specific applications. By default, access and error logs are written for each app to `/var/log/nginx/${APP}-access.log` and `/var/log/nginx/${APP}-error.log` respectively
|
||||
|
||||
```
|
||||
nginx:access-logs <app> [-t] Show the nginx access logs for an application (-t follows)
|
||||
nginx:build-config <app> (Re)builds nginx config for given app
|
||||
nginx:disable <app> disable nginx for an application (forces container binding to external interface)
|
||||
nginx:enable <app> enable nginx for an application
|
||||
nginx:error-logs <app> [-t] Show the nginx error logs for an application (-t follows)
|
||||
nginx:access-logs <app> [-t] Show the nginx access logs for an application (-t follows)
|
||||
nginx:build-config <app> (Re)builds nginx config for given app
|
||||
nginx:disable <app> Disable nginx for an application (forces container binding to external interface)
|
||||
nginx:enable <app> Enable nginx for an application
|
||||
nginx:error-logs <app> [-t] Show the nginx error logs for an application (-t follows)
|
||||
```
|
||||
|
||||
## 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.
|
||||
|
||||
### SSL Configuration
|
||||
|
||||
In 0.4.0, SSL Configuration has been replaced by the [`certs` plugin](http://progrium.viewdocs.io/dokku/deployment/ssl-configuration)). For users of dokku 0.3.x, please refer to the following sections.
|
||||
|
||||
### Per App
|
||||
|
||||
To enable TLS connections to to one of your applications, do the following:
|
||||
|
||||
* Create a key file and a cert file.
|
||||
* You can find detailed steps for generating a self-signed certificate at https://devcenter.heroku.com/articles/ssl-certificate-self
|
||||
* If you are not paranoid and need it just for a DEV or STAGING app, you can use http://www.selfsignedcertificate.com/ to generate your 2 files more easily.
|
||||
* Rename your files to server.key and server.crt
|
||||
* tar these 2 files together, *without* subdirectories. Example: tar cvf cert-key.tar server.crt server.key
|
||||
* Install the pair for your app, like this: ssh dokku@ip-of-your-dokku-server nginx:import-ssl < cert-key.tar
|
||||
|
||||
You will need to repeat the steps above for each domain used to serve your app. You can't simply create a single tar with all key/cert files in it (see https://github.com/progrium/dokku/issues/1195).
|
||||
|
||||
|
||||
### All Subdomains
|
||||
|
||||
To enable TLS connections for all your applications at once you will need a wildcard TLS certificate.
|
||||
|
||||
To enable TLS across all apps, copy or symlink the `.crt` and `.key` files into the `/home/dokku/tls` folder (create this folder if it doesn't exist) as `server.crt` and `server.key` respectively. Then, enable the certificates by editing `/etc/nginx/conf.d/dokku.conf` and uncommenting these two lines (remove the #):
|
||||
|
||||
```
|
||||
ssl_certificate /home/dokku/tls/server.crt;
|
||||
ssl_certificate_key /home/dokku/tls/server.key;
|
||||
```
|
||||
|
||||
The nginx configuration will need to be reloaded in order for the updated TLS configuration to be applied. This can be done either via the init system or by re-deploying the application. Once TLS is enabled, the application will be accessible by `https://` (redirection from `http://` is applied as well).
|
||||
|
||||
**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
|
||||
|
||||
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 is expanded via `tar xvf`. It should contain `server.crt` and `server.key`.
|
||||
|
||||
|
||||
## Running behind a load balancer
|
||||
|
||||
> New as of 0.3.17
|
||||
|
||||
Your application has access to the HTTP headers `X-Forwarded-Proto`, `X-Forwarded-For` and `X-Forwarded-Port`. These headers indicate the protocol of the original request (HTTP or HTTPS), the port number, and the IP address of the client making the request, respectively. The default configuration is for Nginx to set these headers.
|
||||
|
||||
If your server runs behind an HTTP/S load balancer, then Nginx will see all requests as coming from the load balancer. If your load balancer sets the `X-Forwarded-` headers, you can tell Nginx to pass these headers from load balancer to your application by setting the `DOKKU_SSL_TERMINATED` environment variable:
|
||||
|
||||
```shell
|
||||
dokku config:set myapp DOKKU_SSL_TERMINATED=1
|
||||
```
|
||||
|
||||
Only use this option if:
|
||||
1. All requests are terminated at the load balancer, and forwarded to Nginx
|
||||
2. The load balancer is configured to send the `X-Forwarded-` headers (this may be off by default)
|
||||
|
||||
If it's possible to make HTTP/S requests directly to Nginx, bypassing the load balancer, or if the load balancer is not configured to set these headers, then it becomes possible for a client to set these headers to arbitrary values.
|
||||
|
||||
This could result in security issue, for example, if your application looks at the value of the `X-Forwarded-Proto` to determine if the request was made over HTTPS.
|
||||
|
||||
|
||||
## Customizing the nginx configuration
|
||||
|
||||
> New as of 0.4.0.
|
||||
|
||||
Dokku currently templates out an nginx configuration that is included in the `nginx-vhosts` plugin. If you'd like to provide a custom template for your application, you should copy the existing template - ssl or non-ssl - into your application repository's root directory as the file `nginx.conf.template`. The next time you deploy, Nginx will use your template instead of the default.
|
||||
|
||||
> New as of 0.3.10.
|
||||
|
||||
You may also place this file on disk at the path `/home/dokku/myapp/nginx.conf.template`. If placed on disk on the dokku server, the template file **must** be owned by the user `dokku:dokku`.
|
||||
Dokku currently templates out an nginx configuration that is included in the `nginx-vhosts` plugin. If you'd like to provide a custom template for your application, there are a few options:
|
||||
|
||||
- Copy the existing template - ssl or non-ssl - into your application repository's root directory as the file `nginx.conf.template`.
|
||||
- Create a template file in `/home/dokku/APP` named one of the following:
|
||||
- `nginx.conf.template` (since 0.3.10)
|
||||
- `nginx.conf.ssl_terminated.template` (since 0.4.0)
|
||||
- `nginx.ssl.conf.template` (since 0.4.2)
|
||||
|
||||
> If placed on the dokku server, the template file **must** be owned by user and group `dokku:dokku`.
|
||||
|
||||
For instance - assuming defaults - to customize the nginx template in use for the `myapp` application, create the file `nginx.conf.template` in your repo or on disk with the with the following contents:
|
||||
|
||||
@@ -137,14 +66,18 @@ After your changes a `dokku deploy myapp` will regenerate the `/home/dokku/myapp
|
||||
|
||||
The default nginx.conf- templates will include everything from your apps `nginx.conf.d/` subdirectory in the main `server {}` block (see above):
|
||||
|
||||
include $DOKKU_ROOT/$APP/nginx.conf.d/*.conf;
|
||||
```
|
||||
include $DOKKU_ROOT/$APP/nginx.conf.d/*.conf;
|
||||
```
|
||||
|
||||
. That means you can put additional configuration in separate files, for example to limit the uploaded body size to 50 megabytes, do
|
||||
That means you can put additional configuration in separate files, for example to limit the uploaded body size to 50 megabytes, do
|
||||
|
||||
mkdir /home/dokku/myapp/nginx.conf.d/
|
||||
echo 'client_max_body_size 50M;' > /home/dokku/myapp/nginx.conf.d/upload.conf
|
||||
chown dokku:dokku /home/dokku/myapp/nginx.conf.d/upload.conf
|
||||
service nginx reload
|
||||
```shell
|
||||
mkdir /home/dokku/myapp/nginx.conf.d/
|
||||
echo 'client_max_body_size 50M;' > /home/dokku/myapp/nginx.conf.d/upload.conf
|
||||
chown dokku:dokku /home/dokku/myapp/nginx.conf.d/upload.conf
|
||||
service nginx reload
|
||||
```
|
||||
|
||||
## Customizing hostnames
|
||||
|
||||
@@ -186,6 +119,13 @@ On subsequent deploys, the nginx virtualhost will be discarded. This is useful w
|
||||
|
||||
> New as of 0.3.10
|
||||
|
||||
```shell
|
||||
domains:add <app> DOMAIN Add a custom domain to app
|
||||
domains <app> List custom domains for app
|
||||
domains:clear <app> Clear all custom domains for app
|
||||
domains:remove <app> DOMAIN Remove a custom domain from app
|
||||
```
|
||||
|
||||
The domains plugin allows you to specify custom domains for applications. This plugin is aware of any ssl certificates that are imported via `nginx:import-ssl`. Be aware that setting `NO_VHOST` will override any custom domains.
|
||||
|
||||
Custom domains are also backed up via the built-in `backup` plugin
|
||||
@@ -206,7 +146,7 @@ dokku domains:clear myapp
|
||||
dokku domains:remove myapp example.com
|
||||
```
|
||||
|
||||
### Container network interface binding
|
||||
## Container network interface binding
|
||||
|
||||
> New as of 0.3.13
|
||||
|
||||
@@ -225,12 +165,11 @@ root@dokku:~/dokku# docker inspect --format '{{ .NetworkSettings.IPAddress }}' g
|
||||
root@dokku:/home/dokku# docker ps
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
d6499edb0edb dokku/node-js-app:latest "/bin/bash -c '/star About a minute ago Up About a minute 0.0.0.0:49153->5000/tcp nostalgic_tesla
|
||||
|
||||
```
|
||||
|
||||
# Default site
|
||||
## Default site
|
||||
|
||||
By default, dokku will route any received request with an unknown HOST header value to the lexicographically first site in the nginx config stack. If this is not the desired behavior, you may want to add the following configuration to nginx. This will catch all unknown HOST header values and return a `410 Gone` response. You can replace the `return 410;` with `return 444;` which will cause nginx to not respond to requests that do not match known domains (connection refused).
|
||||
By default, dokku will route any received request with an unknown HOST header value to the lexicographically first site in the nginx config stack. If this is not the desired behavior, you may want to add the following configuration to the global nginx configuration. This will catch all unknown HOST header values and return a `410 Gone` response. You can replace the `return 410;` with `return 444;` which will cause nginx to not respond to requests that do not match known domains (connection refused).
|
||||
|
||||
```
|
||||
server {
|
||||
@@ -242,3 +181,30 @@ server {
|
||||
log_not_found off;
|
||||
}
|
||||
```
|
||||
|
||||
You may also wish to use a separate vhost in your `/etc/nginx/sites-enabled` directory. To do so, create the vhost in that directory as `/etc/nginx/sites-enabled/00-default.conf`. You will also need to change two lines in the main `nginx.conf`:
|
||||
|
||||
```
|
||||
# Swap both conf.d include line and the sites-enabled include line. From:
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
include /etc/nginx/sites-enabled/*;
|
||||
|
||||
# to the following
|
||||
|
||||
include /etc/nginx/sites-enabled/*;
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
```
|
||||
|
||||
Alternatively, you may push an app to your dokku host with a name like "00-default". As long as it lists first in `ls /home/dokku/*/nginx.conf | head`, it will be used as the default nginx vhost.
|
||||
|
||||
## Running behind a load balancer
|
||||
|
||||
See the [load balancer documentation](/dokku/deployment/ssl-configuration/#running-behind-a-load-balancer).
|
||||
|
||||
## HSTS Header
|
||||
|
||||
See the [HSTS documentation](/dokku/deployment/ssl-configuration/#hsts-header).
|
||||
|
||||
## SSL Configuration
|
||||
|
||||
See the [ssl documentation](/dokku/deployment/ssl-configuration/).
|
||||
|
||||
129
docs/plugins.md
@@ -13,10 +13,17 @@ Let's take a quick look at the current dokku nginx plugin that's shipped with do
|
||||
## Installing a plugin
|
||||
|
||||
```shell
|
||||
cd /var/lib/dokku/plugins/available
|
||||
# This command requires `root` permissions as the `install` and `install-dependencies`
|
||||
# plugin triggers may utilize commands such as `apt-get`. For non-core plugins, please
|
||||
# inspect those plugins before running the following command as `root` user.
|
||||
sudo dokku plugin:install <git_url>
|
||||
|
||||
# previous versions (0.3.x and below) of dokku require a manual process to install plugins
|
||||
cd /var/lib/dokku/plugins
|
||||
git clone <git url>
|
||||
dokku plugin:install
|
||||
dokku plugins-install
|
||||
```
|
||||
|
||||
## Creating your own plugin
|
||||
|
||||
[See the full documentation](http://progrium.viewdocs.io/dokku/development/plugin-creation).
|
||||
@@ -27,6 +34,7 @@ The following plugins are available and provided by dokku maintainers. Where not
|
||||
|
||||
| Plugin | Author | Compatibility |
|
||||
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
||||
| [CouchDB (beta)](https://github.com/dokku/dokku-couchdb) | [dokku][] | 0.4.0+ |
|
||||
| [Elasticsearch (beta)](https://github.com/dokku/dokku-elasticsearch-plugin) | [dokku][] | 0.4.0+ |
|
||||
| [MariaDB (beta)](https://github.com/dokku/dokku-mariadb-plugin) | [dokku][] | 0.4.0+ |
|
||||
| [Memcached (beta)](https://github.com/dokku/dokku-memcached-plugin) | [dokku][] | 0.4.0+ |
|
||||
@@ -36,6 +44,10 @@ The following plugins are available and provided by dokku maintainers. Where not
|
||||
| [RabbitMQ (beta)](https://github.com/dokku/dokku-rabbitmq-plugin) | [dokku][] | 0.4.0+ |
|
||||
| [Redis (beta)](https://github.com/dokku/dokku-redis-plugin) | [dokku][] | 0.4.0+ |
|
||||
| [RethinkDB (beta)](https://github.com/dokku/dokku-rethinkdb-plugin) | [dokku][] | 0.4.0+ |
|
||||
| [Copy Files to Image](https://github.com/dokku/dokku-copyfiles-to-image) | [dokku][] | 0.4.0+ |
|
||||
| [HTTP Auth (beta)](https://github.com/dokku/dokku-http-auth) | [dokku][] | 0.4.0+ |
|
||||
| [Maintenance mode (beta)](https://github.com/dokku/dokku-maintenance) | [dokku][] | 0.4.0+ |
|
||||
| [Redirect (beta)](https://github.com/dokku/dokku-redirect) | [dokku][] | 0.4.0+ |
|
||||
|
||||
## Community plugins
|
||||
|
||||
@@ -107,46 +119,33 @@ Note: The following plugins have been supplied by our community and may not have
|
||||
|
||||
| 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 |
|
||||
| [MariaDB (single container)](https://github.com/krisrang/dokku-mariadb) | [krisrang][] | 0.3.26+ |
|
||||
| [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/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 |
|
||||
| [PostgreSQL (single container)](https://github.com/Flink/dokku-psql-single-container) | [Flink][] | 0.3.26+. Single Postgresql container with official Postgresql docker image |
|
||||
| [PostGIS](https://github.com/fermuch/dokku-pg-plugin) | [fermuch][] | |
|
||||
| [MariaDB](https://github.com/Kloadut/dokku-md-plugin) | [Kloadut][] | 0.3.x |
|
||||
| [MariaDB (single container)](https://github.com/ohardy/dokku-mariadb) | [ohardy][] | 0.3.x |
|
||||
| [MariaDB (single container)](https://github.com/krisrang/dokku-mariadb) | [krisrang][] | 0.3.26+ |
|
||||
| [PostgreSQL](https://github.com/jlachowski/dokku-pg-plugin) | [jlachowski][] | 0.3.x |
|
||||
| [PostgreSQL (single container)](https://github.com/ohardy/dokku-psql) | [ohardy][] | 0.3.x |
|
||||
| [PostgreSQL (single container)](https://github.com/Flink/dokku-psql-single-container) | [Flink][] | 0.3.26+ |
|
||||
|
||||
#### Caching
|
||||
|
||||
| Plugin | Author | Compatibility |
|
||||
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
||||
| [Memcached](https://github.com/Flink/dokku-memcached-plugin) | [Flink][] | 0.3.26+. Sets a MEMCACHE_SERVERS environment variable|
|
||||
| [Redis](https://github.com/luxifer/dokku-redis-plugin) | [luxifer][] | |
|
||||
| [Redis](https://github.com/sekjun9878/dokku-redis-plugin) | [sekjun9878][] | 0.3.26+. A better Redis plugin with automatic instance creation and Dokku Link support
|
||||
| [Redis (single container)](https://github.com/ohardy/dokku-redis) | [ohardy][] | Compatible with 0.2.0 |
|
||||
| [Redis](https://github.com/sekjun9878/dokku-redis-plugin) | [sekjun9878][] | 0.3.26+ |
|
||||
| [Redis (single container)](https://github.com/ohardy/dokku-redis) | [ohardy][] | 0.3.x |
|
||||
| [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)|
|
||||
| [RabbitMQ](https://github.com/jlachowski/dokku-rabbitmq-plugin) | [jlachowski][] | 0.3.x |
|
||||
| [RabbitMQ (single container)](https://github.com/jlachowski/dokku-rabbitmq-single-plugin) | [jlachowski][] | 0.3.x |
|
||||
|
||||
#### Other
|
||||
|
||||
| Plugin | Author | Compatibility |
|
||||
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
||||
| [CouchDB](https://github.com/racehub/dokku-couchdb-plugin) | [RaceHub][] | Compatible with 0.2.0 |
|
||||
| [CouchDB (multi containers)](https://github.com/Flink/dokku-couchdb-multi-containers) | [Flink][] | 0.3.26+ |
|
||||
| [Elasticsearch](https://github.com/robv/dokku-elasticsearch) | [robv][] | Not compatible with >= 0.3.0 (still uses /home/git) |
|
||||
| [Elasticsearch](https://github.com/blag/dokku-elasticsearch-plugin)<sup>1</sup> | [blag][] | Compatible with 0.2.0 |
|
||||
| [MongoDB (single container)](https://github.com/jeffutter/dokku-mongodb-plugin) | [jeffutter][] | |
|
||||
| [Neo4j](https://github.com/Aomitayo/dokku-neo4j-plugin) | [Aomitayo][] | |
|
||||
| [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][]) |
|
||||
| [RethinkDB](https://github.com/stuartpb/dokku-rethinkdb-plugin) | [stuartpb][] | 0.3.x |
|
||||
|
||||
[dccee02]: https://github.com/jeffutter/dokku-riakcs-plugin/commit/dccee02702e7001851917b7814e78a99148fb709
|
||||
|
||||
@@ -156,11 +155,11 @@ Note: The following plugins have been supplied by our community and may not have
|
||||
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
||||
| [Circus](https://github.com/apmorton/dokku-circus) | [apmorton][] | |
|
||||
| [Forego](https://github.com/iskandar/dokku-forego) | [iskandar][] | Compatible with 0.2.x |
|
||||
| [Forego](https://github.com/Flink/dokku-forego) | [Flink][] | 0.3.26+ |
|
||||
| [Logging Supervisord](https://github.com/sehrope/dokku-logging-supervisord) | [sehrope][] | Works with dokku @ [c77cbf1][] - no 0.2.0 compatibility |
|
||||
| [Monit](https://github.com/cjblomqvist/dokku-monit) | [cjblomqvist][] | |
|
||||
| [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 |
|
||||
| [Forego](https://github.com/Flink/dokku-forego) | [Flink][] | 0.4.0+ |
|
||||
| [Logging Supervisord](https://github.com/sehrope/dokku-logging-supervisord) | [sehrope][] | 0.4.0+ |
|
||||
| [Monit](https://github.com/cjblomqvist/dokku-monit) | [cjblomqvist][] | 0.3.x |
|
||||
| [Shoreman ](https://github.com/statianzo/dokku-shoreman) | [statianzo][] | 0.3.x |
|
||||
| [Supervisord](https://github.com/statianzo/dokku-supervisord) | [statianzo][] | 0.3.x |
|
||||
|
||||
[c77cbf1]: https://github.com/progrium/dokku/commit/c77cbf1d3ae07f0eafb85082ed7edcae9e836147
|
||||
[28de3ec]: https://github.com/progrium/dokku/commit/28de3ecaa3231a223f83fd8d03f373308673bc40
|
||||
@@ -169,25 +168,22 @@ Note: The following plugins have been supplied by our community and may not have
|
||||
|
||||
| Plugin | Author | Compatibility |
|
||||
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
||||
| [app-url](https://github.com/mikecsh/dokku-app-url) | [mikecsh][] | Works with 0.2.0 |
|
||||
| [Docker Direct](https://github.com/heichblatt/dokku-docker-direct) | [heichblatt][] | |
|
||||
| [Dokku Copy App Config Files](https://github.com/alexkruegger/dokku-app-configfiles) | [alexkruegger][] | Compatible with 0.3.17+ |
|
||||
| [Dokku Copy App Config Files](https://github.com/heichblatt/dokku-supply-config) | [heichblatt][] | |
|
||||
| [Dokku Name](https://github.com/alex-sherwin/dokku-name) | [alex-sherwin][] | dokku >= [c77cbf1][] |
|
||||
| [Dokku Registry](https://github.com/agco-adm/dokku-registry)<sup>1</sup> | [agco-adm][] | |
|
||||
| [git rev-parse HEAD in env](https://github.com/cjblomqvist/dokku-git-rev) | [cjblomqvist][] | Compatible with 0.3.0 |
|
||||
| [Graduate (Environment Management)](https://github.com/glassechidna/dokku-graduate) | [Benjamin-Dobell][] | dokku >= v0.3.14 |
|
||||
| [HTTP Auth](https://github.com/Flink/dokku-http-auth) | [Flink][] | 0.3.26+ |
|
||||
| [HTTP Auth Secure Apps](https://github.com/matto1990/dokku-secure-apps) | [matto1990][] | Works with v0.2.3 |
|
||||
| [Hostname](https://github.com/michaelshobbs/dokku-hostname) | [michaelshobbs][] | |
|
||||
| [Link Containers](https://github.com/rlaneve/dokku-link) | [rlaneve][] | dokku >= [c77cbf1][] |
|
||||
| [Maintenance mode](https://github.com/Flink/dokku-maintenance) | [Flink][] | 0.3.26+ |
|
||||
| [Dokku Registry](https://github.com/agco-adm/dokku-registry)<sup>1</sup> | [agco-adm][] | 0.4.0+ |
|
||||
| [git rev-parse HEAD in env](https://github.com/cjblomqvist/dokku-git-rev) | [cjblomqvist][] | 0.4.0+ |
|
||||
| [Graduate (Environment Management)](https://github.com/glassechidna/dokku-graduate) | [Benjamin-Dobell][] | 0.3.14+ |
|
||||
| [HTTP Auth Secure Apps](https://github.com/matto1990/dokku-secure-apps) | [matto1990][] | 0.4.0+ |
|
||||
| [Hostname](https://github.com/michaelshobbs/dokku-hostname) | [michaelshobbs][] | 0.4.0+ |
|
||||
| [Multi-Buildpack](https://github.com/pauldub/dokku-multi-buildpack) | [pauldub][] | |
|
||||
| [Named-containers](https://github.com/Flink/dokku-named-containers) | [Flink][] | 0.3.26+ |
|
||||
| [Ports](https://github.com/heichblatt/dokku-ports) | [heichblatt][] | |
|
||||
| [Pre-Deploy Tasks](https://github.com/michaelshobbs/dokku-app-predeploy-tasks) | [michaelshobbs][] | |
|
||||
| [SSH Deployment Keys](https://github.com/cedricziel/dokku-deployment-keys)<sup>2</sup> | [cedricziel][] | 2014-01-17: compatible with upstream/master |
|
||||
| [SSH Hostkeys](https://github.com/cedricziel/dokku-hostkeys-plugin)<sup>3</sup> | [cedricziel][] | 2014-01-17: compatible with upstream/master |
|
||||
| [Volume (persistent storage)](https://github.com/ohardy/dokku-volume) | [ohardy][] | Compatible with 0.2.0 |
|
||||
| [App Configfiles](https://github.com/alexkruegger/dokku-app-configfiles) | [alexkruegger][] | Compatible with 0.3.17+ |
|
||||
| [Nuke Containers](https://github.com/heichblatt/dokku-nuke) | [heichblatt][] | |
|
||||
| [Open App Ports](https://github.com/heichblatt/dokku-ports) | [heichblatt][] | |
|
||||
| [Pre-Deploy Tasks](https://github.com/michaelshobbs/dokku-app-predeploy-tasks) | [michaelshobbs][] | 0.4.0+ |
|
||||
| [SSH Deployment Keys](https://github.com/cedricziel/dokku-deployment-keys)<sup>2</sup> | [cedricziel][] | 0.3.x |
|
||||
| [SSH Hostkeys](https://github.com/cedricziel/dokku-hostkeys-plugin)<sup>3</sup> | [cedricziel][] | 0.3.x |
|
||||
| [Volume (persistent storage)](https://github.com/ohardy/dokku-volume) | [ohardy][] | 0.3.x |
|
||||
|
||||
[217d00a]: https://github.com/progrium/dokku/commit/217d00a1bc47a7e24d8847617bb08a1633025fc7
|
||||
|
||||
@@ -201,22 +197,22 @@ Note: The following plugins have been supplied by our community and may not have
|
||||
|
||||
| Plugin | Author | Compatibility |
|
||||
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
||||
| [Airbrake deploy](https://github.com/Flink/dokku-airbrake-deploy) | [Flink][] | 0.3.26+ |
|
||||
| [APT](https://github.com/F4-Group/dokku-apt) | [F4-Group][] | |
|
||||
| [Airbrake deploy](https://github.com/Flink/dokku-airbrake-deploy) | [Flink][] | 0.4.0+ |
|
||||
| [APT](https://github.com/F4-Group/dokku-apt) | [F4-Group][] | 0.2.0+ (tag 0.2.0), 0.3.0+ (tag 0.3.0), 0.4.0+ |
|
||||
| [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][] | |
|
||||
| [Bower/Gulp](https://github.com/jagandecapri/dokku-bower-gulp-build-plugin) | [jagandecapri][] | |
|
||||
| [Docker auto volumes](https://github.com/Flink/dokku-docker-auto-volumes) | [Flink][] | 0.3.26+, auto-persist docker volumes |
|
||||
| [Docker auto persist volumes](https://github.com/Flink/dokku-docker-auto-volumes) | [Flink][] | 0.4.0+ |
|
||||
| [HipChat Notifications](https://github.com/cef/dokku-hipchat) | [cef][] | |
|
||||
| [Graphite/statsd](https://github.com/jlachowski/dokku-graphite-plugin) | [jlachowski][] | |
|
||||
| [Logspout](https://github.com/michaelshobbs/dokku-logspout) | [michaelshobbs][] | 0.3.26+ |
|
||||
| [Node](https://github.com/pnegahdar/dokku-node) | [pnegahdar][] | |
|
||||
| [Node](https://github.com/ademuk/dokku-nodejs) | [ademuk][] | |
|
||||
| [Reset mtime](https://github.com/mixxorz/dokku-docker-reset-mtime) | [mixxorz][] | 0.3.15+, Dockerfile support |
|
||||
| [Slack Notifications](https://github.com/ribot/dokku-slack) | [ribot][] | 0.3.26+ |
|
||||
| [User ACL](https://github.com/mlebkowski/dokku-acl) | [Maciej Łebkowski][] | |
|
||||
| [Slack Notifications](https://github.com/ribot/dokku-slack) | [ribot][] | 0.4.0+ |
|
||||
| [User ACL](https://github.com/mlebkowski/dokku-acl) | [Maciej Łebkowski][] | 0.4.0+ |
|
||||
| [Webhooks](https://github.com/nickstenning/dokku-webhooks) | [nickstenning][] | |
|
||||
| [Wordpress](https://github.com/dudagroup/dokku-wordpress-template) | [abossard][] | Dokku dev, mariadb, volume, domains |
|
||||
|
||||
@@ -229,22 +225,45 @@ The following plugins have been removed as their functionality is now in Dokku C
|
||||
| Plugin | Author | In Dokku Since |
|
||||
| ------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------- |
|
||||
| [Custom Domains](https://github.com/neam/dokku-custom-domains) | [motin][] | v0.3.10 (domains plugin) |
|
||||
| [Debug](https://github.com/heichblatt/dokku-debug) | [heichblatt][] | v0.3.9 (trace command) |
|
||||
| [Debug](https://github.com/heichblatt/dokku-debug) | [heichblatt][] | v0.3.9 (trace command) |
|
||||
| [Docker Options](https://github.com/dyson/dokku-docker-options) | [dyson][] | v0.3.17 (docker-options plugin) |
|
||||
| [Events Logger](https://github.com/alessio/dokku-events) | [alessio][] | v0.3.21 (events plugin) |
|
||||
| [Host Port binding](https://github.com/stuartpb/dokku-bind-port) | [stuartpb][] | v0.3.17 (docker-options plugin) |
|
||||
| [List Containers](https://github.com/heichblatt/dokku-list) | [heichblatt][] | v0.3.14 (ps plugin |
|
||||
| [Link Containers](https://github.com/rlaneve/dokku-link) | [rlaneve][] | v0.3.17 (docker-options plugin) |
|
||||
| [Multiple Domains](https://github.com/wmluke/dokku-domains-plugin)<sup>1</sup> | [wmluke][] | v0.3.10 (domains plugin) |
|
||||
| [Named-containers](https://github.com/Flink/dokku-named-containers) | [Flink][] | v0.4.2 (named-containers plugin) |
|
||||
| [Nginx-Alt](https://github.com/mikexstudios/dokku-nginx-alt) | [mikexstudios][] | v0.3.10 (domains plugin) |
|
||||
| [Persistent Storage](https://github.com/dyson/dokku-persistent-storage) | [dyson][] | v0.3.17 (docker-options plugin) |
|
||||
| [PrimeCache](https://github.com/darkpixel/dokku-prime-cache) | [darkpixel][] | v0.3.0 (zero downtime deploys) |
|
||||
| [Rebuild application](https://github.com/scottatron/dokku-rebuild) | [scottatron][] | v0.3.14 (ps plugin) |
|
||||
| [Rebuild application](https://github.com/scottatron/dokku-rebuild) | [scottatron][] | v0.3.14 (ps plugin) |
|
||||
| [Supply env vars to buildpacks](https://github.com/cameron-martin/dokku-build-env)<sup>2</sup> | [cameron-martin][] | v0.3.9 (build-env plugin) |
|
||||
| [user-env-compile](https://github.com/musicglue/dokku-user-env-compile)<sup>2</sup> | [musicglue][] | v0.3.9 (build-env plugin) |
|
||||
| [user-env-compile](https://github.com/motin/dokku-user-env-compile)<sup>2</sup> | [motin][] | v0.3.9 (build-env plugin) |
|
||||
| [VHOSTS Custom Configuration](https://github.com/neam/dokku-nginx-vhosts-custom-configuration) | [motin][] | v0.3.10 (domains plugin) |
|
||||
|
||||
|
||||
<sup>1</sup> Conflicts with [VHOSTS Custom Configuration](https://github.com/neam/dokku-nginx-vhosts-custom-configuration)
|
||||
<sup>2</sup> Similar to the heroku-labs feature (see https://devcenter.heroku.com/articles/labs-user-env-compile)
|
||||
|
||||
[a043e98]: https://github.com/stuartpb/dokku-bind-port/commit/a043e9892f4815b6525c850131e09fd64db5c1fa
|
||||
|
||||
|
||||
### Unmaintained Plugins
|
||||
|
||||
The following plugins are no longer maintained by their developers.
|
||||
|
||||
| Plugin | Author | Compatibility |
|
||||
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
||||
| [app-url](https://github.com/mikecsh/dokku-app-url) | [mikecsh][] | Works with 0.2.0 |
|
||||
| [CouchDB (multi containers)](https://github.com/Flink/dokku-couchdb-multi-containers) | [Flink][] | 0.4.0+ |
|
||||
| [CouchDB](https://github.com/racehub/dokku-couchdb-plugin) | [RaceHub][] | Compatible with 0.2.0 |
|
||||
| [Elasticsearch](https://github.com/robv/dokku-elasticsearch) | [robv][] | Not compatible with >= 0.3.0 (still uses /home/git) |
|
||||
| [Elasticsearch](https://github.com/blag/dokku-elasticsearch-plugin)<sup>1</sup> | [blag][] | Compatible with 0.2.0 |
|
||||
| [Memcached](https://github.com/Flink/dokku-memcached-plugin) | [Flink][] | 0.4.0+ |
|
||||
| [MongoDB (single container)](https://github.com/jeffutter/dokku-mongodb-plugin) | [jeffutter][] | |
|
||||
| [MySQL](https://github.com/hughfletcher/dokku-mysql-plugin) | [hughfletcher][] | |
|
||||
| [Neo4j](https://github.com/Aomitayo/dokku-neo4j-plugin) | [Aomitayo][] | |
|
||||
| [PostGIS](https://github.com/fermuch/dokku-pg-plugin) | [fermuch][] | |
|
||||
| [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). |
|
||||
| [RiakCS (single container)](https://github.com/jeffutter/dokku-riakcs-plugin) | [jeffutter][] | Incompatible with 0.2.0 (checked at [dccee02][]) |
|
||||
| [Redis](https://github.com/luxifer/dokku-redis-plugin) | [luxifer][] | |
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
# Process/Container management
|
||||
|
||||
> New as of 0.3.14
|
||||
|
||||
Dokku supports rudimentary process (really container) management via the `ps` plugin.
|
||||
|
||||
```
|
||||
ps <app> List processes running in app container(s)
|
||||
ps:rebuildall Rebuild all apps
|
||||
ps:rebuild <app> Rebuild an app
|
||||
ps:restartall Restart all deployed app containers
|
||||
ps:restart <app> Restart app container(s)
|
||||
ps:scale <app> <proc>=<count> [<proc>=<count>] Set how many processes of a given process to run
|
||||
ps:start <app> Start app container(s)
|
||||
ps:stop <app> Stop app container(s)
|
||||
ps <app> List processes running in app container(s)
|
||||
ps:rebuildall Rebuild all apps
|
||||
ps:rebuild <app> Rebuild an app
|
||||
ps:restartall Restart all deployed app containers
|
||||
ps:restart <app> Restart app container(s)
|
||||
ps:scale <app> <proc>=<count> [<proc>=<count>] Set how many processes of a given process to run
|
||||
ps:start <app> Start app container(s)
|
||||
ps:stop <app> Stop app container(s)
|
||||
```
|
||||
|
||||
## Scaling
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Remote commands
|
||||
# Remote Commands
|
||||
|
||||
Dokku commands can be run over ssh. Anywhere you would run `dokku <command>`, just run `ssh -t dokku@dokku.me <command>`
|
||||
The `-t` is used to request a pty. It is highly recommended to do so.
|
||||
@@ -9,15 +9,6 @@ Host dokku.me
|
||||
RequestTTY yes
|
||||
```
|
||||
|
||||
## Run a command in the app environment
|
||||
|
||||
It's possible to run commands in the environment of the deployed application:
|
||||
|
||||
```shell
|
||||
dokku run node-js-app ls -alh
|
||||
dokku run <app> <cmd>
|
||||
```
|
||||
|
||||
## Behavioral modifiers
|
||||
|
||||
Dokku also supports certain command-line arguments that augment it's behavior. If using these over ssh, you must use the form `ssh -t dokku@dokku.me -- <command>`
|
||||
@@ -27,5 +18,11 @@ in order to avoid ssh interpretting dokku arguments for itself.
|
||||
--quiet suppress output headers
|
||||
--trace enable DOKKU_TRACE for current execution only
|
||||
--rm|--rm-container remove docker container after successful dokku run <app> <command>
|
||||
--force force flag. currently used in apps:destroy
|
||||
--force force flag. currently used in apps:destroy and other ":destroy" commands
|
||||
```
|
||||
|
||||
## Clients
|
||||
|
||||
You may optionally use a client to connect to your dokku server. Most clients use the configured `git remote` to locate the dokku server, though some allow for overriding this via an environment variable or flag.
|
||||
|
||||
Please refer to the [clients](/dokku/community/clients/) list for more details.
|
||||
|
||||
@@ -7,96 +7,111 @@
|
||||
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400:sans-serif|Open+Sans:400:sans-serif" rel="stylesheet" type="text/css">
|
||||
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
|
||||
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
|
||||
<style type="text/css">
|
||||
body{padding-bottom:40px;color:#5a5a5a}
|
||||
h1{color:#5a5a5a;font-family:'montserrat',Optima,Segoe,"Segoe UI",Candara,Calibri,Arial,sans-serif;font-weight:700;line-height:1.1;margin-bottom:12px;margin-top:12px;text-rendering:optimizelegibility}
|
||||
.header{background-color:#2a8fbd;padding:22px 0}
|
||||
.header .heading{color:#fff;font-size:23px;margin:0;padding:0}
|
||||
.blurb{color:#424242;background-color:#ededed;background-image:url(gplaypattern.png);padding:45px 0;text-align:center}
|
||||
.blurb p{font-size:17px;font-weight:300;margin:18px 0;text-align:center}
|
||||
.quickstart-code{display:block;font-size:12px;line-height:1.3em;margin:45px auto;max-width:650px;padding:0}
|
||||
.quickstart-code .title{background-color:#dfdfdf;background-image:linear-gradient(top,#f7f7f7 0%,#dfdfdf 7%,#ccc 100%);border-bottom:1px solid #111;color:#444;display:block;font-weight:400;font-size:14px;margin:0 20px;padding:3px 0;text-align:center;text-shadow:0 1px 0 rgba(255,255,255,0.5);border-radius:5px 5px 0 0;box-shadow:0 3px 0 rgba(0,0,0,0.5)}
|
||||
.quickstart-code .shell{background-color:#171717;font-family:Menlo,Consolas,"Courier New",Courier,"Liberation Mono",monospace;margin:0 20px;padding:20px;text-shadow:none;border-radius:0 0 5px 5px;box-shadow:0 5px 30px rgba(0,0,0,0.3)}
|
||||
.quickstart-code .line{display:block;margin:0;padding:0}
|
||||
.quickstart-code .line span{display:inline-block}
|
||||
.quickstart-code .path{color:#2a8fbd;user-select:none}
|
||||
.quickstart-code .prompt{color:#f90;user-select:none}
|
||||
.quickstart-code .command{color:#ffc}
|
||||
.marketing .col-lg-4{margin-bottom:20px;text-align:center}
|
||||
.marketing .col-lg-4 p{margin-right:10px;margin-left:10px}
|
||||
.featurette-divider{margin:20px 0}
|
||||
.featurette-heading{font-weight:400;line-height:1;letter-spacing:-1px}
|
||||
.featurette-heading .text-muted{font-weight:300}
|
||||
@media (min-width: 768px) {
|
||||
.quickstart-code{font-size:14px;line-height:22px}
|
||||
.featurette-heading{font-size:50px}
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.featurette-heading{margin-top:120px}
|
||||
}
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon.ico">
|
||||
<meta name="apple-mobile-web-app-title" content="Dokku">
|
||||
<meta name="application-name" content="Dokku">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/style.css" rel="stylesheet">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<div class="container">
|
||||
<h1 class="heading">Dokku</h1>
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-md-offset-2">
|
||||
<h1 class="heading navbar-brand">
|
||||
<a href="http://progrium.viewdocs.io/dokku/">Dokku</a>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-md-2" style="padding-top:16px">
|
||||
<div class="col-xs-8 col-md-6 col-md-push-4 markdown-body" style="padding-top:16px">
|
||||
{{CONTENT}}
|
||||
</div>
|
||||
<div class="col-xs-4 col-md-2 col-md-pull-6 col-md-offset-2" style="padding-top:16px">
|
||||
<div class="list-group">
|
||||
<a href="#" class="list-group-item disabled">Getting Started</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/installation" class="list-group-item">Installation</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/upgrading" class="list-group-item">Upgrading</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/troubleshooting" class="list-group-item">Troubleshooting</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/getting-started/where-to-get-help" class="list-group-item">Getting Help</a>
|
||||
<a href="/dokku/installation/" class="list-group-item">Getting Started with Dokku</a>
|
||||
<a href="/dokku/upgrading/" class="list-group-item">Upgrading</a>
|
||||
<a href="/dokku/troubleshooting/" class="list-group-item">Troubleshooting</a>
|
||||
<a href="/dokku/getting-started/where-to-get-help/" class="list-group-item">Getting Help</a>
|
||||
|
||||
<a href="#" class="list-group-item disabled">Deployment</a>
|
||||
|
||||
<a href="http://progrium.viewdocs.io/dokku/application-deployment" class="list-group-item">Application Deployment</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/configuration-management" class="list-group-item">Configuration management</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/process-management" class="list-group-item">Process management</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/dns" class="list-group-item">DNS Configuration</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/nginx" class="list-group-item">Nginx Configuration</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/deployment/ssl-configuration" class="list-group-item">SSL Configuration</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/remote-commands" class="list-group-item">Running Remote commands</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/docker-options" class="list-group-item">Container Options</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/dokku-events-logs" class="list-group-item">Dokku Event Logs</a>
|
||||
<a href="/dokku/application-deployment/" class="list-group-item">Deploying an Application</a>
|
||||
<a href="/dokku/deployment/dockerfiles/" class="list-group-item">Dockerfile Deployment</a>
|
||||
<a href="/dokku/deployment/images/" class="list-group-item">Image Tagging</a>
|
||||
<a href="/dokku/remote-commands/" class="list-group-item">Remote Commands</a>
|
||||
<a href="/dokku/deployment/one-off-processes/" class="list-group-item">One Off Processes</a>
|
||||
<a href="/dokku/process-management/" class="list-group-item">Scaling Apps</a>
|
||||
<a href="/dokku/checks-examples/" class="list-group-item">Zero Downtime Deploys</a>
|
||||
|
||||
<a href="#" class="list-group-item disabled">Configuration</a>
|
||||
|
||||
<a href="/dokku/configuration-management/" class="list-group-item">Environment Variables</a>
|
||||
<a href="/dokku/dns" class="list-group-item">DNS Configuration</a>
|
||||
<a href="/dokku/nginx/" class="list-group-item">Nginx Configuration</a>
|
||||
<a href="/dokku/deployment/ssl-configuration/" class="list-group-item">SSL Configuration</a>
|
||||
<a href="/dokku/docker-options/" class="list-group-item">Docker Container Options</a>
|
||||
<a href="/dokku/dokku-events-logs/" class="list-group-item">Dokku Event Logs</a>
|
||||
|
||||
<a href="#" class="list-group-item disabled">Community Contributions</a>
|
||||
|
||||
<a href="http://progrium.viewdocs.io/dokku/community/clients" class="list-group-item">Clients</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/plugins" class="list-group-item">Plugins</a>
|
||||
<a href="/dokku/community/clients/" class="list-group-item">Clients</a>
|
||||
<a href="/dokku/plugins/" class="list-group-item">Plugins</a>
|
||||
|
||||
<a href="#" class="list-group-item disabled">Development</a>
|
||||
|
||||
<a href="http://progrium.viewdocs.io/dokku/development/plugin-creation" class="list-group-item">Plugin Creation</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/development/plugin-triggers" class="list-group-item">Plugin Triggers</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/development/testing" class="list-group-item">Test Suite</a>
|
||||
<a href="http://progrium.viewdocs.io/dokku/development/release-process" class="list-group-item">Release Process</a>
|
||||
<a href="/dokku/development/plugin-creation/" class="list-group-item">Plugin Creation</a>
|
||||
<a href="/dokku/development/plugin-triggers/" class="list-group-item">Plugin Triggers</a>
|
||||
<a href="/dokku/development/testing/" class="list-group-item">Running Tests</a>
|
||||
<a href="/dokku/development/release-process/" class="list-group-item">Release Process</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-8 col-md-10">
|
||||
{{CONTENT}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<footer>
|
||||
<p class="pull-right"><a href="#">Back to top</a></p>
|
||||
<p>© 2013 Dokku</p>
|
||||
</footer>
|
||||
</div>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/1.3.0/anchor.js"></script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function (e) {
|
||||
var elements = document.querySelectorAll('table'),
|
||||
var markdownBody = document.querySelectorAll('.markdown-body')[0],
|
||||
isRedirect = markdownBody.innerHTML.trim().indexOf('<p>See the <a href=') === 0;
|
||||
if (isRedirect) {
|
||||
var redirectUrl = markdownBody.getElementsByTagName('a')[0].href;
|
||||
window.location.replace(redirectUrl);
|
||||
}
|
||||
anchors.options.visible = 'always';
|
||||
anchors.add('.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6');
|
||||
|
||||
var tables = document.querySelectorAll('table'),
|
||||
blockquotes = document.querySelectorAll('blockquote'),
|
||||
classNames = ['table', 'table-striped', 'table-hover', 'table-condensed'],
|
||||
addClass = function (el, className) {
|
||||
if (el.classList) {
|
||||
@@ -106,8 +121,13 @@
|
||||
}
|
||||
}
|
||||
|
||||
Array.prototype.forEach.call(blockquotes, function (el, i) {
|
||||
if (el.innerHTML.indexOf('New as of') !== -1) {
|
||||
addClass(el, 'new-as-of');
|
||||
}
|
||||
});
|
||||
Array.prototype.forEach.call(classNames, function (className, i) {
|
||||
Array.prototype.forEach.call(elements, function (el, i) {
|
||||
Array.prototype.forEach.call(tables, function (el, i) {
|
||||
addClass(el, className);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -46,7 +46,7 @@ The `remote rejected` error does not give enough information. Anything could hav
|
||||
To enable dokku tracing, simply run the following command:
|
||||
|
||||
# Since 0.3.9
|
||||
dokku trace
|
||||
dokku trace on
|
||||
|
||||
In versions older than 0.3.9, you can create a `/home/dokku/dokkurc` file containing the following :
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Upgrading
|
||||
|
||||
This document covers upgrades for the 0.3.0 series and up. If upgrading from previous versions, we recommend [a fresh install](http://progrium.viewdocs.io/dokku/installation) on a new server.
|
||||
This document covers upgrades for the 0.3.0 series and up. If upgrading from older versions, we recommend [a fresh install](http://progrium.viewdocs.io/dokku/installation) on a new server.
|
||||
|
||||
> As of 0.3.18, dokku is installed by default via a debian package. Source-based installations are still available, though not recommended.
|
||||
|
||||
|
||||
18
dokku
@@ -2,7 +2,15 @@
|
||||
set -eo pipefail
|
||||
shopt -s nullglob
|
||||
|
||||
export DOKKU_DISTRO=${DOKKU_DISTRO:="ubuntu"}
|
||||
case "$(lsb_release -si)" in
|
||||
Debian)
|
||||
export DOKKU_DISTRO=${DOKKU_DISTRO:="debian"}
|
||||
;;
|
||||
*)
|
||||
export DOKKU_DISTRO=${DOKKU_DISTRO:="ubuntu"}
|
||||
;;
|
||||
esac
|
||||
|
||||
export DOKKU_IMAGE=${DOKKU_IMAGE:="gliderlabs/herokuish"}
|
||||
export DOKKU_ROOT=${DOKKU_ROOT:=~dokku}
|
||||
export DOKKU_LIB_ROOT=${DOKKU_LIB_PATH:="/var/lib/dokku"}
|
||||
@@ -41,7 +49,7 @@ if [[ "${args[0]}" =~ ^--.* ]]; then
|
||||
fi
|
||||
! has_tty && DOKKU_QUIET_OUTPUT=1
|
||||
|
||||
if [[ $(id -un) != "dokku" && $1 != plugin:*install* && $1 != "plugin:update" && $1 != nginx:*-logs ]]; then
|
||||
if [[ $(id -un) != "dokku" && $1 != plugin:*install* && $1 != "plugin:update" ]]; then
|
||||
sudo -u dokku -E -H $0 "$@"
|
||||
exit
|
||||
fi
|
||||
@@ -77,9 +85,6 @@ case "$1" in
|
||||
DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE"
|
||||
oldids=$(get_app_container_ids $APP)
|
||||
|
||||
DOKKU_RESTART_LIMIT=$(dokku config:get $APP DOKKU_RESTART_LIMIT || echo 10)
|
||||
DOKKU_RESTART_LIMIT=${DOKKU_RESTART_LIMIT:=10}
|
||||
|
||||
DOKKU_APP_SKIP_ALL_CHECKS=$(dokku config:get $APP DOKKU_SKIP_ALL_CHECKS || true)
|
||||
DOKKU_APP_SKIP_DEFAULT_CHECKS=$(dokku config:get $APP DOKKU_SKIP_DEFAULT_CHECKS || true)
|
||||
DOKKU_GLOBAL_SKIP_ALL_CHECKS=$(dokku config:get --global DOKKU_SKIP_ALL_CHECKS || true)
|
||||
@@ -90,7 +95,7 @@ case "$1" in
|
||||
|
||||
DOKKU_DEFAULT_DOCKER_ARGS=$(: | plugn trigger docker-args-deploy $APP $IMAGE_TAG)
|
||||
|
||||
while read line || [[ -n "$line" ]]; do
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
TRIM=${line%#*}
|
||||
PROC_TYPE=${TRIM%%=*}
|
||||
PROC_COUNT=${TRIM#*=}
|
||||
@@ -105,7 +110,6 @@ case "$1" in
|
||||
# start the app
|
||||
DOCKER_ARGS="$DOKKU_DEFAULT_DOCKER_ARGS"
|
||||
DOCKER_ARGS+=" -e DYNO='$PROC_TYPE.$CONTAINER_INDEX' "
|
||||
DOCKER_ARGS+=" --restart=on-failure:$DOKKU_RESTART_LIMIT"
|
||||
[[ "$DOKKU_TRACE" ]] && DOCKER_ARGS+=" -e TRACE=true "
|
||||
BIND_EXTERNAL=$(plugn trigger bind-external-ip $APP)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
[[ " build release trace delete ls logs run url urls version help " == *" $1 "* ]] || exit $DOKKU_NOT_IMPLEMENTED_EXIT
|
||||
[[ " build release trace delete ls run url urls version help " == *" $1 "* ]] || exit $DOKKU_NOT_IMPLEMENTED_EXIT
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
||||
@@ -40,7 +40,8 @@ case "$1" in
|
||||
plugn trigger pre-build-dockerfile "$APP"
|
||||
|
||||
[[ "$DOKKU_DOCKERFILE_CACHE_BUILD" == "false" ]] && DOKKU_DOCKER_BUILD_OPTS="$DOKKU_DOCKER_BUILD_OPTS --no-cache"
|
||||
docker build $DOKKU_DOCKER_BUILD_OPTS -t "$IMAGE" .
|
||||
DOCKER_ARGS=$(: | plugn trigger docker-args-build $APP)
|
||||
docker build $DOCKER_ARGS $DOKKU_DOCKER_BUILD_OPTS -t "$IMAGE" .
|
||||
|
||||
plugn trigger post-build-dockerfile "$APP"
|
||||
;;
|
||||
@@ -126,32 +127,6 @@ case "$1" in
|
||||
done
|
||||
;;
|
||||
|
||||
logs)
|
||||
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
APP="$2"; verify_app_name "$2"
|
||||
|
||||
if (is_deployed $APP); then
|
||||
CONTAINER_IDS=( $(get_app_container_ids $APP) )
|
||||
LAST_CONTAINER_ID=${CONTAINER_IDS[${#CONTAINER_IDS[@]} - 1]}
|
||||
|
||||
if [[ $3 == "-t" ]]; then
|
||||
DOKKU_LOGS_ARGS="--follow --tail 100"
|
||||
else
|
||||
DOKKU_LOGS_ARGS="--tail 100"
|
||||
fi
|
||||
for CID in "${CONTAINER_IDS[@]}"; do
|
||||
if [[ "$CID" != "$LAST_CONTAINER_ID" ]]; then
|
||||
DOKKU_LOGS_CMD+="docker logs $DOKKU_LOGS_ARGS $CID& "
|
||||
else
|
||||
DOKKU_LOGS_CMD+="docker logs $DOKKU_LOGS_ARGS $CID; "
|
||||
fi
|
||||
done
|
||||
bash -c "($DOKKU_LOGS_CMD)"
|
||||
else
|
||||
echo "Application's container not found"
|
||||
fi
|
||||
;;
|
||||
|
||||
run)
|
||||
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
APP="$2"; IMAGE_TAG=$(get_running_image_tag $APP); IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
|
||||
@@ -217,8 +192,8 @@ case "$1" in
|
||||
help)
|
||||
cat<<EOF
|
||||
ls, Pretty listing of deployed applications and containers
|
||||
logs <app> [-t], Show the last logs for an application (-t follows)
|
||||
run <app> <cmd>, Run a command in the environment of an application
|
||||
trace [on/off], Enable dokku tracing
|
||||
url <app>, Show the first URL for an application (compatibility)
|
||||
urls <app>, Show all URLs for an application
|
||||
version, Print dokku's version
|
||||
|
||||
@@ -25,7 +25,7 @@ end script
|
||||
EOF
|
||||
;;
|
||||
|
||||
opensuse)
|
||||
debian|opensuse)
|
||||
cat<<EOF > /etc/systemd/system/dokku-redeploy.service
|
||||
[Unit]
|
||||
Description=Dokku app redeploy service
|
||||
@@ -42,7 +42,7 @@ EOF
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
mkdir -p /etc/update-motd.d
|
||||
cat<<EOF > /etc/update-motd.d/99-dokku
|
||||
#!/bin/sh
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ case "$1" in
|
||||
events)
|
||||
if [[ -f $DOKKU_EVENTS_LOGFILE ]]; then
|
||||
if [[ $2 == "-t" ]]; then
|
||||
tail -f $DOKKU_EVENTS_LOGFILE
|
||||
tail -F $DOKKU_EVENTS_LOGFILE
|
||||
else
|
||||
tail -n 100 $DOKKU_EVENTS_LOGFILE
|
||||
fi
|
||||
|
||||
@@ -10,12 +10,26 @@ flag_rsyslog_needs_restart=n
|
||||
# This can be done unconditionally as mkdir -p
|
||||
# exits gracefully if the path already exists
|
||||
mkdir -m 775 -p "$DOKKU_LOGS_DIR"
|
||||
chown syslog:dokku "$DOKKU_LOGS_DIR"
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
chgrp dokku "$DOKKU_LOGS_DIR"
|
||||
;;
|
||||
*)
|
||||
chown syslog:dokku "$DOKKU_LOGS_DIR"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ ! -f "$DOKKU_EVENTS_LOGFILE" ]]; then
|
||||
touch "$DOKKU_EVENTS_LOGFILE"
|
||||
# chown syslog:root might not work on SUSE
|
||||
chown syslog:dokku "$DOKKU_EVENTS_LOGFILE"
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
chgrp dokku "$DOKKU_EVENTS_LOGFILE"
|
||||
;;
|
||||
*)
|
||||
# chown syslog:root might not work on SUSE
|
||||
chown syslog:dokku "$DOKKU_EVENTS_LOGFILE"
|
||||
;;
|
||||
esac
|
||||
chmod 664 "$DOKKU_EVENTS_LOGFILE"
|
||||
fi
|
||||
|
||||
|
||||
1
plugins/20_events/pre-receive-app
Symbolic link
@@ -0,0 +1 @@
|
||||
hook
|
||||
1
plugins/20_events/tags-create
Symbolic link
@@ -0,0 +1 @@
|
||||
hook
|
||||
1
plugins/20_events/tags-destroy
Symbolic link
@@ -0,0 +1 @@
|
||||
hook
|
||||
@@ -31,7 +31,7 @@ case "$1" in
|
||||
dokku_log_warn "To proceed, type \"$APP\""
|
||||
echo ""
|
||||
|
||||
read -p "> " app_name
|
||||
read -rp "> " app_name
|
||||
if [[ "$app_name" != "$APP" ]]; then
|
||||
dokku_log_fail "Confirmation did not match $APP. Aborted."
|
||||
fi
|
||||
|
||||
@@ -3,7 +3,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
|
||||
APP="$1"; IMAGE_REPO=$(get_app_image_repo $APP)
|
||||
[[ -n $APP ]] && rm -rf "$DOKKU_ROOT/$APP" > /dev/null
|
||||
[[ -n $APP ]] && rm -rf "${DOKKU_ROOT:?}/$APP" > /dev/null
|
||||
|
||||
# remove all application containers & images
|
||||
# shellcheck disable=SC2046
|
||||
|
||||
@@ -72,7 +72,7 @@ case "$1" in
|
||||
fi
|
||||
|
||||
# create all the app directories
|
||||
while read app; do mkdir "$TARGET_DIR/$app"; echo "Imported $app"; done < $BACKUP_TMP_DIR/.dokku_backup_apps
|
||||
while read -r app; do mkdir "$TARGET_DIR/$app"; echo "Imported $app"; done < $BACKUP_TMP_DIR/.dokku_backup_apps
|
||||
|
||||
# have the plugins import their stuff
|
||||
plugn trigger backup-import $VERSION "$BACKUP_ROOT" $TARGET_DIR "$BACKUP_TMP_DIR/.dokku_backup_apps"
|
||||
|
||||
@@ -6,8 +6,8 @@ source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
||||
APP="$1"; IMAGE=$(get_app_image_name $APP); BUILD_ENV=""
|
||||
verify_app_name "$APP"
|
||||
|
||||
config_get --global CURL_CONNECT_TIMEOUT > /dev/null 2>&1 || config_set --global CURL_CONNECT_TIMEOUT=5
|
||||
config_get --global CURL_TIMEOUT > /dev/null 2>&1 || config_set --global CURL_TIMEOUT=30
|
||||
[[ -z $(config_get --global CURL_CONNECT_TIMEOUT) ]] && config_set --global CURL_CONNECT_TIMEOUT=5
|
||||
[[ -z $(config_get --global CURL_TIMEOUT) ]] && config_set --global CURL_TIMEOUT=30
|
||||
|
||||
if [[ -n $(config_export global) ]]; then
|
||||
BUILD_ENV+=$'\n'
|
||||
|
||||
@@ -108,7 +108,7 @@ fi
|
||||
|
||||
# Reads name/value pairs, sets the WAIT and TIMEOUT variables
|
||||
exec < "$FILENAME"
|
||||
while read LINE; do
|
||||
while read -r LINE; do
|
||||
# Name/value pair
|
||||
if [[ "$LINE" =~ ^.+= ]]; then
|
||||
TRIM=${LINE%#*}
|
||||
@@ -143,7 +143,7 @@ do
|
||||
fi
|
||||
|
||||
exec < "$FILENAME"
|
||||
while read CHECK_URL EXPECTED; do
|
||||
while read -r CHECK_URL EXPECTED; do
|
||||
# Ignore empty lines and lines starting with #
|
||||
# shellcheck disable=SC1001
|
||||
[[ -z "$CHECK_URL" || "$CHECK_URL" =~ ^\# ]] && continue
|
||||
|
||||
@@ -10,16 +10,16 @@ has_tty() {
|
||||
}
|
||||
|
||||
dokku_log_info1() {
|
||||
echo "-----> $@"
|
||||
echo "-----> $*"
|
||||
}
|
||||
|
||||
dokku_log_info2() {
|
||||
echo "=====> $@"
|
||||
echo "=====> $*"
|
||||
}
|
||||
|
||||
dokku_log_info1_quiet() {
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
echo "-----> $@"
|
||||
echo "-----> $*"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
@@ -27,31 +27,31 @@ dokku_log_info1_quiet() {
|
||||
|
||||
dokku_log_info2_quiet() {
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
echo "=====> $@"
|
||||
echo "=====> $*"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
dokku_col_log_info1() {
|
||||
printf "%-25s %-25s %-25s %-25s\n" "-----> $@"
|
||||
printf "%-6s %-18s %-25s %-25s %-25s\n" "----->" "$@"
|
||||
}
|
||||
|
||||
dokku_col_log_info1_quiet() {
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
printf "%-25s %-25s %-25s %-25s\n" "-----> $@"
|
||||
printf "%-6s %-18s %-25s %-25s %-25s\n" "----->" "$@"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
dokku_col_log_info2() {
|
||||
printf "%-25s %-25s %-25s %-25s\n" "=====> $@"
|
||||
printf "%-6s %-18s %-25s %-25s %-25s\n" "=====>" "$@"
|
||||
}
|
||||
|
||||
dokku_col_log_info2_quiet() {
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
printf "%-25s %-25s %-25s %-25s\n" "=====> $@"
|
||||
printf "%-6s %-18s %-25s %-25s %-25s\n" "=====>" "$@"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
@@ -71,18 +71,18 @@ dokku_col_log_msg_quiet() {
|
||||
|
||||
dokku_log_verbose_quiet() {
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
echo " $@"
|
||||
echo " $*"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
dokku_log_verbose() {
|
||||
echo " $@"
|
||||
echo " $*"
|
||||
}
|
||||
|
||||
dokku_log_warn() {
|
||||
echo " ! $@"
|
||||
echo " ! $*"
|
||||
}
|
||||
|
||||
dokku_log_fail() {
|
||||
@@ -98,7 +98,7 @@ dokku_log_plugn_trigger_call() {
|
||||
local l_hook
|
||||
|
||||
l_hook="$1" ; shift
|
||||
dokku_log_event "INVOKED: ${l_hook}( $@ )"
|
||||
dokku_log_event "INVOKED: ${l_hook}( $* ) NAME=$NAME FINGERPRINT=$FINGERPRINT"
|
||||
}
|
||||
|
||||
dokku_container_log_verbose_quiet() {
|
||||
@@ -326,6 +326,10 @@ docker_cleanup() {
|
||||
# shellcheck disable=SC2046
|
||||
docker rm $(docker ps -a -f 'status=exited' -q) &> /dev/null || true
|
||||
|
||||
# delete all dead containers
|
||||
# shellcheck disable=SC2046
|
||||
docker rm $(docker ps -a -f 'status=dead' -q) &> /dev/null || true
|
||||
|
||||
# delete unused images
|
||||
# shellcheck disable=SC2046
|
||||
docker rmi $(docker images -f 'dangling=true' -q) &> /dev/null &
|
||||
|
||||
@@ -102,7 +102,7 @@ config_all() {
|
||||
[[ "$1" == "config" ]] || set -- "config" "$@"
|
||||
config_parse_args "$@"
|
||||
config_create "$ENV_FILE"
|
||||
is_config_export "$@" && config_export "$DOKKU_CONFIG_TYPE" "$APP" && exit 0
|
||||
is_config_export "$@" && config_export "$DOKKU_CONFIG_TYPE" "$APP" && return 0
|
||||
|
||||
[[ "$APP" ]] && DOKKU_CONFIG_TYPE=$APP
|
||||
[[ ! -s $ENV_FILE ]] && dokku_log_fail "no config vars for $DOKKU_CONFIG_TYPE"
|
||||
@@ -112,7 +112,7 @@ config_all() {
|
||||
for var in "$@"; do
|
||||
if [[ "$var" == "--shell" ]]; then
|
||||
echo $VARS
|
||||
exit 0
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -132,7 +132,7 @@ config_get() {
|
||||
|
||||
config_create "$ENV_FILE"
|
||||
if [[ ! -s $ENV_FILE ]]; then
|
||||
exit 0
|
||||
return 0
|
||||
fi
|
||||
|
||||
KEY="$3"
|
||||
@@ -147,6 +147,7 @@ config_set() {
|
||||
|
||||
if [[ -z "${*:3}" ]]; then
|
||||
echo "Usage: dokku config:set APP KEY1=VALUE1 [KEY2=VALUE2 ...]"
|
||||
echo "Whitespaces need to be escaped, i.e. KEY=\"VAL\ WITH\ SPACES\""
|
||||
echo "Must specify KEY and VALUE to set."
|
||||
exit 1
|
||||
fi
|
||||
@@ -160,6 +161,7 @@ config_set() {
|
||||
for var; do
|
||||
if [[ $var != *"="* ]]; then
|
||||
echo "Usage: dokku config:set APP KEY1=VALUE1 [KEY2=VALUE2 ...]"
|
||||
echo "Whitespaces need to be escaped, i.e. KEY=\"VAL\ WITH\ SPACES\""
|
||||
echo "Must specify KEY and VALUE to set."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -28,7 +28,7 @@ verify_phase() {
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
dokku_log_fail "Phase(s) must be one of [${phases[@]}]"
|
||||
dokku_log_fail "Phase(s) must be one of [${phases[*]}]"
|
||||
}
|
||||
|
||||
get_phase_file_path() {
|
||||
|
||||
@@ -24,7 +24,7 @@ output=""
|
||||
if [[ -f "$PHASE_FILE_PATH" ]]; then
|
||||
DONE=false
|
||||
until $DONE; do
|
||||
read line || DONE=true
|
||||
read -r line || DONE=true
|
||||
|
||||
[[ ! -n "$line" ]] && continue
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ IMPORT_DIR="$2"
|
||||
TARGET_DIR="$3"
|
||||
APPS="$4"
|
||||
|
||||
while read APP; do
|
||||
while read -r APP; do
|
||||
APP_PATH="$TARGET_DIR/$APP";
|
||||
git init --bare $APP_PATH > /dev/null
|
||||
PRERECEIVE_HOOK="$APP_PATH/hooks/pre-receive"
|
||||
|
||||
@@ -21,8 +21,10 @@ git_build_app_repo() {
|
||||
find -name .git -prune -exec rm -rf {} \; > /dev/null
|
||||
|
||||
if [[ -f Dockerfile ]] && [[ "$([[ -f .env ]] && grep -q BUILDPACK_URL .env; echo $?)" != "0" ]] && [[ ! -f ".buildpacks" ]]; then
|
||||
plugn trigger pre-receive-app "$APP" "dockerfile" "$TMP_WORK_DIR" "$REV"
|
||||
dokku receive "$APP" "dockerfile" "$TMP_WORK_DIR" | sed -u "s/^/"$'\e[1G'"/"
|
||||
else
|
||||
plugn trigger pre-receive-app "$APP" "herokuish" "$TMP_WORK_DIR" "$REV"
|
||||
dokku receive "$APP" "herokuish" "$TMP_WORK_DIR" | sed -u "s/^/"$'\e[1G'"/"
|
||||
fi
|
||||
}
|
||||
@@ -31,7 +33,7 @@ case "$1" in
|
||||
git-hook)
|
||||
APP=$2
|
||||
|
||||
while read oldrev newrev refname; do
|
||||
while read -r oldrev newrev refname; do
|
||||
# Only run this script for the master branch. You can remove this
|
||||
# if block if you wish to run it for others as well.
|
||||
if [[ $refname = "refs/heads/master" ]]; then
|
||||
|
||||
79
plugins/logs/commands
Executable file
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$(dirname "$0")/functions"
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/nginx-vhosts/functions"
|
||||
|
||||
case "$1" in
|
||||
logs)
|
||||
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
APP="$2"; verify_app_name "$2"
|
||||
APP_ROOT="$DOKKU_ROOT/$APP"
|
||||
COLORS=(36 33 32 35 31)
|
||||
|
||||
if ! (is_deployed "$APP"); then
|
||||
echo "Application's container not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
shift 2;
|
||||
TEMP=$(getopt -o htqn:p: --long help,tail,quiet,num:,ps: -n 'dokku logs' -- "$@")
|
||||
if [[ $? != 0 ]]; then usage >&2 ; exit 1 ; fi
|
||||
eval set -- "$TEMP"
|
||||
|
||||
DOKKU_LOGS_LINE_NUMBERS="100"
|
||||
while true; do
|
||||
case "$1" in
|
||||
-t|--tail) DOKKU_LOGS_ARGS+="--follow "; shift ;;
|
||||
-n|--num) DOKKU_LOGS_LINE_NUMBERS="$2"; shift 2 ;;
|
||||
-p|--ps) DOKKU_LOGS_ONLY_PROCESS="$2"; shift 2 ;;
|
||||
-q|--quiet) DOKKU_LOGS_NO_PRETTY_PRINT="true"; shift ;;
|
||||
--) shift; break ;;
|
||||
*) echo "Internal error"; exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -n $DOKKU_LOGS_ONLY_PROCESS ]]; then
|
||||
CONTAINERS=("$APP_ROOT/CONTAINER.$DOKKU_LOGS_ONLY_PROCESS".*)
|
||||
else
|
||||
CONTAINERS=("$APP_ROOT"/CONTAINER.*)
|
||||
fi
|
||||
[[ -z $(stat -t "${CONTAINERS[0]}" 2>/dev/null) ]] && exit 0
|
||||
|
||||
DOKKU_LOGS_ARGS+="--tail $DOKKU_LOGS_LINE_NUMBERS"
|
||||
((MAX_INDEX=${#CONTAINERS[*]} - 1)) || true
|
||||
for i in ${!CONTAINERS[*]}; do
|
||||
DYNO=$(echo "${CONTAINERS[i]}" | sed -r 's/.*CONTAINER\.(.*)/\1/')
|
||||
CID=$(< "${CONTAINERS[i]}")
|
||||
COLOR=${COLORS[i % ${#COLORS[*]}]}
|
||||
if [[ $DOKKU_LOGS_NO_PRETTY_PRINT == "true" ]]; then
|
||||
DOKKU_LOGS_CMD+="(docker logs $DOKKU_LOGS_ARGS $CID 2>&1)"
|
||||
else
|
||||
DOKKU_LOGS_PRETTY_PRINT_CMD="sed -r 's/^([^Z]+Z )/\x1b[${COLOR}m\1app[$DYNO]:\x1b[0m /gm'"
|
||||
DOKKU_LOGS_CMD+="(docker logs -t $DOKKU_LOGS_ARGS $CID 2>&1 | $DOKKU_LOGS_PRETTY_PRINT_CMD)"
|
||||
fi
|
||||
if [[ $i != "$MAX_INDEX" ]]; then
|
||||
DOKKU_LOGS_CMD+="& "
|
||||
else
|
||||
DOKKU_LOGS_CMD+="; "
|
||||
fi
|
||||
done
|
||||
bash -c "($DOKKU_LOGS_CMD)"
|
||||
;;
|
||||
|
||||
logs:help)
|
||||
usage
|
||||
;;
|
||||
|
||||
help)
|
||||
cat<<EOF
|
||||
logs <app> [-h] [-t] [-n num] [-q] [-p process], Show the last logs for an application
|
||||
EOF
|
||||
;;
|
||||
|
||||
*)
|
||||
exit $DOKKU_NOT_IMPLEMENTED_EXIT
|
||||
;;
|
||||
|
||||
esac
|
||||
12
plugins/logs/functions
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
usage() {
|
||||
echo "Usage: dokku logs <app>"
|
||||
echo " display recent log output"
|
||||
echo ""
|
||||
echo " -n, --num NUM # the number of lines to display"
|
||||
echo " -p, --ps PS # only display logs from the given process"
|
||||
echo " -t, --tail # continually stream logs"
|
||||
echo " -q, --quiet # display raw logs without colors, time and names"
|
||||
}
|
||||
4
plugins/logs/plugin.toml
Normal file
@@ -0,0 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core logs plugin"
|
||||
version = "0.4.0"
|
||||
[plugin.config]
|
||||
4
plugins/named-containers/plugin.toml
Normal file
@@ -0,0 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core named containers plugin"
|
||||
version = "0.4.0"
|
||||
[plugin.config]
|
||||
16
plugins/named-containers/post-deploy
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
APP="$1"; APP_ROOT="$DOKKU_ROOT/$APP"
|
||||
[[ -z $(stat -t "$APP_ROOT"/CONTAINER.* 2>/dev/null) ]] && exit 0
|
||||
for container in "$APP_ROOT"/CONTAINER.*; do
|
||||
DYNO=$(echo "$container" | sed -r 's/.*CONTAINER\.(.*)/\1/') || true
|
||||
NAME="$APP.$DYNO"
|
||||
PREVIOUS=$(docker ps -a -q -f name="$NAME") || true
|
||||
if [[ -n $PREVIOUS ]]; then
|
||||
docker rename "$NAME" "$NAME.$(date +%s)" > /dev/null
|
||||
fi
|
||||
ID=$(cat "$container")
|
||||
CURRENT_NAME=$(docker inspect -f '{{.Name}}' "$ID" | tr -d /)
|
||||
docker rename "$CURRENT_NAME" "$NAME" > /dev/null
|
||||
done
|
||||
@@ -52,9 +52,9 @@ case "$1" in
|
||||
verify_app_name "$2"
|
||||
APP="$2"
|
||||
|
||||
if [[ "$(is_app_nginx_enabled $APP)" == "true" ]]; then
|
||||
config_unset --no-restart $APP DOKKU_NO_NGINX
|
||||
unset DOKKU_NO_NGINX
|
||||
if [[ "$(is_app_nginx_enabled $APP)" == "false" ]]; then
|
||||
config_unset --no-restart $APP DOKKU_NO_NGINX NO_VHOST
|
||||
unset DOKKU_NO_NGINX NO_VHOST
|
||||
nginx_build_config $APP
|
||||
else
|
||||
dokku_log_info1 "nginx is already enabled for app ($APP)"
|
||||
|
||||
@@ -2,6 +2,11 @@
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get install -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes -qq -y nginx dnsutils
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
[[ -z "$CIRCLECI" ]] && apt-get install -qq -y software-properties-common python-software-properties
|
||||
|
||||
@@ -114,6 +114,10 @@ validate_nginx() {
|
||||
|
||||
restart_nginx() {
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
sudo /usr/sbin/invoke-rc.d nginx reload > /dev/null
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
sudo /etc/init.d/nginx reload > /dev/null
|
||||
;;
|
||||
@@ -132,6 +136,7 @@ nginx_build_config() {
|
||||
WILDCARD_SSL_PATH="$DOKKU_ROOT/tls"
|
||||
APP_SSL_PATH="$DOKKU_ROOT/$APP/tls"
|
||||
APP_NGINX_TEMPLATE="$DOKKU_ROOT/$APP/nginx.conf.template"
|
||||
APP_NGINX_SSL_TEMPLATE="$DOKKU_ROOT/$APP/nginx.ssl.conf.template"
|
||||
|
||||
eval "$(config_export global)"
|
||||
eval "$(config_export app $APP)"
|
||||
@@ -140,7 +145,7 @@ nginx_build_config() {
|
||||
if [[ -z "$DOKKU_APP_LISTEN_PORT" ]] && [[ -z "$DOKKU_APP_LISTEN_IP" ]]; then
|
||||
shopt -s nullglob
|
||||
for DOKKU_APP_IP_FILE in $DOKKU_ROOT/$APP/IP.web.*; do
|
||||
DOKKU_APP_PORT_FILE=$(echo $DOKKU_APP_IP_FILE | sed -e "s:IP:PORT:g")
|
||||
DOKKU_APP_PORT_FILE="${DOKKU_APP_IP_FILE//IP/PORT}"
|
||||
DOKKU_APP_LISTENER_IP=$(< $DOKKU_APP_IP_FILE)
|
||||
DOKKU_APP_LISTENER_PORT=$(< $DOKKU_APP_PORT_FILE)
|
||||
|
||||
@@ -207,7 +212,8 @@ EOF
|
||||
if [[ -n "$SSL_INUSE" ]]; then
|
||||
SCHEME="https"
|
||||
|
||||
[[ -z "$NGINX_TEMPLATE" ]] && NGINX_TEMPLATE="$PLUGIN_AVAILABLE_PATH/nginx-vhosts/templates/nginx.ssl.conf.template"
|
||||
[[ -f "$APP_NGINX_SSL_TEMPLATE" ]] && NGINX_SSL_TEMPLATE="$APP_NGINX_SSL_TEMPLATE" && dokku_log_info1 'Overriding default nginx.ssl.conf with detected nginx.ssl.conf.template'
|
||||
[[ -z "$NGINX_SSL_TEMPLATE" ]] && NGINX_SSL_TEMPLATE="$PLUGIN_AVAILABLE_PATH/nginx-vhosts/templates/nginx.ssl.conf.template"
|
||||
if [[ "$(is_app_vhost_enabled $APP)" == "true" ]]; then
|
||||
SSL_VHOSTS=$(egrep "^${SSL_HOSTNAME_REGEX}$" $VHOST_PATH || true)
|
||||
else
|
||||
@@ -227,12 +233,12 @@ EOF
|
||||
local NGINX_SSL_PORT=$DOKKU_NGINX_SSL_PORT
|
||||
fi
|
||||
|
||||
while read line; do
|
||||
while read -r line; do
|
||||
[[ -z "$line" ]] && continue
|
||||
dokku_log_info1 "Configuring SSL for $line..."
|
||||
SSL_SERVER_NAME=$line
|
||||
NOSSL_SERVER_NAME=$line
|
||||
eval "cat <<< \"$(< $NGINX_TEMPLATE)\" >> $NGINX_CONF"
|
||||
eval "cat <<< \"$(< $NGINX_SSL_TEMPLATE)\" >> $NGINX_CONF"
|
||||
done <<< "$SSL_VHOSTS"
|
||||
fi
|
||||
|
||||
@@ -245,9 +251,10 @@ EOF
|
||||
if [[ -n "$NONSSL_VHOSTS" ]]; then
|
||||
NOSSL_SERVER_NAME=$(echo $NONSSL_VHOSTS | tr '\n' ' ')
|
||||
xargs -i echo "-----> Configuring {}..." <<< "$NONSSL_VHOSTS"
|
||||
eval "cat <<< \"$(< $NGINX_TEMPLATE)\" >> $NGINX_CONF"
|
||||
fi
|
||||
eval "cat <<< \"$(< $NGINX_TEMPLATE)\" >> $NGINX_CONF"
|
||||
if [[ "$(is_app_vhost_enabled $APP)" == "false" ]] || ([[ -z "$NONSSL_VHOSTS" ]] && [[ -z "$SSL_VHOSTS" ]]); then
|
||||
eval "cat <<< \"$(< $NGINX_TEMPLATE)\" >> $NGINX_CONF"
|
||||
sed --in-place -n -e '/^.*server_name.*$/!p' $NGINX_CONF
|
||||
fi
|
||||
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
echo "%dokku ALL=(ALL) NOPASSWD:/usr/sbin/invoke-rc.d nginx reload, /usr/sbin/nginx -t" > /etc/sudoers.d/dokku-nginx
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
echo "%dokku ALL=(ALL) NOPASSWD:/etc/init.d/nginx reload, /usr/sbin/nginx -t" > /etc/sudoers.d/dokku-nginx
|
||||
;;
|
||||
@@ -32,7 +36,19 @@ fi
|
||||
|
||||
echo 'server_names_hash_bucket_size 512;' >| /etc/nginx/conf.d/server_names_hash_bucket_size.conf
|
||||
|
||||
# make sure dokku can read the default log dir
|
||||
gpasswd -M "$(egrep ^adm: /etc/group | awk -F ":" '{ print $4 }')" dokku
|
||||
chgrp -R dokku /var/log/nginx
|
||||
chmod g+r /var/log/nginx
|
||||
|
||||
# patch broken nginx 1.8.0 logrotate
|
||||
[[ -f /etc/logrotate.d/nginx ]] && sed -i -e 's/invoke-rc.d/service/g' /etc/logrotate.d/nginx
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
/usr/sbin/invoke-rc.d nginx start
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
/etc/init.d/nginx start
|
||||
;;
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
sudo /usr/sbin/invoke-rc.d nginx reload > /dev/null
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
sudo /etc/init.d/nginx reload > /dev/null
|
||||
;;
|
||||
|
||||
@@ -15,9 +15,9 @@ case "$1" in
|
||||
[[ "$#" -gt 2 ]] && dokku_log_info1_quiet "Cannot install additional core plugins, running core plugin install trigger"
|
||||
PLUGIN_PATH="$PLUGIN_CORE_PATH" plugn trigger install
|
||||
;;
|
||||
https:*|git:*)
|
||||
https:*|git:*|ssh:*)
|
||||
PLUGIN_GIT_URL="$2"
|
||||
download_and_enable_plugin $PLUGIN_GIT_URL
|
||||
download_and_enable_plugin "$PLUGIN_GIT_URL" "$3"
|
||||
plugn trigger install
|
||||
;;
|
||||
*)
|
||||
@@ -37,7 +37,7 @@ case "$1" in
|
||||
case "$2" in
|
||||
https:*|git:*)
|
||||
PLUGIN_GIT_URL="$2"
|
||||
download_and_enable_plugin $PLUGIN_GIT_URL
|
||||
download_and_enable_plugin "$PLUGIN_GIT_URL" "$3"
|
||||
plugn trigger update
|
||||
;;
|
||||
*)
|
||||
|
||||
@@ -21,15 +21,17 @@ enable_plugin() {
|
||||
|
||||
download_plugin() {
|
||||
local PLUGIN_GIT_URL="$1"
|
||||
plugn install $PLUGIN_GIT_URL
|
||||
local PLUGIN_NAME="$2"
|
||||
plugn install "$PLUGIN_GIT_URL" "$PLUGIN_NAME"
|
||||
}
|
||||
|
||||
download_and_enable_plugin() {
|
||||
local PLUGIN_GIT_URL="$1"
|
||||
local PLUGIN_NAME=$(echo $PLUGIN_GIT_URL | awk -F '/' '{ print $NF }' | sed -e "s:.git::g")
|
||||
local CUSTOM_NAME="$2"
|
||||
local PLUGIN_NAME=${CUSTOM_NAME:-$(plugin_name "$PLUGIN_GIT_URL")}
|
||||
dokku_log_info1_quiet "Cloning plugin repo $PLUGIN_GIT_URL to $PLUGIN_AVAILABLE_PATH/$PLUGIN_NAME"
|
||||
download_plugin $PLUGIN_GIT_URL
|
||||
enable_plugin $PLUGIN_NAME
|
||||
download_plugin "$PLUGIN_GIT_URL" "$PLUGIN_NAME"
|
||||
enable_plugin "$PLUGIN_NAME"
|
||||
}
|
||||
|
||||
uninstall_plugin() {
|
||||
@@ -39,3 +41,8 @@ uninstall_plugin() {
|
||||
plugn uninstall $PLUGIN_NAME
|
||||
dokku_log_info1_quiet "Plugin $PLUGIN uninstalled"
|
||||
}
|
||||
|
||||
plugin_name() {
|
||||
local PLUGIN_GIT_URL="$1"
|
||||
echo "$PLUGIN_GIT_URL" | awk -F '/' '{ print $NF }' | sed -e "s:.git::g" | sed 's:^dokku-::'
|
||||
}
|
||||
|
||||