Compare commits

...

346 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
6e4f023a7b Release 0.8.2 2017-03-19 16:20:39 -06:00
Jose Diaz-Gonzalez
8fb817f93c Merge pull request #2660 from dokku/plugin-tarball-support
feat: allow installation of plugins via tarball
2017-03-19 16:17:29 -06:00
Jose Diaz-Gonzalez
49abdb1b5c Merge pull request #2661 from dokku/non-quiet-package-builds
feat: do not run builds in quiet mode
2017-03-19 16:17:24 -06:00
Jose Diaz-Gonzalez
bba368a32d feat: allow installation of plugins via tarball 2017-03-19 16:16:45 -06:00
Jose Diaz-Gonzalez
eaccd8087c feat: do not run builds in quiet mode 2017-03-19 16:15:28 -06:00
Jose Diaz-Gonzalez
3c1fc4a7df Release 0.8.1 2017-03-19 14:06:32 -06:00
Jose Diaz-Gonzalez
c0027e5107 Merge pull request #2659 from jfw/master
Minor clarifications
2017-03-17 17:35:03 -06:00
Jeff Fein-Worton
ed6a4426c7 Minor clarifications 2017-03-17 16:32:33 -07:00
Jose Diaz-Gonzalez
e5a6cf48f7 Merge pull request #2657 from dokku/post-extract-trigger
Add post-extract plugin trigger
2017-03-16 05:51:04 -06:00
Jose Diaz-Gonzalez
dace6873df Add post-extract plugin trigger
This trigger allows you to modify the contents of an application *after* it has been extracted from git/tarball but *before* the image source type is detected. For example, you may wish to autogenerate a Dockerfile based on some other application contents before detecting what type of build process - herokuish or docker file - to use.
2017-03-16 04:25:18 -06:00
Jose Diaz-Gonzalez
d01460f19a Merge pull request #2656 from dokku/2628-fix-global-report-flags
fix: ensure we can call the report subcommand without an app while specifying flags
2017-03-16 03:39:42 -06:00
Jose Diaz-Gonzalez
97e35e796c fix: ensure we can call the report subcommand without an app while specifying flags
Closes #2628
2017-03-16 02:33:51 -06:00
Jose Diaz-Gonzalez
4de0e693ca Merge pull request #2618 from dokku/2356-storage-report
Implement docker-options:report and storage:report
2017-03-15 10:38:09 -06:00
Jose Diaz-Gonzalez
01b30e083f fix: redirect stderr to /dev/null in tests 2017-03-15 09:29:47 -06:00
Jose Diaz-Gonzalez
0215e3ec91 fix: redirect domains:default stderr to /dev/null in tests 2017-03-15 03:17:31 -06:00
Jose Diaz-Gonzalez
91aa5255ec fix: ensure we redirect stderr to stdout for test 2017-03-15 02:55:09 -06:00
Jose Diaz-Gonzalez
0d1c8deb57 fix: redirect error output to /dev/null
The checks command is deprecated, so the warning was being captured.
2017-03-15 02:44:38 -06:00
Jose Diaz-Gonzalez
06d2ffaa14 feat: redirect warnings to stderr
Having warnings on stdout doesn’t convey to a user that it is a warning.
2017-03-15 02:44:38 -06:00
Jose Diaz-Gonzalez
6ae948523b fix: redirect error output to /dev/null
The docker-options command is deprecated, so the warning was being captured.
2017-03-15 02:44:38 -06:00
Jose Diaz-Gonzalez
9aaf289fb8 fix: use correct variable 2017-03-15 02:44:38 -06:00
Jose Diaz-Gonzalez
367f6bd5e8 fix: add missing source calls 2017-03-15 02:44:38 -06:00
Jose Diaz-Gonzalez
d9ff7c218d Add deprecation notice 2017-03-15 02:42:10 -06:00
Jose Diaz-Gonzalez
f5cce3c3a3 fix: pass shellcheck 2017-03-15 02:42:10 -06:00
Jose Diaz-Gonzalez
f1897c7a86 feat: implement docker-options:report command
Refs #2356
2017-03-15 02:42:10 -06:00
Jose Diaz-Gonzalez
25e44b5492 docs: use node-js-app as the app name, not node-js-sample 2017-03-15 02:42:10 -06:00
Jose Diaz-Gonzalez
b7dca68375 fix: use correct source path 2017-03-15 02:42:10 -06:00
Jose Diaz-Gonzalez
9bad0795e2 fix: add missing functions 2017-03-15 02:42:10 -06:00
Jose Diaz-Gonzalez
b7da215ab5 feat: implement storage:report command
Refs #2356
2017-03-15 02:42:10 -06:00
Jose Diaz-Gonzalez
35acce84ea chore: use correct path for sourcing 2017-03-15 02:42:10 -06:00
Jose Diaz-Gonzalez
a7f32197f3 refactor: move command to internal-functions 2017-03-15 02:42:10 -06:00
Jose Diaz-Gonzalez
ac8aff1f00 refactor: storage:default is now an alias for storage:help 2017-03-15 02:39:53 -06:00
Jose Diaz-Gonzalez
e99e0b02d4 refactor: move storage:help to internal-functions 2017-03-15 02:38:38 -06:00
Jose Diaz-Gonzalez
621b31839e Merge pull request #2650 from dokku/2627-bare-help-output
Fix help output for nginx and ssh-keys
2017-03-13 10:36:25 -06:00
Jose Diaz-Gonzalez
3c5335056c feat: allow plugin:help and plugin:list subcommands to be run without root 2017-03-12 21:46:58 -06:00
Jose Diaz-Gonzalez
30bf228dc9 docs: swap in plugin:list command 2017-03-12 21:29:25 -06:00
Jose Diaz-Gonzalez
e78a05d6fe feat: mark ps:default command as deprecated 2017-03-12 21:29:12 -06:00
Jose Diaz-Gonzalez
4930003008 feat: create repo:default alias for repo:help 2017-03-12 21:29:01 -06:00
Jose Diaz-Gonzalez
0153bc49bc feat: create tar:default alias for tar:help 2017-03-12 21:28:45 -06:00
Jose Diaz-Gonzalez
48503e9f40 fix: add missing import 2017-03-12 21:28:29 -06:00
Jose Diaz-Gonzalez
ef9b453aa8 refactor: mark storage:list as deprecated 2017-03-12 21:27:36 -06:00
Jose Diaz-Gonzalez
f5552da8ac chore: formatting 2017-03-12 21:26:54 -06:00
Jose Diaz-Gonzalez
6124f2693b feat: make plugin:default an alias of plugin:list 2017-03-12 21:26:46 -06:00
Jose Diaz-Gonzalez
2bcad2014b chore: unify error output when an app is not declared 2017-03-12 21:26:19 -06:00
Jose Diaz-Gonzalez
7bbad9f074 fix: ensure the help output for nginx/ssh-keys renders correctly
Closes #2627

[ci skip]
2017-03-12 21:24:43 -06:00
Jose Diaz-Gonzalez
a5ac4bb08b Merge pull request #2648 from dokku/josegonzalez-patch-1
docs: Note that the remote username is important
2017-03-10 19:47:38 -07:00
Jose Diaz-Gonzalez
3b2bb2ebc6 docs: Note that the remote username is important
[ci skip]
2017-03-10 19:47:26 -07:00
Jose Diaz-Gonzalez
40e4df7e78 Merge pull request #2647 from dokku/jg-2646
fix: properly escape post-install variables
2017-03-09 01:56:44 -07:00
Jose Diaz-Gonzalez
41d3b258bb fix: properly escape post-install variables
Closes #2646

[ci skip]
2017-03-09 01:56:27 -07:00
Jose Diaz-Gonzalez
df6f7803d0 Merge pull request #2639 from joshco/docs/alt-unix-users
Add documentation for how to grant other Unix accounts Dokku access
2017-03-06 06:34:26 -07:00
Josh Cohen
e870f844c6 Add documentation for how to grant other Unix accounts Dokku access
without giving them full sudo privileges.
2017-03-06 08:06:24 -05:00
Jose Diaz-Gonzalez
68192dcdbf Merge pull request #2638 from econya/speaking-documentation-link
Improve README with more speaking link to doc.
2017-03-06 02:55:20 -07:00
Felix Wolfsteller
926cb51906 Improve README with more speaking link to doc.
Also, add a full stop somewhere.
2017-03-06 10:23:08 +01:00
Jose Diaz-Gonzalez
e518571f83 Merge pull request #2622 from raphaklaus/master
Allow file names with multiple dots in certs:add command
2017-03-04 16:18:27 -07:00
Jose Diaz-Gonzalez
7586575cf8 Merge pull request #2637 from dokku/fix-ps-report-docs
docs: Add documentation surrounding flags that ps:report accepts
2017-03-04 16:18:03 -07:00
Jose Diaz-Gonzalez
31c9775ef4 docs: Add documentation surrounding flags that ps:report accepts
Closes #2631

[ci skip]
2017-03-04 16:17:27 -07:00
Raphael D. Pinheiro
30de268da7 Merge branch 'master' into master 2017-03-03 15:22:55 -03:00
Jose Diaz-Gonzalez
1e387b3b42 fix: support new docker packages
Refs #2636
2017-03-03 09:04:49 -07:00
raphaklaus
94af35b3b9 Merge branch 'master' of https://github.com/raphaklaus/dokku 2017-03-02 16:39:08 -03:00
raphaklaus
a3989aafaa add grep to find crt and key files 2017-03-02 16:38:25 -03:00
Michael Hobbs
87feed08f5 Merge pull request #2634 from dokku/mh/chore/upgrade-herokuish
update herokuish to 0.3.26
2017-03-02 10:23:57 -07:00
Raphael D. Pinheiro
86eca5af3a Merge branch 'master' into master 2017-03-02 12:01:17 -03:00
Michael Hobbs
246e54a293 update herokuish to 0.3.26 2017-02-28 17:02:33 -07:00
Jose Diaz-Gonzalez
16ff22b457 Merge pull request #2633 from drpoggi/patch-1
update ssl.md
2017-02-28 12:08:10 -07:00
David Poggi
f7a25eb480 update ssl.md
Make sure we're respecting the respectively ;)
2017-02-28 13:20:47 -05:00
Raphael D. Pinheiro
51f5dbcf26 Merge branch 'master' into master 2017-02-28 12:37:52 -03:00
Jose Diaz-Gonzalez
d79a79084e fix: bail early when checking ps output for an undeployed app
Closes #2630
2017-02-27 07:30:21 -07:00
Jose Diaz-Gonzalez
fe54718073 Merge pull request #2629 from znz/fix-certs-help
Fix `certs:help`
2017-02-27 07:13:20 -07:00
Kazuhiro NISHIYAMA
c1cef4f99e Fix certs:help
`certs` requires `app` argument like `certs:info`.
2017-02-27 23:04:54 +09:00
Jose Diaz-Gonzalez
d36f874d0e Merge pull request #2626 from znz/update-command-in-example
Update command in example
2017-02-27 06:49:22 -07:00
Kazuhiro NISHIYAMA
b0c577ddd7 Update command in example 2017-02-27 22:41:42 +09:00
raphaklaus
56b018b4c5 Merge branch 'master' of https://github.com/raphaklaus/dokku 2017-02-24 12:54:40 -03:00
Raphael D. Pinheiro
8bc7cdaaeb Merge branch 'master' into master 2017-02-24 12:42:42 -03:00
raphaklaus
adf0a9ee74 add domain_ssl tar for testing 2017-02-24 12:41:12 -03:00
Jose Diaz-Gonzalez
ba7f9b8f87 Merge pull request #2616 from dokku/2356-apps-report-cleanup
Replace apps subcommand with apps:list
2017-02-23 19:38:40 -07:00
Jose Diaz-Gonzalez
a3ff9b53a8 Merge pull request #2615 from dokku/2356-certs-report
Implement certs:report
2017-02-23 19:38:25 -07:00
Jose Diaz-Gonzalez
0b897df462 Merge pull request #2619 from dokku/2356-ssh-keys-report
Refactor ssh-keys:default
2017-02-23 19:38:11 -07:00
Jose Diaz-Gonzalez
b4899cdb21 Merge pull request #2620 from dokku/2356-proxy-report
Implement domains:report and proxy:report
2017-02-23 19:37:58 -07:00
Jose Diaz-Gonzalez
2fbe5a418f Merge pull request #2617 from dokku/2356-checks-report
Implement checks:report
2017-02-23 19:37:43 -07:00
Raphael D. Pinheiro
8a6bce3745 add multiple dots tar for testing 2017-02-23 16:33:36 -03:00
Raphael D. Pinheiro
b0777a44cb add test to certs:add with multiple dots
Add test to certs:add command to allow multiple dots in file name
2017-02-23 13:44:28 -03:00
Raphael D. Pinheiro
0c98a34094 enhance regex to allow multiple dots in file names
removed remaining *
2017-02-23 13:27:50 -03:00
Raphael D. Pinheiro
088b7f360e enhance regex to allow multiple dots in file names
things like mydomain.com.crt and mydomain.com.key will be better interpreted
2017-02-23 13:25:33 -03:00
Jose Diaz-Gonzalez
54429a095c feat: implement domains:report command
Also deprecate `domains:default` in favor of `domains:report`

Refs #2356
2017-02-20 23:17:35 -07:00
Jose Diaz-Gonzalez
282979eef4 refactor: move domains:help to internal-functions 2017-02-20 22:50:07 -07:00
Jose Diaz-Gonzalez
48653e5663 chore: properly name functions 2017-02-20 22:44:51 -07:00
Jose Diaz-Gonzalez
ec2e2bc4cc refactor: alias nginx:default to nginx:help 2017-02-20 22:39:53 -07:00
Jose Diaz-Gonzalez
885aa47b18 refactor: move nginx:help to internal-functions 2017-02-20 22:35:52 -07:00
Jose Diaz-Gonzalez
225840b79d refactor: move proxy:help to internal-functions 2017-02-20 21:52:05 -07:00
Jose Diaz-Gonzalez
0e899cdd13 feat: implement proxy:report command
Also deprecate `proxy:default` in favor of `proxy:report`

Refs #2356
2017-02-20 21:52:02 -07:00
Jose Diaz-Gonzalez
6906ead6ae Merge pull request #2592 from dokku/2535-dockerfile-ssl-port
fix: always set a default ssl port for apps with ssl enabled
2017-02-20 21:20:44 -07:00
Jose Diaz-Gonzalez
e441594981 chore: use correct source path 2017-02-20 20:11:53 -07:00
Jose Diaz-Gonzalez
448b6e9ac1 refactor: alias ssh-keys:default to ssh-keys:help 2017-02-20 20:09:09 -07:00
Jose Diaz-Gonzalez
a09560542b refactor: move ssh-keys:help to internal-functions 2017-02-20 20:08:38 -07:00
Jose Diaz-Gonzalez
adc3b24ed7 docs: use node-js-app as sample app name
[ci skip]
2017-02-20 20:04:07 -07:00
Jose Diaz-Gonzalez
4026291572 SC2005: Useless echo? Instead of 'echo $(cmd)', just use 'cmd'. 2017-02-20 19:22:18 -07:00
Jose Diaz-Gonzalez
59f6ad9479 Correct docs for checks:report
[ci skip]
2017-02-20 19:07:10 -07:00
Jose Diaz-Gonzalez
dd4960f1ce refactor: move checks:help to internal-functions 2017-02-20 18:19:37 -07:00
Jose Diaz-Gonzalez
3b3eefcb73 refactor: deprecate the checks command in favor of checks:report 2017-02-20 18:19:37 -07:00
Jose Diaz-Gonzalez
cbcb720228 feat: implement checks:report command
Refs #2356
2017-02-20 18:19:31 -07:00
Jose Diaz-Gonzalez
d73c07de68 cleanup: move from apps to apps:list subcommand for tests and docs 2017-02-20 17:24:09 -07:00
Jose Diaz-Gonzalez
cd3e637387 refactor: move apps:help to internal-functions 2017-02-20 17:22:41 -07:00
Jose Diaz-Gonzalez
9614f7dca2 feat: implement apps:list
Also deprecate the `apps` command in favor of `apps:list`
2017-02-20 17:18:29 -07:00
Jose Diaz-Gonzalez
84fab30c09 refactor: move certs:help into internal-functions 2017-02-20 17:11:53 -07:00
Jose Diaz-Gonzalez
cb71d8a0be fix: clean up certs help output 2017-02-20 16:51:46 -07:00
Jose Diaz-Gonzalez
507ae1de33 fix: ensure certs:info doesn’t output error information when ssl files are missing 2017-02-20 16:50:38 -07:00
Jose Diaz-Gonzalez
dcb88226b5 refactor: ensure that certs:default and certs:info are deprecated in favor of certs:report
Refs #2356
2017-02-20 16:47:14 -07:00
Jose Diaz-Gonzalez
51217521e3 feat: add certs:report
Refs #2356
2017-02-20 16:39:43 -07:00
Jose Diaz-Gonzalez
05bf33805f Merge pull request #2504 from mbtamuli/apps_report_subcommand
Adds the `report` subcommand for all plugin
2017-02-20 13:56:45 -07:00
Jose Diaz-Gonzalez
3506c100c7 Merge branch 'master' into apps_report_subcommand 2017-02-20 13:55:37 -07:00
Jose Diaz-Gonzalez
8639d1768c Merge pull request #2586 from bevand10/patch-1
Behind-proxy support for herokuish install
2017-02-20 13:50:04 -07:00
Jose Diaz-Gonzalez
779d281c57 Merge pull request #2612 from dokku/2609-ensure-vhost-file-existence
Ensure VHOST files exist before executing commands against them
2017-02-20 13:49:03 -07:00
Jose Diaz-Gonzalez
815630ffe1 Merge pull request #2613 from emveeoh/patch-2
Update linode.md to reflect latest Linode.com process
2017-02-19 20:04:38 -05:00
Michael van Olden
189366097e Update linode.md to reflect latest Linode.com process
[ci skip]
Linode now supports KVM virtualization on all VMs by default. So, this verbiage was completely removed.
GRUB 2 is now one of the default options in the Kernel Menu. The additional Ubuntu packages are no longer required. Wording changed to reflect updated instructions.
2017-02-19 20:01:57 -05:00
Jose Diaz-Gonzalez
7c30babdec fix: Ensure VHOST files exist before executing commands against them
Closes #2609
2017-02-19 19:57:09 -05:00
Jose Diaz-Gonzalez
618395df5e Merge pull request #2605 from andyjeffries/master
Added information on SSL_CERT_FILE build failure
2017-02-15 11:52:08 -05:00
Jose Diaz-Gonzalez
ef7d913cd7 Merge branch 'master' into master 2017-02-15 11:52:00 -05:00
Andy Jeffries
daa8faa3aa Added information on SSL_CERT_FILE build failure 2017-02-15 16:08:02 +00:00
Jose Diaz-Gonzalez
336ffc9b09 Update functions 2017-02-05 13:39:49 -05:00
Michael Hobbs
44b48a55a5 Merge pull request #2594 from dokku/mh/chore/upgrade-herokuish
upgrade to herokuish v0.3.25
2017-02-01 16:45:06 -08:00
Michael Hobbs
0de2c28c92 upgrade to herokuish v0.3.25 2017-02-01 11:52:19 -08:00
Dave Bevan
4f8bea8f35 Merge branch 'master' into patch-1 2017-01-30 10:01:10 +00:00
Jose Diaz-Gonzalez
aae7401888 fix: always set a default ssl port for apps with ssl enabled
Closes #2535
2017-01-30 03:04:02 -05:00
Dave Bevan
96a0c2531d Update deb.mk
Updates as requested
2017-01-27 12:02:55 +00:00
Jose Diaz-Gonzalez
99378af668 Merge pull request #2587 from dokku/2494-custom-deploy-branch
Allow specifying the deploy branch via DOKKU_DEPLOY_BRANCH
2017-01-26 11:23:36 -07:00
Dave Bevan
9f9b3374bd Make docker build --build-args optional
Change the proxy-sensing --build-args such that they only added if defined.
2017-01-26 10:34:02 +00:00
Jose Diaz-Gonzalez
2efcbcc9bb Merge pull request #2588 from dokku/2466-vagrant-ssh-config
Clarify when the `~/.ssh/config` settings need to match `vagrant ssh-config output`
2017-01-26 00:46:57 -07:00
Jose Diaz-Gonzalez
7cac755c98 Clarify when the ~/.ssh/config settings need to match vagrant ssh-config output
Closes #2466

[ci skip]
2017-01-26 00:46:35 -07:00
Jose Diaz-Gonzalez
0aeee7ea28 Allow specifying the deploy branch via DOKKU_DEPLOY_BRANCH
Closes #2494
2017-01-26 00:32:23 -07:00
Dave Bevan
f393fa0442 Behind-proxy support for herokuish install
Inject http proxy envvars to docker build command to allow package installation behind corporate proxies.

These envvars (http_proxy and https_proxy) are standard, and usually configured via system-wide /etc/profile.d files.

In cases where these envvars are not configured, the additions appear to be mute and non-destructive.
2017-01-25 17:37:26 +00:00
Jose Diaz-Gonzalez
f24e777921 Merge pull request #2583 from dokku/jg-apps-clone
feat: implement application cloning
2017-01-24 11:37:38 -07:00
Jose Diaz-Gonzalez
c82c9562b6 fix: use correct check for skipping a rebuild 2017-01-24 02:54:26 -07:00
Jose Diaz-Gonzalez
d473c1635f docs: add a note about errors that can occur for non-generic config
[ci skip]
2017-01-23 12:03:16 -07:00
Jose Diaz-Gonzalez
33a7619eac Update commands
[ci skip]
2017-01-22 22:55:40 -07:00
Jose Diaz-Gonzalez
dd517a3dd1 Update application-management.md
[ci skip]
2017-01-22 22:55:28 -07:00
Jose Diaz-Gonzalez
143b4802c3 fix: use correct verb
[ci skip]
2017-01-22 22:55:09 -07:00
Jose Diaz-Gonzalez
a564eae9f1 feat: implement application cloning
Application cloning can be used to setup review applications based on an existing application. This is useful in CI/CD pipelines where a developer may wish to verify code in a custom environment without overwriting a shared staging environment.
2017-01-22 21:39:30 -07:00
Jose Diaz-Gonzalez
83bf99c8d0 Merge pull request #2580 from znz/fix-font-url
Fix font URL
2017-01-20 09:11:45 -07:00
Kazuhiro NISHIYAMA
5173145653 Fix font URL
It is broken since
a00a9219da (diff-d93d3d701f4e262a6177c91d4e0b9a36R10)
2017-01-20 23:47:07 +09:00
Jose Diaz-Gonzalez
1f0173ad7b Merge pull request #2578 from dokku/josegonzalez-patch-1
Require specific versions for dokku-maintained packages
2017-01-19 17:34:26 -07:00
Jose Diaz-Gonzalez
bdb38ceaa8 Require specific versions for dokku-maintained packages
Closes #2450

[ci skip]
2017-01-19 17:34:09 -07:00
Jose Diaz-Gonzalez
bb0c587fff Merge pull request #2576 from znz/remove-unused
Remove unused variable
2017-01-19 17:22:46 -07:00
Kazuhiro NISHIYAMA
fec2f8e38e Remove unused variable 2017-01-20 00:26:51 +09:00
Jose Diaz-Gonzalez
b0afcee389 Merge pull request #2573 from ebeigarts/parallel-recomends
Recommend parallel package for faster ps:restore
2017-01-18 02:44:56 -07:00
Edgars Beigarts
33c9bc9908 Recommend parallel package for faster ps:restore 2017-01-18 09:25:08 +02:00
Jose Diaz-Gonzalez
e233e916aa docs: move sponsors and backers section up 2017-01-16 15:43:12 -07:00
Jose Diaz-Gonzalez
eb5d4d0708 docs: move badges to newline
[ci skip]
2017-01-16 15:42:25 -07:00
Jose Diaz-Gonzalez
3a8e80c530 fix: use correct markup for link
[ci skip]
2017-01-16 15:38:35 -07:00
Jose Diaz-Gonzalez
c72d7e0686 Merge pull request #2475 from pranavgoel25/update-docs
Minor readme and sponsor changes
2017-01-16 15:37:53 -07:00
Jose Diaz-Gonzalez
5b92085c29 Merge branch 'master' into update-docs 2017-01-16 15:37:36 -07:00
Jose Diaz-Gonzalez
4e7b1c77e3 Merge pull request #2557 from dokku/dokku-cli-improvements
Dokku cli improvements
2017-01-16 15:32:11 -07:00
Jose Diaz-Gonzalez
e83f3e0011 Merge pull request #2570 from OmgImAlexis/master
add dokku report command for 0.4.10+
2017-01-16 00:56:31 -07:00
Alexis Tyler
b874692d06 add dokku report command for 0.4.10+ 2017-01-16 18:25:20 +10:30
Jose Diaz-Gonzalez
b7511829ad Merge pull request #2569 from OmgImAlexis/patch-1
Reload nginx after adding default vhost file
2017-01-16 00:49:55 -07:00
Alexis Tyler
f5f2a5f171 Reload nginx after creating default vhost file 2017-01-16 18:12:11 +10:30
Jose Diaz-Gonzalez
12500d7d3c Merge pull request #2566 from dokku/josegonzalez-patch-1
Move "new as of" note to correct section
2017-01-15 01:36:37 -07:00
Jose Diaz-Gonzalez
927d569db5 Move "new as of" note to correct section
Also move note up.

[ci skip]
2017-01-15 01:07:12 -07:00
Jose Diaz-Gonzalez
eec41bf4e7 Merge pull request #2565 from dokku/josegonzalez-patch-1
Update persistent storage to reference the sample app as normal
2017-01-15 01:05:21 -07:00
Jose Diaz-Gonzalez
f0ecac5998 Update persistent storage to reference the sample app as normal
[ci skip]
2017-01-15 01:05:08 -07:00
Jose Diaz-Gonzalez
feaaf4f4b0 Merge pull request #2564 from ka7/spelling
Spelling
2017-01-14 14:42:27 -07:00
klemens
e09d093239 spelling fixes 2017-01-14 22:38:27 +01:00
klemens
fc4b7ce0ee spelling fixes 2017-01-14 22:35:24 +01:00
Jose Diaz-Gonzalez
dbf0de9e65 Merge pull request #2500 from dokku/2479-jg-suppress-output-on-submodule-success
Suppress output unless the `git submodule update` call fails
2017-01-14 14:13:48 -07:00
Jose Diaz-Gonzalez
8497bd6d70 chore: remove extra newline
[ci skip]
2017-01-14 14:08:22 -07:00
Jose Diaz-Gonzalez
67f05b8eed fix: show error message when there is no DOKKU_REMOTE_HOST available 2017-01-14 14:02:14 -07:00
Jose Diaz-Gonzalez
0f5dec1797 refactor: rename variable usage to DOKKU_REMOTE_HOST
This allows us to make it a local variable
2017-01-14 14:00:21 -07:00
Jose Diaz-Gonzalez
24c4f25dd0 fix: set DOKKU_GIT_REMOTE to a default of dokku 2017-01-14 13:58:45 -07:00
Jose Diaz-Gonzalez
ab93fefd5b Merge pull request #2508 from OmarShehata/master
Add default functions for all commands
2017-01-13 22:37:29 -07:00
Jose Diaz-Gonzalez
e726bb1df8 Merge pull request #2519 from tkalus/tk-2474-dup_nginx_server_name
Fix for #2474
2017-01-13 22:34:17 -07:00
Jose Diaz-Gonzalez
a8abd40abe Merge pull request #2555 from dokku/2463-enhanced-restore
Skip failing applications when running ps:restore on boot
2017-01-13 17:30:01 -07:00
Jose Diaz-Gonzalez
06fa58ff47 chore: remove extra space
[ci skip]
2017-01-13 17:29:51 -07:00
Jose Diaz-Gonzalez
0de746da4e fix shellcheck issues 2017-01-13 16:20:13 -07:00
Jose Diaz-Gonzalez
24552f2b9b Merge pull request #2560 from ebeigarts/rpm-doc
Improve install documentation on CentOS
2017-01-12 09:51:59 -07:00
Edgars Beigarts
90510378c8 Improve install documentation on CentOS 2017-01-12 13:28:39 +02:00
Jose Diaz-Gonzalez
a22f6596dc Merge pull request #2554 from dokku/2480-add-ssl-ports
Add ssl ports when generating a self-signed certificate
2017-01-10 14:00:04 -07:00
Jose Diaz-Gonzalez
c216b3be7f feat: add support for --global flag when calling dokku domains 2017-01-09 02:34:48 -07:00
Jose Diaz-Gonzalez
6e00064cb3 fix: Properly parse flags in the dokku client
- Respect the --app flag
- Respect the --trace flag
- Skip the second argument after both --app and --remote flags
- The `--global` flag should be set as is when specified after a “valid” command
- Fix issues when checking if the --app flag should be passed via ssh
- Use APP as the variable name for the current app
2017-01-09 02:33:45 -07:00
Jose Diaz-Gonzalez
594b41cc70 fix: properly handle argument parsing when skip is set to true
Previously, using the --app flag would mean that we would stop properly parsing all proceeding flags, so the --app flag would only work when set last.
2017-01-09 02:13:52 -07:00
Jose Diaz-Gonzalez
9272e40178 fix: skip following argument when current argument is --app 2017-01-09 02:12:18 -07:00
Jose Diaz-Gonzalez
e107c19dbf chore: remove extra local declarations 2017-01-09 01:31:10 -07:00
Justin Clark
13c78e8e9a Add exceptions back to dokku_client.sh for plugins that should not be passed an app name implicitly 2017-01-09 01:30:49 -07:00
Jose Diaz-Gonzalez
5ddcf06ce9 feat: add the ability to specify a remote via the --remote flag
Closes #2523
2017-01-09 01:15:22 -07:00
Jose Diaz-Gonzalez
70f3e3407f chore: prefix functions with fn- 2017-01-09 00:44:13 -07:00
Jose Diaz-Gonzalez
332c429e31 refactor: make variables local and move them into correct functions 2017-01-09 00:37:54 -07:00
Jose Diaz-Gonzalez
b23c602079 chore: remove extra whitespace in client
[ci skip]
2017-01-09 00:36:35 -07:00
Jose Diaz-Gonzalez
13ef76127d Suppress output unless the git submodule update call fails
This will give a bit more warning to developers as to what might be going on, allowing them to respond appropriately.

Closes #2479
2017-01-08 22:04:14 -07:00
Jose Diaz-Gonzalez
0e0012cca1 fix: remove extra closing tag 2017-01-08 21:43:37 -07:00
Jose Diaz-Gonzalez
37a2edc558 Merge pull request #2556 from dokku/cleanup-fonts
docs: use slightly better font style for docs
2017-01-08 21:38:05 -07:00
Jose Diaz-Gonzalez
2629be5651 docs: use slightly better font style for docs
- switch to native fonts
- use smaller sidebar text
- set proper line-height

[ci skip]
2017-01-08 21:37:44 -07:00
Jose Diaz-Gonzalez
815c612261 feat: add support for using parallel to restore apps
By using parallel, we take advantage of the fact that a server may have multiple cores, thus enabling restores to complete faster.

Refs #2463
2017-01-08 20:49:14 -07:00
Jose Diaz-Gonzalez
831fdeb030 fix: allow ps_start to fail during a ps:restore
Instead of blocking the start of each app based on whether the previous app started, we simply log and continue.

Closes #2463
2017-01-08 20:17:23 -07:00
Jose Diaz-Gonzalez
bcfa60ae98 feat: save the ssl certificate to the APP_SSL_PATH
This allows later retrieval of the csr in cases where the developer forgot to save it locally.
2017-01-08 19:36:17 -07:00
Jose Diaz-Gonzalez
82c11a2b2c fix: call post-certs-update on the application before updating domains
This ensures that we set the proper ssl ports.

Closes #2480
Closes #2528
2017-01-08 19:35:49 -07:00
Jose Diaz-Gonzalez
a967990be7 chore: remove unnecessary cd in certs:add
This was used before we started using `plugn` for triggering subshell calls to dokku.
2017-01-08 19:35:04 -07:00
Jose Diaz-Gonzalez
87573b81bb Release 0.8.0 2017-01-08 17:22:30 -07:00
Jose Diaz-Gonzalez
66ef66644f Merge pull request #2553 from dokku/release
Release code
2017-01-08 16:55:14 -07:00
Jose Diaz-Gonzalez
e46b0952e2 feat: add release-related Dockerfiles
These two docker files are used to create deb and rpm packages which are later extracted and pushed to packagecloud.

[ci skip]
2017-01-08 16:49:41 -07:00
Jose Diaz-Gonzalez
6ab9e04ba6 fix: allow overriding both DOKKU_VERSION and GIT_REV via environment variables 2017-01-08 16:41:05 -07:00
Jose Diaz-Gonzalez
4740ee1edc Merge pull request #2552 from dokku/build-on-osx
Build on osx
2017-01-08 05:25:45 -07:00
Jose Diaz-Gonzalez
f3113296ee fix: ensure man-db is installed when generating man pages
[ci skip]
2017-01-08 05:25:30 -07:00
Jose Diaz-Gonzalez
6c8c4de398 feat: skip checking for /etc/os-release
On OSX, this file does not exist

[ci skip]
2017-01-08 05:25:30 -07:00
Michael Hobbs
6d5d919a06 Merge pull request #2544 from dokku/mh-update-herokuish
update herokuish to 0.3.29
2017-01-03 10:52:50 -08:00
Michael Hobbs
7af00ef744 update herokuish to 0.3.29 2017-01-03 09:36:37 -08:00
Jose Diaz-Gonzalez
5f86962c06 Merge pull request #2539 from ebeigarts/dokku-rm
Fix dokku-installer.service removal
2016-12-28 14:07:04 -07:00
Edgars Beigarts
171e9625f6 Fix dokku-installer.service removal 2016-12-28 07:32:19 +02:00
Jose Diaz-Gonzalez
1f91b33f46 Merge pull request #2518 from dokku/josegonzalez-patch-1
Use same check for dockerfile apps during a tar build
2016-12-23 02:25:28 -07:00
Jose Diaz-Gonzalez
e6bd877b48 Merge pull request #2533 from facundomedica/patch-1
Solution to problem related to firewall
2016-12-16 13:53:26 -05:00
facundomedica
127dd7334f Update troubleshooting.md 2016-12-16 15:52:19 -03:00
facundomedica
3f219a3f8e Solution to problem related to firewall
Resume: Ubuntu 16.04 seems to have the firewall enabled by default, which prohibits the access to apps.
Original issue: https://github.com/dokku/dokku/issues/2532
2016-12-16 15:17:36 -03:00
Jose Diaz-Gonzalez
fb5cc76585 Merge pull request #2531 from slava-vishnyakov/patch-1
Document rebuilding app after mounting storage
2016-12-15 10:50:07 -05:00
Slava Vishnyakov
c5117cb42f Update application-deployment.md 2016-12-15 18:48:22 +03:00
Slava Vishnyakov
4c86f88816 Update application-deployment.md 2016-12-15 18:47:58 +03:00
Slava Vishnyakov
f100a3ee4c Update application-deployment.md 2016-12-15 18:46:52 +03:00
Slava Vishnyakov
a53c61b4d8 Update persistent-storage.md 2016-12-15 18:46:16 +03:00
Slava Vishnyakov
88f37028a2 Update application-deployment.md 2016-12-15 17:15:38 +03:00
Slava Vishnyakov
42b1666fbe Update persistent-storage.md 2016-12-15 17:15:00 +03:00
Slava Vishnyakov
de9f495e2c storage needs deploy too 2016-12-15 14:22:52 +03:00
Slava Vishnyakov
cda2e3d048 Re-deploying/restarting 2016-12-15 14:19:41 +03:00
Mriyam Tamuli
49b01143a0 Correct apps:report to not exit if one app is not deployed 2016-12-11 13:26:07 +05:30
Jose Diaz-Gonzalez
991bb4d7f0 Merge pull request #2526 from dokku/mh-deploy-tasks-bug
actually fail deploy when app.json script fails
2016-12-09 17:45:15 -07:00
Michael Hobbs
c9a1a94cc1 actually fail deploy when app.json script fails 2016-12-09 15:10:07 -08:00
Jose Diaz-Gonzalez
819608b940 Merge pull request #2525 from OmarShehata/patch-1
Plugin-triggers typo: dokkku -> dokku
2016-12-09 02:47:44 -07:00
Omar Shehata
dda58a82f9 Plugin-triggers typo: dokkku -> dokku 2016-12-09 03:46:25 -06:00
Turtle Kalus
eae3d463df Fix for dokku/dokku#2474
`SSL_SERVER_NAME` should contain items found in the ssl certs
(E.G. CommonName and AltNames), but not already in the `NOSSL_SERVER_NAME`
list. That will avoid the dups in the `nginx.conf` and kill the warning
initially cited in dokku/dokku#2474
2016-12-07 23:43:30 +00:00
Jose Diaz-Gonzalez
8f816c3433 Merge pull request #2522 from stackforgehq/fix/2521
Docs: Fix #2521
2016-12-07 11:19:46 -07:00
Josh Manders
88f2dc7f60 Docs: Fix #2521 2016-12-06 21:04:37 -06:00
Jose Diaz-Gonzalez
da44c240d7 Use same check for dockerfile apps during a tar build 2016-12-04 15:20:09 -07:00
Jose Diaz-Gonzalez
cd2ae7ea92 Merge pull request #2517 from dokku/josegonzalez-patch-1
Update docs regarding if the ssh-keys plugin should be in use
2016-12-03 20:23:26 -07:00
Jose Diaz-Gonzalez
23c71c8d69 Update docs regarding if the ssh-keys plugin should be in use
[ci skip]
2016-12-03 20:23:19 -07:00
Omar Shehata
58d774a316 Added default for storage plugin to list 2016-12-03 19:38:48 +00:00
Omar Shehata
f2a4f61920 Added ssh-keys plugin default to list 2016-12-03 19:36:11 +00:00
Omar Shehata
1f47803324 Added certs plugin default to info 2016-12-03 19:27:49 +00:00
Omar Shehata
0062227c57 Revert "Added certs default help function"
This reverts commit d001fcc896.
2016-12-03 19:08:25 +00:00
Omar Shehata
010c89e810 Revert "Added ssh-keys default help function"
This reverts commit 74db5b9d3b.
2016-12-03 19:08:02 +00:00
Omar Shehata
0fed122a99 Revert "Added storage default help function"
This reverts commit 4294793452.
2016-12-03 19:07:34 +00:00
Jose Diaz-Gonzalez
21feb6874a Merge pull request #2511 from IlyaSemenov/default_site_docs
Clarify instructions for arranging default nginx site
2016-12-02 18:31:04 -07:00
Jose Diaz-Gonzalez
ec1b0b530f Merge pull request #2515 from sgloutnikov/dreamhost_doc_update
Update DreamHost Cloud install instructions.
2016-12-02 18:30:03 -07:00
Stefan Gloutnikov
71ee7e73a7 Update DreamHost Cloud install instructions. 2016-12-02 12:53:39 +02:00
Mriyam Tamuli
a574a6db1c Quotes unquoted variable 2016-12-02 00:00:10 +05:30
Ilya Semenov
d4b85999af Clarify instructions for arranging default nginx site 2016-12-01 13:21:57 +07:00
Mriyam Tamuli
45f8b8ccc8 Adds the report subcommand to the ps plugin 2016-12-01 11:39:18 +05:30
Jose Diaz-Gonzalez
f7479250c3 Merge pull request #2510 from IlyaSemenov/domains_set
Add domains:set and domains:set-global commands
2016-11-28 18:18:51 -07:00
Jose Diaz-Gonzalez
0f448748e8 Merge pull request #2495 from dokku/jg-2469-create-authorized-keys
Create the user's `authorized_keys` file if it does not exist
2016-11-28 13:53:49 -07:00
Jose Diaz-Gonzalez
d5a013a973 Merge pull request #2496 from dokku/jg-2435-nginx-http2-detection
Detect nginx versions that support HTTP/2 well
2016-11-28 13:12:49 -07:00
Ilya Semenov
6a9b3f6df2 Add domains:set and domains:set-global commands 2016-11-28 22:44:06 +07:00
Jose Diaz-Gonzalez
8398ff7a76 Merge pull request #2509 from kjschulz/master
Map dokku-community user in plugins.md
2016-11-27 21:36:05 -07:00
John Schulz
4070779d41 Merge branch 'master' into kjschulz-master 2016-11-27 23:34:36 -05:00
John Schulz
cce2a41db6 Forgot to map dokku-community github user.
[ci skip]
2016-11-27 23:34:08 -05:00
Jose Diaz-Gonzalez
15ee3b2e62 Merge pull request #2506 from simonkotwicz/minor-doc-fixes
fix some typos in deployment docs
2016-11-27 21:30:11 -07:00
Simon Kotwicz
86b5b71f28 fix some typos in deployment docs 2016-11-27 22:22:21 -05:00
Mriyam Tamuli
d04b0f7cca Use dokku helpers to output to stderr 2016-11-28 08:46:30 +05:30
Omar Shehata
4294793452 Added storage default help function 2016-11-28 03:06:30 +00:00
Jose Diaz-Gonzalez
8058252426 Merge pull request #2505 from kjschulz/master
Add Dokku Wordpress plugin to docs
2016-11-27 20:05:08 -07:00
Omar Shehata
810ba72879 Added nginx default help function 2016-11-28 03:03:30 +00:00
Omar Shehata
74db5b9d3b Added ssh-keys default help function 2016-11-28 02:59:32 +00:00
Omar Shehata
80e0bcc743 Merge branch 'master' of https://github.com/dokku/dokku 2016-11-28 02:56:37 +00:00
Jose Diaz-Gonzalez
6f91a34f74 Merge pull request #2507 from dokku/josegonzalez-patch-1
Update upgrade docs to point out sshcommand and plugn upgrading as well
2016-11-27 19:55:23 -07:00
Jose Diaz-Gonzalez
a1d3477345 docs: upgrade sshcommand and plugn as well
[ci skip]
2016-11-27 19:55:02 -07:00
Omar Shehata
d001fcc896 Added certs default help function 2016-11-28 02:53:46 +00:00
Mriyam Tamuli
8d60d071df Docs and help text for apps:report subcommand 2016-11-27 19:24:57 +05:30
John Schulz
f71611f5a1 Updated author name to dokku-community 2016-11-26 18:24:52 -05:00
John Schulz
0d54423618 Removing outdated dokku-wordpress-template plugin 2016-11-26 15:19:02 -05:00
John Schulz
fcba766a75 Add Dokku Wordpress plugin to docs. 2016-11-26 14:53:43 -05:00
Mriyam Tamuli
608cdcf3c1 Adds the report subcommand to the apps plugin 2016-11-26 22:37:54 +05:30
Jose Diaz-Gonzalez
b6f57b32b0 Merge pull request #2503 from mlebkowski/patch-2
update the dokku-acl link
2016-11-25 12:18:57 -07:00
Maciej Łebkowski
e4fee97d9b update the dokku-acl link 2016-11-25 16:03:44 +01:00
Jose Diaz-Gonzalez
0dfe92100f Update plugins.md
[ci skip]
2016-11-24 09:37:03 -07:00
Jose Diaz-Gonzalez
7a2c1ba3ec Merge pull request #2497 from stackforgehq/docs/change-features-heading
make features heading more clear [skip ci]
2016-11-24 09:36:27 -07:00
Josh Manders
72aa611d2a make features heading more clear [skip ci] 2016-11-22 18:35:26 -06:00
Jose Diaz-Gonzalez
7cfbdf34ec Merge pull request #2485 from znz/fix-domains-add-global
Fix bug when VHOST without newline
2016-11-21 22:10:10 -07:00
Jose Diaz-Gonzalez
334eabafb5 Merge pull request #2489 from stackforgehq/feature/plugin-uninstall-trigger
add plugin uninstall trigger
2016-11-21 22:09:36 -07:00
Jose Diaz-Gonzalez
50b1c9d5c6 Detect nginx versions that support HTTP/2 well
Certain versions of nginx have bugs that prevent HTTP/2 from properly responding to all clients, thus causing applications to be unavailable.

Closes #2435
2016-11-21 19:33:50 -07:00
Jose Diaz-Gonzalez
4e25639de4 Create the user's authorized_keys file if it does not exist
Closes #2469
2016-11-21 19:08:33 -07:00
Josh Manders
63817fc6f3 add warning 2016-11-20 17:49:02 -06:00
Jose Diaz-Gonzalez
970647b4ae Merge pull request #2378 from knjcode/skip_finish_process_when_checks_disabled
Skip container finish processing when zero downtime is disabled
2016-11-20 16:46:14 -07:00
Jose Diaz-Gonzalez
ef113a475c Merge pull request #2484 from nahtnam/patch-1
Update troubleshooting.md
2016-11-20 16:19:43 -07:00
Jose Diaz-Gonzalez
9abe7e2b75 Merge pull request #2492 from dokku/jg-2481-proxy-command
Fix iteration on all apps for `dokku proxy` command
2016-11-20 16:19:10 -07:00
Jose Diaz-Gonzalez
f5ea960de3 Merge pull request #2493 from dokku/minor-doc-fixes
Clarify checks documentation
2016-11-20 16:15:33 -07:00
Jose Diaz-Gonzalez
8d6f32e1e3 docs: reword zero downtime docs to make them flow better
[ci skip]
2016-11-20 16:12:26 -07:00
Jose Diaz-Gonzalez
d7bc6976ed docs: Mention that ports are ignored in CHECKS doc
Closes #2487

[ci skip]
2016-11-20 16:07:05 -07:00
Jose Diaz-Gonzalez
f6c072fa2b docs: remove extra output 2016-11-20 15:38:01 -07:00
Jose Diaz-Gonzalez
95239a5731 docs: remove unnecessary example 2016-11-20 15:37:21 -07:00
Jose Diaz-Gonzalez
9951a16ccc docs: standardize on node-js-app as the app name
We’ll probably want to update this to whatever the hip language of the day is, but for now, having the same reference everywhere works.
2016-11-20 15:37:05 -07:00
Jose Diaz-Gonzalez
7ac47d2e61 Fix iteration on all apps for dokku proxy command
Closes #2481
2016-11-20 15:15:40 -07:00
Josh Manders
d4475e582d pass plugin to uninstall 2016-11-17 16:06:57 -06:00
Josh Manders
c4c7886037 add plugin uninstall trigger 2016-11-17 12:55:08 -06:00
Jose Diaz-Gonzalez
c98ab6684f Merge pull request #2488 from stackforgehq/docs/bump-font-size
Docs: Bump font size
2016-11-15 12:33:48 -05:00
Josh Manders
434672a8dd bump font size 2016-11-15 11:17:12 -06:00
Jose Diaz-Gonzalez
f6a0c3d5f8 Merge pull request #2486 from OmarShehata/patch-1
Fixing typo & broken link in docs
2016-11-15 08:24:04 -07:00
Omar Shehata
729677c41a Fixing broken link
The old link seems to not exist anymore. Not sure if this is what's intended to be linked to, but seems like the closest thing.
2016-11-15 09:12:38 -06:00
Omar Shehata
6c10fd4c39 Fixing typo
Changed from "Move information" to  "More information"
2016-11-15 09:09:11 -06:00
Kazuhiro NISHIYAMA
ccc44b0c16 Fix bug when VHOST without newline 2016-11-14 22:21:41 +09:00
nahtnam
faaf81d6e9 Update troubleshooting.md
Add `killed` symptom to troubleshooting guide.
2016-11-12 22:05:05 -08:00
Jose Diaz-Gonzalez
d7c8e47e78 Merge pull request #2464 from sseemayer/master
Remove duplicate SSL hostnames
2016-11-08 10:53:35 -07:00
Jose Diaz-Gonzalez
39ced08b12 Merge pull request #2452 from mbtamuli/resolve_duplicate_ssh_key
Solves SSH Key problem when admin user already exists
2016-11-06 14:48:00 -07:00
Jose Diaz-Gonzalez
e62f35f207 Merge pull request #2477 from ebeigarts/dokku-redeploy
Fix dokku-redeploy systemd script to start only after docker
2016-10-31 01:53:56 -06:00
Edgars Beigarts
14833e22cb Fix dokku-redeploy systemd script to start only after docker
According to https://docs.docker.com/engine/admin/host_integration/#/systemd
it should use After=docker.service and it works at least on CentOS 7.
2016-10-31 09:49:49 +02:00
Jose Diaz-Gonzalez
9c5783215f Merge pull request #2406 from dokku/2252-trigger-post-create
Use apps_create method when renaming an application. Closes #2252
2016-10-29 21:16:55 -06:00
Jose Diaz-Gonzalez
180582df2e Merge pull request #2407 from dokku/2367-core-post-deploy
Move core post-deploy triggers to core-post-deploy
2016-10-29 21:16:45 -06:00
Jose Diaz-Gonzalez
255a533708 Merge pull request #2470 from fteychene/patch-1
Add new community plugin : Build hook
2016-10-29 21:16:28 -06:00
Jose Diaz-Gonzalez
2d70a10a14 Merge pull request #2465 from polettix/2446-add-ssh-keys
Patch GH #2446 "Adding a file with two ssh-key..."
2016-10-29 21:16:02 -06:00
Jose Diaz-Gonzalez
58e2391cdb Merge pull request #2454 from onbjerg/patch-1
Return exit 1 in config:get if no ENV file exists (#2447)
2016-10-29 21:14:33 -06:00
Jose Diaz-Gonzalez
ab51c3b4b4 Merge pull request #2419 from ebeigarts/centos
Support for CentOS 7
2016-10-29 21:14:14 -06:00
Pranav Goel
2e1d8def40 Update SPONSORS.md 2016-10-29 14:30:42 +05:30
Pranav Goel
efa88d0087 Update README.md 2016-10-29 14:29:28 +05:30
Jose Diaz-Gonzalez
a7e4b7e3c6 Merge pull request #2472 from mainto/patch-1
Update plugins.md
2016-10-27 08:12:20 -06:00
Deokhyun Ko
25e5db5a5b Update plugins.md
Added "Access" plugin
2016-10-27 05:39:43 -06:00
Francois Teychene
aca8d0c682 Add new community plugin
Add new community plugin build hook.
This plugin provide a way for application to define scripts in their codebase to be executed before the project build (Dockerfile or Herokuish).

Use case :
A Java application with only an ADD of the generated fat jar in the Dockerfile.
The plugin allow the user to define a script to run the compilation before the docker build execution.
2016-10-20 15:04:16 +02:00
Edgars Beigarts
65c2cffc6a Fix sshcommand on CentOS with sudo
CentOS 7 resets path with $ sudo by default

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
2016-10-19 17:25:54 +03:00
Flavio Poletti
a2bacd8096 Patch GH #2446 "Adding a file with two ssh-key..."
This is a proposed change for addressing GH #2446 "Adding a file with
two ssh-keys can result in an error" (see
https://github.com/dokku/dokku/issues/2446).

The following checks are performed:

- validity of key contents when read from a file
- key contents only contains one single line/key
- authorized_keys file is ultimately valid

The last test is an extension over the previous implementation in that
all lines in the file are checked.

The commit also includes extensions to the relevant test file to
excercise the new checks. It also takes care to save and then restore
the authorized_keys file.
2016-10-16 16:32:16 +02:00
Stefan Seemayer
030405b93d Remove duplicate SSL hostnames
Ref dokku/dokku-letsencrypt#76

Certificates provided by Let's Encrypt can have the domain provided in
the Subject Name field listed again in the Subject Alt Name fields,
leading to the same domain getting listed twice by get_ssl_hostnames()
that in turn leads to a duplicate server_name field in the nginx
configuration.

This patch adds a sort -u to ensure that every SSL hostname will only be
listed once.
2016-10-16 15:58:08 +02:00
Mriyam Tamuli
10bb4900c0 Correct indentation 2016-10-13 19:13:29 +05:30
Mriyam Tamuli
48b3dffecb Proper usernames 2016-10-13 15:55:59 +05:30
Mriyam Tamuli
056ff73c28 Proper usernames 2016-10-13 05:18:45 +05:30
Jose Diaz-Gonzalez
3200c169f4 Expand the digitalocean documentation a bit
[ci skip]
2016-10-09 16:36:57 -06:00
Jose Diaz-Gonzalez
4f7e9d4d58 Clarify installation documentation.
[ci skip]
2016-10-09 16:34:24 -06:00
Oliver
d6443d7560 Return exit 1 in config:get if no ENV file exists 2016-10-08 19:15:39 +02:00
Mriyam Tamuli
35f1161453 Solves SSH Key problem when admin user already exists 2016-10-08 14:53:53 +05:30
Jose Diaz-Gonzalez
95dc3ca20e Merge pull request #2451 from mbtamuli/document_logs_plugin
Document the logs plugin
2016-10-07 18:42:05 -04:00
Mriyam Tamuli
28c29da166 Document the logs plugin 2016-10-08 04:05:51 +05:30
Jose Diaz-Gonzalez
c0d3b8c9a9 Merge pull request #2437 from vishnubhagwan/patch-1
Update installation.md
2016-09-29 10:29:23 -07:00
Michael Hobbs
1834ec8087 Merge pull request #2442 from znz/fix-is_tag_force_available
Fix `is_tag_force_available` bug when docker major version up
2016-09-29 07:55:50 -07:00
Kazuhiro NISHIYAMA
22c9441ddb Fix is_tag_force_available bug when docker major version up 2016-09-29 21:27:47 +09:00
vishnubhagwan
9018fee0e2 Update installation.md 2016-09-29 14:53:20 +05:30
vishnubhagwan
5ec1dea555 Update installation.md
Yep .... done as you said..
2016-09-29 14:31:21 +05:30
vishnubhagwan
6d002425bc Update installation.md
Removed bold sentence and blockquote remains
2016-09-29 00:52:16 +05:30
vishnubhagwan
93b47cb85f Update installation.md
Added blockquotes..
2016-09-29 00:33:29 +05:30
vishnubhagwan
b4cbaae757 Update installation.md 2016-09-28 23:53:57 +05:30
Jose Diaz-Gonzalez
11a945c86e Merge pull request #2433 from alexgleason/patch-2
Add robots.txt plugin to community docs
2016-09-27 12:59:31 -06:00
Alex Gleason
90f16945f1 Update plugins.md 2016-09-27 14:43:43 -04:00
Alex Gleason
f40e010ab0 Add robots.txt plugin to community docs 2016-09-26 17:18:50 -04:00
Edgars Beigarts
b771f0f809 Note the version when rpm will be added 2016-09-26 01:55:21 +03:00
Edgars Beigarts
f6488147bd Mention CentOS 7 in rpm docs 2016-09-26 01:55:21 +03:00
Edgars Beigarts
542f4dd430 Add RPM installation docs 2016-09-26 01:55:20 +03:00
Edgars Beigarts
288d72327d Add package_cloud instructions to release-process.md 2016-09-26 01:55:20 +03:00
Edgars Beigarts
7bf22df7c3 Use /etc/os-release that is more standartized 2016-09-26 01:55:20 +03:00
Edgars Beigarts
537906c504 Support CentOS in bootstrap.sh 2016-09-26 01:55:20 +03:00
Edgars Beigarts
dc879e2c4a Improve posinstall scripts with spellcheck 2016-09-26 01:55:20 +03:00
Edgars Beigarts
58f28c1aea Fix make lint 2016-09-26 01:55:20 +03:00
Edgars Beigarts
4e1a93224e No need to migrate old plugins on centos 2016-09-26 01:55:20 +03:00
Edgars Beigarts
0004dd53e1 Initial support for CentOS 7 2016-09-26 01:55:20 +03:00
Jose Diaz-Gonzalez
cf901c9bcc Merge pull request #2432 from dokku/josegonzalez-patch-1
Clarify DOKKU_SCALE docs
2016-09-25 12:27:55 -06:00
Jose Diaz-Gonzalez
b5cf371a55 Clarify DOKKU_SCALE docs
[ci skip]
2016-09-25 12:27:47 -06:00
Jose Diaz-Gonzalez
d433614f17 Move deployment tasks to post-deploy hook
As deployment tasks can fail due to non-dokku related issues, moving them to post-deploy will ensure that dokku does not accidentally orphan applications.

Closes #2367
2016-09-05 00:15:39 -04:00
Jose Diaz-Gonzalez
2fc3a09b41 Move post-deploy trigger to core-post-deploy. Refs #2367
This avoids issues where community plugins may break core commands because of issues in the command output.
2016-09-05 00:04:06 -04:00
Jose Diaz-Gonzalez
67705afe3c Use apps_create method when renaming an application. Closes #2252
Since they are separate resources, triggering the normal app creation flow makes the most sense.

We still remove the cache directory because we want the correct cache permissions for the new application.
2016-09-04 19:26:00 -04:00
knjcode
8200348f3c Skip container finish processing when zero downtime is disabled 2016-08-29 20:26:49 +09:00
188 changed files with 3486 additions and 1037 deletions

8
.dockerignore Normal file
View File

@@ -0,0 +1,8 @@
*Dockerfile
.dockerignore
.git
.vagrant
contrib
docs
tests
!contrib/dokku-installer.py

1
.gitignore vendored
View File

@@ -1,4 +1,5 @@
*.deb
*.rpm
.DS_Store
.ruby-version
.vagrant

View File

@@ -55,7 +55,7 @@ doesn't already include that problem or suggestion before submitting an issue.
If you find a match, add a quick "+1" or "I have this problem too." Doing this
helps prioritize the most common problems and requests.
When reporting issues, please include your host OS (Ubuntu 14.04, Fedora 19,
When reporting issues, please include your host OS (Ubuntu 14.04, CentOS 7,
etc). Please include:
* The output of `uname -a`.

View File

@@ -1,5 +1,134 @@
# History
## 0.8.2
### New Features
- #2660: @josegonzalez allow installation of plugins via tarball
- #2661: @josegonzalez Do not run builds in quiet mode
## 0.8.1
### Bug Fixes
- #2519: @tkalus Further guard against duplicate ssl server names
- #2554: @josegonzalez Add ssl ports when generating a self-signed certificate
- #2555: @josegonzalez Skip failing applications when running ps:restore on boot
- #2576: @znz Remove unused variable
- #2592: @josegonzalez always set a default ssl port for apps with ssl enabled
- #2612: @josegonzalez Ensure VHOST files exist before executing commands against them
- #2647: @josegonzalez Properly escape post-install variables
- #2650: @josegonzalez Fix help output for nginx and ssh-keys
- #2656: @josegonzalez ensure we can call the report subcommand without an app while specifying flags
- d79a79: @josegonzalez bail early when checking ps output for an undeployed app
### New Features
- #2500: @josegonzalez Suppress output unless the `git submodule update` call fails
- #2504: @mbtamuli Implement apps:report and storage:report
- #2508: @OmarShehata Add default functions for all commands
- #2557: @josegonzalez Dokku cli improvements
- #2573: @ebeigarts Recommend parallel package for faster ps:restore
- #2578: @josegonzalez Require specific versions for dokku-maintained packages
- #2583: @josegonzalez Implement apps:clone subcommand
- #2586: @bevand10 Add http-proxy support for deb-herokuish installs
- #2587: @josegonzalez Allow specifying the deploy branch via DOKKU_DEPLOY_BRANCH
- #2594: @michaelshobbs Upgrade to herokuish v0.3.25
- #2615: @josegonzalez Implement certs:report
- #2616: @josegonzalez Replace apps:default subcommand with apps:list
- #2617: @josegonzalez Implement checks:report
- #2618: @josegonzalez Implement docker-options:report and storage:report
- #2619: @josegonzalez Call ssh-keys:help from ssh-keys:default
- #2620: @josegonzalez Implement domains:report and proxy:report
- #2622: @raphaklaus Allow file names with multiple dots in certs:add command
- #2634: @michaelshobbs Update herokuish to 0.3.26
- #2657: @josegonzalez Add post-extract plugin trigger
### Documentation
- #2475: @pranavgoel25 Minor readme and sponsor changes
- #2556: @josegonzalez Use slightly better font style for docs
- #2560: @ebeigarts Improve install documentation on CentOS
- #2564: @ka7 Fix spelling mistakes
- #2565: @josegonzalez Update persistent storage to reference the sample app as normal
- #2566: @josegonzalez Move "new as of" note in storage docs to correct section
- #2569: @OmgImAlexis Reload nginx after adding default vhost file
- #2570: @OmgImAlexis Update ISSUE_TEMPLATE.md to reference `dokku report` command
- #2580: @znz Fix font URL
- #2588: @josegonzalez Clarify when the `~/.ssh/config` settings need to match `vagrant ssh-config output`
- #2605: @andyjeffries Documented build failures when using SSL_CERT_FILE environment variable
- #2613: @emveeoh Update Linode installation instructions for new GRUB 2 Linode boot option
- #2626: @znz Update apps:help example command
- #2629: @znz Update certs:help output for certs:default subcommand
- #2633: @drpoggi Reference the x-forwarded headers in correct order
- #2637: @josegonzalez Add documentation surrounding flags that ps:report accepts
- #2638: @fwolfst Improve README links
- #2639: @joshco Add documentation for how to grant other Unix accounts Dokku access
- #2648: @josegonzalez Note that the remote username is important
- #2659: @jfw Minor clarifications to application deployment tutorial
## 0.8.0
The big kahuna. Lots of documentation changes, and a few bug fixes to make Dokku development a bit easier.
CentOS 7 users will be happy to see that we now have experimental support for your operating system. Huge thanks to @ebeigarts for working on that feature :)
Thanks to all the contributors who helped with this release!
### Bug Fixes
- #2407: @josegonzalez Move core post-deploy triggers to core-post-deploy
- #2442: @znz Fix `is_tag_force_available` bug when docker major version up
- #2452: @mbtamuli Solves SSH Key problem when admin user already exists
- #2454: @onbjerg Return exit 1 in config:get if no ENV file exists
- #2464: @sseemayer Remove duplicate SSL hostnames
- #2465: @polettix Fix issue when importing ssh-keys
- #2477: @ebeigarts Fix dokku-redeploy systemd script to start only after docker
- #2485: @znz Fix bug when VHOST file is missing newline
- #2492: @josegonzalez Fix iteration on all apps for `dokku proxy` command
- #2495: @josegonzalez Create the user's `authorized_keys` file if it does not exist
- #2496: @josegonzalez Detect nginx versions that support HTTP/2 well
- #2518: @josegonzalez Use same check for dockerfile apps during a tar build
- #2526: @michaelshobbs Actually fail deploy when app.json script fails
- #2539: @ebeigarts Fix dokku-installer.service removal
### New Features
- #2378: @knjcode Skip container finish processing when zero downtime is disabled
- #2406: @josegonzalez Use apps_create method when renaming an application
- #2419: @ebeigarts Support for CentOS 7
- #2489: @joshmanders Add plugin uninstall trigger
- #2510: @IlyaSemenov Add domains:set and domains:set-global commands
- #2544: @michaelshobbs Update herokuish to 0.3.24
- #2552: @josegonzalez Allow package building on OSX
- #2553: @josegonzalez Add release-related Dockerfiles
### Documentation
- #2432: @josegonzalez Clarify DOKKU_SCALE docs
- #2433: @alexgleason Add robots.txt plugin to community docs
- #2437: @vishnubhagwan Fix warning in installation docs
- #2451: @mbtamuli Document the logs plugin
- #2470: @fteychene Add build-hook to plugins doc
- #2472: @mainto Add dokku-access to plugins doc
- #2484: @nahtnam Document build issues when a `Killed` message is displayed
- #2486: @OmarShehata Fixing typo & broken link in docs
- #2488: @joshmanders Bump font size in documentation
- #2493: @josegonzalez Clarify checks documentation
- #2497: @joshmanders Make features heading more clear
- #2503: @mlebkowski Update dokku-acl plugin link
- #2505: @kjschulz Add Dokku Wordpress plugin to docs
- #2506: @simonkotwicz Fix typos in deployment docs
- #2507: @josegonzalez Update upgrade docs to point out sshcommand and plugn upgrading as well
- #2509: @kjschulz Map dokku-community user in plugins
- #2511: @IlyaSemenov Clarify instructions for arranging default nginx site
- #2515: @sgloutnikov Update DreamHost Cloud install instructions
- #2517: @josegonzalez Update docs regarding if the ssh-keys plugin should be in use
- #2522: @joshmanders Ensure install documentation can be run via copy-paste
- #2525: @OmarShehata Plugin-triggers typo: dokkku -> dokku
- #2531: @slava-vishnyakov Document rebuilding app after mounting storage
- #2533: @facundomedica Document potential firewall problem on Ubuntu 16.04
## 0.7.2
This minor release contains mostly documentation changes, and should be fully backwards compatible with previous 0.7.x releases.

View File

@@ -3,6 +3,8 @@ Description of problem:
Output of the following commands
<!-- If you're running 0.4.10+ just use dokku report-->
- `uname -a`:
- `free -m`:
- `docker version`:

View File

@@ -1,7 +1,7 @@
DOKKU_VERSION = master
DOKKU_VERSION ?= master
SSHCOMMAND_URL ?= https://raw.githubusercontent.com/dokku/sshcommand/v0.6.0/sshcommand
PLUGN_URL ?= https://github.com/dokku/plugn/releases/download/v0.2.2/plugn_0.2.2_linux_x86_64.tgz
PLUGN_URL ?= https://github.com/dokku/plugn/releases/download/v0.3.0/plugn_0.3.0_linux_x86_64.tgz
SIGIL_URL ?= https://github.com/gliderlabs/sigil/releases/download/v0.4.0/sigil_0.4.0_Linux_x86_64.tgz
STACK_URL ?= https://github.com/gliderlabs/herokuish.git
PREBUILT_STACK_URL ?= gliderlabs/herokuish:latest
@@ -27,6 +27,7 @@ endif
include tests.mk
include deb.mk
include rpm.mk
include arch.mk
all:
@@ -34,13 +35,17 @@ all:
install: dependencies version copyfiles plugin-dependencies plugins
release: deb-all package_cloud packer
release: deb-all rpm-all package_cloud packer
package_cloud:
package_cloud push dokku/dokku/ubuntu/trusty herokuish*.deb
package_cloud push dokku/dokku/ubuntu/trusty sshcommand*.deb
package_cloud push dokku/dokku/ubuntu/trusty plugn*.deb
package_cloud push dokku/dokku/ubuntu/trusty dokku*.deb
package_cloud push dokku/dokku/el/7 herokuish*.rpm
package_cloud push dokku/dokku/el/7 sshcommand*.rpm
package_cloud push dokku/dokku/el/7 plugn*.rpm
package_cloud push dokku/dokku/el/7 dokku*.rpm
packer:
packer build contrib/packer.json
@@ -65,13 +70,17 @@ copyfiles:
chown dokku:dokku -R ${PLUGINS_PATH} ${CORE_PLUGINS_PATH} || true
$(MAKE) addman
addman: help2man
addman: help2man man-db
mkdir -p /usr/local/share/man/man1
help2man -Nh help -v version -n "configure and get information from your dokku installation" -o /usr/local/share/man/man1/dokku.1 dokku
mandb
version:
ifeq ($(DOKKU_VERSION),master)
git describe --tags > ~dokku/VERSION 2> /dev/null || echo '~${DOKKU_VERSION} ($(shell date -uIminutes))' > ~dokku/VERSION
else
echo $(DOKKU_VERSION) > ~dokku/VERSION
endif
plugin-dependencies: plugn
sudo -E dokku plugin:install-dependencies --core

View File

@@ -1,39 +1,16 @@
# Dokku [![Build Status](https://img.shields.io/circleci/project/dokku/dokku/master.svg?style=flat-square "Build Status")](https://circleci.com/gh/dokku/dokku/tree/master) [![Ubuntu Package](https://img.shields.io/badge/package-ubuntu-brightgreen.svg?style=flat-square "Ubuntu Package")](https://packagecloud.io/dokku/dokku) [![Arch Package](https://img.shields.io/badge/package-arch-brightgreen.svg?style=flat-square "Arch Package")](https://aur.archlinux.org/packages/dokku/) [![IRC Network](https://img.shields.io/badge/irc-freenode-blue.svg?style=flat-square "IRC Freenode")](https://webchat.freenode.net/?channels=dokku) [![Slack Group](https://img.shields.io/badge/irc-slack-blue.svg?style=flat-square "Slack Group")](https://glider-slackin.herokuapp.com/) [![Documentation](https://img.shields.io/badge/docs-viewdocs-blue.svg?style=flat-square "Viewdocs")](http://dokku.viewdocs.io/dokku/)
# Dokku
[![Build Status](https://img.shields.io/circleci/project/dokku/dokku/master.svg?style=flat-square "Build Status")](https://circleci.com/gh/dokku/dokku/tree/master)
[![Ubuntu Package](https://img.shields.io/badge/package-ubuntu-brightgreen.svg?style=flat-square "Ubuntu Package")](https://packagecloud.io/dokku/dokku)
[![Arch Package](https://img.shields.io/badge/package-arch-brightgreen.svg?style=flat-square "Arch Package")](https://aur.archlinux.org/packages/dokku/)
[![IRC Network](https://img.shields.io/badge/irc-freenode-blue.svg?style=flat-square "IRC Freenode")](https://webchat.freenode.net/?channels=dokku)
[![Slack Group](https://img.shields.io/badge/irc-slack-blue.svg?style=flat-square "Slack Group")](https://glider-slackin.herokuapp.com/)
[![Documentation](https://img.shields.io/badge/docs-viewdocs-blue.svg?style=flat-square "Viewdocs")](http://dokku.viewdocs.io/dokku/)
[![OpenCollective](https://opencollective.com/dokku/sponsors/badge.svg?style=flat-square)](#sponsors)
[![OpenCollective](https://opencollective.com/dokku/backers/badge.svg?style=flat-square)](#backers)
[![Gratipay](https://img.shields.io/gratipay/dokku.svg?style=flat-square)](https://gratipay.com/dokku/)
Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen.
## Requirements
- A fresh VM running `Debian 8.2 x64`, `Ubuntu 14.04 x64`, or `Ubuntu 16.04 x64`
## Installing
To install the latest stable release, you can run the following commands as a user that has access to `sudo`:
wget https://raw.githubusercontent.com/dokku/dokku/v0.7.2/bootstrap.sh
sudo DOKKU_TAG=v0.7.2 bash bootstrap.sh
### Upgrading
[View the docs for upgrading](http://dokku.viewdocs.io/dokku/getting-started/upgrading/) from an older version of Dokku.
## Documentation
Full documentation - including advanced installation docs - are available online at [docs](http://dokku.viewdocs.io/dokku/)
## Support
You can use [Github Issues](https://github.com/dokku/dokku/issues), check [Troubleshooting](http://dokku.viewdocs.io/dokku/getting-started/troubleshooting/) in the documentation, or join us on [freenode in #dokku](https://webchat.freenode.net/?channels=%23dokku)
## Contribution
After checking [Github Issues](https://github.com/dokku/dokku/issues), the [Troubleshooting Guide](http://dokku.viewdocs.io/dokku/getting-started/troubleshooting/) or having a chat with us on [freenode in #dokku](https://webchat.freenode.net/?channels=%23dokku), feel free to fork and create a Pull Request.
While we may not merge your PR as is, they serve to start conversations and improve the general Dokku experience for all users.
## Sponsors
See our list of past sponsors in the [SPONSORS](https://github.com/dokku/dokku/blob/master/SPONSORS.md) file.
@@ -107,6 +84,47 @@ Support us with a monthly donation and help us continue our activities. [[Become
<a href="https://opencollective.com/dokku/backer/28/website" target="_blank"><img src="https://opencollective.com/dokku/backer/28/avatar.svg"></a>
<a href="https://opencollective.com/dokku/backer/29/website" target="_blank"><img src="https://opencollective.com/dokku/backer/29/avatar.svg"></a>
## Requirements
A fresh VM running any of the following operating systems:
- Ubuntu 16.04 x64
- Ubuntu 14.04 x64
- Debian 8.2 x64
- CentOS 7 x64 *(experimental)*
- Arch Linux x64 *(experimental)*
## Installation
To install the latest stable release, run the following commands as a user who has access to `sudo`:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.8.2/bootstrap.sh
sudo DOKKU_TAG=v0.8.2 bash bootstrap.sh
```
You can then proceed to the ip address or domain name associated with your server to complete the web-based installation.
If you wish for a more unattended installation method, see [these](http://dokku.viewdocs.io/dokku/getting-started/install/debian/#unattended-installation) docs.
### Upgrade
[View the docs](http://dokku.viewdocs.io/dokku/getting-started/upgrading/) for upgrading from an older version of Dokku.
## Documentation
Full documentation - including advanced installation docs - are available online at [http://dokku.viewdocs.io/dokku/](http://dokku.viewdocs.io/dokku/).
## Support
You can use [Github Issues](https://github.com/dokku/dokku/issues), check [Troubleshooting](http://dokku.viewdocs.io/dokku/getting-started/troubleshooting/) in the documentation, or join us on [freenode in #dokku](https://webchat.freenode.net/?channels=%23dokku).
## Contribution
After checking [Github Issues](https://github.com/dokku/dokku/issues), the [Troubleshooting Guide](http://dokku.viewdocs.io/dokku/getting-started/troubleshooting/) or having a chat with us on [freenode in #dokku](https://webchat.freenode.net/?channels=%23dokku), feel free to fork and create a Pull Request.
While we may not merge your PR as is, they serve to start conversations and improve the general Dokku experience for all users.
## License
[MIT License](https://github.com/dokku/dokku/blob/master/LICENSE) © Jeff Lindsay

View File

@@ -1,3 +1,5 @@
#Sponsors
[Deis](http://deis.io)
[DigitalOcean](https://www.digitalocean.com/)

11
Vagrantfile vendored
View File

@@ -76,13 +76,22 @@ Vagrant::configure("2") do |config|
vm.vm.provision :shell, :inline => "cd /root/dokku && make install-from-deb"
end
config.vm.define "dokku-rpm", autostart: false do |vm|
vm.vm.box = "centos/7"
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 => "cd /root/dokku && bash bootstrap.sh"
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 => "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 => "export IS_RELEASE=true && cd /root/dokku && make deb-all"
vm.vm.provision :shell, :inline => "export IS_RELEASE=true && cd /root/dokku && make deb-all rpm-all"
end
config.vm.define "build-arch", autostart: false do |vm|

View File

@@ -22,7 +22,11 @@ arch-setup:
arch-dokku: arch-setup
echo "-> Update package sums, create metadata file and test the build of the package"
ifeq ($(DOKKU_VERSION),master)
git describe --tags > /tmp/VERSION
else
echo $(DOKKU_VERSION) > /tmp/VERSION
endif
cat /tmp/VERSION | cut -d '-' -f 1 | cut -d 'v' -f 2 > /tmp/STABLE_VERSION
sed -i -e "s/pkgver=.*/pkgver=`cat /tmp/STABLE_VERSION`/" /dokku-arch/PKGBUILD
cd /dokku-arch; updpkgsums; mksrcinfo; makepkg -fd

View File

@@ -14,10 +14,6 @@ set -eo pipefail; [[ $TRACE ]] && set -x
ensure-environment() {
local FREE_MEMORY
echo "Preparing to install $DOKKU_TAG from $DOKKU_REPO..."
if ! command -v apt-get &>/dev/null; then
echo "This installation script requires apt-get. For manual installation instructions, consult http://dokku.viewdocs.io/dokku/advanced-installation/"
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"
@@ -33,10 +29,15 @@ ensure-environment() {
install-requirements() {
echo "--> Ensuring we have the proper dependencies"
apt-get update -qq > /dev/null
if [[ $(lsb_release -sr) == "12.04" ]]; then
apt-get -qq -y install python-software-properties
fi
case "$DOKKU_DISTRO" in
debian|ubuntu)
apt-get update -qq > /dev/null
if [[ "$DOKKU_DISTRO_VERSION" == "12.04" ]]; then
apt-get -qq -y install python-software-properties
fi
;;
esac
}
install-dokku() {
@@ -68,9 +69,14 @@ install-dokku() {
fi
}
install-dokku-from-source() {
local DOKKU_CHECKOUT="$1"
if ! command -v apt-get &>/dev/null; then
echo "This installation script requires apt-get. For manual installation instructions, consult http://dokku.viewdocs.io/dokku/advanced-installation/"
exit 1
fi
apt-get -qq -y install git make software-properties-common
cd /root
if [[ ! -d /root/dokku ]]; then
@@ -84,6 +90,21 @@ install-dokku-from-source() {
}
install-dokku-from-package() {
case "$DOKKU_DISTRO" in
debian|ubuntu)
install-dokku-from-deb-package "$@"
;;
centos)
install-dokku-from-rpm-package "$@"
;;
*)
echo "Unsupported Linux distribution. For manual installation instructions, consult http://dokku.viewdocs.io/dokku/advanced-installation/"
exit 1
;;
esac
}
install-dokku-from-deb-package() {
local DOKKU_CHECKOUT="$1"
local NO_INSTALL_RECOMMENDS=${DOKKU_NO_INSTALL_RECOMMENDS:=""}
@@ -124,7 +145,39 @@ install-dokku-from-package() {
fi
}
install-dokku-from-rpm-package() {
local DOKKU_CHECKOUT="$1"
if [[ "$DOKKU_DISTRO_VERSION" != "7" ]]; then
echo "Only CentOS version 7 is supported."
exit 1
fi
echo "--> Installing docker"
curl -fsSL https://get.docker.com/ | sh
echo "--> Installing epel for nginx packages to be available"
yum install -y epel-release
echo "--> Installing herokuish and dokku"
curl -s https://packagecloud.io/install/repositories/dokku/dokku/script.rpm.sh | bash
if [[ -n $DOKKU_CHECKOUT ]]; then
yum -y install herokuish "dokku-$DOKKU_CHECKOUT"
else
yum -y install herokuish dokku
fi
echo "--> Starting nginx"
systemctl start nginx
}
main() {
export DOKKU_DISTRO DOKKU_DISTRO_VERSION
# shellcheck disable=SC1091
DOKKU_DISTRO=$(. /etc/os-release && echo "$ID")
# shellcheck disable=SC1091
DOKKU_DISTRO_VERSION=$(. /etc/os-release && echo "$VERSION_ID")
export DEBIAN_FRONTEND=noninteractive
export DOKKU_REPO=${DOKKU_REPO:-"https://github.com/dokku/dokku.git"}

View File

@@ -0,0 +1,34 @@
FROM ubuntu:14.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get -y install gcc git build-essential wget ruby-dev ruby1.9.1 lintian rpm help2man man-db
RUN command -v fpm > /dev/null || sudo gem install fpm --no-ri --no-rdoc
WORKDIR /dokku
COPY Makefile /dokku/
COPY *.mk /dokku/
RUN make deb-setup rpm-setup
COPY . /dokku
RUN make sshcommand plugn version copyfiles
ARG DOKKU_VERSION=master
ENV DOKKU_VERSION ${DOKKU_VERSION}
ARG DOKKU_GIT_REV
ENV DOKKU_GIT_REV ${DOKKU_GIT_REV}
ARG IS_RELEASE=false
ENV IS_RELEASE ${IS_RELEASE}
RUN make rpm-herokuish rpm-dokku rpm-plugn rpm-sshcommand rpm-sigil
RUN mkdir -p /data && cp /tmp/*.rpm /data && ls /data/

View File

@@ -0,0 +1,34 @@
FROM ubuntu:14.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get -y install gcc git build-essential wget ruby-dev ruby1.9.1 lintian rpm help2man man-db
RUN command -v fpm > /dev/null || sudo gem install fpm --no-ri --no-rdoc
WORKDIR /dokku
COPY Makefile /dokku/
COPY *.mk /dokku/
RUN make deb-setup rpm-setup
COPY . /dokku
RUN make sshcommand plugn version copyfiles
ARG DOKKU_VERSION=master
ENV DOKKU_VERSION ${DOKKU_VERSION}
ARG DOKKU_GIT_REV
ENV DOKKU_GIT_REV ${DOKKU_GIT_REV}
ARG IS_RELEASE=false
ENV IS_RELEASE ${IS_RELEASE}
RUN make deb-herokuish deb-dokku deb-plugn deb-sshcommand deb-sigil
RUN mkdir -p /data && cp /tmp/*.deb /data && ls /data/

View File

@@ -3,13 +3,14 @@
import cgi
import json
import os
import re
import SimpleHTTPServer
import SocketServer
import subprocess
import sys
import threading
VERSION = 'v0.7.2'
VERSION = 'v0.8.2'
hostname = ''
try:
@@ -100,8 +101,20 @@ class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
with open('{0}/HOSTNAME'.format(dokku_root), 'w') as f:
f.write(params['hostname'].value)
command = ['sshcommand', 'acl-add', 'dokku', 'admin']
for key in params['keys'].value.split("\n"):
for (index, key) in enumerate(params['keys'].value.splitlines(), 1):
user = 'admin'
if self.admin_user_exists() is not None:
user = 'web-admin'
if self.web_admin_user_exists() is not None:
index = int(self.web_admin_user_exists()) + 1
elif self.web_admin_user_exists() is None:
index = 1
elif self.admin_user_exists() is None:
pass
else:
index = int(self.admin_user_exists()) + 1
user = user + str(index)
command = ['sshcommand', 'acl-add', 'dokku', user]
proc = subprocess.Popen(command, stdin=subprocess.PIPE)
proc.stdin.write(key)
proc.stdin.close()
@@ -119,6 +132,29 @@ class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
self.end_headers()
self.wfile.write(json.dumps({'status': 'ok'}))
def web_admin_user_exists(self):
return self.user_exists('web-admin(\d+)')
def admin_user_exists(self):
return self.user_exists('admin(\d+)')
def user_exists(self, name):
command = 'dokku ssh-keys:list'
pattern = re.compile(r'NAME="' + name + '"')
proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
max_num = 0
exists = False
for line in proc.stdout:
m = pattern.search(line)
if m:
# User of the form `user` or `user#` exists
exists = True
max_num = max(max_num, m.group(1))
if exists:
return max_num
else:
return None
def set_debconf_selection(debconf_type, key, value):
found = False

View File

@@ -1,10 +1,9 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
export DOKKU_PORT=${DOKKU_PORT:=22}
export DOKKU_HOST=${DOKKU_HOST:=}
MOVES=(ABLE ABNORMA AGAIN AIREXPL ANG ANGER ASAIL ATTACK AURORA AWL BAN BAND BARE BEAT BEATED BELLY BIND BITE BLOC BLOOD BODY BOOK BREATH BUMP CAST CHAM CLAMP CLAP CLAW CLEAR CLI CLIP CLOUD CONTRO CONVY COOLHIT CRASH CRY CUT DESCRI D-FIGHT DIG DITCH DIV DOZ DRE DUL DU-PIN DYE EARTH EDU EG-BOMB EGG ELEGY ELE-HIT EMBODY EMPLI ENGL ERUPT EVENS EXPLOR EYES FALL FAST F-CAR F-DANCE FEARS F-FIGHT FIGHT FIR FIRE FIREHIT FLAME FLAP FLASH FLEW FORCE FRA FREEZE FROG G-BIRD GENKISS GIFT G-KISS G-MOUSE GRADE GROW HAMMER HARD HAT HATE H-BOMB HELL-R HEMP HINT HIT HU HUNT HYPNOSI INHA IRO IRONBAR IR-WING J-GUN KEE KICK KNIF KNIFE KNOCK LEVEL LIGH LIGHHIT LIGHT LIVE L-WALL MAD MAJUS MEL MELO MESS MILK MIMI MISS MIXING MOVE MUD NI-BED NOISY NOONLI NULL N-WAVE PAT PEACE PIN PLAN PLANE POIS POL POWDE POWE POWER PRIZE PROTECT PROUD RAGE RECOR REFLAC REFREC REGR RELIV RENEW R-FIGHT RING RKICK ROCK ROUND RUS RUSH SAND SAW SCISSOR SCRA SCRIPT SEEN SERVER SHADOW SHELL SHINE SHO SIGHT SIN SMALL SMELT SMOK SNAKE SNO SNOW SOU SO-WAVE SPAR SPEC SPID S-PIN SPRA STAM STARE STEA STONE STORM STRU STRUG STUDEN SUBS SUCID SUN-LIG SUNRIS SUPLY S-WAVE TAILS TANGL TASTE TELLI THANK TONKICK TOOTH TORL TRAIN TRIKICK TUNGE VOLT WA-GUN WATCH WAVE W-BOMB WFALL WFING WHIP WHIRL WIND WOLF WOOD WOR YUJA)
NAMES=(SEED GRASS FLOWE SHAD CABR SNAKE GOLD COW GUIKI PEDAL DELAN B-FLY BIDE KEYU FORK LAP PIGE PIJIA CAML LAT BIRD BABOO VIV ABOKE PIKAQ RYE SAN BREAD LIDEL LIDE PIP PIKEX ROK JUGEN PUD BUDE ZHIB GELU GRAS FLOW LAFUL ATH BALA CORN MOLUF DESP DAKED MIMI BOLUX KODA GELUD MONK SUMOY GEDI WENDI NILEM NILE NILEC KEZI YONGL HUDE WANLI GELI GUAIL MADAQ WUCI WUCI MUJEF JELLY SICIB GELU NELUO BOLI JIALE YED YEDE CLO SCARE AOCO DEDE DEDEI BAWU JIUG BADEB BADEB HOLE BALUX GES FANT QUAR YIHE SWAB SLIPP CLU DEPOS BILIY YUANO SOME NO YELA EMPT ZECUN XIAHE BOLEL DEJI MACID XIHON XITO LUCK MENJI GELU DECI XIDE DASAJ DONGN RICUL MINXI BALIY ZENDA LUZEL HELE5 0FENB KAIL JIAND CARP JINDE LAPU MUDE YIFU LINLI SANDI HUSI JINC OUMU OUMUX CAP KUIZA PUD TIAO FRMAN CLAU SPARK DRAGO BOLIU GUAIL MIYOU MIY QIAOK BEIL MUKEI RIDED MADAM BAGEP CROC ALIGE OUDAL OUD DADA HEHE YEDEA NUXI NUXIN ROUY ALIAD STICK QIANG LAAND PIQI PI PUPI DEKE DEKEJ NADI NADIO MALI PEA ELECT FLOWE MAL MALI HUSHU NILEE YUZI POPOZ DUZI HEBA XIAN SHAN YEYEA WUY LUO KEFE HULA CROW YADEH MOW ANNAN SUONI KYLI HULU HUDEL YEHE GULAE YEHE BLU GELAN BOAT NIP POIT HELAK XINL BEAR LINB MAGEH MAGEJ WULI YIDE RIVE FISH AOGU DELIE MANTE KONMU DELU HELU HUAN HUMA DONGF JINCA HEDE DEFU LIBY JIAPA MEJI HELE BUHU MILK HABI THUN GARD DON YANGQ SANAQ BANQ LUJ PHIX SIEI EGG)
random_number() {
fn-random-number() {
[[ -n "$1" ]] && RANGE="$1"
if [[ -n "$RANGE" ]]; then
number=$RANDOM
@@ -15,94 +14,141 @@ random_number() {
echo $number
}
random_name() {
NUM1=$(random_number ${#MOVES[@]})
NUM2=$(random_number ${#MOVES[@]})
NUM3=$(random_number ${#NAMES[@]})
fn-random-name() {
local NUM1 NUM2 NUM3 UPPER_APPNAME lower_appname
local MOVES=(ABLE ABNORMA AGAIN AIREXPL ANG ANGER ASAIL ATTACK AURORA AWL BAN BAND BARE BEAT BEATED BELLY BIND BITE BLOC BLOOD BODY BOOK BREATH BUMP CAST CHAM CLAMP CLAP CLAW CLEAR CLI CLIP CLOUD CONTRO CONVY COOLHIT CRASH CRY CUT DESCRI D-FIGHT DIG DITCH DIV DOZ DRE DUL DU-PIN DYE EARTH EDU EG-BOMB EGG ELEGY ELE-HIT EMBODY EMPLI ENGL ERUPT EVENS EXPLOR EYES FALL FAST F-CAR F-DANCE FEARS F-FIGHT FIGHT FIR FIRE FIREHIT FLAME FLAP FLASH FLEW FORCE FRA FREEZE FROG G-BIRD GENKISS GIFT G-KISS G-MOUSE GRADE GROW HAMMER HARD HAT HATE H-BOMB HELL-R HEMP HINT HIT HU HUNT HYPNOSI INHA IRO IRONBAR IR-WING J-GUN KEE KICK KNIF KNIFE KNOCK LEVEL LIGH LIGHHIT LIGHT LIVE L-WALL MAD MAJUS MEL MELO MESS MILK MIMI MISS MIXING MOVE MUD NI-BED NOISY NOONLI NULL N-WAVE PAT PEACE PIN PLAN PLANE POIS POL POWDE POWE POWER PRIZE PROTECT PROUD RAGE RECOR REFLAC REFREC REGR RELIV RENEW R-FIGHT RING RKICK ROCK ROUND RUS RUSH SAND SAW SCISSOR SCRA SCRIPT SEEN SERVER SHADOW SHELL SHINE SHO SIGHT SIN SMALL SMELT SMOK SNAKE SNO SNOW SOU SO-WAVE SPAR SPEC SPID S-PIN SPRA STAM STARE STEA STONE STORM STRU STRUG STUDEN SUBS SUCID SUN-LIG SUNRIS SUPLY S-WAVE TAILS TANGL TASTE TELLI THANK TONKICK TOOTH TORL TRAIN TRIKICK TUNGE VOLT WA-GUN WATCH WAVE W-BOMB WFALL WFING WHIP WHIRL WIND WOLF WOOD WOR YUJA)
local NAMES=(SEED GRASS FLOWE SHAD CABR SNAKE GOLD COW GUIKI PEDAL DELAN B-FLY BIDE KEYU FORK LAP PIGE PIJIA CAML LAT BIRD BABOO VIV ABOKE PIKAQ RYE SAN BREAD LIDEL LIDE PIP PIKEX ROK JUGEN PUD BUDE ZHIB GELU GRAS FLOW LAFUL ATH BALA CORN MOLUF DESP DAKED MIMI BOLUX KODA GELUD MONK SUMOY GEDI WENDI NILEM NILE NILEC KEZI YONGL HUDE WANLI GELI GUAIL MADAQ WUCI WUCI MUJEF JELLY SICIB GELU NELUO BOLI JIALE YED YEDE CLO SCARE AOCO DEDE DEDEI BAWU JIUG BADEB BADEB HOLE BALUX GES FANT QUAR YIHE SWAB SLIPP CLU DEPOS BILIY YUANO SOME NO YELA EMPT ZECUN XIAHE BOLEL DEJI MACID XIHON XITO LUCK MENJI GELU DECI XIDE DASAJ DONGN RICUL MINXI BALIY ZENDA LUZEL HELE5 0FENB KAIL JIAND CARP JINDE LAPU MUDE YIFU LINLI SANDI HUSI JINC OUMU OUMUX CAP KUIZA PUD TIAO FRMAN CLAU SPARK DRAGO BOLIU GUAIL MIYOU MIY QIAOK BEIL MUKEI RIDED MADAM BAGEP CROC ALIGE OUDAL OUD DADA HEHE YEDEA NUXI NUXIN ROUY ALIAD STICK QIANG LAAND PIQI PI PUPI DEKE DEKEJ NADI NADIO MALI PEA ELECT FLOWE MAL MALI HUSHU NILEE YUZI POPOZ DUZI HEBA XIAN SHAN YEYEA WUY LUO KEFE HULA CROW YADEH MOW ANNAN SUONI KYLI HULU HUDEL YEHE GULAE YEHE BLU GELAN BOAT NIP POIT HELAK XINL BEAR LINB MAGEH MAGEJ WULI YIDE RIVE FISH AOGU DELIE MANTE KONMU DELU HELU HUAN HUMA DONGF JINCA HEDE DEFU LIBY JIAPA MEJI HELE BUHU MILK HABI THUN GARD DON YANGQ SANAQ BANQ LUJ PHIX SIEI EGG)
UPPER_APPNAME="${MOVES[${NUM1}]}-${MOVES[${NUM2}]}-${NAMES[${NUM3}]}"
NUM1=$(fn-random-number ${#MOVES[@]})
NUM2=$(fn-random-number ${#MOVES[@]})
NUM3=$(fn-random-number ${#NAMES[@]})
[[ "$BASH_VERSION" =~ 4.* ]] && lower_appname=${UPPER_APPNAME,,}
[[ -z "$lower_appname" ]] && lower_appname=$(echo "$UPPER_APPNAME" | tr '[:upper:]' '[:lower:]')
echo "$lower_appname"
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:]')
echo "$lower_appname"
}
client_help_msg() {
echo "==> Configure the DOKKU_HOST environment variable or run $0 from a repository with a git remote named dokku"
echo "--> i.e. git remote add dokku dokku@<dokku-host>:<app-name>"
fn-client-help-msg() {
echo "==> Configure the DOKKU_HOST environment variable or run $0 from a repository with a git remote named dokku" 1>&2
echo "--> i.e. git remote add dokku dokku@<dokku-host>:<app-name>" 1>&2
exit 20 # exit with specific status. only used in units tests for now
}
is_git_repo() {
git rev-parse &>/dev/null
fn-is-git-repo() {
git rev-parse &>/dev/null
}
has_dokku_remote() {
git remote show | grep dokku
fn-has-dokku-remote() {
git remote show | grep -E "^${DOKKU_GIT_REMOTE}\s"
}
if [[ -z $DOKKU_HOST ]]; then
if [[ -d .git ]] || git rev-parse --git-dir > /dev/null 2>&1; then
DOKKU_HOST=$(git remote -v 2>/dev/null | grep -Ei "^dokku" | head -n 1 | cut -f1 -d' ' | cut -f2 -d '@' | cut -f1 -d':' 2>/dev/null || true)
else
client_help_msg
fn-dokku-host() {
declare DOKKU_GIT_REMOTE="$1" DOKKU_HOST="$2"
if [[ -z "$DOKKU_HOST" ]]; then
if [[ -d .git ]] || git rev-parse --git-dir > /dev/null 2>&1; then
DOKKU_HOST=$(git remote -v 2>/dev/null | grep -Ei "^${DOKKU_GIT_REMOTE}\s" | head -n 1 | cut -f1 -d' ' | cut -f2 -d '@' | cut -f1 -d':' 2>/dev/null || true)
fi
fi
fi
export DOKKU_PORT=${DOKKU_PORT:=22}
if [[ -z "$DOKKU_HOST" ]]; then
fn-client-help-msg
fi
echo "$DOKKU_HOST"
}
if [[ ! -z $DOKKU_HOST ]]; then
_dokku() {
appname=""
main() {
declare CMD="$1" APP_ARG="$2"
local APP="" DOKKU_GIT_REMOTE="dokku" DOKKU_REMOTE_HOST=""
local cmd_set=false next_index=1 skip=false args=("$@")
for arg in "$@"; do
if [[ "$skip" == "true" ]]; then
next_index=$(( next_index + 1 ))
skip=false
continue
fi
if [[ "$arg" == "--app" ]]; then
APP=${args[$next_index]}
skip=true
shift 2
elif [[ "$arg" == "--remote" ]]; then
DOKKU_GIT_REMOTE=${args[$next_index]}
skip=true
shift 2
elif [[ "$arg" =~ ^--.* ]]; then
[[ "$cmd_set" == "true" ]] && APP_ARG="$arg" && break
[[ "$arg" == "--trace" ]] && export DOKKU_TRACE=1 && set -x
else
if [[ "$cmd_set" == "true" ]]; then
APP_ARG="$arg"
break
else
CMD="$arg"
cmd_set=true
fi
fi
next_index=$(( next_index + 1 ))
done
DOKKU_REMOTE_HOST="$(fn-dokku-host "$DOKKU_GIT_REMOTE" "$DOKKU_HOST")"
if [[ -z "$APP" ]]; then
if [[ -d .git ]] || git rev-parse --git-dir > /dev/null 2>&1; then
set +e
appname=$(git remote -v 2>/dev/null | grep -Ei "dokku@$DOKKU_HOST" | head -n 1 | cut -f2 -d'@' | cut -f1 -d' ' | cut -f2 -d':' 2>/dev/null)
APP=$(git remote -v 2>/dev/null | grep -Ei "dokku@$DOKKU_REMOTE_HOST" | head -n 1 | cut -f2 -d'@' | cut -f1 -d' ' | cut -f2 -d':' 2>/dev/null)
set -e
else
echo "This is not a git repository"
fi
case "$1" in
apps:create)
if [[ -z "$2" ]]; then
appname=$(random_name)
counter=0
while ssh -p "$DOKKU_PORT" "dokku@$DOKKU_HOST" apps 2>/dev/null| grep -q "$appname"; do
if [[ $counter -ge 100 ]]; then
echo "Error: could not reasonably generate a new app name. try cleaning up some apps..."
ssh -p "$DOKKU_PORT" "dokku@$DOKKU_HOST" apps
exit 1
else
appname=$(random_name)
counter=$((counter+1))
fi
done
else
appname="$2"
fi
if git remote add dokku "dokku@$DOKKU_HOST:$appname"; then
echo "-----> Dokku remote added at $DOKKU_HOST"
echo "-----> Application name is $appname"
else
echo "! Dokku remote not added! Do you already have a dokku remote?"
return
fi
;;
apps:destroy)
is_git_repo && has_dokku_remote && git remote remove dokku
;;
esac
[[ -n "$@" ]] && [[ -n "$appname" ]] && app_arg="--app $appname"
# echo "ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_HOST -- $app_arg $@"
# shellcheck disable=SC2068,SC2086
ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_HOST -- $app_arg $@
}
if [[ "$0" == "dokku" ]] || [[ "$0" == *dokku_client.sh ]] || [[ "$0" == $(which dokku) ]]; then
_dokku "$@"
exit $?
fi
else
client_help_msg
case "$CMD" in
apps:create)
if [[ -z "$APP_ARG" ]]; then
APP=$(fn-random-name)
counter=0
while ssh -p "$DOKKU_PORT" "dokku@$DOKKU_REMOTE_HOST" apps 2>/dev/null| grep -q "$APP"; do
if [[ $counter -ge 100 ]]; then
echo "Error: could not reasonably generate a new app name. try cleaning up some apps..."
ssh -p "$DOKKU_PORT" "dokku@$DOKKU_REMOTE_HOST" apps
exit 1
else
APP=$(random_name)
counter=$((counter+1))
fi
done
else
APP="$APP_ARG"
fi
if git remote add dokku "dokku@$DOKKU_REMOTE_HOST:$APP"; then
echo "-----> Dokku remote added at ${DOKKU_REMOTE_HOST} called ${DOKKU_GIT_REMOTE}"
echo "-----> Application name is ${APP}"
else
echo "! Dokku remote not added! Do you already have a dokku remote?"
return
fi
;;
apps:destroy)
fn-is-git-repo && fn-has-dokku-remote && git remote remove "$DOKKU_GIT_REMOTE"
;;
esac
[[ " apps certs help ls nginx shell storage trace version " == *" $CMD "* ]] && unset APP
[[ " certs:chain domains:add-global domains:remove-global domains:set-global ps:rebuildall ps:restartall ps:restore " == *" $CMD "* ]] && unset APP
[[ "$CMD" =~ events*|plugin*|ssh-keys* ]] && unset APP
[[ -n "$APP_ARG" ]] && [[ "$APP_ARG" == "--global" ]] && unset APP
[[ -n "$@" ]] && [[ -n "$APP" ]] && app_arg="--app $APP"
# echo "ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_REMOTE_HOST -- $app_arg $@"
# shellcheck disable=SC2068,SC2086
ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_REMOTE_HOST -- $app_arg $@
}
if [[ "$0" == "dokku" ]] || [[ "$0" == *dokku_client.sh ]] || [[ "$0" == $(which dokku) ]]; then
main "$@"
exit $?
fi

17
deb.mk
View File

@@ -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.19
HEROKUISH_VERSION ?= 0.3.26
HEROKUISH_ARCHITECTURE = amd64
HEROKUISH_PACKAGE_NAME = herokuish_$(HEROKUISH_VERSION)_$(HEROKUISH_ARCHITECTURE).deb
@@ -15,7 +15,7 @@ You can use any language you want, so long as the script is
executable and has the proper language requirements installed
endef
PLUGN_REPO_NAME ?= dokku/plugn
PLUGN_VERSION ?= 0.2.2
PLUGN_VERSION ?= 0.3.0
PLUGN_ARCHITECTURE = amd64
PLUGN_PACKAGE_NAME = plugn_$(PLUGN_VERSION)_$(PLUGN_ARCHITECTURE).deb
PLUGN_URL = https://github.com/dokku/plugn/releases/download/v$(PLUGN_VERSION)/plugn_$(PLUGN_VERSION)_linux_x86_64.tgz
@@ -92,7 +92,10 @@ deb-herokuish:
@echo " sudo docker rmi gliderlabs/herokuish" >> /tmp/tmp/post-install
@echo "fi" >> /tmp/tmp/post-install
@echo "echo 'Importing herokuish into docker (around 5 minutes)'" >> /tmp/tmp/post-install
@echo "sudo docker build -t gliderlabs/herokuish /var/lib/herokuish 1> /dev/null" >> /tmp/tmp/post-install
@echo 'if [[ ! -z $${http_proxy+x} ]]; then BUILDARGS="--build-args http_proxy=$$http_proxy"; fi' >> /tmp/tmp/post-install
@echo 'if [[ ! -z $${https_proxy+x} ]]; then BUILDARGS="$$BUILDARGS --build-args https_proxy=$$https_proxy"; fi' >> /tmp/tmp/post-install
@echo 'if [[ ! -z $${BUILDARGS+x} ]]; then echo Adding proxy settings to docker build: $$BUILDARGS; fi' >> /tmp/tmp/post-install
@echo 'sudo docker build $$BUILDARGS -t gliderlabs/herokuish /var/lib/herokuish 1> /dev/null' >> /tmp/tmp/post-install
@echo "-> Cloning repository"
git clone -q "https://github.com/$(HEROKUISH_REPO_NAME).git" --branch "v$(HEROKUISH_VERSION)" /tmp/tmp/herokuish > /dev/null
@@ -128,14 +131,22 @@ deb-dokku:
cp /usr/local/share/man/man1/dokku.1 /tmp/build/usr/share/man/man1/dokku.1
gzip -9 /tmp/build/usr/share/man/man1/dokku.1
cp contrib/dokku-installer.py /tmp/build/usr/share/dokku/contrib
ifeq ($(DOKKU_VERSION),master)
git describe --tags > /tmp/build/var/lib/dokku/VERSION
else
echo $(DOKKU_VERSION) > /tmp/build/var/lib/dokku/VERSION
endif
cat /tmp/build/var/lib/dokku/VERSION | cut -d '-' -f 1 | cut -d 'v' -f 2 > /tmp/build/var/lib/dokku/STABLE_VERSION
ifneq (,$(findstring false,$(IS_RELEASE)))
sed -i.bak -e "s/^/`date +%s`:/" /tmp/build/var/lib/dokku/STABLE_VERSION && rm /tmp/build/var/lib/dokku/STABLE_VERSION.bak
endif
rm /tmp/build/DEBIAN/lintian-overrides
mv debian/lintian-overrides /tmp/build/usr/share/lintian/overrides/dokku
ifdef DOKKU_GIT_REV
echo "$(DOKKU_GIT_REV)" > /tmp/build/var/lib/dokku/GIT_REV
else
git rev-parse HEAD > /tmp/build/var/lib/dokku/GIT_REV
endif
sed -i "s/^Version: .*/Version: `cat /tmp/build/var/lib/dokku/STABLE_VERSION`/g" /tmp/build/DEBIAN/control
dpkg-deb --build /tmp/build "/tmp/dokku_`cat /tmp/build/var/lib/dokku/STABLE_VERSION`_$(DOKKU_ARCHITECTURE).deb"
lintian "/tmp/dokku_`cat /tmp/build/var/lib/dokku/STABLE_VERSION`_$(DOKKU_ARCHITECTURE).deb"

8
debian/control vendored
View File

@@ -1,11 +1,11 @@
Package: dokku
Version: 0.7.2
Version: 0.8.2
Section: web
Priority: optional
Architecture: amd64
Depends: locales, git, make, curl, gcc, man-db, sshcommand, gliderlabs-sigil, docker-engine-cs (>= 1.9.1) | docker-engine (>= 1.9.1), software-properties-common, python-software-properties
Recommends: herokuish
Pre-Depends: nginx, dnsutils, cgroupfs-mount | cgroup-lite, plugn, sudo, python2.7, debconf
Depends: locales, git, make, curl, gcc, man-db, sshcommand (>= 0.6.0), gliderlabs-sigil, docker-engine-cs (>= 1.9.1) | docker-engine (>= 1.9.1) | docker-ce | docker-ee, software-properties-common, python-software-properties
Recommends: herokuish (>= 0.3.4), parallel
Pre-Depends: nginx, dnsutils, cgroupfs-mount | cgroup-lite, plugn (>= 0.3.0), sudo, python2.7, debconf
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>
Description: Docker-powered PaaS that helps build and manage the lifecycle of applications
Dokku is an extensible, open source Platform as a Service

4
debian/postrm vendored
View File

@@ -11,13 +11,13 @@ readonly DOKKU_LIB_ROOT="${DOKKU_LIB_PATH:-/var/lib/dokku}"
readonly DOKKU_LOGS_DIR="${DOKKU_LOGS_DIR:="/var/log/dokku"}"
main() {
if [[ -f /etc/systemd/system/dokku-installer.conf ]] || [[ -f /etc/init/dokku-installer.conf ]]; then
if [[ -f /etc/systemd/system/dokku-installer.service ]] || [[ -f /etc/init/dokku-installer.conf ]]; then
service dokku-installer stop || true
fi
rm -f /etc/init/dokku-installer.conf
rm -f /etc/init/dokku-redeploy.conf
rm -f /etc/systemd/system/dokku-installer.conf
rm -f /etc/systemd/system/dokku-installer.service
rm -f /etc/systemd/system/dokku-redeploy.service
rm -f /etc/update-motd.d/99-dokku

View File

@@ -15,7 +15,8 @@ Dokku accomplishes this by using an `app.json` file. The format in use is simila
However, Dokku currently only supports the nodes `scripts.dokku.predeploy` and `scripts.dokku.postdeploy`.
For buildpack apps, simply place an `app.json` file in the root of your repository.
For dockerfile apps, place `app.json` in the configured `WORKDIR` directory; otherwise Dokku defaults to the buildpack app behavior of looking in `/app`.
>NOTE: postdeploy changes are *NOT* committed to the app image.
> NOTE: postdeploy changes are *NOT* committed to the app image.
### Example app.json

View File

@@ -5,15 +5,15 @@
Pass [options](https://docs.docker.com/engine/reference/run/) to Docker during Dokku's `build`, `deploy` and `run` phases
```
docker-options <app> [phase(s)] # Display app's Docker options for all phases (or 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:report [<app>] [<flag>] # Displays a docker options report for one or more apps
```
> When specifying multiple phases, they **must** be comma-separated _without_ spaces in between each phase, like so:
>
> ```shell
> dokku docker-options:add myapp deploy,run "-v /home/dokku/logs/myapp:/app/logs"
> dokku docker-options:add node-js-app deploy,run "-v /var/log/node-js-app:/app/logs"
> ```
## About Dokku phases
@@ -22,7 +22,7 @@ Dokku deploys your application in multiple "phases" and the `docker-options` plu
- `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`
- `run`: the container that executes any arbitrary command via `dokku run`
## Examples
@@ -32,31 +32,63 @@ Add some options for the deployed/running app and when executing [`dokku run`](/
```shell
# Mount a host volume in a Docker container: "-v /host/path:/container/path"
dokku docker-options:add myapp deploy "-v /home/dokku/logs/myapp:/app/logs"
dokku docker-options:add myapp run "-v /home/dokku/logs/myapp:/app/logs"
dokku docker-options:add node-js-app deploy "-v /var/log/node-js-app:/app/logs"
dokku docker-options:add node-js-app run "-v /var/log/node-js-app:/app/logs"
```
> Note: When [mounting a host directory](https://docs.docker.com/engine/reference/run/#volume-shared-filesystems) in a Dokku app you should first create that directory as user `dokku` and then mount the directory under `/app` in the container using `docker-options` as above. Otherwise the app will lack write permission in the directory.
### Output Docker options
```shell
dokku docker-options myapp
```
```
Deploy options:
-v /home/dokku/logs/myapp:/app/logs
Run options:
-v /home/dokku/logs/myapp:/app/logs
```
### Remove a Docker option
```shell
dokku docker-options:remove myapp run "-v /home/dokku/logs/myapp:/app/logs"
dokku docker-options:remove node-js-app run "-v /var/log/node-js-app:/app/logs"
```
### Displaying docker-options reports about an app
> New as of 0.8.1
You can get a report about the app's docker-options status using the `docker-options:report` command:
```shell
dokku docker-options:report
```
```
=====> node-js-app docker options information
Docker options build:
Docker options deploy: -v /var/log/node-js-app:/app/logs
Docker options run: -v /var/log/node-js-app:/app/logs
=====> python-sample docker options information
Docker options build:
Docker options deploy:
Docker options run:
=====> ruby-sample docker options information
Docker options build:
Docker options deploy:
Docker options run:
```
You can run the command for a specific app also.
```shell
dokku docker-options:report node-js-app
```
```
=====> node-js-app docker options information
Storage build mounts:
Storage deploy mounts: -v /var/log/node-js-app:/app/logs
Storage run mounts: -v /var/log/node-js-app:/app/logs
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku docker-options:report node-js-app --docker-options-build
```
## Advanced usage
In your applications folder `/home/dokku/app_name` create a file called `DOCKER_OPTIONS_RUN` (or `DOCKER_OPTIONS_BUILD` or `DOCKER_OPTIONS_DEPLOY`).
@@ -77,4 +109,4 @@ The above example will result in the following options being passed to Docker du
You may also include comments (lines beginning with a #) and blank lines in the DOCKER_OPTIONS file.
Move information on Docker options can be found here: http://docs.docker.io/en/latest/reference/run/ .
More information on Docker options can be found here: https://docs.docker.com/engine/reference/commandline/run/.

View File

@@ -8,41 +8,96 @@ The preferred method to mount external containers to a Dokku managed container,
```
storage:list <app> # List bind mounts for app's container(s) (host:container)
storage:mount <app> <host-dir:container-dir> # Create a new bind mount
storage:report [<app>] [<flag>] # Displays a checks report for one or more apps
storage:unmount <app> <host-dir:container-dir> # Remove an existing bind mount
```
> The storage plugin is compatible with storage mounts created with the docker-options. The storage plugin will only list mounts from the deploy/run phase.
## Ideology and Background
The storage plugin requires explicit paths on the host side. This is intentional to ensure that new users avoid running into unexpected results with implicit paths that may not exist (a feature deprecate in [Docker 1.9.0](https://github.com/docker/docker/releases/tag/v1.9.0])). The container directory is created for the mount point in the container. Any existing directory contents are not accessible after a mount is added to the container. Dokku creates a new directory `/var/lib/dokku/data/storage` during installation, it's the general consensus that new users should use this directory. Mounts are only available at run and deploy times, you must redeploy (restart) an app to mount or unmount to an existing app's container.
## Usage
This example demonstrates how to mount the recommended directory to `/storage` inside the container:
This example demonstrates how to mount the recommended directory to `/storage` inside an application called `node-js-app`:
```shell
dokku storage:mount app-name /var/lib/dokku/data/storage:/storage
# we use a subdirectory inside of the host directory to scope it to just the app
dokku storage:mount node-js-app /var/lib/dokku/data/storage/node-js-app:/storage
```
Dokku will then mount the shared contents of `/var/lib/dokku/data/storage` to `/storage` inside the container.
Once you have mounted persistent storage, you will also need to restart the application. See the
[process scaling documentation](/dokku/deployment/process-management) for more information.
```shell
dokku ps:rebuild app-name
```
A more complete workflow may require making a custom directory for your application and mounting it within your `/app/storage` directory instead. The mount point is *not* relative to your application's working directory, and is instead relative to the root of the container.
```shell
# creating storage for the app 'ruby-rails-sample'
mkdir -p /var/lib/dokku/data/storage/ruby-rails-sample
# creating storage for the app 'node-js-app'
mkdir -p /var/lib/dokku/data/storage/node-js-app
# ensure the proper user has access to this directory
chown -R dokku:dokku /var/lib/dokku/data/storage/ruby-rails-sample
chown -R dokku:dokku /var/lib/dokku/data/storage/node-js-app
# as of 0.7.x, you should chown using the `32767` user and group id
chown -R 32767:32767 /var/lib/dokku/data/storage/ruby-rails-sample
chown -R 32767:32767 /var/lib/dokku/data/storage/node-js-app
# mount the directory into your container's /app/storage directory, relative to root
dokku storage:mount app-name /var/lib/dokku/data/storage/app-name:/app/storage
dokku storage:mount app-name /var/lib/dokku/data/storage/node-js-app:/app/storage
```
You can mount one or more directories as desired by following the above pattern.
### Displaying storage reports about an app
> New as of 0.8.1
You can get a report about the app's storage status using the `storage:report` command:
```shell
dokku storage:report
```
```
=====> node-js-app storage information
Storage build mounts:
Storage deploy mounts: -v /var/lib/dokku/data/storage/node-js-app:/app/storage
Storage run mounts: -v /var/lib/dokku/data/storage/node-js-app:/app/storage
=====> python-sample storage information
Storage build mounts:
Storage deploy mounts:
Storage run mounts:
=====> ruby-sample storage information
Storage build mounts:
Storage deploy mounts:
Storage run mounts:
```
You can run the command for a specific app also.
```shell
dokku storage:report node-js-app
```
```
=====> node-js-app storage information
Storage build mounts:
Storage deploy mounts: -v /var/lib/dokku/data/storage/node-js-app:/app/storage
Storage run mounts: -v /var/lib/dokku/data/storage/node-js-app:/app/storage
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku storage:report node-js-app --storage-deploy-mounts
```
## Use Cases
### Persistent storage
@@ -73,15 +128,10 @@ You cannot use mounted volumes during the build phase of a Dockerfile deploy. Th
> Note: **This can cause data loss** if you bind a mount under `/app` in buildpack apps as herokuish will attempt to remove the original app path during the build phase.
## Docker-Options Note
The storage plugin is compatible with storage mounts created with the docker-options. The storage plugin will only list mounts from the deploy phase.
## Application User and Persistent Storage file ownership (buildpack apps only)
> New as of 0.7.1
## Application User and Persistent Storage file ownership (buildpack apps only)
By default, Dokku will execute your buildpack application processes as the `herokuishuser` user. You may override this by setting the `DOKKU_APP_USER` config variable.
> NOTE: this user must exist in your herokuish image.

View File

@@ -3,11 +3,11 @@
> New as of 0.4.0
```
plugin # Print active plugins
plugin:disable <name> # Disable an installed plugin (third-party only)
plugin:enable <name> # Enable a previously disabled plugin
plugin:install [--core|git-url [--committish tag|branch|commit|--name custom-plugin-name]] # Optionally download git-url (with custom tag/committish) & run install trigger for active plugins (or only core ones)
plugin:install-dependencies [--core] # Run install-dependencies trigger for active plugins (or only core ones)
plugin:list # Print active plugins
plugin:uninstall <name> # Uninstall a plugin (third-party only)
plugin:update [name [committish]] # Optionally update named plugin from git (with custom tag/committish) & run update trigger for active plugins
```
@@ -31,30 +31,30 @@ dokku plugin
```
plugn: dev
00_dokku-standard 0.7.2 enabled dokku core standard plugin
20_events 0.7.2 enabled dokku core events logging plugin
apps 0.7.2 enabled dokku core apps plugin
build-env 0.7.2 enabled dokku core build-env plugin
certs 0.7.2 enabled dokku core certificate management plugin
checks 0.7.2 enabled dokku core checks plugin
common 0.7.2 enabled dokku core common plugin
config 0.7.2 enabled dokku core config plugin
docker-options 0.7.2 enabled dokku core docker-options plugin
domains 0.7.2 enabled dokku core domains plugin
enter 0.7.2 enabled dokku core enter plugin
git 0.7.2 enabled dokku core git plugin
logs 0.7.2 enabled dokku core logs plugin
named-containers 0.7.2 enabled dokku core named containers plugin
nginx-vhosts 0.7.2 enabled dokku core nginx-vhosts plugin
plugin 0.7.2 enabled dokku core plugin plugin
proxy 0.7.2 enabled dokku core proxy plugin
ps 0.7.2 enabled dokku core ps plugin
repo 0.7.2 enabled dokku core repo plugin
shell 0.7.2 enabled dokku core shell plugin
ssh-keys 0.7.2 enabled dokku core ssh-keys plugin
storage 0.7.2 enabled dokku core storage plugin
tags 0.7.2 enabled dokku core tags plugin
tar 0.7.2 enabled dokku core tar plugin
00_dokku-standard 0.8.2 enabled dokku core standard plugin
20_events 0.8.2 enabled dokku core events logging plugin
apps 0.8.2 enabled dokku core apps plugin
build-env 0.8.2 enabled dokku core build-env plugin
certs 0.8.2 enabled dokku core certificate management plugin
checks 0.8.2 enabled dokku core checks plugin
common 0.8.2 enabled dokku core common plugin
config 0.8.2 enabled dokku core config plugin
docker-options 0.8.2 enabled dokku core docker-options plugin
domains 0.8.2 enabled dokku core domains plugin
enter 0.8.2 enabled dokku core enter plugin
git 0.8.2 enabled dokku core git plugin
logs 0.8.2 enabled dokku core logs plugin
named-containers 0.8.2 enabled dokku core named containers plugin
nginx-vhosts 0.8.2 enabled dokku core nginx-vhosts plugin
plugin 0.8.2 enabled dokku core plugin plugin
proxy 0.8.2 enabled dokku core proxy plugin
ps 0.8.2 enabled dokku core ps plugin
repo 0.8.2 enabled dokku core repo plugin
shell 0.8.2 enabled dokku core shell plugin
ssh-keys 0.8.2 enabled dokku core ssh-keys plugin
storage 0.8.2 enabled dokku core storage plugin
tags 0.8.2 enabled dokku core tags plugin
tar 0.8.2 enabled dokku core tar plugin
```
Installing a plugin is easy as well using the `plugin:install` command. This command will also trigger the `install` pluginhook on all existing plugins.
@@ -72,17 +72,6 @@ Receiving objects: 100% (646/646), 134.24 KiB | 0 bytes/s, done.
Resolving deltas: 100% (406/406), done.
Checking connectivity... done.
-----> Plugin postgres enabled
-----> Migrating zero downtime env variables to 0.5.x. The following variables have been deprecated
=====> DOKKU_SKIP_ALL_CHECKS DOKKU_SKIP_DEFAULT_CHECKS
=====> Please use dokku checks:[disable|enable] <app> to control zero downtime functionality
=====> Migration complete
=====>
-----> Migrating zero downtime env variables to 0.6.x. The following variables will be migrated
=====> DOKKU_CHECKS_ENABLED -> DOKKU_CHECKS_SKIPPED
=====> Migration complete
=====>
Adding user dokku to group adm
Starting nginx (via systemctl): nginx.service.
```
You can also uninstall a third-party plugin using the `plugin:uninstall` command:

View File

@@ -3,19 +3,21 @@
> New as of 0.5.0, Enhanced in 0.6.0
```
proxy <app> # Show proxy settings for app
proxy:disable <app> # Disable proxy for app
proxy:enable <app> # Enable proxy for app
proxy:ports <app> # List proxy port mappings for app
proxy:ports-add <app> <scheme>:<host-port>:<container-port> [<scheme>:<host-port>:<container-port>...] # Set proxy port mappings for app
proxy:ports-clear <app> # Clear all proxy port mappings for app
proxy:ports-remove <app> <host-port> [<host-port>|<scheme>:<host-port>:<container-port>...] # Unset proxy port mappings for app
proxy:report [<app>] [<flag>] # Displays a proxy report for one or more apps
proxy:set <app> <proxy-type> # Set proxy type for app
```
In Dokku 0.5.0, port proxying was decoupled from the `nginx-vhosts` plugin into the proxy plugin. Dokku 0.6.0 introduced the ability to map host ports to specific container ports. In the future this will allow other proxy software - such as HAProxy or Caddy - to be used in place of nginx.
## Container network interface binding
## Usage
### Container network interface binding
> New as of 0.5.0
@@ -58,7 +60,51 @@ CONTAINER ID IMAGE COMMAND CREATED
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 node-js-app.web.1
```
## Proxy port mapping
### Displaying proxy reports about an app
> New as of 0.8.1
You can get a report about the app's proxy status using the `proxy:report` command:
```shell
dokku proxy:report
```
```
=====> node-js-app proxy information
Proxy enabled: true
Proxy type: nginx
Proxy port map: http:80:5000 https:443:5000
=====> python-sample proxy information
Proxy enabled: true
Proxy type: nginx
Proxy port map: http:80:5000
=====> ruby-sample proxy information
Proxy enabled: true
Proxy type: nginx
Proxy port map: http:80:5000
```
You can run the command for a specific app also.
```shell
dokku proxy:report node-js-app
```
```
=====> node-js-app proxy information
Proxy enabled: true
Proxy type: nginx
Proxy port map: http:80:5000 https:443:5000
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku proxy:report node-js-app --proxy-type
```
### Proxy port mapping
> New as of 0.6.0
@@ -141,7 +187,7 @@ By default, buildpack apps and dockerfile apps **without** explicitly exposed po
> Note: This default behavior **will not** be automatically changed on subsequent pushes and must be manipulated with the `proxy:ports-*` syntax detailed above.
## Proxy Port Scheme
#### Proxy Port Scheme
The proxy port scheme is as follows:

View File

@@ -3,7 +3,7 @@
> New as of 0.6.0
```
repo:gc <app> # Runs 'git gc --agressive' against the application's repo
repo:gc <app> # Runs 'git gc --aggressive' against the application's repo
repo:purge-cache <app> # Deletes the contents of the build cache stored in the repository
```
@@ -13,7 +13,7 @@ The repository plugin is meant to allow users to perform management commands aga
### Git Garbage Collection
This will run a git gc --agressive against the applications repo. This is performed on the Dokku host, and not within an application container.
This will run a git gc --aggressive against the applications repo. This is performed on the Dokku host, and not within an application container.
```shell
dokku repo:gc node-js-app

View File

@@ -2,10 +2,10 @@
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/mstile-70x70.png"/>
<square150x150logo src="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/mstile-150x150.png"/>
<square310x310logo src="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/mstile-310x310.png"/>
<wide310x150logo src="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/mstile-310x150.png"/>
<square70x70logo src="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/mstile-70x70.png"/>
<square150x150logo src="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/mstile-150x150.png"/>
<square310x310logo src="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/mstile-310x310.png"/>
<wide310x150logo src="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/mstile-310x150.png"/>
<TileColor>#da532c</TileColor>
</tile>
</msapplication>

View File

@@ -2,37 +2,37 @@
"name": "Dokku",
"icons": [
{
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.7.2\/docs\/assets\/favicons\/android-chrome-36x36.png",
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.8.2\/docs\/assets\/favicons\/android-chrome-36x36.png",
"sizes": "36x36",
"type": "image\/png",
"density": "0.75"
},
{
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.7.2\/docs\/assets\/favicons\/android-chrome-48x48.png",
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.8.2\/docs\/assets\/favicons\/android-chrome-48x48.png",
"sizes": "48x48",
"type": "image\/png",
"density": "1.0"
},
{
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.7.2\/docs\/assets\/favicons\/android-chrome-72x72.png",
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.8.2\/docs\/assets\/favicons\/android-chrome-72x72.png",
"sizes": "72x72",
"type": "image\/png",
"density": "1.5"
},
{
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.7.2\/docs\/assets\/favicons\/android-chrome-96x96.png",
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.8.2\/docs\/assets\/favicons\/android-chrome-96x96.png",
"sizes": "96x96",
"type": "image\/png",
"density": "2.0"
},
{
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.7.2\/docs\/assets\/favicons\/android-chrome-144x144.png",
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.8.2\/docs\/assets\/favicons\/android-chrome-144x144.png",
"sizes": "144x144",
"type": "image\/png",
"density": "3.0"
},
{
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.7.2\/docs\/assets\/favicons\/android-chrome-192x192.png",
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.8.2\/docs\/assets\/favicons\/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image\/png",
"density": "4.0"

View File

@@ -1,7 +1,6 @@
body {
font-family: 'Open Sans', sans-serif;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-weight: 400;
font-size: 12px;
padding-bottom: 40px;
color: #5a5a5a;
-webkit-font-smoothing: antialiased;
@@ -21,7 +20,7 @@ h1 {
.header .heading {
color: #fff;
font-size: 23px;
margin: 0;
margin: 7px 0 0 0;
padding: 0 0 0 1em;
}
.header a {
@@ -36,13 +35,13 @@ h1 {
background-repeat: no-repeat;
}
.header .navbar-brand a {
background-image: url(https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/dokku.png);
background-image: url(https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/dokku.png);
text-indent: 40px;
}
.blurb {
color: #424242;
background-color: #ededed;
background-image: url(https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/gplaypattern.png);
background-image: url(https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/gplaypattern.png);
padding: 45px 0;
text-align: center;
}
@@ -67,7 +66,6 @@ h1 {
color: #444;
display: block;
font-weight: 400;
font-size: 14px;
margin: 0 20px;
padding: 3px 0;
text-align: center;
@@ -211,6 +209,7 @@ h1 {
.list-group-item {
border: none;
font-size: 14px;
font-weight: normal;
padding: .2rem .5rem;
color: #157577;
@@ -246,10 +245,9 @@ a.list-group-item {
-webkit-font-smoothing: antialiased;
box-sizing: border-box;
color: rgb(71, 74, 84);
font-size: 14px;
font-weight: normal;
height: 20px;
line-height: 20px;
line-height: 1.5;
text-align: left;
}
.markdown-body h1 {

View File

@@ -1 +1,10 @@
{ "max-versions": [ "0.3.26", "0.4.14", "0.5.8", "0.6.5", "0.7.2" ] }
{
"max-versions": [
"0.3.26",
"0.4.14",
"0.5.8",
"0.6.5",
"0.7.2",
"0.8.2"
]
}

View File

@@ -61,6 +61,7 @@ Note: The following plugins have been supplied by our community and may not have
[Benjamin-Dobell]: https://github.com/Benjamin-Dobell
[blag]: https://github.com/blag
[cameron-martin]: https://github.com/cameron-martin
[candlewaster]: https://notabug.org/candlewaster
[cedricziel]: https://github.com/cedricziel
[cef]: https://github.com/cef
[cjblomqvist]: https://github.com/cjblomqvist
@@ -68,6 +69,7 @@ Note: The following plugins have been supplied by our community and may not have
[cu12]: https://github.com/cu12
[darkpixel]: https://github.com/darkpixel
[dokku]: https://github.com/dokku
[dokku-community]: https://github.com/dokku-community
[dyson]: https://github.com/dyson
[F4-Group]: https://github.com/F4-Group
[fermuch]: https://github.com/fermuch
@@ -118,6 +120,7 @@ Note: The following plugins have been supplied by our community and may not have
[thrashr888]: https://github.com/thrashr888
[wmluke]: https://github.com/wmluke
[Zenedith]: https://github.com/Zenedith
[fteychene]: https://github.com/fteychene
### Datastores
@@ -161,7 +164,7 @@ Note: The following plugins have been supplied by our community and may not have
[c77cbf1]: https://github.com/dokku/dokku/commit/c77cbf1d3ae07f0eafb85082ed7edcae9e836147
[28de3ec]: https://github.com/dokku/dokku/commit/28de3ecaa3231a223f83fd8d03f373308673bc40
### Dokku Features
### Plugins Implementing New Dokku Functionality
| Plugin | Author | Compatibility |
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
@@ -180,8 +183,10 @@ Note: The following plugins have been supplied by our community and may not have
| [Nuke Containers](https://github.com/josegonzalez/dokku-nuke) | [josegonzalez][] | 0.4.0+ |
| [Open App Ports](https://github.com/josegonzalez/dokku-ports) | [josegonzalez][] | 0.3.x |
| [Proctype Filter](https://github.com/michaelshobbs/dokku-proctype-filter) | [michaelshobbs][] | 0.4.0+ |
| [robots.txt](https://notabug.org/candlewaster/dokku-robots.txt) | [candlewaster][] | 0.4.x |
| [SSH Deployment Keys](https://github.com/cedricziel/dokku-deployment-keys)<sup>3</sup> | [cedricziel][] | 0.4.0+ |
| [SSH Hostkeys](https://github.com/cedricziel/dokku-hostkeys-plugin)<sup>4</sup> | [cedricziel][] | 0.3.x |
| [Application build hook](https://github.com/fteychene/dokku-build-hook) | [fteychene][] | 0.4.0+ |
[217d00a]: https://github.com/dokku/dokku/commit/217d00a1bc47a7e24d8847617bb08a1633025fc7
@@ -216,10 +221,11 @@ Note: The following plugins have been supplied by our community and may not have
| [Rollbar](https://github.com/iloveitaly/dokku-rollbar) | [iloveitaly][] | 0.5.0+ |
| [Slack Notifications](https://github.com/ribot/dokku-slack) | [ribot][] | 0.4.0+ |
| [Tor](https://github.com/michaelshobbs/dokku-tor) | [michaelshobbs][] | 0.4.0+ |
| [User ACL](https://github.com/mlebkowski/dokku-acl) | [Maciej Łebkowski][] | 0.4.0+ |
| [User ACL](https://github.com/dokku-community/dokku-acl) | [Maciej Łebkowski][] | 0.4.0+ |
| [Webhooks](https://github.com/nickstenning/dokku-webhooks) | [nickstenning][] | 0.3.x |
| [Wkhtmltopdf](https://github.com/mbriskar/dokku-wkhtmltopdf) | [mbriskar][] | 0.4.0+ |
| [Wordpress Setup](https://github.com/dudagroup/dokku-wordpress-template) | [abossard][] | |
| [Dokku Wordpress](https://github.com/dokku-community/dokku-wordpress) | [dokku-community][] | 0.4.0+ |
| [Access](https://github.com/mainto/dokku-access) | [mainto](https://github.com/mainto) | 0.4.0+ |
### Deprecated Plugins

View File

@@ -5,12 +5,14 @@
```
domains:add <app> <domain> [<domain> ...] # Add domains to app
domains:add-global <domain> [<domain> ...] # Add global domain names
domains [<app>] # List domains
domains:clear <app> # Clear all domains for app
domains:disable <app> # Disable VHOST support
domains:enable <app> # Enable VHOST support
domains:remove <app> <domain> [<domain> ...] # Remove domains from app
domains:remove-global <domain> [<domain> ...] # Remove global domain names
domains:report [<app>] [<flag>] # Displays a domains report for one or more apps
domains:set <app> <domain> [<domain> ...] # Set domains for app
domains:set-global <domain> [<domain> ...] # Set global domain names
```
> Adding a domain before deploying an application will result in port mappings being set. This may cause issues for applications that use non-standard ports, as those will not be automatically detected. Please refer to the [proxy documentation](/dokku/advanced-usage/proxy-management/) for information as to how to reconfigure the mappings.
@@ -39,7 +41,7 @@ NEW_SUBDOMAIN=`echo $SUBDOMAIN | rev`
echo "$NEW_SUBDOMAIN.$VHOST"
```
If the `nginx-hostname` has no output, the normal hostname algorithm will be executed.
If the `nginx-hostname` plugin has no output, the normal hostname algorithm will be executed.
## Disabling VHOSTS
@@ -68,11 +70,64 @@ dokku domains:clear myapp
# remove a custom domain from app
dokku domains:remove myapp example.com
# set all custom domains for app
dokku domains:set myapp example.com example.org
```
## Displaying domains reports about an app
> New as of 0.8.1
You can get a report about the app's domains status using the `domains:report` command:
```shell
dokku domains:report
```
```
=====> node-js-app domains information
Domains app enabled: true
Domains app vhosts: ruby-sample.example.org
Domains global enabled: true
Domains global vhosts: example.org
=====> python-sample domains information
Domains app enabled: true
Domains app vhosts: ruby-sample.example.org
Domains global enabled: true
Domains global vhosts: example.org
=====> ruby-sample domains information
Domains app enabled: true
Domains app vhosts: ruby-sample.example.org
Domains global enabled: true
Domains global vhosts: example.org
```
You can run the command for a specific app also.
```shell
dokku domains:report node-js-app
```
```
=====> node-js-app domains information
Domains app enabled: true
Domains app vhosts: node-js-app.example.org
Domains global enabled: true
Domains global vhosts: example.org
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku domains:report node-js-app --domains-app-enabled
```
## 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 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).
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.
Create the file at `/etc/nginx/conf.d/00-default-vhost.conf`:
```nginx
server {
@@ -85,17 +140,10 @@ server {
}
```
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`:
Make sure to reload nginx after creating this file by running `service nginx reload`.
```nginx
# Swap both conf.d include line and the sites-enabled include line. From:
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
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).
# to the following
include /etc/nginx/sites-enabled/*;
include /etc/nginx/conf.d/*.conf;
```
The configuration file must be loaded before `/etc/nginx/conf.d/dokku.conf`, so it can not be arranged as a vhost in `/etc/nginx/sites-enabled` that is only processed afterwards.
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.

View File

@@ -7,8 +7,8 @@ Dokku supports SSL/TLS certificate inspection and CSR/Self-signed certificate ge
```
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:report [<app>] [<flag>] # Displays an ssl report for one or more apps
certs:update <app> CRT KEY # Update an SSL Endpoint on an app. Can also import from a tarball on stdin
```
@@ -29,8 +29,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 the name of your application
dokku certs:add <app> < cert-key.tar
dokku certs:add node-js-app < cert-key.tar
```
> Note: If your `.crt` file came alongside a `.ca-bundle`, you'll want to concatenate those into a single `.crt` file before adding it to the `.tar`.
@@ -51,32 +50,66 @@ Note that with the default nginx template, requests will be redirected to the `h
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 certificate using the aformentioned `dokku certs:add` command.
### Certificate information
The `certs:info` command will simply inspect the install SSL cert and print out details. NOTE: The server-wide certificate will be inspect if installed and no app-specific certificate exists.
```shell
dokku certs:info node-js-app
```
```
-----> Fetching SSL Endpoint info for node-js-app...
-----> Certificate details:
=====> Common Name(s):
=====> test.dokku.me
=====> Expires At: Aug 24 23:32:59 2016 GMT
=====> Issuer: C=US, ST=California, L=San Francisco, O=dokku.me, CN=test.dokku.me
=====> Starts At: Aug 25 23:32:59 2015 GMT
=====> Subject: C=US; ST=California; L=San Francisco; O=dokku.me; CN=test.dokku.me
=====> SSL certificate is self signed.
```
If you decide to obtain a CA signed certificate, you can import that certificate using the aforementioned `dokku certs:add` command.
### Certificate removal
The `certs:remove` command only works on app-specific certificates. It will `rm` the app-specific tls directory, rebuild the nginx configuration, and reload nginx.
### Displaying certificate reports about an app
> New as of 0.8.1
You can get a report about the apps ssl status using the `certs:report` command:
```shell
dokku certs:report
```
```
=====> node-js-sample
Ssl dir: /home/dokku/node-js-sample/tls
Ssl enabled: true
Ssl hostnames: *.node-js-sample.org node-js-sample.org
Ssl expires at: Oct 5 23:59:59 2019 GMT
Ssl issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Domain Validation Secure Server CA
Ssl starts at: Oct 5 00:00:00 2016 GMT
Ssl subject: OU=Domain Control Validated; OU=PositiveSSL Wildcard; CN=*.node-js-sample.org
Ssl verified: self signed.
=====> python-sample
Ssl dir: /home/dokku/python-sample/tls
Ssl enabled: false
Ssl hostnames:
Ssl expires at:
Ssl issuer:
Ssl starts at:
Ssl subject:
Ssl verified:
```
You can run the command for a specific app also.
```shell
dokku certs:report node-js-sample
```
```
=====> node-js-sample ssl information
Ssl dir: /home/dokku/node-js-sample/tls
Ssl enabled: true
Ssl hostnames: *.example.org example.org
Ssl expires at: Oct 5 23:59:59 2019 GMT
Ssl issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Domain Validation Secure Server CA
Ssl starts at: Oct 5 00:00:00 2016 GMT
Ssl subject: OU=Domain Control Validated; OU=PositiveSSL Wildcard; CN=*.example.org
Ssl verified: self signed.
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku certs:report node-js-sample --ssl-enabled
```
## HSTS Header
@@ -86,7 +119,7 @@ Beware that if you enable the header and a subsequent deploy of your application
## Running behind a load balancer
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.
Your application has access to the HTTP headers `X-Forwarded-Proto`, `X-Forwarded-Port` and `X-Forwarded-For`. 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 using the following [nginx custom template](/dokku/configuration/nginx/#customizing-the-nginx-configuration)

View File

@@ -6,6 +6,7 @@ Once Dokku has been configured with at least one user, applications can be deplo
```shell
# from your local machine
# SSH access to github must be enabled on this host
git clone git@github.com:heroku/ruby-rails-sample.git
```
@@ -52,6 +53,8 @@ Now you can deploy the `ruby-rails-sample` app to your Dokku server. All you hav
```shell
# from your local machine
# the remote username *must* be dokku or pushes will fail
cd ruby-rails-sample
git remote add dokku dokku@dokku.me:ruby-rails-sample
git push dokku master
```
@@ -90,6 +93,18 @@ Dokku supports deploying applications via [Heroku buildpacks](https://devcenter.
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```
An alternative is to use the `DOKKU_DEPLOY_BRANCH` application config value to specify a branch that should be deployed. The implicit default is master, and this can be modified both at the app and global level:
```shell
# on your Dokku host
# set it globally
dokku config:set --global DOKKU_DEPLOY_BRANCH=some-branch
# override for a specific app
dokku config:set ruby-rails-sample DOKKU_DEPLOY_BRANCH=some-branch
```
You can also support pushing multiple branches using the [receive-branch](/dokku/development/plugin-triggers/#receive-branch) plugin trigger in a custom plugin.
### Skipping deployment
@@ -101,6 +116,17 @@ If you only want to rebuild and tag a container, you can skip the deployment pha
dokku config:set ruby-rails-sample DOKKU_SKIP_DEPLOY=true
```
### Re-Deploying / restarting
If you need to re-deploy (or restart) your app:
```shell
# on your Dokku host
dokku ps:rebuild ruby-rails-sample
```
See the [process scaling documentation](/dokku/deployment/process-management) for more information.
### 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 `/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.
@@ -119,6 +145,8 @@ Note that if the buildpack or dockerfile build process require ssh key access fo
The name of remote repository is used as the name of application to be deployed, as for example above:
```shell
# from your local machine
# the remote username *must* be dokku or pushes will fail
git remote add dokku dokku@dokku.me:ruby-rails-sample
git push dokku master
```
@@ -131,6 +159,8 @@ remote: http://ruby-rails-sample.dokku.me
You can also specify fully qualified names, say `app.dokku.me`, as
```shell
# from your local machine
# the remote username *must* be dokku or pushes will fail
git remote add dokku dokku@dokku.me:app.dokku.me
git push dokku master
```
@@ -143,6 +173,8 @@ remote: http://app.dokku.me
This is in particular useful, then you want to deploy to root domain, as
```shell
# from your local machine
# the remote username *must* be dokku or pushes will fail
git remote add dokku dokku@dokku.me:dokku.me
git push dokku master
```

View File

@@ -3,20 +3,24 @@
> New as of 0.3.1
```
apps # List your apps
apps:clone <old-app> <new-app> # Clones an app
apps:create <app> # Create a new app
apps:destroy <app> # Permanently destroy an app
apps:list # List your apps
apps:rename <old-app> <new-app> # Rename an app
apps:report [<app>] [<flag>] # Display report about an app
```
## Usage
### Listing Applications
You can easily list all available applications using the `apps` command:
> New as of 0.8.1. Use the `apps` command for older versions.
You can easily list all available applications using the `apps:list` command:
```shell
dokku apps
dokku apps:list
```
```
@@ -28,7 +32,7 @@ python-app
Note that you can easily hide extra output from Dokku commands by using the `--quiet` flag, which makes it easier to parse on the command-line.
```shell
dokku --quiet apps
dokku --quiet apps:list
```
```
@@ -112,3 +116,72 @@ Renaming node-js-app to io-js-app... done
```
This will copy all of your app's contents into a new app directory with the name of your choice, delete your old app, then rebuild the new version of the app and deploy it. All of your config variables, including database urls, will be preserved.
### Cloning an existing app
> New as of 0.8.1
You can clone an existing app using the `apps:clone` command. Note that the application *must* have been deployed at least once, or the rename will not complete successfully:
```shell
dokku apps:clone node-js-app io-js-app
```
```
Cloning node-js-app to io-js-app... done
```
This will copy all of your app's contents into a new app directory with the name of your choice and then rebuild the new version of the app and deploy it. All of your config variables, including database urls, will be preserved.
> Warning: If you have exposed specific ports via docker-options, added generic domains, or performed anything that cannot be done against multiple applications, `apps:clone` may result in errors.
By default, Dokku will deploy this new application, though you can skip the deploy by using the `--skip-deploy` flag:
```shell
dokku apps:clone --skip-deploy node-js-app io-js-app
```
### Displaying reports about an app
> New as of 0.8.1
You can get a report about the deployed apps using the `apps:report` command:
```shell
dokku apps:report
```
```
=====> node-js-app
App dir: /home/dokku/node-js-app
Git sha: dbddc3f
App cid: 7b18489c98be
Status: running
=====> python-sample
not deployed
=====> ruby-sample
App dir: /home/dokku/ruby-sample
Git sha: a2d477c
App cid: 78a44d71012a
Status: running
```
You can run the command for a specific app also.
```shell
dokku apps:report node-js-app
```
```
=====> node-js-app
App dir: /home/dokku/node-js-app
Git sha: dbddc3f
App cid: 7b18489c98be
Status: running
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku apps:report node-js-app --git-sha
```

33
docs/deployment/logs.md Normal file
View File

@@ -0,0 +1,33 @@
# Log Management
```
logs <app> # display recent log output
```
## Usage
### Application Logs
You can easily get logs of an application using the `logs` command:
```shell
dokku logs node-js-app
```
## Behavioral modifiers
Dokku also supports certain command-line arguments that augment the `log` command's behavior.
```
-n, --num NUM # the number of lines to display
-p, --ps PS # only display logs from the given process
-t, --tail # continually stream logs
-q, --quiet # display raw logs without colors, time and names
```
You can use these modifiers as follows:
```shell
dokku logs node-js-app -t -p web
```
will show logs continually from the web process.

View File

@@ -14,12 +14,11 @@ In certain cases you may want to specify a custom buildpack. While Dokku uses he
To use a specific buildpack, you can run the following Dokku command:
```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
dokku config:set node-js-app BUILDPACK_URL=REPOSITORY_URL
# example: using a specific ruby buildpack version
dokku config:set APP BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-ruby.git#v142
dokku config:set node-js-app BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-ruby.git#v142
```
Please check the documentation for your particular buildpack as you may need to include configuration files (such as a Procfile) in your project root.
@@ -45,16 +44,14 @@ As Dokku pins all buildpacks via herokuish releases, there may be occasions wher
```shell
# using the latest nodejs buildpack
# replace APP with the name of your application
dokku config:set APP BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs
dokku config:set node-js-app BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs
```
You may also wish to use a **specific** version of a buildpack, which is also simple
```shell
# using v87 of the nodejs buildpack
# replace APP with the name of your application
dokku config:set APP BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs#v87
dokku config:set node-js-app BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs#v87
```
## Specifying commands via Procfile

View File

@@ -34,7 +34,7 @@ ENTRYPOINT ["node"]
You can do:
```shell
dokku config:set APP DOKKU_DOCKERFILE_START_CMD="--harmony server.js"
dokku config:set node-js-app DOKKU_DOCKERFILE_START_CMD="--harmony server.js"
```
To tell docker what to run.

View File

@@ -29,7 +29,7 @@ dokku run my-app console
If you want to remove the container after a command has started, you can run the following command:
```shell
# keep `run` containers around
# don't keep `run` containers around
dokku config:set --global DOKKU_RM_CONTAINER=1
# revert the above setting and keep containers around

View File

@@ -4,18 +4,19 @@
```
ps <app> # List processes running in app container(s)
ps:rebuildall # Rebuild all apps from source
ps:rebuild <app> # Rebuild an app from source
ps:restartall # Restart all deployed app containers
ps:rebuildall # Rebuild all apps from source
ps:report [<app>] [<flag>] # Displays a process report for one or more apps
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:restart-policy <app> # Shows the restart-policy for an app
ps:restartall # Restart all deployed app containers
ps:scale <app> <proc>=<count> [<proc>=<count>] # Get/Set how many instances of a given process to run
ps:set-restart-policy <app> <policy> # Sets app restart-policy
ps:start <app> # Start app container(s)
ps:stop <app> # Stop app container(s)
ps:restart-policy <app> # Shows the restart-policy for an app
ps:set-restart-policy <app> <policy> # Sets app restart-policy
```
By default, Dokku will only start a single `web` process - if defined - though process scaling can be managed by the `ps` plugin or via a custom `DOKKU_SCALE` file.
By default, Dokku will only start a single `web` process - if defined - though process scaling can be managed by the `ps` plugin or [via a custom `DOKKU_SCALE` file](/dokku/deployment/process-management/#manually-managing-process-scaling).
> The `web` proctype is the only proctype that will invoke custom checks as defined by a CHECKS file. It is also the only process type that will be launched in a container that is either proxied via nginx or bound to an external port.
@@ -31,7 +32,7 @@ dokku ps node-js-app
### Rebuilding applications
There are some Dokku commands which will not automatically rebuild an application's environment, or which can be told to skip a rebuild. For instance, you may wish to run mulitple `config:set` commands without a restart so as to speed up configuration. In these cases, you can ultimately trigger an application rebuild using `ps:rebuild`
There are some Dokku commands which will not automatically rebuild an application's environment, or which can be told to skip a rebuild. For instance, you may wish to run multiple `config:set` commands without a restart so as to speed up configuration. In these cases, you can ultimately trigger an application rebuild using `ps:rebuild`
```shell
dokku ps:rebuild node-js-app
@@ -92,7 +93,7 @@ dokku ps:scale node-js-app
### Stopping applications
Deployed applications can be stopped using the `ps:stop` command. This turns all running containers for an application, and will result in a `502 Bad Gateway` reponse for the default nginx proxy implementation.
Deployed applications can be stopped using the `ps:stop` command. This turns all running containers for an application, and will result in a `502 Bad Gateway` response for the default nginx proxy implementation.
```shell
dokku ps:stop node-js-app
@@ -178,7 +179,7 @@ Restart policies have no bearing on server reboot, and Dokku will always attempt
## Manually managing process scaling
You can optionally create a `DOKKU_SCALE` file in the root of your repository. Dokku expects this file to contain one line for every process defined in your Procfile.
You can optionally _commit_ a `DOKKU_SCALE` file to the root of your repository - *not* to the /home/dokku/APP directory. Dokku expects this file to contain one line for every process defined in your Procfile.
Example:
@@ -187,4 +188,6 @@ web=1
worker=2
```
If it is not committed to the repository, the `DOKKU_SCALE` file will otherwise be automatically generated based on your `ps:scale` settings.
> *NOTE*: Dokku will always use the DOKKU_SCALE file that ships with the repo to override any local settings.

View File

@@ -12,7 +12,7 @@ When pushing to Dokku, ssh key based authorization is the preferred authenticati
Users in Dokku are managed via the `~/dokku/.ssh/authorized_keys` file. It is **highly** recommended that you follow the steps below to manage users on a Dokku server.
> Users of older versions of Dokku should use the `sshcommand` binary to manage keys. Please refer to the Dokku documentation for your version for more details.
> Users of older versions of Dokku may use the `sshcommand` binary to manage keys instead of the `ssh-keys` plugin. Please refer to the Dokku documentation for your version for more details.
## Usage
@@ -73,3 +73,16 @@ dokku ssh-keys:remove KEY_NAME
## Scoping commands to specific users
Keys are given unique names, which can be used in conjunction with the [user-auth](/dokku/development/plugin-triggers/#user-auth) plugin trigger to handle command authorization. Please see the documentation on that trigger for more information.
## Granting other Unix user accounts Dokku access
Any Unix user account which belongs to the 'sudo' Unix group can run Dokku. However, you may want to give them Dokku access but not full sudo privileges.
To allow other Unix user accounts to be able to run Dokku commands, without giving them full sudo access, modify your sudoers configuration.
Use `visudo /etc/sudoers.d/dokku-users`, or `visudo /etc/sudoers` to add the following line:
```
%dokku ALL=(ALL:ALL) NOPASSWD:SETENV: /usr/bin/dokku
```

View File

@@ -6,22 +6,37 @@
checks <app> Show zero-downtime status
checks:disable <app> [process-type(s)] Disable zero-downtime deployment for all processes (or comma-separated process-type list) ***WARNING: this will cause downtime during deployments***
checks:enable <app> [process-type(s)] Enable zero-downtime deployment for all processes (or comma-separated process-type list)
checks:report [<app>] [<flag>] Displays a checks report for one or more apps
checks:run <app> [process-type(s)] Runs zero-downtime checks for all processes (or comma-separated process-type list)
checks:skip <app> [process-type(s)] Skip zero-downtime checks for all processes (or comma-separated process-type list)
```
Following a deploy, Dokku will wait `10` seconds before routing traffic to the new container to give your application time to boot up. If the application is not running after this time, then the deploy is failed and your old container will continue serving traffic. You can modify this value globally or on a per-application basis:
```shell
dokku config:set --global DOKKU_DEFAULT_CHECKS_WAIT=30
dokku config:set node-js-app DOKKU_DEFAULT_CHECKS_WAIT=30
```
You can also choose to skip checks or disable zero-downtime completely on a per-application/per-process basis
> Note that `checks:disable` will now (as of 0.6.0) cause downtime for that process-type during deployments.
By default, Dokku will wait `10` seconds after starting each container before assuming it is up and proceeding with the deploy. Once this has occurred for all containers started by for an application, traffic will be switched to point to your new containers. Dokku will also wait a further `60` seconds _after_ the deploy is complete before terminating old containers in order to give time for long running connections to terminate. In either case, you may have more than one container running for a given application.
You may both create user-defined checks for web processes using a `CHECKS` file, as well as customize any and all parts of this experience using the checks plugin.
## Configuring Check Settings using the `config` plugin
There are certain settings that can be configured via environment variables:
- `DOKKU_DEFAULT_CHECKS_WAIT`: (default: `10`) If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running.
- `DOKKU_DOCKER_STOP_TIMEOUT`: (default: `10`) Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands _also_ respect this value. If not specified, the docker defaults for the [docker stop command](https://docs.docker.com/engine/reference/commandline/stop/) will be used.
- `DOKKU_WAIT_TO_RETIRE`: (default: `60`) After a successful deploy, the grace period given to old containers before they are stopped/terminated. This is useful for ensuring completion of long-running http connections.
The following settings may also be specified in the `CHECKS` file, though are available as environment variables in order to ease application reuse.
- `DOKKU_CHECKS_WAIT`: (default: `5`) Wait this many seconds for the container to start before running checks.
- `DOKKU_CHECKS_TIMEOUT`: (default: `30`) Wait this many seconds for each response before marking it as a failure.
- `DOKKU_CHECKS_ATTEMPTS`: (default: `5`) Number of retries for to run for a specific check before marking it as a failure
## Skipping and Disabling Checks
> Note that `checks:disable` will now (as of 0.6.0) cause downtime for that process-type during deployments. Previously, it acted as `checks:skip` currently does.
You can choose to skip checks completely on a per-application/per-process basis. Skipping checks will avoid the default 10 second waiting period entirely, as well as any other user-defined checks.
```shell
# process type specification is optional
dokku checks:skip node-js-app worker,web
```
@@ -33,8 +48,7 @@ dokku checks:skip node-js-app worker,web
DOKKU_CHECKS_SKIPPED: worker,web
```
Additionally, any given process can only be configured to disable zero-downtime. example:
Zero-downtime checks can also be disabled completely. This will stop old containers **before** new ones start, which may result in broken connections and downtime if your application fails to boot properly.
```shell
dokku checks:disable node-js-app worker
@@ -48,14 +62,107 @@ dokku checks:disable node-js-app worker
DOKKU_CHECKS_SKIPPED: web
```
Dokku will wait `60` seconds before stopping the old container so that existing connections are given a chance to complete. You can modify this value globally or on a per-application basis:
### Displaying checks reports about an app
> New as of 0.8.1
You can get a report about the app's checks status using the `checks:report` command:
```shell
dokku config:set --global DOKKU_WAIT_TO_RETIRE=120
dokku config:set <app> DOKKU_WAIT_TO_RETIRE=120
dokku checks:report
```
> 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.
```
=====> search checks information
Checks disabled list: none
Checks skipped list: none
=====> python-sample checks information
Checks disabled list: none
Checks skipped list: none
=====> ruby-sample checks information
Checks disabled list: _all_
Checks skipped list: none
```
You can run the command for a specific app also.
```shell
dokku checks:report node-js-sample
```
```
=====> node-js-sample checks information
Checks disabled list: none
Checks skipped list: none
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku checks:report node-js-sample --checks-disabled-list
```
## Customizing Checks
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.
Checks are run against the detected `web` process from your application's `Procfile`. For non-web processes, Dokku will fallback to the aforementioned process uptime check.
To specify checks, add a `CHECKS` file to the root of your project directory. The `CHECKS` file should be plain text and may contain:
- Check instructions
- Settings (NAME=VALUE)
- Comments (lines starting with #)
- Empty lines
> For dockerfile-based deploys, the file *must* be in `/app/CHECKS` within the container. `/app` is used by default as the root container directory for buildpack-based deploys.
### Check Instructions
The format of a check instruction is a path or relative URL, optionally followed by the expected content:
```
/about Our Amazing Team
```
The `CHECKS` file can contain multiple checks:
```
/ 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:
```
//admin.example.com Admin Dashboard
//static.example.com/logo.png
```
You can also specify the protocol to explicitly check HTTPS requests:
```
https://admin.example.com Admin Dashboard
https://static.example.com/logo.png
```
While a full url may be used in order to invoke checks, if you are using relative urls, the port *must* be omitted.
### Check Settings
The default behavior is to wait for `5` seconds before running the checks, to timeout the checks after `30` seconds, and to attempt the checks `5` times. If the checks fail `5` times, the deployment is considered failed and the old container will continue serving traffic.
You can change the default behavior by setting `WAIT`, `TIMEOUT`, and `ATTEMPTS` to different values in the `CHECKS` file:
```
WAIT=30 # Wait 1/2 minute
TIMEOUT=60 # Timeout after a minute
ATTEMPTS=10 # Attempt checks 10 times
/ My Amazing App
```
## Manually Invoking Checks
@@ -92,7 +199,7 @@ dokku checks:run APP
Checks can be scoped to a particular process type:
```shell
dokku checks:run APP worker
dokku checks:run node-js-app worker
```
```
@@ -108,7 +215,7 @@ dokku checks:run APP worker
An app process id may also be specified:
```shell
dokku checks:run APP web.2
dokku checks:run node-js-app web.2
```
```
@@ -124,7 +231,7 @@ dokku checks:run APP web.2
Non-existent process types will result in an error:
```shell
dokku checks:run APP non-existent
dokku checks:run node-js-app non-existent
```
```
@@ -135,7 +242,7 @@ Invalid process type specified (APP.non-existent)
Non-existent process ids will *also* result in an error
```shell
dokku checks:run APP web.3
dokku checks:run node-js-app web.3
```
```
@@ -143,88 +250,6 @@ dokku checks:run APP web.3
Invalid container id specified (APP.web.3)
```
## Customizing Checks
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.
Checks are run against the detected `web` process from your application's `Procfile`. For non-web processes, Dokku will fallback to the aforementioned process uptime check.
To specify checks, add a `CHECKS` file to the root of your project directory. The `CHECKS` file should be plain text and may contain:
* Check instructions
* Settings (NAME=VALUE)
* Comments (lines starting with #)
* Empty lines
> For dockerfile-based deploys, the file *must* be in `/app/CHECKS` within the container. `/app` is used by default as the root container directory for buildpack-based deploys.
### Check Instructions
The format of a check instruction is a path or relative URL, optionally followed by the expected content:
```
/about Our Amazing Team
```
The `CHECKS` file can contain multiple checks:
```
/ 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:
```
//admin.example.com Admin Dashboard
//static.example.com/logo.png
```
You can also specify the protocol to explicitly check HTTPS requests:
```
https://admin.example.com Admin Dashboard
https://static.example.com/logo.png
```
### Check Settings
The default behavior is to wait for `5` seconds before running the checks, to timeout the checks after `30` seconds, and to attempt the checks `5` times. If the checks fail `5` times, the deployment is considered failed and the old container will continue serving traffic.
You can change the default behavior by setting `WAIT`, `TIMEOUT`, and `ATTEMPTS` to different values in the `CHECKS` file:
```
WAIT=30 # Wait 1/2 minute
TIMEOUT=60 # Timeout after a minute
ATTEMPTS=10 # Attempt checks 10 times
/ My Amazing App
```
You can also override the default `WAIT`, `TIMEOUT`, and `ATTEMPTS` variables for the global Dokku installation:
```shell
dokku config:set --global DOKKU_CHECKS_WAIT=30
dokku config:set --global DOKKU_CHECKS_TIMEOUT=60
dokku config:set --global DOKKU_CHECKS_ATTEMPTS=10
```
If your application runs multiple processes (a background worker configured in your `Procfile`, for example) and you have checks to ensure that your web application has booted up, you may want to disable the default check wait time for that application to avoid the `10` second wait per non-web process:
```shell
dokku config:set <app> DOKKU_DEFAULT_CHECKS_WAIT=0
```
### Configuring docker stop timeout
[By default](https://docs.docker.com/engine/reference/commandline/stop/), docker will wait 10 seconds from the time the `stop` command is passed to a container before it attempts to kill said container. This timeout can be configured on a per-app basis in Dokku by setting the `DOKKU_DOCKER_STOP_TIMEOUT` configuration variable. This timeout applies to normal zero-downtime deployments as well as the `ps:stop` and `apps:destroy` commands.
```shell
dokku config:set $APP DOKKU_DOCKER_STOP_TIMEOUT=20
```
## Example: Successful Rails Deployment
In this example, a Rails application 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. `WAIT` is set to `10` because our application takes a while to boot up. `ATTEMPTS` is set to `6`, but the third attempt succeeds.

View File

@@ -30,7 +30,7 @@ hello_main_cmd() {
set -- $cmd $@
##
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
verify_app_name "$2"
local APP="$2";
@@ -58,7 +58,7 @@ hello_world_cmd() {
set -- $cmd $@
##
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
verify_app_name "$2"
local APP="$2";
@@ -150,8 +150,8 @@ A few notes:
- As some plugins require access to set app config settings and do not want/require the default Heroku-style behavior of a restart, we have the following "internal" commands that provide this functionality :
```shell
dokku config:set --no-restart APP KEY1=VALUE1 [KEY2=VALUE2 ...]
dokku config:unset --no-restart APP KEY1 [KEY2 ...]
dokku config:set --no-restart node-js-app KEY1=VALUE1 [KEY2=VALUE2 ...]
dokku config:unset --no-restart node-js-app KEY1 [KEY2 ...]
```
- From time to time you may want to allow other plugins access to (some of) your plugin's functionality. You can expose this by including a `functions` file in your plugin for others to source. Consider all functions in that file to be publicly accessible by other plugins. Any functions not wished to be made "public" should reside within your plugin trigger or commands files.
- As of 0.4.0, we allow image tagging and deployment of said tagged images. Therefore, hard-coding of `$IMAGE` as `dokku/$APP` is no longer sufficient. Instead, for non `pre/post-build-*` plugins, use `get_running_image_tag()` & `get_app_image_name()` as sourced from common/functions. See the [plugin triggers](/dokku/development/plugin-triggers) doc for examples.

View File

@@ -27,7 +27,7 @@ There are a number of plugin-related triggers. These can be optionally implement
The following plugin triggers describe those available to a Dokku installation. As well, there is an example for each trigger that you can use as templates for your own plugin development.
> The example plugin trigger code is not guaranteed to be implemented as in within dokkku, and are merely simplified examples. Please look at the Dokku source for larger, more in-depth examples.
> The example plugin trigger code is not guaranteed to be implemented as in within dokku, and are merely simplified examples. Please look at the Dokku source for larger, more in-depth examples.
### `post-config-update`
@@ -134,6 +134,24 @@ help_content
esac
```
### `core-post-deploy`
> To avoid issues with community plugins, this plugin trigger should be used *only* for core plugins. Please avoid using this trigger in your own plugins.
- Description: Allows running of commands after an application's processes have been scaled up, but before old containers are torn down. Dokku core currently uses this to switch traffic on nginx.
- Invoked by: `dokku deploy`
- Arguments: `$APP $INTERNAL_PORT $INTERNAL_IP_ADDRESS $IMAGE_TAG`
- Example:
```shell
#!/usr/bin/env bash
# Notify an external service that a successful deploy has occurred.
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
curl "http://httpstat.us/200"
```
### `dependencies`
- Description: Used to install system-level dependencies. Invoked by `plugin:install-dependencies`.
@@ -430,7 +448,9 @@ dokku postgres:destroy $APP
### `post-deploy`
- Description: Allows running of commands after an application's processes have been scaled up, but before old containers are torn down. Dokku core currently uses this to switch traffic on nginx.
> Please see [core-post-deploy](#core-post-deploy) if contributing a core plugin with the `post-deploy` hook.
- Description: Allows running of commands after an application's processes have been scaled up, but before old containers are torn down. Dokku calls this _after_ `core-post-deploy`. Deployment Tasks are also invoked by this plugin trigger.
- Invoked by: `dokku deploy`
- Arguments: `$APP $INTERNAL_PORT $INTERNAL_IP_ADDRESS $IMAGE_TAG`
- Example:
@@ -447,7 +467,7 @@ curl "http://httpstat.us/200"
### `post-domains-update`
- Description: Allows you to run commands once the domain for an application has been updated. It also sends in the command that has been used. This can be "add", "clear" or "remove". The third argument will be the optional list of domains
- Invoked by: `dokku domains:add`, `dokku domains:clear`, `dokku domains:remove`
- Invoked by: `dokku domains:add`, `dokku domains:clear`, `dokku domains:remove`, `dokku domains:set`
- Arguments: `$APP` `action name` `domains`
- Example:
@@ -461,6 +481,28 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
sudo service haproxy reload
```
### `post-extract`
- Description: Allows you to modify the contents of an application *after* it has been extracted from git/tarball but *before* the image source type is detected.
- Invoked by: `dokku tar:in`, `dokku tar:from` and the `receive-app` plugin trigger
- Arguments: `$APP` `$TMP_WORK_DIR` `$REV`
- Example:
```shell
#!/usr/bin/env bash
# Adds a clock process to an app's Procfile
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; verify_app_name "$APP"
TMP_WORK_DIR="$2"
REV="$3" # optional, may not be sent for tar-based builds
pushd "$TMP_WORK_DIR" > /dev/null
touch Procfile
echo "clock: some-command" >> Procfile
```
### `post-proxy-ports-update`
- Description: Allows you to run commands once the proxy port mappings for an application have been updated. It also sends the invoking command. This can be "add", "clear" or "remove".
@@ -846,6 +888,26 @@ APP="$1"; IMAGE_TAG="$2"
some code to remove a docker hub tag because it's not implemented in the CLI....
```
### `uninstall`
- Description: Used to cleanup after itself.
- Invoked by: `dokku plugin:uninstall`
- Arguments: `$PLUGIN`
- Example:
```shell
#!/usr/bin/env bash
# Cleanup up extra containers created
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
PLUGIN="$1"
[[ "$PLUGIN" = "my-plugin" ]] && docker rmi -f "${PLUGIN_IMAGE_DEPENDENCY}"
```
> To avoid uninstalling other plugins make sure to check the plugin name like shown in the example.
### `update`
- Description: Can be used to run plugin updates on a regular interval. You can schedule the invoker in a cron-task to ensure your system gets regular updates.

View File

@@ -20,7 +20,7 @@ To propose a release, the following tasks need to be performed:
- The versioned links should be updated or added to the `docs/assets/versions.json` 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`
- Debian and RPM packages *must* be created via `vagrant up build`
- The packages should be uploaded to packagecloud.io
- All changes are pushed to master and the tag should be turned into a release which will contain the changelog.
- ArchLinux package description *must* be updated via `vagrant up build-arch` (needs to be done after the tag is pushed to GitHub, because it is based on that)
@@ -37,9 +37,9 @@ git tag v0.9.9
At the moment, tags need not be signed, though that may change in the future.
## Debian Packages
## Debian and RPM packages
The `build` target in the Dokku `Vagrantfile` creates debian packages for Dokku at a point in time. The version will be based upon the latest local tag - you may create your own, internal tags/releases if that is so desired.
The `build` target in the Dokku `Vagrantfile` creates debian and rpm packages for Dokku at a point in time. The version will be based upon the latest local tag - you may create your own, internal tags/releases if that is so desired.
Debian package information is held in the `debian` directory of the Dokku project.
@@ -51,6 +51,7 @@ git tag v0.9.9
vagrant up build
export PACKAGECLOUD_TOKEN=SOME_TOKEN
package_cloud push dokku/dokku/ubuntu/trusty dokku_0.9.9_amd64.deb
package_cloud push dokku/dokku/el/7 dokku-0.9.9-1.x86_64.rpm
```
If new versions of other packages were created, these should also be pushed at this time.
@@ -66,7 +67,7 @@ The workflow looks like this:
```shell
# having dokku-arch in ../dokku-arch
vagrant up build-arch
# wait for "==> build-arch: ==> Finished making: dokku 0.7.2-2 (Mon Feb 22 23:20:37 CET 2016)"
# wait for "==> build-arch: ==> Finished making: dokku 0.8.2-2 (Mon Feb 22 23:20:37 CET 2016)"
cd ../dokku-arch
git add PKGBUILD .SRCINFO
git commit -m 'Update to dokku 0.9.9'

View File

@@ -4,7 +4,7 @@ You can always install Dokku straight from the latest - potentially unstable - m
```shell
# using a branch results in installing from source
wget https://raw.githubusercontent.com/dokku/dokku/master/bootstrap.sh
wget https://raw.githubusercontent.com/dokku/dokku/master/bootstrap.sh;
sudo DOKKU_BRANCH=master bash bootstrap.sh
```
@@ -29,7 +29,7 @@ sudo SSHCOMMAND_URL=https://raw.githubusercontent.com/yourusername/sshcommand/ma
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.githubusercontent.com/dokku/dokku/master/bootstrap.sh
wget https://raw.githubusercontent.com/dokku/dokku/master/bootstrap.sh;
chmod +x bootstrap.sh
sudo DOKKU_REPO=https://github.com/yourusername/dokku.git DOKKU_BRANCH=master ./bootstrap.sh
```
@@ -52,7 +52,7 @@ Once Dokku is installed, if you are not using the web-installer, you'll want to
Set up a domain and a wildcard domain pointing to that host. Make sure `/home/dokku/VHOST` is set to this domain. By default it's set to whatever hostname the host has. This file is only created if the hostname can be resolved by dig (`dig +short $(hostname -f)`). Otherwise you have to create the file manually and set it to your preferred domain. If this file still is not present when you push your app, Dokku will publish the app with a port number (i.e. `http://example.com:49154` - note the missing subdomain).
Follow the [user management documentation](/dokku/deployment/user-management/) in order to add users to dokku.
Follow the [user management documentation](/dokku/deployment/user-management/) in order to add users to Dokku, or to give other Unix accounts access to Dokku.
That's it!

View File

@@ -5,3 +5,7 @@ On Digital Ocean, there is a pre-made image that can be run for Dokku. You can c
When choosing your Droplet configuration, please disable IPv6 on the droplet. There are known issues with IPv6 on Digital Ocean and Docker, and many have been reported to the Dokku issue tracker.
If you would like to run Dokku on an IPv6 Digital Ocean Droplet, please consult [this guide](https://jeffloughridge.wordpress.com/2015/01/17/native-ipv6-functionality-in-docker/) for modifying Docker to run under the Digital Ocean IPv6 configuration.
Once Dokku is installed, you can then proceed to the ip address or domain name associated with your server to complete the web-based installation.
If you wish for a more unattended installation method, see [these](http://dokku.viewdocs.io/dokku/getting-started/install/debian/#unattended-installation) docs.

View File

@@ -4,7 +4,7 @@ Cloud-init script can be used to automate installation of Dokku on
Dreamhost (or any other OpenStack-compatible cloud with minimal
changes).
A new server can be created on DreamHost Cloud from the command line
A new server instance can be created on DreamHost Cloud from the command line
using openstack client or from the web UI and with the same command
use a cloud-init script to install Dokku. Install the [openstack
cli](https://help.dreamhost.com/hc/en-us/articles/216185658-How-to-Install-the-OpenStack-command-line-clients),
@@ -18,18 +18,18 @@ source openrc.sh # Set the environment variables for DreamHost Cloud
```
This allows openstack client to connect to DreamHost API endpoints.
The command below creates a new server named `my-dokku-instance` based
on Ubuntu 14.04, with 2GB RAM and 1CPU (the flavor called
`semisonic`), opening network port access to http and ssh (the
The command below creates a new server instance named `my-dokku-instance`
based on Ubuntu 14.04, with 2GB RAM and 1CPU (the flavor called
`supersonic`), opening network port access to http and ssh (the
`default` security group), and the name of the chosen SSH key. This
key will be automatically added to the new server in the
`authorized_keys` for the default SSH user (`dhc-user`), and it will
`authorized_keys` for the default SSH user (`ubuntu`), and it will
be reused by Dokku.
```sh
openstack server create \
--image Ubuntu-14.04 \
--flavor gp1.semisonic \
--flavor gp1.supersonic \
--security-group default \
--key-name $YOUR_SSH_KEYNAME \
--user-data dokku-cloudinit.sh \
@@ -178,8 +178,20 @@ debconf_selections: |
# set the domain name of the new Dokku server
dokku dokku/hostname string $YOUR_FULL_QUALIFIED_DOMAIN
# this copies over the public SSH key assigned to the server
dokku dokku/key_file string /home/dhc-user/.ssh/authorized_keys
dokku dokku/key_file string /home/ubuntu/.ssh/authorized_keys
packages:
- dokku
```
Shortly after running the create command you will get a confirmation that the
instance has been created, and after about a minute it should be ready to login.
Check the IP of the instance through the web UI or by running:
```sh
nova list
```
SSH with the `ubuntu` username and the public key previously added.
Keep in mind that if you logged in quick enough dokku might still be installing
in the background, and not be ready. The installation takes a few minutes.

View File

@@ -1,41 +1,28 @@
# Installing on Linode
When installing Dokku on a Linode server, you'll likely see an error during Docker installation:
## Enable AUFS Storage Driver
When installing Dokku on a newly-created Linode server, you'll likely see an error during Docker installation:
> 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.
After 10 seconds, the installation will continue as normal.
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.
This warning is the result of Linode using its own kernel, which does not support AUFS, instead of using the kernel supplied by Debian/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.
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.
To avoid this error message and use AUFS, follow the steps below to select the GRUB 2 kernel.
## Preparing your Linode for AUFS
__Warning__: These steps will delete *everything* on your Linode.
### Select the GRUB 2 kernel instead of the default Linode kernel:
1. Open your server's dashboard in the [Linode Manager](https://manager.linode.com/).
2. Make sure your Linode is [using KVM](https://www.linode.com/docs/platform/kvm#how-to-enable-kvm), not Xen, for virtualization.
3. In the "Rebuild" tab, select "Ubuntu 14.04 LTS", set a root password, and rebuild.
4. Once your Linode has been created, click "Boot" and wait for it to complete.
5. SSH into your Linode as root and run the following commands:
```shell
apt-get update
apt-get -qq upgrade
apt-get install linux-image-virtual linux-image-extra-virtual
```
6. When prompted, install Grub onto the first hard drive.
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.
1. Login to your [Linode Manager](http://manager.linode.com), open the `Dashboard` associated with your new server.
2. Click `Edit` for the `Configuration Profile`. You should now be on the `Edit Configuration Profile` page.
3. Scroll down to `Boot Settings` > `Kernel menu`. Change the "Kernel" option to "GRUB 2" and save your changes.
4. If you have already pushed the `Boot` button and your server is running, you will need to reboot it before continuing. Otherwise, you can now push the `Boot` button to start your server and proceed with the normal Dokku installation.
Once your server comes back online, you'll be running Ubuntu's default kernel. You can now follow Dokku's [normal installation instructions](/dokku/getting-started/installation/) and `bootstrap.sh` will take care of everything else.
### Verify that you are using AUFS:
Once you have fully installed Dokku and rebooted your server, you can verify that AUFS is being used with the terminal command: `docker info`. If AUFS is being used, you should see `Storage Driver: aufs` in the output.

View File

@@ -0,0 +1,22 @@
# RPM Package Installation Notes
> New as of 0.8.0 *(experimental)*
>**Warning:** Web installer is not available on CentOS. You will need to configure [SSH keys](/dokku/deployment/user-management/#adding-ssh-keys) and [virtual hosts](/dokku/configuration/domains/#customizing-hostnames) using dokku command line interface.
Dokku defaults to being installed via RPM package on CentOS 7. While certain hosts may require extra work to get running, you may optionally wish to automate the installation of Dokku without the use of our `bootstrap.sh` bash script. The following are the steps run by said script:
```shell
# install docker
curl -fsSL https://get.docker.com/ | sh
# install epel for nginx packages to be available
sudo yum install -y epel-release
# install dokku
curl -s https://packagecloud.io/install/repositories/dokku/dokku/script.rpm.sh | sudo bash
sudo yum install -y herokuish dokku
sudo dokku plugin:install-dependencies --core
```
The [devicemapper](https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/) is the default Docker storage driver on CentOS 7 and defaults to a configuration mode known as `loop-lvm`. This mode is designed to work out-of-the-box with no additional configuration. However, production deployments should not run under `loop-lvm` mode. The preferred configuration for production deployments is [`direct-lvm`](https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#/configure-direct-lvm-mode-for-production).

View File

@@ -21,13 +21,15 @@
cd path/to/dokku
vagrant up
```
- Setup SSH Config in `~/.ssh/config`. The port listed here is usually correct, though you may want to verify that it is the same as the one listed in the output of `vagrant ssh-config dokku`
- Setup SSH Config in `~/.ssh/config`.
```ini
Host dokku.me
Port 22
```
> For users that have customized the IP address of their VM - either in a custom `Vagrantfile` or via the `DOKKU_IP` environment variable - and are not using `10.0.0.2` for the Vagrant IP, you'll need to instead use the output of `vagrant ssh-config dokku` for your ~/.ssh/config entry.
- Copy your SSH key via `cat ~/.ssh/id_rsa.pub | pbcopy` and paste it into the dokku-installer at http://dokku.me . Change the `Hostname` field on the Dokku Setup screen to your domain and then check the box that says `Use virtualhost naming`. Then click *Finish Setup* to install your key. You'll be directed to application deployment instructions from here.
Please note, the `dokku.me` domain is setup to point to `10.0.0.2` along with all subdomains (ie yourapp.dokku.me). If you change the `DOKKU_IP` in your vagrant setup you'll need to update your `/etc/hosts` file to point your reconfigured ip address.

View File

@@ -6,12 +6,12 @@ Dokku is an extensible, open source Platform as a Service that runs on a single
To start using Dokku, you'll need a system that meets the following minimum requirements:
- A fresh installation of [Ubuntu 14.04 x64](http://www.ubuntu.com/download/) with the FQDN set <sup>[1]</sup>
- A fresh installation of [Ubuntu 16.04 x64](https://www.ubuntu.com/download), [Ubuntu 14.04 x64](https://www.ubuntu.com/download), [Debian 8.2 x64](https://www.debian.org/distrib/) or [CentOS 7 x64](https://www.centos.org/download/) *(experimental)* with the FQDN set <sup>[1]</sup>
- At least `1GB` of system memory <sup>[2]</sup>
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.
Dokku is designed for usage on a fresh VM installation, and should install all necessary dependencies if installing via the bootstrap method.
### Installing the latest stable version
@@ -21,8 +21,8 @@ To install the latest stable version of dokku, you can run the following shell c
```shell
# for debian systems, installs Dokku via apt-get
wget https://raw.githubusercontent.com/dokku/dokku/v0.7.2/bootstrap.sh
sudo DOKKU_TAG=v0.7.2 bash bootstrap.sh
wget https://raw.githubusercontent.com/dokku/dokku/v0.8.2/bootstrap.sh;
sudo DOKKU_TAG=v0.8.2 bash bootstrap.sh
```
The installation process takes about 5-10 minutes, depending upon internet connection speed.
@@ -31,7 +31,9 @@ The installation process takes about 5-10 minutes, depending upon internet conne
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.
*If you don't complete setup via the web installer (even if you set up SSH keys and virtual hosts otherwise) your Dokku installation will remain vulnerable to anyone finding the setup page and inserting their key.*
>**Warning:** If you don't complete setup via the web installer (even if you set up SSH keys and virtual hosts otherwise) your Dokku installation will remain vulnerable to anyone finding the setup page and inserting their key.
>**Warning:** Web installer is not available on CentOS and Arch Linux. You will need to configure [SSH keys](/dokku/deployment/user-management/#adding-ssh-keys) and [virtual hosts](/dokku/configuration/domains/#customizing-hostnames) using dokku command line interface.
#### 3. Deploy your first application
Once you save your settings, the web admin will self-terminate and you should be able to run or deploy to the Dokku installation.
@@ -48,6 +50,7 @@ For various reasons, certain hosting providers may have other steps that should
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](/dokku/getting-started/install/debian/)
- [RPM Package Installation Notes](/dokku/getting-started/install/rpm/)
- [Vagrant Installation Notes](/dokku/getting-started/install/vagrant/)
- [Advanced Install Customization](/dokku/getting-started/advanced-installation/)

View File

@@ -154,3 +154,44 @@ dokku config:set --global CURL_CONNECT_TIMEOUT=30
```
Please see https://github.com/dokku/dokku/issues/509
Another reason for this error (although it may respond immediately ruling out a timeout issue) may be because you've set the config setting `SSL_CERT_FILE`. Using a config setting with this key interferes with the buildpack's ability to download it's dependencies, so you must rename the config setting to something else, e.g. `MY_APP_SSL_CERT_FILE`.
***
__Symptom:__ Build fails with `Killed` message.
__Solution:__
This generally occurs when the server runs out of memory. You can either add more ram to your server or setup swap space. The follow script will create 2gb of swap space.
```shell
sudo install -o root -g root -m 0600 /dev/null /swapfile
dd if=/dev/zero of=/swapfile bs=1k count=2048k
mkswap /swapfile
swapon /swapfile
echo "/swapfile swap swap auto 0 0" | sudo tee -a /etc/fstab
sudo sysctl -w vm.swappiness=10
echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
```
***
__Symptom:__ I successfully deployed my application with no deployment errors but I'm receiving Connection Timeout when attempting to access the application.
__Solution:__
This can occur if Dokku is running on a system with a firewall like ufw enabled (some OS versions like Ubuntu 16.04 have this enabled by default). You can check if this is your case by running the following script:
```shell
sudo ufw status
```
If the previous script returned `Status: active` and a list of ports, ufw is enabled and is probably the cause of the symptom described above. To disable it, run:
```shell
sudo ufw disable
```
***

View File

@@ -25,8 +25,8 @@ If Dokku was installed via `apt-get install dokku` or `bootstrap.sh` (most commo
```shell
sudo apt-get update
dokku apps
dokku ps:stop <app> # repeat to shut down each running app
sudo apt-get install -qq -y dokku herokuish
dokku ps:stop APP # repeat to shut down each running app
sudo apt-get install -qq -y dokku herokuish sshcommand plugn
dokku ps:rebuildall # rebuilds all applications
```
@@ -46,7 +46,7 @@ If you installed Dokku from source (less common), upgrade with:
```shell
dokku apps
dokku ps:stop <app> # repeat to shut down each running app
dokku ps:stop APP # repeat to shut down each running app
cd ~/dokku
git pull --tags origin master

View File

@@ -7,33 +7,33 @@
<!-- 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.7.2" rel="stylesheet" type="text/css">
<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/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/favicon.ico">
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/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/dokku/dokku/v0.7.2/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/browserconfig.xml">
<meta name="msapplication-TileImage" content="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.rawgit.com/dokku/dokku/v0.8.2/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.2/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/style.css" rel="stylesheet">
<link href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/style.css" rel="stylesheet">
<!-- <link href="/dokku/docs/assets/style.css" rel="stylesheet"> -->
<style>
</style>
@@ -98,12 +98,12 @@
<p class="line">
<span class="path"></span>
<span class="prompt">$</span>
<span class="command">wget https://raw.githubusercontent.com/dokku/dokku/v0.7.2/bootstrap.sh</span>
<span class="command">wget https://raw.githubusercontent.com/dokku/dokku/v0.8.2/bootstrap.sh</span>
</p>
<p class="line">
<span class="path"></span>
<span class="prompt">$</span>
<span class="command">sudo DOKKU_TAG=v0.7.2 bash bootstrap.sh</span>
<span class="command">sudo DOKKU_TAG=v0.8.2 bash bootstrap.sh</span>
</p>
<p class="line">
<span class="output">&nbsp;# go to your server's IP and follow the web installer</span>

View File

@@ -7,29 +7,28 @@
<!-- 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=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 rel="apple-touch-icon" sizes="57x57" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/favicon.ico">
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/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/dokku/dokku/v0.7.2/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/favicons/browserconfig.xml">
<meta name="msapplication-TileImage" content="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/favicons/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<script>
@@ -43,97 +42,18 @@
</script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.rawgit.com/dokku/dokku/v0.7.2/docs/assets/style.css" rel="stylesheet">
<link href="https://cdn.rawgit.com/dokku/dokku/v0.8.2/docs/assets/style.css" rel="stylesheet">
<!-- <link href="/dokku/docs/assets/style.css" rel="stylesheet"> -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
<style>
.highlight-show-language {
position: relative;
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
.highlight-show-language-label {
color: black;
background-color: #CFCFCF;
display: inline-block;
position: absolute;
bottom: auto;
left: auto;
top: 0;
right: 0;
width: auto;
height: auto;
font-size: 0.9em;
border-radius: 0 0 0 5px;
padding: 0 0.5em;
text-shadow: none;
z-index: 1;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
-webkit-transform: none;
-moz-transform: none;
-ms-transform: none;
-o-transform: none;
transform: none;
}
.highlight-output pre {
color: #fff;
background-color: #000;
padding: 10px;
}
.improve-slideout {
position: fixed;
bottom: 66%;
right: 0;
-webkit-transition-duration: 0.3s;
-moz-transition-duration: 0.3s;
-o-transition-duration: 0.3s;
transition-duration: 0.3s;
background: #363637;
padding: 5px 0px 4px;
z-index: 90;
}
.improve-slideout:hover {
right: 205px;
}
.improve-slideout:hover .improve-slideout-inner {
right: 0;
}
.improve-slideout-inner {
position: fixed;
bottom: 66%;
right: -205px;
-webkit-transition-duration: 0.3s;
-moz-transition-duration: 0.3s;
-o-transition-duration: 0.3s;
transition-duration: 0.3s;
background: #e0e0d9;
padding: 4px 12px;
width: 205px;
}
.improve-slideout-inner h6 {
color: #363637;
font-weight: 700;
text-transform: uppercase;
margin: 0;
.list-group-item {
font-size: 14px;
}
.git-improve {
font-size: 20px;
vertical-align: -2px;
padding-left: 8px;
}
.back-to-contents {
position: fixed;
bottom: calc(66% - 34px);
right: 0;
background: #363637;
padding: 5px 0px 4px;
z-index: 90;
}
.icon-improve {
color: #bdbdb5;
padding: 2px 9px 0 10px;
font-size: 14px;
.markdown-body {
line-height: 1.5;
}
</style>
</head>
@@ -198,6 +118,7 @@
<a href="/{{NAME}}/deployment/application-deployment/" class="list-group-item">Deploying an Application</a>
<a href="/{{NAME}}/deployment/application-management/" class="list-group-item">Application Management</a>
<a href="/{{NAME}}/deployment/logs/" class="list-group-item">Application Logs</a>
<a href="/{{NAME}}/deployment/remote-commands/" class="list-group-item">Remote Commands</a>
<a href="/{{NAME}}/deployment/one-off-processes/" class="list-group-item">One Off Processes/Cron</a>
<a href="/{{NAME}}/deployment/process-management/" class="list-group-item">Process Scaling</a>

20
dokku
View File

@@ -7,17 +7,9 @@ export DOKKU_ROOT=${DOKKU_ROOT:=~dokku}
[[ -d $DOKKU_ROOT/.dokkurc ]] && for f in $DOKKU_ROOT/.dokkurc/*; do source "$f"; done
[[ $DOKKU_TRACE ]] && set -x
case "$(lsb_release -si)" in
Arch)
export DOKKU_DISTRO=${DOKKU_DISTRO:="arch"}
;;
Debian)
export DOKKU_DISTRO=${DOKKU_DISTRO:="debian"}
;;
*)
export DOKKU_DISTRO=${DOKKU_DISTRO:="ubuntu"}
;;
esac
export DOKKU_DISTRO
# shellcheck disable=SC1091
DOKKU_DISTRO=$(. /etc/os-release > /dev/null 2>&1 || true ; echo "$ID")
export DOKKU_IMAGE=${DOKKU_IMAGE:="gliderlabs/herokuish"}
export DOKKU_LIB_ROOT=${DOKKU_LIB_PATH:="/var/lib/dokku"}
@@ -43,10 +35,12 @@ source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
parse_args "$@"
args=("$@")
skip_arg=false
if [[ "${args[0]}" =~ ^--.* ]]; then
for arg in "$@"; do
$skip_arg && skip_arg=false && continue
if [[ "$arg" == "--app" ]]; then
shift 2
shift 2 && skip_arg=true
elif [[ "$arg" =~ ^--.* ]]; then
shift 1
else
@@ -62,7 +56,7 @@ if [[ $(id -un) != "dokku" ]] && [[ ! $1 =~ plugin:* ]] && [[ ! $1 == "ssh-keys:
exit $?
fi
if [[ $(id -un) != "root" && $1 =~ ^plugin:.* ]] || [[ $(id -un) != "root" && $1 == "ssh-keys:add" ]]; then
if [[ $(id -un) != "root" && $1 =~ ^plugin:.* && $1 != "plugin:help" && $1 != "plugin:list" ]] || [[ $(id -un) != "root" && $1 == "ssh-keys:add" ]]; then
dokku_log_fail "This command must be run as root"
fi

View File

@@ -0,0 +1,23 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
cleanup_container_state() {
declare desc="core post-deploy state cleanup"
local trigger="core-post-deploy cleanup_container_state"
local APP="$1"; local PROCTYPES="$(egrep -v "^#" "$DOKKU_ROOT/$APP/DOKKU_SCALE" | awk -F '=' '{ print $1 }' | xargs)"
local CONTAINER_FILES="$(find "$DOKKU_ROOT/$APP" -maxdepth 1 -name "CONTAINER.*" -printf "%f\n" 2>/dev/null | sort -t . -k 3 -n | xargs)"
local CONTAINER_FILE
for CONTAINER_FILE in $CONTAINER_FILES; do
local CONTAINER_TYPE="$(awk -F '.' '{ print $2 }' <<< "$CONTAINER_FILE")"
if [[ "$(is_val_in_list "$CONTAINER_TYPE" "$PROCTYPES" " ")" == "false" ]]; then
dokku_log_info1 "Container type ($CONTAINER_TYPE) is no longer defined. Removing state"
local IP_FILE="${CONTAINER_FILE//CONTAINER/IP}"
local PORT_FILE="${CONTAINER_FILE//CONTAINER/PORT}"
rm -f "$DOKKU_ROOT/$APP/$CONTAINER_FILE" "$DOKKU_ROOT/$APP/$IP_FILE" "$DOKKU_ROOT/$APP/$PORT_FILE"
fi
done
}
cleanup_container_state "$@"

View File

@@ -42,7 +42,7 @@ execute_script() {
COMMAND+=" rm -rf /tmp/cache ; "
COMMAND+=" ln -sf /cache /tmp/cache ; "
COMMAND+=" fi ; "
COMMAND+=" $SCRIPT_CMD ;"
COMMAND+=" $SCRIPT_CMD || exit 1;"
COMMAND+=" if [[ -d '/cache' ]]; then "
COMMAND+=" echo removing installation cache... ; "
COMMAND+=" rm -f /tmp/cache ; "

View File

@@ -30,7 +30,8 @@ if [[ $(systemctl 2> /dev/null) =~ -\.mount ]]; then
cat<<EOF > /etc/systemd/system/dokku-redeploy.service
[Unit]
Description=Dokku app redeploy service
After=docker.target
Requires=docker.service
After=docker.service
[Service]
Type=simple

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core standard plugin"
version = "0.7.2"
version = "0.8.2"
[plugin.config]

View File

@@ -5,30 +5,11 @@ source "$PLUGIN_CORE_AVAILABLE_PATH/00_dokku-standard/exec-app-json-scripts"
exec_app_json_scripts() {
declare desc="core app.json scripts execution"
local trigger="pre-deploy app_json_scripts"
local trigger="post-deploy app_json_scripts"
local APP="$1"; local IMAGE_TAG="$4"; local PHASE_SCRIPT_KEY="postdeploy"
dokku_log_info1 "Attempting to run scripts.dokku.$PHASE_SCRIPT_KEY from app.json (if defined)"
execute_script "$APP" "$IMAGE_TAG" "$PHASE_SCRIPT_KEY"
}
cleanup_container_state() {
declare desc="core post-deploy state cleanup"
local trigger="post-deploy cleanup_container_state"
local APP="$1"; local PROCTYPES="$(egrep -v "^#" "$DOKKU_ROOT/$APP/DOKKU_SCALE" | awk -F '=' '{ print $1 }' | xargs)"
local CONTAINER_FILES="$(find "$DOKKU_ROOT/$APP" -maxdepth 1 -name "CONTAINER.*" -printf "%f\n" 2>/dev/null | sort -t . -k 3 -n | xargs)"
local CONTAINER_FILE
for CONTAINER_FILE in $CONTAINER_FILES; do
local CONTAINER_TYPE="$(awk -F '.' '{ print $2 }' <<< "$CONTAINER_FILE")"
if [[ "$(is_val_in_list "$CONTAINER_TYPE" "$PROCTYPES" " ")" == "false" ]]; then
dokku_log_info1 "Container type ($CONTAINER_TYPE) is no longer defined. Removing state"
local IP_FILE="${CONTAINER_FILE//CONTAINER/IP}"
local PORT_FILE="${CONTAINER_FILE//CONTAINER/PORT}"
rm -f "$DOKKU_ROOT/$APP/$CONTAINER_FILE" "$DOKKU_ROOT/$APP/$IP_FILE" "$DOKKU_ROOT/$APP/$PORT_FILE"
fi
done
}
exec_app_json_scripts "$@"
cleanup_container_state "$@"

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_CORE_AVAILABLE_PATH/config/functions"
source "$PLUGIN_CORE_AVAILABLE_PATH/00_dokku-standard/exec-app-json-scripts"
source "$PLUGIN_AVAILABLE_PATH/config/functions"
exec_app_json_scripts() {
declare desc="core app.json scripts execution"

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_CORE_AVAILABLE_PATH/ps/functions"
source "$PLUGIN_AVAILABLE_PATH/ps/functions"
source "$PLUGIN_AVAILABLE_PATH/config/functions"
dokku_run_cmd() {

View File

@@ -0,0 +1 @@
hook

View File

@@ -12,7 +12,7 @@ flag_rsyslog_needs_restart=n
# exits gracefully if the path already exists
mkdir -m 775 -p "$DOKKU_LOGS_DIR"
case "$DOKKU_DISTRO" in
arch|debian)
arch|debian|centos)
chgrp dokku "$DOKKU_LOGS_DIR"
;;
*)
@@ -23,7 +23,7 @@ esac
if [[ ! -f "$DOKKU_EVENTS_LOGFILE" ]]; then
touch "$DOKKU_EVENTS_LOGFILE"
case "$DOKKU_DISTRO" in
arch|debian)
arch|debian|centos)
chgrp dokku "$DOKKU_EVENTS_LOGFILE"
;;
*)

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core events logging plugin"
version = "0.7.2"
version = "0.8.2"
[plugin.config]

View File

@@ -1,36 +1,11 @@
#!/usr/bin/env bash
[[ " help apps:help " == *" $1 "* ]] || exit "$DOKKU_NOT_IMPLEMENTED_EXIT"
source "$PLUGIN_AVAILABLE_PATH/apps/internal-functions"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
case "$1" in
help | apps:help)
help_content_func () {
declare desc="return apps plugin help content"
cat<<help_content
apps, List your apps
apps:create <app>, Create a new app
apps:destroy <app>, Permanently destroy an app
apps:rename <old-app> <new-app>, Rename an app
help_content
}
if [[ $1 = "apps:help" ]] ; then
echo -e 'Usage: dokku apps[:COMMAND]'
echo ''
echo 'List your apps.'
echo ''
echo 'Example:'
echo ''
echo '$ dokku apps'
echo '=====> My Apps'
echo 'example'
echo 'example2'
echo ''
echo 'Additional commands:'
help_content_func | sort | column -c2 -t -s,
else
help_content_func
fi
apps_help_cmd "$@"
;;
*)

51
plugins/apps/internal-functions Executable file
View File

@@ -0,0 +1,51 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
apps_help_content_func() {
declare desc="return apps plugin help content"
cat<<help_content
apps, [DEPRECATED] Alias for apps:list
apps:clone <old-app> <new-app>, Clones an app
apps:create <app>, Create a new app
apps:destroy <app>, Permanently destroy an app
apps:list, List your apps
apps:rename <old-app> <new-app>, Rename an app
apps:report [<app>] [<flag>], Display report about an app
help_content
}
apps_help_cmd() {
if [[ $1 = "apps:help" ]] ; then
echo -e 'Usage: dokku apps[:COMMAND]'
echo ''
echo 'Manage Dokku apps'
echo ''
echo 'Example:'
echo ''
echo '$ dokku apps:list'
echo '=====> My Apps'
echo 'example'
echo 'example2'
echo ''
echo 'Additional commands:'
apps_help_content_func | sort | column -c2 -t -s,
elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then
apps_help_content_func
else
cat<<help_desc
apps, Manage Dokku apps
help_desc
fi
}
apps_list_cmd() {
declare desc="lists all apps"
local cmd="apps"
local app
dokku_log_info2_quiet "My Apps"
for app in $(dokku_apps); do
echo "$app"
done
}

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core apps plugin"
version = "0.7.2"
version = "0.8.2"
[plugin.config]

39
plugins/apps/subcommands/clone Executable file
View File

@@ -0,0 +1,39 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/apps/functions"
source "$PLUGIN_AVAILABLE_PATH/ps/functions"
apps_clone_cmd() {
declare desc="clones an app"
declare OLD_APP="$2" NEW_APP="$3"
local cmd="apps:clone"
local SKIP_REBUILD=false
if [[ "$2" == "--skip-deploy" ]]; then
SKIP_REBUILD=true
OLD_APP="$3"
NEW_APP="$4"
fi
[[ -z "$OLD_APP" ]] && dokku_log_fail "Please specify an app to run the command on"
[[ -d "$DOKKU_ROOT/$NEW_APP" ]] && dokku_log_fail "Name is already taken"
local NEW_CACHE_DIR="$DOKKU_ROOT/$NEW_APP/cache"
apps_create "$NEW_APP"
cp -a "$DOKKU_ROOT/$OLD_APP/." "$DOKKU_ROOT/$NEW_APP"
if [[ -d "$NEW_CACHE_DIR" ]] && ! rmdir "$NEW_CACHE_DIR"; then
docker run "$DOKKU_GLOBAL_RUN_ARGS" --rm -v "$NEW_CACHE_DIR:/cache" "dokku/$OLD_APP" chmod 777 -R /cache
fi
rm -rf "$NEW_CACHE_DIR"
[[ -f "$DOKKU_ROOT/$NEW_APP/URLS" ]] && sed -i -e "s/$OLD_APP/$NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/URLS"
[[ -f "$DOKKU_ROOT/$NEW_APP/VHOST" ]] && sed -i -e "s/$OLD_APP/$NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/VHOST"
[[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]] && sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive"
[[ "$SKIP_REBUILD" == "true" ]] || ps_rebuild "$NEW_APP"
plugn trigger post-app-clone "$OLD_APP" "$NEW_APP"
echo "Cloning $OLD_APP to $NEW_APP... done"
}
apps_clone_cmd "$@"

View File

@@ -1,16 +1,6 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/apps/internal-functions"
apps_main_cmd() {
declare desc="lists all apps"
local cmd="apps"
local app
dokku_log_info2_quiet "My Apps"
for app in $(dokku_apps); do
echo "$app"
done
}
apps_main_cmd "$@"
dokku_log_warn "Deprecated: Please use apps:list"
apps_list_cmd "$@"

5
plugins/apps/subcommands/list Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_AVAILABLE_PATH/apps/internal-functions"
apps_list_cmd "$@"

View File

@@ -13,11 +13,11 @@ apps_rename_cmd() {
local NEW_APP="$3"
local OLD_CACHE_DIR="$DOKKU_ROOT/$OLD_APP/cache"
mkdir -p "$DOKKU_ROOT/$NEW_APP"
if [[ -d "$OLD_CACHE_DIR" ]] && ! rmdir "$OLD_CACHE_DIR"; then
docker run "$DOKKU_GLOBAL_RUN_ARGS" --rm -v "$OLD_CACHE_DIR:/cache" "dokku/$OLD_APP" chmod 777 -R /cache
fi
rm -rf "$OLD_CACHE_DIR"
apps_create "$NEW_APP"
cp -a "$DOKKU_ROOT/$OLD_APP/." "$DOKKU_ROOT/$NEW_APP"
DOKKU_APPS_FORCE_DELETE=1 apps_destroy "$OLD_APP"
[[ -f "$DOKKU_ROOT/$NEW_APP/URLS" ]] && sed -i -e "s/$OLD_APP/$NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/URLS"

92
plugins/apps/subcommands/report Executable file
View File

@@ -0,0 +1,92 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/apps/functions"
report_single_app() {
declare APP="$1" INFO_FLAG="$2"
local APP_DIR="$DOKKU_ROOT/$APP"
local use_echo;
if [[ "$INFO_FLAG" == "true" ]]; then
use_echo=true
INFO_FLAG=""
fi
verify_app_name "$APP"
local DOKKU_APP_CIDS=$(get_app_container_ids "$APP")
if [[ -n $DOKKU_APP_CIDS ]]; then
local cid
for CID in $DOKKU_APP_CIDS; do
local APP_CONTAINER_STATUS
local DOKKU_APP_CID
DOKKU_APP_CID=$CID
APP_CONTAINER_STATUS=$(docker inspect -f '{{.State.Status}}' "$CID")
done
fi
local flag_map=(
"--app-dir: $APP_DIR"
"--git-sha: $(GIT_DIR="$APP_DIR" git rev-parse --short HEAD 2> /dev/null || false)"
"--app-cid: ${DOKKU_APP_CID:0:12}"
"--status: $APP_CONTAINER_STATUS"
)
if [[ -z "$INFO_FLAG" ]]; then
dokku_log_info2 "$APP"
if (is_deployed "$APP"); then
for flag in "${flag_map[@]}"; do
key="$(echo "${flag#--}" | cut -f1 -d' ' | tr - ' ')"
dokku_log_verbose "$(printf "%-20s %-25s" "${key^}" "${flag#*: }")"
done
else
if [[ "$use_echo" ]]; then
echo "not deployed"
else
dokku_log_fail "not deployed"
fi
fi
else
local match=false; local value_exists=false
for flag in "${flag_map[@]}"; do
valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)"
if [[ "$flag" == "${INFO_FLAG}:"* ]]; then
value=${flag#*: }
size="${#value}"
if [[ "$size" -ne 0 ]]; then
echo "$value" && match=true && value_exists=true
else
match=true
fi
fi
done
if [[ "$match" == "true" ]]; then
[[ "$value_exists" == "true" ]] || dokku_log_fail "not deployed"
else
dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}"
fi
fi
}
apps_report_cmd() {
declare desc="displays the app report for one or more apps"
local cmd="apps:report"
local INSTALLED_APPS=$(dokku_apps)
local APP="$2" INFO_FLAG="$3"
if [[ -n "$APP" ]] && [[ "$APP" == --* ]]; then
INFO_FLAG="$APP"
APP=""
fi
if [[ -z "$APP" ]] && [[ -z "$INFO_FLAG" ]]; then
INFO_FLAG="true"
fi
if [[ -z "$APP" ]]; then
for app in $INSTALLED_APPS; do
report_single_app "$app" "$INFO_FLAG" | tee || true
done
else
report_single_app "$APP" "$INFO_FLAG"
fi
}
apps_report_cmd "$@"

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core build-env plugin"
version = "0.7.2"
version = "0.8.2"
[plugin.config]

View File

@@ -1,34 +1,11 @@
#!/usr/bin/env bash
[[ " help certs:help " == *" $1 "* ]] || exit "$DOKKU_NOT_IMPLEMENTED_EXIT"
source "$PLUGIN_AVAILABLE_PATH/certs/internal-functions"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
case "$1" in
help | certs:help)
help_content_func () {
declare desc="return certs plugin help content"
cat<<help_content
certs, Manage Dokku apps SSL (TLS) certs
certs:add <app> CRT KEY, Add an ssl endpoint to an app. Can also import from a tarball on stdin
certs:chain CRT [CRT ...], [NOT IMPLEMENTED] Print the ordered and complete chain for the given certificate
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:key <app> CRT KEY [KEY ...], [NOT IMPLEMENTED] Print the correct key for the given certificate
certs:remove <app>, Remove an SSL Endpoint from an app
certs:rollback <app>, [NOT IMPLEMENTED] Rollback an SSL Endpoint for an app
certs:update <app> CRT KEY, Update an SSL Endpoint on an app. Can also import from a tarball on stdin
help_content
}
if [[ $1 = "certs:help" ]] ; then
echo -e 'Usage: dokku certs:COMMAND'
echo ''
echo 'Manage Dokku apps SSL (TLS) certs.'
echo ''
echo 'Additional commands:'
help_content_func | sort | column -c2 -t -s,
else
help_content_func
fi
certs_help_cmd "$@"
;;
*)

View File

@@ -26,6 +26,6 @@ get_ssl_hostnames() {
else
local SSL_HOSTNAMES=$SSL_HOSTNAME
fi
echo -e "$SSL_HOSTNAMES"
echo -e "$SSL_HOSTNAMES" | sort -u
return 0
}

View File

@@ -0,0 +1,71 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/certs/functions"
certs_help_content_func() {
declare desc="return certs plugin help content"
cat<<help_content
certs <app>, [DEPRECATED] Alternative for certs:report
certs:add <app> CRT KEY, Add an ssl endpoint to an app. Can also import from a tarball on stdin
certs:chain CRT [CRT ...], [NOT IMPLEMENTED] Print the ordered and complete chain for the given certificate
certs:generate <app> DOMAIN, Generate a key and certificate signing request (and self-signed certificate)
certs:info <app>, [DEPRECATED] Alternative for certs:report
certs:key <app> CRT KEY [KEY ...], [NOT IMPLEMENTED] Print the correct key for the given certificate
certs:remove <app>, Remove an SSL Endpoint from an app
certs:report [<app>] [<flag>], Displays an ssl report for one or more apps
certs:rollback <app>, [NOT IMPLEMENTED] Rollback an SSL Endpoint for an app
certs:update <app> CRT KEY, Update an SSL Endpoint on an app. Can also import from a tarball on stdin
help_content
}
certs_help_cmd() {
if [[ $1 = "certs:help" ]] ; then
echo -e 'Usage: dokku certs[:COMMAND]'
echo ''
echo 'Manage Dokku apps SSL (TLS) certs.'
echo ''
echo 'Additional commands:'
certs_help_content_func | sort | column -c2 -t -s,
elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then
certs_help_content_func
else
cat<<help_desc
certs, Manage Dokku apps SSL (TLS) certs
help_desc
fi
}
certs_info_cmd() {
# This is here because it's used in both the info and the default
declare desc="prints SSL certificate info for app"
local cmd="certs:info"
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
verify_app_name "$2"
local APP="$2"
local APP_SSL_PATH="$DOKKU_ROOT/$APP/tls"
if is_ssl_enabled "$APP"; then
dokku_log_info1 "Fetching SSL Endpoint info for $APP..."
dokku_log_info1 "Certificate details:"
dokku_log_info2 "Common Name(s): "
for domain in $(get_ssl_hostnames "$APP" | xargs); do
dokku_log_info2 " $domain"
done
dokku_log_info2 "Expires At: $(openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -text | grep "Not After :" | awk -F " : " '{ print $2 }')"
dokku_log_info2 "Issuer: $(openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -text | grep "Issuer:" | xargs | sed -e "s/Issuer: //g")"
dokku_log_info2 "Starts At: $(openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -text | grep "Not Before:" | awk -F ": " '{ print $2 }')"
dokku_log_info2 "Subject: $(openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -subject | sed -e "s:subject= ::g"| sed -e "s:^/::g" | sed -e "s:/:; :g")"
local SSL_VERIFY_OUTPUT="$(openssl verify -verbose -purpose sslserver "$APP_SSL_PATH/server.crt" | awk -F ':' '{ print $2 }' | tail -1 | xargs || true)"
if [[ "$SSL_VERIFY_OUTPUT" == "OK" ]]; then
local SSL_SELF_SIGNED="verified by a certificate authority."
else
local SSL_SELF_SIGNED="self signed."
fi
dokku_log_info2 "SSL certificate is $SSL_SELF_SIGNED"
else
dokku_log_info1 "$APP does not have an SSL endpoint"
fi
}

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core certificate management plugin"
version = "0.7.2"
version = "0.8.2"
[plugin.config]

View File

@@ -44,7 +44,7 @@ certs_set() {
trap 'popd &> /dev/null || true; rm -rf $CERTS_SET_TMP_WORK_DIR > /dev/null' RETURN
tar xvf - <&0
local CRT_FILE_SEARCH=$(find . -not -path '*/\.*' -type f -name "*.crt")
local CRT_FILE_SEARCH=$(find . -not -path '*/\.*' -type f | grep ".crt$")
local CRT_FILE_COUNT=$(printf "%s" "$CRT_FILE_SEARCH" | grep -c '^')
if [[ $CRT_FILE_COUNT -lt 1 ]]; then
dokku_log_fail "Tar archive is missing .crt file"
@@ -54,7 +54,7 @@ certs_set() {
local CRT_FILE=$CRT_FILE_SEARCH
fi
local KEY_FILE_SEARCH=$(find . -not -path '*/\.*' -type f -name "*.key")
local KEY_FILE_SEARCH=$(find . -not -path '*/\.*' -type f | grep ".key$")
local KEY_FILE_COUNT=$(printf "%s" "$KEY_FILE_SEARCH" | grep -c '^')
if [[ $KEY_FILE_COUNT -lt 1 ]]; then
dokku_log_fail "Tar archive is missing .key file"
@@ -72,7 +72,6 @@ certs_set() {
cp "$KEY_FILE" "$APP_SSL_PATH/server.key"
chmod 750 "$APP_SSL_PATH"
chmod 640 "$APP_SSL_PATH/server.crt" "$APP_SSL_PATH/server.key"
cd "$DOKKU_ROOT"
plugn trigger post-certs-update "$APP"
plugn trigger post-domains-update "$APP"
}

View File

@@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_AVAILABLE_PATH/certs/internal-functions"
dokku_log_warn "Deprecated: Please use certs:report"
certs_info_cmd "$@"

View File

@@ -22,14 +22,15 @@ certs_generate_cmd() {
mkdir -p "$APP_SSL_PATH"
dokku_log_info1 "Installing certificate and key..."
mv -f "$CERTS_GENERATE_TMP_WORK_DIR/server.key" "$CERTS_GENERATE_TMP_WORK_DIR/server.crt" "$APP_SSL_PATH"
mv -f "$CERTS_GENERATE_TMP_WORK_DIR/server.crt" "$CERTS_GENERATE_TMP_WORK_DIR/server.csr" "$CERTS_GENERATE_TMP_WORK_DIR/server.key" "$APP_SSL_PATH"
chmod 750 "$APP_SSL_PATH"
chmod 640 "$APP_SSL_PATH/server.key" "$APP_SSL_PATH/server.crt"
chmod 640 "$APP_SSL_PATH/server.crt" "$APP_SSL_PATH/server.csr" "$APP_SSL_PATH/server.key"
plugn trigger post-certs-update "$APP"
[[ -n "$DOMAIN" ]] && (domains_add "$APP" "$DOMAIN" || plugn trigger post-domains-update "$APP")
dokku_log_info1 "The following is a certificate signing request that can be used"
dokku_log_info1 "to generate an 'officially' signed SSL certificate for $APP at $DOMAIN"
dokku_log_info1 "by a CA of your choosing."
cat server.csr
cat "$APP_SSL_PATH/server.csr"
else
dokku_log_info1 "$APP has an SSL endpoint already defined"
fi

View File

@@ -1,38 +1,6 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/certs/functions"
certs_info_cmd() {
declare desc="prints SSL certificate info for app"
local cmd="certs:info"
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
verify_app_name "$2"
local APP="$2"; local APP_SSL_PATH="$DOKKU_ROOT/$APP/tls"
if [[ -n "$APP_SSL_PATH" ]]; then
dokku_log_info1 "Fetching SSL Endpoint info for $APP..."
dokku_log_info1 "Certificate details:"
dokku_log_info2 "Common Name(s): "
for domain in $(get_ssl_hostnames "$APP" | xargs); do
dokku_log_info2 " $domain"
done
dokku_log_info2 "Expires At: $(openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -text | grep "Not After :" | awk -F " : " '{ print $2 }')"
dokku_log_info2 "Issuer: $(openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -text | grep "Issuer:" | xargs | sed -e "s/Issuer: //g")"
dokku_log_info2 "Starts At: $(openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -text | grep "Not Before:" | awk -F ": " '{ print $2 }')"
dokku_log_info2 "Subject: $(openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -subject | sed -e "s:subject= ::g"| sed -e "s:^/::g" | sed -e "s:/:; :g")"
local SSL_VERIFY_OUTPUT="$(openssl verify -verbose -purpose sslserver "$APP_SSL_PATH/server.crt" | awk -F ':' '{ print $2 }' | tail -1 | xargs || true)"
if [[ "$SSL_VERIFY_OUTPUT" == "OK" ]]; then
local SSL_SELF_SIGNED="verified by a certificate authority."
else
local SSL_SELF_SIGNED="self signed."
fi
dokku_log_info2 "SSL certificate is $SSL_SELF_SIGNED"
else
dokku_log_info1 "$APP does not have an SSL endpoint"
fi
}
source "$PLUGIN_AVAILABLE_PATH/certs/internal-functions"
dokku_log_warn "Deprecated: Please use certs:report"
certs_info_cmd "$@"

147
plugins/certs/subcommands/report Executable file
View File

@@ -0,0 +1,147 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/certs/functions"
fn-ssl-enabled() {
declare APP="$1"
local SSL_ENABLED=false
if is_ssl_enabled "$APP"; then
SSL_ENABLED=true
fi
echo "$SSL_ENABLED"
}
fn-ssl-expires-at() {
declare APP="$1"
local APP_SSL_PATH="$DOKKU_ROOT/$APP/tls"
if is_ssl_enabled "$APP"; then
openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -text | grep "Not After :" | awk -F " : " '{ print $2 }'
fi
}
fn-ssl-hostnames() {
declare APP="$1"
if is_ssl_enabled "$APP"; then
get_ssl_hostnames "$APP" | xargs
fi
}
fn-ssl-issuer() {
declare APP="$1"
local APP_SSL_PATH="$DOKKU_ROOT/$APP/tls"
if is_ssl_enabled "$APP"; then
openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -text | grep "Issuer:" | xargs | sed -e "s/Issuer: //g"
fi
}
fn-ssl-starts-at() {
declare APP="$1"
local APP_SSL_PATH="$DOKKU_ROOT/$APP/tls"
if is_ssl_enabled "$APP"; then
openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -text | grep "Not Before:" | awk -F ": " '{ print $2 }'
fi
}
fn-ssl-subject() {
declare APP="$1"
local APP_SSL_PATH="$DOKKU_ROOT/$APP/tls"
if is_ssl_enabled "$APP"; then
openssl x509 -in "$APP_SSL_PATH/server.crt" -noout -subject | sed -e "s:subject= ::g"| sed -e "s:^/::g" | sed -e "s:/:; :g"
fi
}
fn-ssl-verified() {
declare APP="$1"
local APP_SSL_PATH="$DOKKU_ROOT/$APP/tls"
local SSL_VERIFY_OUTPUT=false SSL_SELF_SIGNED="self signed"
if ! is_ssl_enabled "$APP"; then
return
fi
SSL_VERIFY_OUTPUT="$(openssl verify -verbose -purpose sslserver "$APP_SSL_PATH/server.crt" | awk -F ':' '{ print $2 }' | tail -1 | xargs || true)"
if [[ "$SSL_VERIFY_OUTPUT" == "OK" ]]; then
SSL_SELF_SIGNED="verified by a certificate authority"
fi
echo "$SSL_SELF_SIGNED"
}
report_single_app() {
declare APP="$1" INFO_FLAG="$2"
local APP_DIR="$DOKKU_ROOT/$APP"
if [[ "$INFO_FLAG" == "true" ]]; then
INFO_FLAG=""
fi
verify_app_name "$APP"
local flag_map=(
"--ssl-dir: $APP_DIR/tls"
"--ssl-enabled: $(fn-ssl-enabled "$APP")"
"--ssl-hostnames: $(fn-ssl-hostnames "$APP")"
"--ssl-expires-at: $(fn-ssl-expires-at "$APP")"
"--ssl-issuer: $(fn-ssl-issuer "$APP")"
"--ssl-starts-at: $(fn-ssl-starts-at "$APP")"
"--ssl-subject: $(fn-ssl-subject "$APP")"
"--ssl-verified: $(fn-ssl-verified "$APP")"
)
if [[ -z "$INFO_FLAG" ]]; then
dokku_log_info2 "$APP ssl information"
for flag in "${flag_map[@]}"; do
key="$(echo "${flag#--}" | cut -f1 -d' ' | tr - ' ')"
dokku_log_verbose "$(printf "%-20s %-25s" "${key^}" "${flag#*: }")"
done
else
local match=false; local value_exists=false
for flag in "${flag_map[@]}"; do
valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)"
if [[ "$flag" == "${INFO_FLAG}:"* ]]; then
value=${flag#*: }
size="${#value}"
if [[ "$size" -ne 0 ]]; then
echo "$value" && match=true && value_exists=true
else
match=true
fi
fi
done
if [[ "$match" == "true" ]]; then
[[ "$value_exists" == "true" ]] || dokku_log_fail "not deployed"
else
dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}"
fi
fi
}
certs_report_cmd() {
declare desc="displays an ssl report for one or more apps"
local cmd="certs:report"
local INSTALLED_APPS=$(dokku_apps)
local APP="$2" INFO_FLAG="$3"
if [[ -n "$APP" ]] && [[ "$APP" == --* ]]; then
INFO_FLAG="$APP"
APP=""
fi
if [[ -z "$APP" ]] && [[ -z "$INFO_FLAG" ]]; then
INFO_FLAG="true"
fi
if [[ -z "$APP" ]]; then
for app in $INSTALLED_APPS; do
report_single_app "$app" "$INFO_FLAG" | tee || true
done
else
report_single_app "$APP" "$INFO_FLAG"
fi
}
certs_report_cmd "$@"

View File

@@ -1,30 +1,11 @@
#!/usr/bin/env bash
[[ " help checks:help " == *" $1 "* ]] || exit "$DOKKU_NOT_IMPLEMENTED_EXIT"
source "$PLUGIN_AVAILABLE_PATH/checks/internal-functions"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
case "$1" in
help | checks:help)
help_content_func () {
declare desc="return checks plugin help content"
cat<<help_content
checks <app>, Show zero-downtime status
checks:disable <app> [process-type(s)], Disable zero-downtime deployment for all processes (or comma-separated process-type list) ***WARNING: this will cause downtime during deployments***
checks:enable <app> [process-type(s)], Enable zero-downtime deployment for all processes (or comma-separated process-type list)
checks:run <app> [process-type(s)], Runs zero-downtime checks for all processes (or comma-separated process-type list)
checks:skip <app> [process-type(s)], Skip zero-downtime checks for all processes (or comma-separated process-type list)
help_content
}
if [[ $1 = "checks:help" ]] ; then
echo -e 'Usage: dokku checks[:COMAND]'
echo ''
echo 'Manage zero-downtime settings.'
echo ''
echo 'Additional commands:'
help_content_func | sort | column -c2 -t -s,
else
help_content_func
fi
checks_help_cmd "$@"
;;
*)

View File

@@ -0,0 +1,32 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
checks_help_content_func() {
declare desc="return checks plugin help content"
cat<<help_content
checks <app>, [DEPRECATED] Alternative for checks:report
checks:disable <app> [process-type(s)], Disable zero-downtime deployment for all processes (or comma-separated process-type list) ***WARNING: this will cause downtime during deployments***
checks:enable <app> [process-type(s)], Enable zero-downtime deployment for all processes (or comma-separated process-type list)
checks:report [<app>] [<flag>], Displays a checks report for one or more apps
checks:run <app> [process-type(s)], Runs zero-downtime checks for all processes (or comma-separated process-type list)
checks:skip <app> [process-type(s)], Skip zero-downtime checks for all processes (or comma-separated process-type list)
help_content
}
checks_help_cmd() {
if [[ $1 = "checks:help" ]] ; then
echo -e 'Usage: dokku checks[:COMMAND]'
echo ''
echo 'Manage zero-downtime settings.'
echo ''
echo 'Additional commands:'
checks_help_content_func | sort | column -c2 -t -s,
elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then
checks_help_content_func
else
cat<<help_desc
checks, Manage zero-downtime settings
help_desc
fi
}

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core checks plugin"
version = "0.7.2"
version = "0.8.2"
[plugin.config]

View File

@@ -12,6 +12,7 @@ checks_main_cmd() {
local APPS="$1"
fi
dokku_log_warn "Deprecated: Please use checks:report"
dokku_col_log_info1_quiet "App Name" "Proctypes Disabled" "Proctypes Skipped"
local app
for app in $APPS; do

View File

@@ -0,0 +1,86 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/checks/functions"
fn-checks-disabled-list() {
declare APP="$1"
local DOKKU_CHECKS_DISABLED=$(config_get "$APP" DOKKU_CHECKS_DISABLED)
DOKKU_CHECKS_DISABLED="${DOKKU_CHECKS_DISABLED:-none}"
echo "$DOKKU_CHECKS_DISABLED"
}
fn-checks-skipped-list() {
declare APP="$1"
local DOKKU_CHECKS_SKIPPED=$(config_get "$APP" DOKKU_CHECKS_SKIPPED)
DOKKU_CHECKS_SKIPPED="${DOKKU_CHECKS_SKIPPED:-none}"
echo "$DOKKU_CHECKS_SKIPPED"
}
report_single_app() {
declare APP="$1" INFO_FLAG="$2"
local APP_DIR="$DOKKU_ROOT/$APP"
if [[ "$INFO_FLAG" == "true" ]]; then
INFO_FLAG=""
fi
verify_app_name "$APP"
local flag_map=(
"--checks-disabled-list: $(fn-checks-disabled-list "$APP")"
"--checks-skipped-list: $(fn-checks-skipped-list "$APP")"
)
if [[ -z "$INFO_FLAG" ]]; then
dokku_log_info2 "$APP checks information"
for flag in "${flag_map[@]}"; do
key="$(echo "${flag#--}" | cut -f1 -d' ' | tr - ' ')"
dokku_log_verbose "$(printf "%-20s %-25s" "${key^}" "${flag#*: }")"
done
else
local match=false; local value_exists=false
for flag in "${flag_map[@]}"; do
valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)"
if [[ "$flag" == "${INFO_FLAG}:"* ]]; then
value=${flag#*: }
size="${#value}"
if [[ "$size" -ne 0 ]]; then
echo "$value" && match=true && value_exists=true
else
match=true
fi
fi
done
if [[ "$match" == "true" ]]; then
[[ "$value_exists" == "true" ]] || dokku_log_fail "not deployed"
else
dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}"
fi
fi
}
checks_report_cmd() {
declare desc="shows reports for an app"
local cmd="checks:report"
local INSTALLED_APPS=$(dokku_apps)
local APP="$2" INFO_FLAG="$3"
if [[ -n "$APP" ]] && [[ "$APP" == --* ]]; then
INFO_FLAG="$APP"
APP=""
fi
if [[ -z "$APP" ]] && [[ -z "$INFO_FLAG" ]]; then
INFO_FLAG="true"
fi
if [[ -z "$APP" ]]; then
for app in $INSTALLED_APPS; do
report_single_app "$app" "$INFO_FLAG" | tee || true
done
else
report_single_app "$APP" "$INFO_FLAG"
fi
}
checks_report_cmd "$@"

View File

@@ -102,7 +102,7 @@ dokku_log_verbose() {
dokku_log_warn() {
declare desc="log warning formatter"
echo " ! $*"
echo " ! $*" 1>&2
}
dokku_log_fail() {
@@ -251,7 +251,12 @@ parse_args() {
declare desc="top-level cli arg parser"
local next_index=1; local skip=false; local args=("$@")
for arg in "$@"; do
$skip && skip=false && continue
if [[ "$skip" == "true" ]]; then
next_index=$(( next_index + 1 ))
skip=false
continue
fi
case "$arg" in
--quiet)
export DOKKU_QUIET_OUTPUT=1
@@ -272,7 +277,7 @@ parse_args() {
export DOKKU_APP_NAME=${args[$next_index]}; skip=true
;;
esac
local next_index=$(( next_index + 1 ))
next_index=$(( next_index + 1 ))
done
return 0
}
@@ -525,7 +530,7 @@ dokku_deploy_cmd() {
source "$PLUGIN_AVAILABLE_PATH/config/functions"
source "$PLUGIN_AVAILABLE_PATH/proxy/functions"
[[ -z $1 ]] && dokku_log_fail "Please specify an app to deploy"
[[ -z $1 ]] && dokku_log_fail "Please specify an app to run the command on"
local APP="$1"; local IMAGE_TAG="$2"; local IMAGE=$(get_deploying_app_image_name "$APP" "$IMAGE_TAG")
verify_app_name "$APP"
plugn trigger pre-deploy "$APP" "$IMAGE_TAG"
@@ -554,6 +559,8 @@ dokku_deploy_cmd() {
dokku_log_info2 "stopping $APP.$PROC_TYPE ($cid)"
# shellcheck disable=SC2086
docker stop $DOCKER_STOP_TIME_ARG "$cid" &> /dev/null
# remove cid from oldids to skip the old container finish processing
oldids="$(remove_val_from_list "$cid" "$oldids" " ")"
done
fi
@@ -651,6 +658,7 @@ dokku_deploy_cmd() {
done < "$DOKKU_SCALE_FILE"
dokku_log_info1 "Running post-deploy"
plugn trigger core-post-deploy "$APP" "$port" "$ipaddr" "$IMAGE_TAG"
plugn trigger post-deploy "$APP" "$port" "$ipaddr" "$IMAGE_TAG"
# kill the old container

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core common plugin"
version = "0.7.2"
version = "0.8.2"
[plugin.config]

View File

@@ -150,7 +150,7 @@ config_get() {
config_create "$ENV_FILE"
if [[ ! -s $ENV_FILE ]]; then
return 0
return 1
fi
local KEY="${*: -1}"

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core config plugin"
version = "0.7.2"
version = "0.8.2"
[plugin.config]

View File

@@ -7,9 +7,10 @@ case "$1" in
help_content_func () {
declare desc="return docker-options plugin help content"
cat<<help_content
docker-options <app> [phase(s)], Display app's Docker options for all phases (or comma separated phase list)
docker-options <app> [phase(s)], [DEPRECATED] Alternative for docker-options:report
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:report [<app>] [<flag>], Displays a docker options report for one or more apps
help_content
}

View File

@@ -4,12 +4,19 @@ source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
AVAILABLE_PHASES=(build deploy run)
fn-get-phase-file-path() {
declare desc="return docker-options config file path for specified phase"
local APP="$1" PHASE="$2"
local PHASE_FILE="${DOKKU_ROOT}/${APP}/DOCKER_OPTIONS_${PHASE^^}"
echo "$PHASE_FILE"
}
get_phase_file_path() {
declare desc="return docker-options config file path for specified phase"
local phase_file_prefix="DOCKER_OPTIONS_"
local phase=$1
[[ "$DOKKU_ROOT" && "$APP" && "$phase_file_prefix" && "$phase" ]] || dokku_log_fail "Error: phase_file_path is incomplete."
echo "${DOKKU_ROOT}/${APP}/${phase_file_prefix}${phase^^}"
[[ "$APP" && "$phase" ]] || dokku_log_fail "Error: phase_file_path is incomplete."
fn-get-phase-file-path "$APP" "$phase"
}
get_phases() {

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core docker-options plugin"
version = "0.7.2"
version = "0.8.2"
[plugin.config]

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_CORE_AVAILABLE_PATH/docker-options/functions"
source "$PLUGIN_AVAILABLE_PATH/docker-options/functions"
docker_options_add_cmd() {
declare desc="Add a docker option to application"

View File

@@ -1,11 +1,12 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_CORE_AVAILABLE_PATH/docker-options/functions"
source "$PLUGIN_AVAILABLE_PATH/docker-options/functions"
docker_options_main_cmd() {
declare desc="Display applications docker options"
local cmd="docker-options"
dokku_log_warn "Deprecated: Please use docker-options:report"
verify_app_name "$2" && local APP="$2"
read -ra passed_phases <<< "$(get_phases "$3")"

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_CORE_AVAILABLE_PATH/docker-options/functions"
source "$PLUGIN_AVAILABLE_PATH/docker-options/functions"
docker_options_remove_cmd() {
declare desc="Remove a docker option from application"

View File

@@ -0,0 +1,79 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/docker-options/functions"
fn-docker-options() {
declare APP="$1" PHASE="$2"
local PHASE_FILE="$(fn-get-phase-file-path "$APP" "$PHASE")"
if [[ -r "$PHASE_FILE" ]]; then
tr '\n' ' ' < "$PHASE_FILE"
fi
}
report_single_app() {
declare APP="$1" INFO_FLAG="$2"
local APP_DIR="$DOKKU_ROOT/$APP"
if [[ "$INFO_FLAG" == "true" ]]; then
INFO_FLAG=""
fi
verify_app_name "$APP"
local flag_map=(
"--docker-options-build: $(fn-docker-options "$APP" build)"
"--docker-options-deploy: $(fn-docker-options "$APP" deploy)"
"--docker-options-run: $(fn-docker-options "$APP" run)"
)
if [[ -z "$INFO_FLAG" ]]; then
dokku_log_info2 "$APP docker options information"
for flag in "${flag_map[@]}"; do
key="$(echo "${flag#--}" | cut -f1 -d' ' | tr - ' ')"
dokku_log_verbose "$(printf "%-20s %-25s" "${key^}" "${flag#*: }")"
done
else
local match=false; local value_exists=false
for flag in "${flag_map[@]}"; do
valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)"
if [[ "$flag" == "${INFO_FLAG}:"* ]]; then
value=${flag#*: }
size="${#value}"
if [[ "$size" -ne 0 ]]; then
echo "$value" && match=true && value_exists=true
else
match=true
fi
fi
done
if [[ "$match" == "true" ]]; then
[[ "$value_exists" == "true" ]] || dokku_log_fail "not deployed"
else
dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}"
fi
fi
}
docker_options_report_cmd() {
declare desc="displays a docker options report for one or more apps"
local cmd="docker-options:report"
local INSTALLED_APPS=$(dokku_apps)
local APP="$2" INFO_FLAG="$3"
if [[ -n "$APP" ]] && [[ "$APP" == --* ]]; then
INFO_FLAG="$APP"
APP=""
fi
if [[ -z "$APP" ]] && [[ -z "$INFO_FLAG" ]]; then
INFO_FLAG="true"
fi
if [[ -z "$APP" ]]; then
for app in $INSTALLED_APPS; do
report_single_app "$app" "$INFO_FLAG" | tee || true
done
else
report_single_app "$APP" "$INFO_FLAG"
fi
}
docker_options_report_cmd "$@"

View File

@@ -1,33 +1,11 @@
#!/usr/bin/env bash
[[ " help domains:help " == *" $1 "* ]] || exit "$DOKKU_NOT_IMPLEMENTED_EXIT"
source "$PLUGIN_AVAILABLE_PATH/domains/internal-functions"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
case "$1" in
help | domains:help)
help_content_func () {
declare desc="return domains plugin help content"
cat<<help_content
domains [<app>], List domains
domains:add <app> <domain> [<domain> ...], Add domains to app
domains:add-global <domain> [<domain> ...], Add global domain names
domains:clear <app>, Clear all domains for app
domains:disable <app>, Disable VHOST support
domains:enable <app>, Enable VHOST support
domains:remove <app> <domain> [<domain> ...], Remove domains from app
domains:remove-global <domain> [<domain> ...], Remove global domain names
help_content
}
if [[ $1 = "domains:help" ]] ; then
echo -e 'Usage: dokku domains[:COMMAND]'
echo ''
echo 'Manage vhost domains used by the Dokku proxy.'
echo ''
echo 'Additional commands:'
help_content_func | sort | column -c2 -t -s,
else
help_content_func
fi
domains_help_cmd "$@"
;;
*)

Some files were not shown because too many files have changed in this diff Show More