Compare commits

...

296 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
f39b38b25d Release 0.3.24 2015-08-19 21:11:38 -04:00
Jose Diaz-Gonzalez
9433ab3076 Merge pull request #1397 from progrium/https-docker-apt-repo
Https docker apt repo
2015-08-19 21:01:52 -04:00
Jose Diaz-Gonzalez
2b59932ba5 Use https version of docker repository. Refs #1396 2015-08-19 20:23:06 -04:00
Jose Diaz-Gonzalez
d3361d21d8 Remove provides statement from control file 2015-08-19 20:22:19 -04:00
Jose Diaz-Gonzalez
a45be794cc Merge pull request #1394 from progrium/josegonzalez-patch-1
Remove `dokku plugins-install` from postinst hook
2015-08-19 17:02:14 -04:00
Jose Diaz-Gonzalez
8e37d04dda Merge pull request #1395 from adrianmoya/master
Adding fqdn requirement
2015-08-19 17:01:03 -04:00
Adrian Moya
1f6930294a Adding fqdn requirement
Installation fails if no FQDN is set. I'm adding this as a requirement.
2015-08-19 15:02:39 -05:00
Jose Diaz-Gonzalez
1bf30bdcb1 Remove dokku plugins-install from postinst hook
All core plugins that require debian packages already have those packages specified in the `depends` stanza of the `control` file, so no need to respecify them here.
2015-08-19 11:12:28 -04:00
Jose Diaz-Gonzalez
d58e1cd0ab Release 0.3.23 2015-08-15 17:07:10 -04:00
Jose Diaz-Gonzalez
dffdaa141f Merge pull request #1370 from offscale/master
From /dev/null to -qq, from --silent to -sL, and sudo
2015-08-15 16:48:59 -04:00
Jose Diaz-Gonzalez
6e11686fdf Merge pull request #1380 from emdantrim/emdantrim-ignore-noninteractive
Removed uses of `sudo` from `bootstrap.sh`
2015-08-15 16:48:31 -04:00
Jose Diaz-Gonzalez
162fff18e9 Merge pull request #1383 from progrium/1382_mh-downscaling-with-more-than-10-containers
fix downscaling from 10+
2015-08-15 16:47:44 -04:00
Michael Hobbs
26d761d85b make sure we sort container id files, et al correctly even if the app name contains a period. fixes #1382 2015-08-12 21:36:25 -07:00
Jose Diaz-Gonzalez
5a5e80335f Merge pull request #1366 from omeid/patch-1
Make bootstrap.sh safe from bad connection
2015-08-12 14:20:52 -04:00
Jose Diaz-Gonzalez
5988c91512 Merge pull request #1381 from lunohodov/y/docs-update
Instructions for using the bash client in shells other than bash
2015-08-12 14:19:55 -04:00
Y.
c2499541e5 Docs on using the bash client in other shells 2015-08-12 09:06:03 +02:00
emdantrim
0261e9566d Removed uses of sudo from bootstrap.sh
`bootstrap.sh` fails to acknowledge the `DEBIAN_FRONTEND=noninteractive` envvar because of the use of `sudo`, because the -E flag is not set. However, the script also assumes that it will be run with `sudo` in the first place, so it shouldn't be needed. In the event that it is needed, it can be run with -E instead.
2015-08-11 21:00:07 +00:00
O'meid
9835b5da41 show the Tag and Repo used. 2015-08-11 19:38:43 +10:00
Jose Diaz-Gonzalez
b4d559c002 Merge pull request #1379 from jezdez/patch-1
Deleted my old plugins since there is no maintenance happening.
2015-08-10 15:20:35 -04:00
Jannis Leidel
72c62a0ec6 Deleted my old plugins since there is no maintenance happening. 2015-08-10 15:18:45 +02:00
Jose Diaz-Gonzalez
e0244cd093 Merge pull request #1377 from vkurup/1374-fix-docs-link
Fix link to docs from README
2015-08-08 21:34:02 -04:00
Vinod Kurup
9fbe033fba Fix link to docs from README
Fixes #1374
2015-08-08 21:25:35 -04:00
Samuel Marks
287da3fa47 Correctly elevating echo piping 2015-08-06 14:54:54 +10:00
Samuel Marks
123d75c13a From /dev/null to -qq, from --silent to -sL, and sudo 2015-08-05 12:20:51 +10:00
O'meid
777a09847c Make bootstrap.sh safe from bad connection
This allows to run the bootstrap.sh directly and "safely" without storing it on disk.

Signed-off-by: O'meid <public@omeid.me>
2015-08-04 17:13:42 +10:00
Jose Diaz-Gonzalez
00d834bdc3 Merge pull request #1365 from progrium/1364_mh-sh-not-bash
support dockerfile images that don't include bash
2015-08-03 15:30:32 -04:00
Michael Hobbs
8edea8512d use /bin/sh instead of /bin/bash in order to support dockerfile images that don't include bash. fixes #1364 2015-08-03 11:42:30 -07:00
Jose Diaz-Gonzalez
466df88660 Merge pull request #1358 from bkniffler/patch-1
Add suggestion for low memory VMs
2015-08-01 22:02:01 -04:00
bkniffler
9fb7c205df Move small memory instructions to advanced installation - installation.md 2015-07-31 18:26:07 +02:00
bkniffler
fa36d38fb7 Small fix 2015-07-31 18:19:56 +02:00
bkniffler
3a0a873079 Move small memory instructions to advanced installation 2015-07-31 18:18:37 +02:00
Jose Diaz-Gonzalez
b371bca82e Merge pull request #1357 from progrium/1355_mh-deploy-no-webproc
only run domains and nginx config if we have a port and ip
2015-07-31 10:47:23 -04:00
Jose Diaz-Gonzalez
05b7a8ecbd Merge pull request #1359 from progrium/1258_mh-dokku-wait-to-retire-per-app
allow DOKKU_WAIT_TO_RETIRE to be defined per app
2015-07-31 10:31:51 -04:00
Michael Hobbs
c02ba86c81 allow DOKKU_WAIT_TO_RETIRE to be defined per app. closes #1258 2015-07-30 15:03:19 -07:00
bkniffler
003ab07ff4 Adapt to other shell example script 2015-07-30 23:57:52 +02:00
bkniffler
d66b4665d0 Little correction 2015-07-30 23:53:01 +02:00
bkniffler
07cb639bd5 Add suggestion for low memory VMs 2015-07-30 23:38:27 +02:00
Michael Hobbs
11e10fceef only run domains and nginx config if we have a port and ip. fixes #1355 2015-07-30 14:29:36 -07:00
Michael Hobbs
b0d55ce589 Merge pull request #1354 from alessio/events-new-receive-branch-hook
Log receive-branch pluginhook
2015-07-30 08:39:02 -07:00
Alessio Treglia
78c0cdc12d Log receive-branch pluginhook
Such new pluginhook was introduced in dokku v0.3.22.
2015-07-30 15:37:47 +01:00
Michael Hobbs
fd3f84669b Merge pull request #1292 from progrium/mh-columnar-help-output
use column to format help output
2015-07-28 10:51:50 -07:00
Michael Hobbs
36d607a4f4 [ci skip] update docs 2015-07-28 09:36:42 -07:00
Michael Hobbs
b30db17def use column to format help output 2015-07-28 09:31:56 -07:00
Michael Hobbs
d05df06f1a Merge pull request #1349 from alexkruegger/master
add plugin dokku-app-configfiles
2015-07-28 08:51:03 -07:00
alexkruegger
7e89932dba Update plugins.md 2015-07-28 18:48:00 +03:00
alexkruegger
7cd1b6cdc5 add plugin dokku-app-configfiles 2015-07-28 18:05:29 +03:00
Jose Diaz-Gonzalez
8df24ff4a6 Merge pull request #1346 from progrium/1220_mh-document-dokku-cleanup
document dokku cleanup and the potential of compat issues
2015-07-27 13:08:08 -04:00
Michael Hobbs
67ab803283 [ci skip] document dokku cleanup and the potential of compat issues. closes #1220 2015-07-27 09:50:06 -07:00
Jose Diaz-Gonzalez
e9efcbead4 Merge pull request #1321 from econya/master
In doc: mention alternative to nginx.conf templates: include-dir.
2015-07-26 22:56:41 -04:00
Michael Hobbs
3525f699f9 Merge pull request #1341 from progrium/1336_mh-use-dockerfile-port-sans-vhost
set and use $port whenever $PROC_TYPE == 'web'
2015-07-24 12:45:15 -07:00
Michael Hobbs
9593bd6d48 simplify docker run logic in deploy 2015-07-24 12:15:10 -07:00
Michael Hobbs
da5f42a13e set and use $port whenever $PROC_TYPE == 'web'. closes #1336 2015-07-24 10:40:00 -07:00
Michael Hobbs
0deea445d6 Merge pull request #1337 from progrium/josegonzalez-buildstep
Update PREBUILT_STACK_URL to latest buildstep release
2015-07-23 11:12:26 -07:00
Jose Diaz-Gonzalez
84538e1c1d Update PREBUILT_STACK_URL to latest buildstep release 2015-07-23 13:33:11 -04:00
Jose Diaz-Gonzalez
97eefef04a Fix version
[ci skip]
2015-07-22 14:36:48 -04:00
Jose Diaz-Gonzalez
04b9f0cb9a Fix version
[ci skip]
2015-07-22 14:36:19 -04:00
Jose Diaz-Gonzalez
b3ddea604a Fix docs link
[ci skip]
2015-07-22 14:14:56 -04:00
Jose Diaz-Gonzalez
511d9717ec Merge pull request #1305 from progrium/template
Updated Docs Site
2015-07-22 14:13:00 -04:00
Jose Diaz-Gonzalez
c14f29b01b fix link to documentation [ci skip] 2015-07-22 14:07:52 -04:00
Jose Diaz-Gonzalez
ccc3b810c7 Add missing Release Process link [ci skip] 2015-07-22 14:06:39 -04:00
Jose Diaz-Gonzalez
53a3438cf7 Link docs page 2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
cafbb8a4f9 minor column tweak 2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
230cdaf996 change column sizes 2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
1ef42b527d add padding 2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
cefe772330 remove todo 2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
6dc2b218c7 style tables after the fact 2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
025699cd01 Fix margin on pages 2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
a8b1f4fae5 Attempt to add a sidebar and use fluid container positioning for non-home pages 2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
9b64298314 Use a fluid container 2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
ed9801c031 Fix pattern url
[ci skip]
2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
53f0b00d31 Make assets relative to current page
[ci skip]
2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
222162fd9d Add static site assets
[ci skip]
2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
3322ae6cc3 Custom home.html template 2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
8256d78007 Updated landing page
[ci skip]
2015-07-22 14:05:22 -04:00
Jose Diaz-Gonzalez
e3669479ce Beginning new template changes
[ci skip]
2015-07-22 14:04:21 -04:00
Felix Wolfsteller
430bd3f01a Fix typo and remove reference to dokku-alt issue. 2015-07-22 07:41:22 +02:00
Jose Diaz-Gonzalez
28ffcc887e Merge pull request #1334 from progrium/deb-creation
Fix pluginhook building and update package version
2015-07-21 21:04:53 -04:00
Jose Diaz-Gonzalez
5b06cd68ac Merge pull request #1335 from progrium/fix-michaelshobbs-name
Fix name for michaelshobbs
2015-07-21 21:04:41 -04:00
Jose Diaz-Gonzalez
2e1580241c Fix name for michaelshobbs 2015-07-21 14:54:32 -04:00
Jose Diaz-Gonzalez
f9ea2053b9 Fix pluginhook building and update package version 2015-07-21 14:53:57 -04:00
Jose Diaz-Gonzalez
6b67b2d647 Release 0.3.22 2015-07-21 12:18:30 -04:00
Jose Diaz-Gonzalez
385683c76a Merge pull request #1331 from alexkruegger/master
[bugfix] in nginx.conf.template getting from /app directory
2015-07-20 10:50:55 -04:00
alexkruegger
9910fb03da fix bug in nginx.conf.template getting from /app directory 2015-07-20 14:02:44 +03:00
Michael Hobbs
68b3487355 Merge pull request #1324 from progrium/1323_mh-default-checks-docs
update docs to reflect default checks
2015-07-17 08:00:15 -07:00
Michael Hobbs
d2f2bc9ac1 update docs to reflect default checks. rename DOKKU_DEFAULT_WAIT to DOKKU_DEFAULT_CHECKS_WAIT. refs #1323 2015-07-17 07:25:35 -07:00
Felix Wolfsteller
d4ea8520ac In doc: mention alternative to nginx.conf templates: include-dir. 2015-07-16 11:50:45 +02:00
Michael Hobbs
1ce657565f Merge pull request #1319 from MWers/mw-fix-spelling-issues
Spelling fix: 'comma seperated'=>'comma-separated'
2015-07-14 16:29:20 -07:00
Matt Walker
d457ffe7ee Spelling fix: 'comma seperated'=>'comma-separated' 2015-07-14 15:46:32 -07:00
Jose Diaz-Gonzalez
4bdff25969 Merge pull request #1312 from progrium/kilianc_hotfix-#1270
fixes #1270 faulty default container check (uses docker inspect)
2015-07-13 13:22:27 -04:00
Michael Hobbs
c7cb014580 convenience functions for app container state 2015-07-13 09:27:42 -07:00
Michael Hobbs
633c595311 use docker inspect instead of docker ps grep pattern. closes #1281 2015-07-13 09:09:38 -07:00
Kilian Ciuffolo
0424d5a744 fixes #1270 faulty default container check 2015-07-13 09:09:38 -07:00
Jose Diaz-Gonzalez
0a4c22dfea Merge pull request #1278 from progrium/nginx-template-from-app
Nginx template from app
2015-07-13 10:35:42 -04:00
Jose Diaz-Gonzalez
f27cbe1325 Merge pull request #1313 from progrium/1309_mh-verify-app-in-deploy
verify we have an app when deploy is called
2015-07-13 10:35:22 -04:00
Jose Diaz-Gonzalez
68b12ab46f Merge pull request #1298 from SonicHedgehog/fix-check-root
Fix check-deploy skipping the root path
2015-07-13 10:31:21 -04:00
Jose Diaz-Gonzalez
8905387d16 Merge pull request #1311 from progrium/kilianc_hotfix-#1259
ignore protocol of Dockerfile EXPOSE (refs: #1280)
2015-07-12 20:06:38 -04:00
Jose Diaz-Gonzalez
ca1b17ea8d Use nginx.conf.template as the template name 2015-07-12 20:06:21 -04:00
Jose Diaz-Gonzalez
007946f52a Use simplified method for retrieving a container id 2015-07-12 20:02:29 -04:00
Michael Hobbs
b0ca3aadb0 verify we have an app when deploy is called. fixes #1309 2015-07-12 16:59:16 -07:00
Jose Diaz-Gonzalez
1be74988f1 Merge pull request #1310 from progrium/1261_mh-use-global-config
use config:get for checks skipping variables
2015-07-12 19:31:25 -04:00
Michael Hobbs
3e58824377 Merge branch 'master' into kilianc_hotfix-#1259 2015-07-12 16:27:10 -07:00
Michael Hobbs
ee4fca572e mv dockerfile port logic to common function + tests. closes #1280 2015-07-12 15:57:12 -07:00
Michael Hobbs
57b405ce76 use config:get for checks skipping variables 2015-07-12 15:23:51 -07:00
Jose Diaz-Gonzalez
43b179735b Merge pull request #1261 from Flink/bypass-checks-on-demand
Allows to skip checks (all or default)
2015-07-11 16:31:21 -04:00
Jose Diaz-Gonzalez
6895dd9936 Use get_container_ids method to retrieve container for nginx conf 2015-07-11 16:29:25 -04:00
Assaf Arkin
379a2e8908 Added documentation 2015-07-11 15:06:56 -04:00
Assaf Arkin
71b79da262 CHANGED extract nginx.conf.template from project 2015-07-11 15:05:06 -04:00
Jose Diaz-Gonzalez
e985d18454 Merge pull request #1307 from progrium/1287-release-docs
Add release documentation. Closes #1287
2015-07-11 15:01:00 -04:00
Jose Diaz-Gonzalez
972cad7717 Add release documentation. Closes #1287
[ci skip]
2015-07-11 15:00:37 -04:00
Jose Diaz-Gonzalez
6f6a3e4715 Merge pull request #1306 from progrium/1177-clarify-installation
Clarify web/cli installation docs. Closes #1177. Closes #1170
2015-07-11 14:44:19 -04:00
Jose Diaz-Gonzalez
815bc326a4 Clarify web/cli installation docs. Closes #1177. Closes #1170
[ci skip]
2015-07-11 14:43:50 -04:00
Jakob Krigovsky
25c107b164 Add checks-root test app to tests.mk 2015-07-11 14:39:25 +02:00
Jakob Krigovsky
7c02c6d31d Add test app checks-root 2015-07-11 13:58:55 +02:00
Jakob Krigovsky
3218e2b076 Allow for test apps that should fail deployment 2015-07-11 13:58:52 +02:00
Jakob Krigovsky
5f03518ec8 Fix check-deploy skipping the root path
The root path, `/`, was treated as an invalid URL because it didn’t
contain any characters after the slash.
2015-07-11 13:46:17 +02:00
Michael Hobbs
4629a9909b Merge pull request #1291 from progrium/1261_mh-config-args-refactor
initial pass at config plugin arguments refactor
2015-07-10 07:55:18 -07:00
Jose Diaz-Gonzalez
16a0ca5f70 Merge pull request #1302 from econya/master
in nginx doc, mention where original templates are found by default.
2015-07-10 10:28:15 -04:00
Jose Diaz-Gonzalez
5192bb62fd Merge pull request #1301 from mixxorz/add-reset-mtime-plugin-list
Add reset mtime plugin list
2015-07-10 10:21:22 -04:00
Felix Wolfsteller
f68b126bc9 fix typo 2015-07-10 12:22:07 +02:00
Felix Wolfsteller
bf1ff080b6 in nginx conf mention how to apply template changes (i assume deploy is the answer). 2015-07-10 12:21:29 +02:00
Felix Wolfsteller
bff273d625 in nginx doc, mention where original templates are found by default. 2015-07-10 12:08:29 +02:00
mixxorz
ae2779e38c Fixed missing author links 2015-07-10 11:23:49 +08:00
mixxorz
4de6bbfb29 Added reset-mtime plugin to plugins.md 2015-07-10 11:21:43 +08:00
Michael Hobbs
7ffca93ba8 Merge pull request #1299 from SonicHedgehog/x-forwarded-proto-https
Set X-Forwarded-Proto header if TLS is enabled when running checks
2015-07-09 16:39:08 -07:00
Jakob Krigovsky
a60dfd3b5e Set X-Forwarded-Proto header if TLS is enabled when running checks 2015-07-09 22:03:29 +02:00
Michael Hobbs
8ea88c85b6 Merge pull request #1300 from progrium/1294_mh-fix-urls-output
fix urls command when NO_VHOST=1 + tests
2015-07-09 12:58:44 -07:00
Michael Hobbs
64d76724e5 fix typo. good thing we have a test suite. :P 2015-07-09 12:35:43 -07:00
Michael Hobbs
e21b730089 remove dead test file 2015-07-09 12:31:58 -07:00
Michael Hobbs
033a267573 fix urls command when NO_VHOST=1 + tests. fixes #1294 2015-07-09 12:12:58 -07:00
Jose Diaz-Gonzalez
39d993b411 Merge pull request #1296 from Flink/docker-auto-volumes-plugin
Add docker-auto-volumes to plugins
2015-07-09 11:57:48 -04:00
Loïc Guitaut
54b46066ff Add docker-auto-volumes to plugins 2015-07-09 12:26:59 +02:00
Michael Hobbs
710c6f4e88 don't run dokku again on --* args in config plugin 2015-07-07 12:31:57 -07:00
Michael Hobbs
a84397895a initial pass at config plugin arguments refactor 2015-07-06 19:41:17 -07:00
Michael Hobbs
aa55f027a4 Merge pull request #1289 from progrium/mh-fix-random-test-failure
don't background cleanup
2015-07-06 07:01:10 -07:00
Michael Hobbs
0b9ac9a727 don't background cleanup 2015-07-05 21:08:47 -07:00
Michael Hobbs
cbbe7ca557 Merge pull request #1285 from alessio/pr-fix-events-docs-filename
Rename dokku-events-logs.md according to index.md
2015-07-05 19:07:25 -07:00
Alessio Treglia
ecabbc166e Rename dokku-events-logs.md according to index.md
Presently the following link is dangling:
- http://progrium.viewdocs.io/dokku/dokku-events-logs
2015-07-05 18:32:56 +01:00
Kilian Ciuffolo
5f8b2d291c fixes #1259 now ignores protocol of Dockerfile EXPOSE 2015-07-04 10:37:22 -07:00
Jose Diaz-Gonzalez
ce9dabf384 Merge pull request #1282 from progrium/josegonzalez-patch-1
Move primecache to deprecated plugins
2015-07-04 03:28:56 -04:00
Jose Diaz-Gonzalez
53e962cd73 Move primecache to deprecated plugins
[ci skip]
2015-07-04 03:28:47 -04:00
Jose Diaz-Gonzalez
5aada53945 Merge pull request #1277 from progrium/gzip-templates
Gzip templates
2015-07-03 18:23:50 -04:00
Jose Diaz-Gonzalez
06ba11d433 Merge pull request #1279 from progrium/docs-receive-branch
Add docs for `receive-branch` hook. Refs #1149
2015-07-03 17:12:14 -04:00
Jose Diaz-Gonzalez
1223602679 Add docs for receive-branch hook. Refs #1149
[ci skip]
2015-07-03 17:11:53 -04:00
Jose Diaz-Gonzalez
35ff3fa5ca Merge pull request #1149 from mlebkowski/feature/receive-branch
pluginhook to receive branches different than master
2015-07-03 17:07:31 -04:00
Jose Diaz-Gonzalez
2d6054605e Remove non-standard redirects 2015-07-03 16:41:17 -04:00
krishna rokhale
62d1d41bc5 removing new lines. 2015-07-03 16:40:23 -04:00
krishna rokhale
adfa13235d added two more cases to SSL template and gzip as default in templates. 2015-07-03 16:40:23 -04:00
Jose Diaz-Gonzalez
fd27ca022c Merge pull request #1276 from progrium/docs-plugins
Docs plugins
2015-07-03 16:30:43 -04:00
Jose Diaz-Gonzalez
9f73b90a13 Reorder plugins
[ci skip]
2015-07-03 16:29:30 -04:00
Jose Diaz-Gonzalez
9c124e236f Deprecate a few plugins
[ci skip]
2015-07-03 16:28:49 -04:00
Jose Diaz-Gonzalez
4c45c00236 Merge pull request #825 from andrewsomething/multikey
Add support for multiple keys in the installer.
2015-07-03 13:39:35 -04:00
Jose Diaz-Gonzalez
7ceac5787b Minor fixes to the logging docs
[ci skip]
2015-07-03 13:06:47 -04:00
Jose Diaz-Gonzalez
1814a52d60 Merge pull request #1273 from alessio/pr-events-docs
Add docs for the events plugin
2015-07-03 13:01:21 -04:00
Jose Diaz-Gonzalez
e1044199c7 Merge pull request #1254 from kilianc/feature/custom-start-cmd
added DOKKU_DOCKERFILE_START_CMD support
2015-07-03 12:54:24 -04:00
Alessio Treglia
76e718df56 Cosmetic fix 2015-07-03 17:18:15 +01:00
Alessio Treglia
f1fda75e3d Extend events docs 2015-07-03 17:16:48 +01:00
Alessio Treglia
934cddbcda Fix potential ambiguity 2015-07-03 16:43:12 +01:00
Michael Hobbs
483ca9627f Merge pull request #1274 from progrium/1271_mh-fix-ls
parse correct section of path for dokku ls container type
2015-07-03 07:48:09 -07:00
Michael Hobbs
0e53a76a1a [ci skip] ensure we parse the correct section of the string. closes #1271 2015-07-03 07:47:30 -07:00
Alessio Treglia
8acb596fed Update index.md
Add logging.md reference.
2015-07-03 12:09:45 +01:00
Alessio Treglia
601d85f8e6 Create logging.md
Needless to say, this need review.
2015-07-03 12:07:38 +01:00
Alessio Treglia
3e6bcedb51 Update plugins.md
Move dokku-events from the "Dokku Features" stanza to the "Deprecated
Plugins" one as it's now part of the core set of components.
2015-07-03 11:52:12 +01:00
Kilian Ciuffolo
5ced063d3d added docs 2015-07-02 17:47:58 -07:00
Jose Diaz-Gonzalez
4d30fdfb0e Release 0.3.21 2015-07-02 18:54:45 -04:00
Jose Diaz-Gonzalez
7954f186df Merge pull request #1269 from progrium/josegonzalez-docker-buildstep
Peg lxc-docker in buildstep to 1.6.2
2015-07-02 18:48:43 -04:00
Jose Diaz-Gonzalez
a284a805e0 Peg lxc-docker in buildstep to 1.6.2
[ci skip]
2015-07-02 18:48:39 -04:00
Michael Hobbs
2698ce62e2 Merge pull request #1256 from alessio/pr-dokku-events
Implement events logging feature
2015-07-01 14:09:38 -07:00
Alessio Treglia
0ed0201b90 Use d-neg condition to prevent unexpected failures 2015-07-01 19:48:09 +01:00
Alessio Treglia
89d1acaa38 Revert "Fix double negative statement"
This reverts commit 54ed3c1f2b.
2015-07-01 19:47:38 +01:00
Jose Diaz-Gonzalez
d211223f58 Release 0.3.20 2015-07-01 14:43:20 -04:00
Alessio Treglia
54ed3c1f2b Fix double negative statement
This is mostly for consistency with its own install script.
2015-07-01 19:20:53 +01:00
Alessio Treglia
91c691a806 Create dokku's /var/log/dokku/ private namespace
Rename dokku.log to events.log.
Refresh tests accordingly.
2015-07-01 18:25:11 +01:00
Alessio Treglia
172e71cac6 Merge branch 'master' into pr-dokku-events 2015-07-01 17:50:09 +01:00
Jose Diaz-Gonzalez
c4540701fd Merge pull request #1264 from progrium/josegonzalez-lxc-docker
Require lxc-docker-1.6.2
2015-07-01 12:05:14 -04:00
Alessio Treglia
1d4b9a19a8 Fix test case expected output 2015-07-01 10:11:28 +01:00
Alessio Treglia
efc55bd195 Attempt to fix circleci build failure
Parse output and check return code after running test commands
with the 'run' utility.
2015-07-01 09:15:08 +01:00
Jose Diaz-Gonzalez
74fa016bc1 Pin to 1.6.2
Refs #1263

[ci skip]
2015-06-30 16:59:37 -04:00
Jose Diaz-Gonzalez
5668f76cdd Install specific version of docker [ci skip] 2015-06-30 15:52:21 -04:00
Jose Diaz-Gonzalez
7e1e0ebb80 Require lxc-docker <= 1.6.2
1.7.0 Has issues with `docker ps` output, breaking all plugins

[ci-skip]
2015-06-30 14:06:01 -04:00
Alessio Treglia
b24e78257c Fix horrible typo 2015-06-30 17:34:15 +01:00
Alessio Treglia
b380bde9f3 Add small test suite for events logging 2015-06-30 12:05:35 +01:00
Loïc Guitaut
c316f59f4f Allows to skip checks (all or default)
Setting `DOKKU_SKIP_ALL_CHECKS` globally or for a given app will skip
all checks.
Setting `DOKKU_SKIP_DEFAULT_CHECKS` globally or for a given app will skip
default checks only.
2015-06-29 17:21:31 +02:00
Alessio Treglia
69aba06361 Handle log rotation
As requested by @josegonzalez.
2015-06-28 23:25:50 +01:00
Jose Diaz-Gonzalez
976c0be189 Merge pull request #1257 from progrium/josegonzalez-ssl-logs
Split nginx ssl logs by $APP
2015-06-27 12:55:44 -04:00
Jose Diaz-Gonzalez
e2e36a5045 Add logging to :80 stanza 2015-06-27 12:24:27 -04:00
Alessio Treglia
16e4001677 Restart rsyslog once installed
Seems that a mere reload doesn't work.
2015-06-27 10:20:07 +01:00
Alessio Treglia
fb5d3a06f0 Attempt to fix SC2046 2015-06-26 18:01:40 +01:00
Alessio Treglia
da3b00a894 Get rid of cruft leftover 2015-06-26 17:57:43 +01:00
Alessio Treglia
466670d804 Quote `find' statement to prevent word splitting
This should fix ShellCheck SC2046 error.
2015-06-26 16:37:01 +01:00
Jose Diaz-Gonzalez
6bb513f12c Split nginx ssl logs by $APP
Refs #1158
2015-06-26 11:03:29 -04:00
Alessio Treglia
8e7916131c Double quote $@ in plugins/20_events/install too 2015-06-26 15:25:57 +01:00
Alessio Treglia
a858bc8f81 Double quote $@ array expansions 2015-06-26 15:18:38 +01:00
Alessio Treglia
f5e213e390 Add missing DOKKU_RSYSLOG_FILTER in install script
It had gone lost while porting the original 3rd party plugin.
2015-06-26 15:12:55 +01:00
Alessio Treglia
e9a73442e2 Fix missing 'fi' in plugins/20_events/install 2015-06-26 15:11:42 +01:00
Alessio Treglia
783bb02b2c Implement events logging feature
Record events (i.e. pluginhook's calls) as syslog entries and
provide a shortcut command to display the last part of the log
file.

A brief summary of the changes follows:

dokku:
 - New DOKKU_EVENTS_LOGFILE envvar to hold logfile location.

plugins/20_events/commands:
 - events output log entries, a tail's follow-like mode is
   provided too.
 - events:[on|off] enables/disables logging.
 - events:list lists events that are logged.

plugins/20_events/hook:
 - Generic hook that writes log entries. All the events are
   registered via symlink to this script.

plugins/common/functions:
 - dokku_log_event() writes log entries via logger.
 - dokku_log_pluginhook_call() formats log entries and writes
   them via dokku_log_event().
2015-06-26 14:47:18 +01:00
Kilian Ciuffolo
4a4ae9cb71 not fail if DOKKU_DOCKERFILE_START_CMD is not set 2015-06-25 18:05:03 -07:00
Kilian Ciuffolo
74164c2266 added DOKKU_DOCKERFILE_START_CMD support 2015-06-25 15:17:28 -07:00
Maciej Łebkowski
259f8507ca pluginhook to receive branches different than master 2015-06-25 18:00:11 +02:00
Jose Diaz-Gonzalez
48eca101f1 Merge pull request #1252 from progrium/1139-vagrant-docs-fix
Fix ssh port for vagrant installation. Closes #1139. [ci skip]
2015-06-25 11:22:36 -04:00
Jose Diaz-Gonzalez
0e63b4e069 Fix ssh port for vagrant installation. Closes #1139. [ci skip] 2015-06-25 11:22:17 -04:00
Jose Diaz-Gonzalez
cd8292f7fa Merge pull request #1251 from progrium/nginx-restarts
Fallback to using /etc/init.d/nginx reload directly to restart nginx
2015-06-25 11:15:39 -04:00
Jose Diaz-Gonzalez
626cd958a5 Fallback to using /etc/init.d/nginx reload directly to restart nginx. Closes #1165. Refs #1247 2015-06-25 10:38:47 -04:00
Jose Diaz-Gonzalez
15bd9db79c Merge pull request #1250 from progrium/1201-sglebs
SSL documentation is misleading
2015-06-25 10:08:25 -04:00
Marcio Marchini
114cecc911 SSL documentation is misleading
fixes #1194
[ci skip]
2015-06-25 10:07:25 -04:00
Jose Diaz-Gonzalez
2a469df5e4 Merge pull request #1207 from rockymadden/client-appname-as-arg-bug
Fixed bug with client commands taking verb, appname, and also arguments.
2015-06-25 10:06:02 -04:00
Michael Hobbs
4d162aa209 Merge pull request #1245 from arthurschreiber/patch-1
Support config variables containing `\n`
2015-06-24 12:32:47 -07:00
Arthur Schreiber
b40a86a2fc Add a testcase 2015-06-24 11:22:48 +02:00
Jose Diaz-Gonzalez
cc8b1fccc1 Release 0.3.19 2015-06-23 21:40:45 -04:00
Jose Diaz-Gonzalez
e674591567 Merge pull request #1246 from progrium/call-apt-get
Ensure we call apt-get before installing packages
2015-06-23 21:37:57 -04:00
Jose Diaz-Gonzalez
b39b0d4c78 Ensure we call apt-get before installing packages 2015-06-23 20:59:34 -04:00
Arthur Schreiber
0da389e8af Further fixes for config values containing newlines. 2015-06-23 23:53:10 +02:00
Arthur Schreiber
182ae4a50a Support config variables containing \n 2015-06-23 23:41:34 +02:00
Michael Hobbs
1aee972a82 Merge pull request #1237 from zyegfryed/patch-1
Typo (at at -> at)
2015-06-19 07:44:33 -07:00
Sébastien Fievet
b3269e3c95 Typo (at at -> at) 2015-06-19 10:23:44 +02:00
Michael Hobbs
c0f8764292 [ci skip] clarify phases in docker-options plugin 2015-06-17 08:12:46 -07:00
Michael Hobbs
6ebb897150 Merge pull request #1232 from progrium/1231_mh-dockerfile-build-cache-control
allow passing of docker build options and document dockerfile deployment. closes #1231
2015-06-15 16:22:31 -07:00
Michael Hobbs
ba4e87cb8b [ci skip] clean up documentation language 2015-06-15 09:09:49 -07:00
Michael Hobbs
ea66619f3c allow passing of docker build options and document dockerfile deployment. closes #1231 2015-06-15 09:00:33 -07:00
Michael Hobbs
62906cd542 Merge pull request #1227 from Flink/dockerfile-build-without-cache
Use --no-cache when building Dockerfile
2015-06-11 13:37:45 -07:00
Loïc Guitaut
9a71fff3f1 Use --no-cache when building Dockerfile
Since `docker build` is only invoked when actually building a new image
from a Dockerfile, using `--no-cache` allows to have an updated image
even if the Dockerfile hasn't changed.
This works well with Dockerfiles using `git` or packages referencing
latest versions instead of "static" ones.
2015-06-11 12:05:07 +02:00
Jose Diaz-Gonzalez
8880a9ce84 Merge pull request #1224 from lmars/docs-update
Update plugin-creation.md
2015-06-10 12:46:19 -04:00
Lewis Marshall
e61e6e94af Update plugin-creation.md
Signed-off-by: Lewis Marshall <lewis@lmars.net>
2015-06-09 23:34:54 +01:00
Jose Diaz-Gonzalez
d08cec5913 Merge pull request #1218 from progrium/mh-add-logspout-plugin
add dokku-logspout plugin
2015-06-06 14:37:54 -04:00
Michael Hobbs
473f28b0c3 [ci skip] add dokku-logspout plugin 2015-06-05 15:58:07 -07:00
Michael Hobbs
dda2ac03ee Merge pull request #1217 from kirushanth-sakthivetpillai/fix_broken_ssl_wildcard_redirect
Fix broken ssl wildcard redirect
2015-06-05 13:33:36 -07:00
Kirushanth Sakthivetpillai
db6e71b7d6 Update nginx.ssl.conf.template
use nginx $host variable intead of $ssl_server_nam (which may be *.example.com) which does bogus redirects
2015-06-05 15:01:22 -04:00
Michael Hobbs
daeea6ba13 Merge pull request #1206 from rockymadden/patch-1
Handle for installs in /usr/local/bin and the like.
2015-06-02 10:45:41 -07:00
Jose Diaz-Gonzalez
0bfa25f73e Merge pull request #1212 from progrium/mh-dont-install-docker-in-ci
let circleci dictate docker install (fixes master)
2015-05-27 18:03:29 -04:00
Michael Hobbs
b35190101c let circleci dictate docker install 2015-05-27 13:19:28 -07:00
Jose Diaz-Gonzalez
2ceed0cbdf Merge pull request #1210 from cddr/split-nginx-logs
[Fixes #1158] Split nginx logs by $APP
2015-05-25 23:23:52 -04:00
Andy Chambers
eedb05d656 [Fixes #1158] Split nginx logs by $APP
* nginx access logs to /var/log/nginx/${APP}-access.log
 * nginx error logs to /var/log/nginx/${APP}-error.log
2015-05-24 23:59:17 -07:00
Rocky Madden
587de65441 When parsing args when handling verbs, appname can be included as an argument causing bugs with commands that accept a verb, appname, and also arguments. 2015-05-22 18:21:54 -06:00
Rocky Madden
7a6450f0f0 Fixed lint issue. 2015-05-22 17:07:54 -06:00
Rocky Madden
a90090bacd Handle for installs in /usr/local/bin and the like. 2015-05-22 16:58:26 -06:00
Jose Diaz-Gonzalez
3bf68616ad Merge pull request #1204 from 3onyc/bootstrap-fix
Fix bootstrap.sh, install curl when it's missing, make curl follow redirects, don't suppress stderr
2015-05-22 04:04:23 -04:00
3onyc
450f9f19b2 Make curl follow redirects, and don't suppress its output in bootstrap.sh 2015-05-22 08:50:37 +02:00
3onyc
f17b799638 Ensure curl is installed by bootstrap.sh if it's missing 2015-05-22 08:50:23 +02:00
Michael Hobbs
6e0eb5938a Merge pull request #1202 from progrium/1185_mh-filter-wildcard-server-name
filter out literal wildcard when deploying an unrelated domain. closes #1185
2015-05-20 06:43:14 -07:00
Michael Hobbs
af38e4f25a filter out literal wildcard when deploying an unrelated domain. closes #1185 2015-05-19 17:58:02 -07:00
Michael Hobbs
b6b8f4ddc1 Merge pull request #1200 from progrium/mh-fix-lint-1198
fix lintball from #1198
2015-05-19 09:47:18 -07:00
Michael Hobbs
140f5a4939 fix lintball from #1198 2015-05-19 09:39:27 -07:00
Michael Hobbs
f86a6704bd Merge pull request #1198 from 3onyc/fix-preinst
Check web_config before key_file (Fixes #1196)
2015-05-19 09:37:27 -07:00
3onyc
c2c18af425 Check web_config before key_file (Fixes #1196) 2015-05-19 15:11:06 +02:00
Michael Hobbs
c5a74fac90 Merge pull request #1193 from progrium/1187_mh-docker-opts-over-ssh
handle docker opts over ssh without escaping quotes. closes #1187
2015-05-18 12:16:08 -07:00
Michael Hobbs
43869dd48d Merge pull request #1118 from progrium/mh-ps-scale
container-level scaling
2015-05-18 11:27:28 -07:00
Michael Hobbs
bd0b14692a lintball 2015-05-18 10:27:16 -07:00
Michael Hobbs
a785bf82e6 handle docker opts over ssh without escaping quotes. closes #1187 2015-05-18 09:01:12 -07:00
Michael Hobbs
1f6badc6a1 lintball fix 2015-05-18 08:46:42 -07:00
Jose Diaz-Gonzalez
0816ee7575 Merge pull request #1180 from sherbondy/patch-1
Update docker-options.md
2015-05-18 10:50:38 -04:00
Michael Hobbs
0d2e5f1a14 Merge branch 'master' into mh-ps-scale 2015-05-17 17:45:01 -07:00
Jose Diaz-Gonzalez
7dd52ef1fc Merge pull request #1192 from alessio/alessio-dokku-events
Add reference to dokku-events plugin
2015-05-17 19:39:41 -04:00
Alessio Treglia
347366b6e4 Add reference to dokku-events plugin 2015-05-17 22:20:46 +01:00
Jose Diaz-Gonzalez
3639f16137 Merge pull request #1168 from cjblomqvist/pr/1155
Better, actually working, git-rev plugin
2015-05-16 14:32:22 -04:00
Jose Diaz-Gonzalez
eac3eba50e Merge pull request #1179 from trsc/prevent_dismissal_of_urls_in_checks_file
prevent dismissal of URLs in CHECKS file that contain query params
2015-05-16 14:30:21 -04:00
Ethan Sherbondy
1da6cd6b3c Update docker-options.md
My changes may not be quite correct, but as far as I can tell, DOCKER_OPTIONS now requires specifying a phase explicitly.
Also updated references to `--link` since `-link` has been deprecated in Docker.
2015-05-11 20:59:37 -04:00
Andreas Follmann
6eefcbb87c prevent dismissal of URLs in CHECKS file that contain query params 2015-05-11 15:31:28 +02:00
cjblomqvist
cb1aac75fb Better, actually working, git-rev plugin
The previous one broke deployment on first deployment and was always one (relative deploys) REV behind when "working".
2015-05-04 11:34:13 +02:00
Michael Hobbs
4aedb6507a Merge branch 'master' into mh-ps-scale 2015-04-30 10:32:29 -07:00
Michael Hobbs
673d43b532 output containers to be stopped and killed. attempt a kill on old containers after we attempt to stop them 2015-04-24 11:32:14 -07:00
Michael Hobbs
290745d324 only validate and restart nginx if we're deployed. use REGEX when handling SSL and NON-SSL hosts 2015-04-24 11:31:27 -07:00
Michael Hobbs
a18fa7afbe we only need the first container here 2015-04-24 11:30:20 -07:00
Michael Hobbs
e9663caf5c updated dokku ls output with container status 2015-04-24 10:49:18 -07:00
Michael Hobbs
39dd4fc700 fix typo in output 2015-04-21 23:22:08 -07:00
Michael Hobbs
1fa19591bf sort correctly 2015-04-21 23:14:22 -07:00
Michael Hobbs
7c1ef003b7 set DYNO env var based on proc type 2015-04-21 23:13:47 -07:00
Michael Hobbs
e1f8654a74 attempt to stop containers instead of just killing 2015-04-21 22:21:47 -07:00
Michael Hobbs
c2fa8d14c9 scale web to 1 by default and ignore all others 2015-04-21 22:13:45 -07:00
Michael Hobbs
eb0935a691 make dokku ls pretty 2015-04-21 22:02:21 -07:00
Michael Hobbs
9d504fe93a make sure we cleanup tmp. logging when we hit edge cases 2015-04-21 21:36:03 -07:00
Michael Hobbs
e74c6460fb make semantic sense of _image functions 2015-04-21 20:27:16 -07:00
Michael Hobbs
2cb957d1dd move release_and_deploy to plugin functions. only attempt Procfile copy if we're buildstep based 2015-04-21 20:21:25 -07:00
Michael Hobbs
807e1b97b4 [ci skip] scaling docs 2015-04-21 14:33:28 -07:00
Michael Hobbs
33258663f4 uncomment my accidental comment out 2015-04-21 14:33:28 -07:00
Michael Hobbs
3361a20a30 only check containers running proc named web for now 2015-04-21 14:33:28 -07:00
Michael Hobbs
979c1155c2 add process with no listener 2015-04-21 14:33:28 -07:00
Michael Hobbs
4ae7af091a don't clobber oids when multiple proc types exist 2015-04-21 14:33:28 -07:00
Michael Hobbs
7348d7790c test scaling different proc types 2015-04-21 14:33:28 -07:00
Michael Hobbs
715921c60e comment out skipped test to save time 2015-04-21 14:33:28 -07:00
Michael Hobbs
636e139e4a only balance web containers 2015-04-21 14:33:28 -07:00
Michael Hobbs
ddf893bc8a fix rebuildall and restartall 2015-04-21 14:33:28 -07:00
Michael Hobbs
9a704bc656 use test in both cases 2015-04-21 14:33:28 -07:00
Michael Hobbs
d44788721f format multiple scale lines 2015-04-21 14:32:31 -07:00
Michael Hobbs
d88efd5cc4 no need to find beyond a depth of 1. also bombs when the app cache dir is owned by the container user 2015-04-21 14:32:31 -07:00
Michael Hobbs
930987ad02 container/ip/port file cleanup when scaling down. more tests 2015-04-21 14:32:31 -07:00
Michael Hobbs
14cc01dd5b use helper functions 2015-04-21 14:32:31 -07:00
Michael Hobbs
bbc03dbfdd helper functions 2015-04-21 14:32:30 -07:00
Michael Hobbs
d5cc7595fd default web proc. avoid unclear file not found error when procfile is missing 2015-04-21 14:32:30 -07:00
Michael Hobbs
435f7e69eb only attempt copy if image exists 2015-04-21 14:32:30 -07:00
Michael Hobbs
0f8be7c946 fix missing tmpdir prefix 2015-04-21 14:32:30 -07:00
Michael Hobbs
d42bb79d38 handle non-herokuish deploys that don't create Procfiles. i.e. buildpack-nginx 2015-04-21 14:32:30 -07:00
Michael Hobbs
389b5efa06 only release and deploy if we're modifying scale settings 2015-04-21 14:32:30 -07:00
Michael Hobbs
5c85e8bf65 app repo SCALE file takes precedence over local settings 2015-04-21 14:32:30 -07:00
Michael Hobbs
99d2601f2f fix tests 2015-04-21 14:32:30 -07:00
Michael Hobbs
e27d0e6fa5 wrap container id checks and reading into common function that attempts new and old style container id files
aggregate log streams
2015-04-21 14:32:30 -07:00
Michael Hobbs
33f872183e initial pass at container-level scaling 2015-04-21 14:27:23 -07:00
Andrew Starr-Bochicchio
f808c8efe4 Add support for multiple keys in the installer. 2014-12-16 16:48:28 -05:00
110 changed files with 2307 additions and 680 deletions

View File

@@ -1,8 +1,160 @@
# History
## 0.3.24
This release is a bugfix release covering dokku packaging.
### Bug Fixes
- #1397: @josegonzalez Use https docker apt repo
- #1394: @josegonzalez Remove `dokku plugins-install` from postinst hook
### Docs Changes
- #1395: @adrianmoya Adding fqdn requirement
## 0.3.23
This release is a bugfix release mostly covering installation and nginx issues. As well, we launched a nicer documentation site [here](http://progrium.viewdocs.io/dokku/). Thanks to all of our contributors for making this a great release!
### Bug Fixes
- #1334: @josegonzalez Fix pluginhook building and update package version
- #1335: @josegonzalez Fix name for michaelshobbs
- #1341: @michaelshobbs Honor $DOKKU_DOCKERFILE_PORT when binding the docker container to an external IP.
- #1357: @michaelshobbs only run domains and nginx config if we have a port and ip
- #1366: @omeid Make bootstrap.sh safe from bad connection
- #1370: @SamuelMarks Switch from /dev/null to -qq, from --silent to -sL, and sudo
- #1380: @emdantrim Removed uses of `sudo` from `bootstrap.sh`
- #1383: @michaelshobbs fix downscaling from 10+
### New Features
- #1292: @michaelshobbs use column to format help output
- #1337: @josegonzalez Update PREBUILT_STACK_URL to latest buildstep release
- #1354: @alessio Log receive-branch pluginhook
- #1359: @michaelshobbs allow DOKKU_WAIT_TO_RETIRE to be defined per app
- #1365: @michaelshobbs support dockerfile images that don't include bash
### Docs Changes
- #1305: @josegonzalez Updated documentation site
- #1321: @fwolfst Mention alternative to nginx.conf templates: include-dir.
- #1346: @michaelshobbs document dokku cleanup and the potential of compat issues
- #1349: @alexkruegger add plugin dokku-app-configfiles
- #1358: @bkniffler Add suggestion for low memory VMs
- #1377: @vkurup Fix link to docs from README
- #1379: @jezdez Deleted old, unmaintained plugins
- #1381: @lunohodov Instructions for using the bash client in shells other than bash
## 0.3.22
This release is a general bugfix release, with improvements to handling of nginx templates and application configuration.
### Bug Fixes
- #825: @andrewsomething Add support for multiple keys in the installer.
- #1274: @michaelshobbs Parse correct section of path for `dokku ls` container type
- #1289: @michaelshobbs Do not background container cleanup
- #1298: @SonicHedgehog Fix check-deploy skipping the root path
- #1300: @michaelshobbs Fix urls command when NO_VHOST=1
- #1310: @michaelshobbs Use config:get for checks skipping variables
- #1311: @michaelshobbs Ignore protocol of Dockerfile EXPOSE (refs: #1280)
- #1312: @michaelshobbs Use docker inspect fordefault container check. Closes #1270
- #1313: @michaelshobbs Verify we have an app when deploy is called. Closes #1309
- #1319: @MWers Spelling fix: 'comma seperated'=>'comma-separated'
- #1331: @alexkruegger Fix retrieval of nginx.conf.template app
### New Features
- #1149: @mlebkowski Add pluginhook to receive branches different than master
- #1254: @kilianc Add DOKKU_DOCKERFILE_START_CMD support
- #1261: @Flink Add the ability to skip checks (all or default)
- #1277: @krokhale Add gzip to nginx templates by default
- #1278: @assaf Add the ability to retrieve nginx template from app
- #1291: @michaelshobbs Refactored interface for managing global/local app configuration
- #1299: @SonicHedgehog Set X-Forwarded-Proto header if TLS is enabled when running checks
### Docs Changes
- #1273: @alessio Add docs for the events plugin
- #1276: @josegonzalez Reorder and deprecate a few plugins
- #1279: @josegonzalez Add docs for `receive-branch` hook. Refs #1149
- #1282: @josegonzalez Move primecache to deprecated plugins
- #1285: @josegonzalez Rename dokku-events-logs.md according to index.md
- #1296: @Flink Add docker-auto-volumes to plugins
- #1301: @mixxorz Add reset mtime plugin list
- #1302: @fwolfst Mention where original nginx templates are found by default.
- #1306: @josegonzalez Clarify web/cli installation docs. Closes #1177. Closes #1170
- #1307: @josegonzalez Add release documentation. Closes #1287
- #1324: @michaelshobbs Update docs to reflect default checks
## 0.3.21
This release fixes an issue with installing buildstep and dokku.
### New Features
- #1256: @alessio Log all dokku events to /var/log/dokku/events.log
### Bug Fixes
- #1269: @josegonzalez Peg lxc-docker in buildstep to 1.6.2
## 0.3.20
This release pegs Dokku to Docker 1.6.2. Docker 1.7.0 introduced changes in `docker ps` which cause incompatibilities with many popular dokku plugins.
### New Features
- #1245: @arthurschreiber Support config variables containing `\n`
- #1257: @josegonzalez Split nginx ssl logs by $APP
### Bug Fixes
- #1207: @rockymadden Fixed bug with client commands taking verb, appname, and also arguments.
- #1251: @josegonzalez Fallback to using /etc/init.d/nginx reload directly to restart nginx
- #1264: @josegonzalez Require lxc-docker-1.6.2
### Docs Changes
- #1252: @josegonzalez Fix ssh port for vagrant installation. Closes #1139. [ci skip]
- #1250: @josegonzalez SSL documentation is misleading
## 0.3.19
### New Features
- #1118: @michaelshobbs Heroku-style Container-Level scaling
- #1210: @cddr Split nginx logs out by $APP
- #1232: @michaelshobbs Allow passing of docker build options and document dockerfile deployment. Closes #1231
### Bug Fixes
- #1179: @follmann Prevent dismissal of URLs in CHECKS file that contain query params
- #1193: @michaelshobbs Handle docker opts over ssh without escaping quotes. closes #1187
- #1198: @3onyc Check web_config before key_file (Fixes #1196)
- #1200: @josegonzalez Fix lintball from #1198
- #1202: @michaelshobbs Filter out literal wildcard when deploying an unrelated domain. Closes #1185
- #1204: @3onyc Fix bootstrap.sh, install curl when it's missing, make curl follow redirects, don't suppress stderr
- #1206: @rockymadden Handle for installs in /usr/local/bin and the like.
- #1212: @michaelshobbs Let circleci dictate docker install (fixes master)
- #1217: @kirushanth-sakthivetpillai Fix broken ssl wildcard redirect
- #1227: @Flink Use --no-cache when building Dockerfile
- #1246: @josegonzalez Ensure we call apt-get before installing packages
### Docs Changes
- #1168: @cjblomqvist [docs] Update git-rev plugin to point to maintained version
- #1180: @sherbondy [docs] Clarify usage around official dokku `docker-options` plugin
- #1192: @alessio [docs] Add reference to dokku-events plugin
- #1218: @michaelshobbs [docs] add dokku-logspout plugin
- #1224: @lmars [docs] Add link from plugin-creation to pluginhooks
- #1237: @zyegfryed [docs] Typo (at at -> at)
## 0.3.18
- #1111: @michaelhobbs Call pre-build-dockerfile before docker build
- #1111: @michaelshobbs Call pre-build-dockerfile before docker build
- #1119: @joshco Logging info suggesting tuned CHECKS
- #1120: @josegonzalez [docs] Add freenode shield to readme
- #1121: @josegonzalez Prompt users to run the web installer via MOTD. Closes #943
@@ -11,16 +163,16 @@
- #1138: @chrisbutcher [docs] Include tip about using sshcommand acl-add
- #1140: @NigelThorne [docs] Replaced reference to gitreceive with sshcommand as per #746
- #1144: @protonet Allow git-remote with different port
- #1145: @michaelhobbs allow docker-options over ssh. plus test. closes #1135
- #1146: @michaelhobbs Don't re-deploy on domains:add. allow multple domains on command line. Closes #1142
- #1147: @michaelhobbs Utilize all 4 free CircleCI containers
- #1145: @michaelshobbs allow docker-options over ssh. plus test. closes #1135
- #1146: @michaelshobbs Don't re-deploy on domains:add. allow multple domains on command line. Closes #1142
- #1147: @michaelshobbs Utilize all 4 free CircleCI containers
- #1148: @TheEmpty [docs] Add information about 444 for nginx in default_sever.
- #1150: @cjblomqvist [docs] Add monit plugin
- #1151: @LTe Do not kill docker container with SIGKILL
- #1153: @econya [docs] Add README-section: how to contribute
- #1058: @josegonzalez Move bootstrap script to use debian package where possible
- #1171: @josegonzalez Use debconf for package configuration
- #1172: @michaelhobbs unify default and custom nginx template processing
- #1172: @michaelshobbs unify default and custom nginx template processing
- #1173: @josegonzalez [docs] standardize readme badges
- #1178: @jagandecapri [docs] Update plugins.md
- #1189: @vincentfretin wait 30 seconds and not 30 minutes
@@ -30,29 +182,29 @@
- #1056: @joshco New check retries feature
- #1060: @josegonzalez Add .template suffix to nginx configuration templates. Refs #1054
- #1064: @michaelhobbs [docs] Document test suite
- #1065: @michaelhobbs Minor dev env cleanup
- #1064: @michaelshobbs [docs] Document test suite
- #1065: @michaelshobbs Minor dev env cleanup
- #1067: @martinAntsy Fix nginx docs wording around config template eg
- #1068: @matiaskorhonen Fix escaping in the rc.local script in the Linode StackScript
- #1074: @Flink Better detection of dokku remote in dokku_client.sh
- #1075: @Flink Use TTY option for SSH
- #1077: @Flink [docs] Add dokku-psql-single-container to plugins
- #1079: @rorykoehler Corrected configuration link in bootstrap.sh
- #1080: @michaelhobbs Include official docker-options plugin. closes #1062
- #1081: @michaelhobbs Force testing .env with no newline. Closes #1025, #1026, #1063
- #1082: @michaelhobbs Test cleanup with slight performance boost
- #1080: @michaelshobbs Include official docker-options plugin. closes #1062
- #1081: @michaelshobbs Force testing .env with no newline. Closes #1025, #1026, #1063
- #1082: @michaelshobbs Test cleanup with slight performance boost
- #1084: @awendt Make port forwarding configurable
- #1087: @michaelhobbs Make docker-options adhere to DOKKU_NOT_IMPLEMENTED_EXIT pattern
- #1088: @michaelhobbs Support dockerfiles without expose command. closes #1083
- #1097: @michaelhobbs Use config:set-norestart in domains plugin. config:get for dockerfile port. closes #1041
- #1087: @michaelshobbs Make docker-options adhere to DOKKU_NOT_IMPLEMENTED_EXIT pattern
- #1088: @michaelshobbs Support dockerfiles without expose command. closes #1083
- #1097: @michaelshobbs Use config:set-norestart in domains plugin. config:get for dockerfile port. closes #1041
- #1102: @kblcuk Source app-specific ENV during check-deploy
- #1107: @Benjamin-Dobell [docs] Added Dokku Graduate to the list of known plugins
## 0.3.16
- #974: @michaelhobbs Don't use set to guard against pipefail
- #975: @michaelhobbs Simplify SSL hostname handling and avoid overwriting variables. refs #971
- #978: @michaelhobbs Add apparmor and cgroup-lite as pre-dependencies for dokku debian package
- #974: @michaelshobbs Don't use set to guard against pipefail
- #975: @michaelshobbs Simplify SSL hostname handling and avoid overwriting variables. refs #971
- #978: @michaelshobbs Add apparmor and cgroup-lite as pre-dependencies for dokku debian package
- #980: @josegonzalez [docs] Add documentation for pluginhooks
- #981: @josegonzalez Remove old files
- #982: @josegonzalez [docs] Add documentation for existing clients. Closes #977
@@ -66,18 +218,18 @@
- #992: @josegonzalez [docs] Fix digital ocean docs. Closes #991
- #994: @alessio Fix quoting in container termination. Closes #249
- #996: @pmvieira [docs] Minor typo fix in the pluginhooks documentation
- #1003: @michaelhobbs Remove quoting around cleanup and disable lint for those lines
- #1003: @michaelshobbs Remove quoting around cleanup and disable lint for those lines
- #1001: @sekjun9878 [docs] Add sekjun9878/dokku-redis-plugin to plugins.md
- #1004: @michaelhobbs Remove quoting from dockerfile env. closes #1002
- #1018: @michaelhobbs Confine arg shifting to between dokku and command. closes #1017
- #1004: @michaelshobbs Remove quoting from dockerfile env. closes #1002
- #1018: @michaelshobbs Confine arg shifting to between dokku and command. closes #1017
- #1022: @Flink [docs] Add dokku-maintenance to plugins
- #1008: @lmars Support multiple domains using a wildcard TLS certificate
- #1013: @lmars Fix URL schemes in `dokku urls` output
- #1027: @nickstenning [docs] Add webhooks plugin to documentation
- #1026: @michaelhobbs Ensure we have newlines around our config. closes #1025
- #1010: @michaelhobbs Don't run create/destroy twice in tests
- #1026: @michaelshobbs Ensure we have newlines around our config. closes #1025
- #1010: @michaelshobbs Don't run create/destroy twice in tests
- #1028: @Flink [docs] Add rails-logs to plugins
- #1031: @michaelhobbs Upgrade docker in CI to 1.5.0
- #1031: @michaelshobbs Upgrade docker in CI to 1.5.0
- #1029: @assaf Added several enhancements for CHECKS file:
- Specify how long to wait before running first check
- Specify timeout for each check
@@ -86,27 +238,27 @@
- #1032: @cameron-martin Updated dokku-installer to use relative path
- #1035: @Flink [docs] Add dokku-http-auth to plugins
- #1040: @ebeigarts [docs] Add dokku-slack plugin information
- #1038: @michaelhobbs Default container check. closes #1020
- #1036: @michaelhobbs Create config set/unset without restart. closes #908
- #1009: @michaelhobbs Extract first port from Dockerfile and set config variable for use in deploy phase. closes #993
- #1042: @michaelhobbs Update to Support xip.io wildcard DNS as a VHOST
- #1043: @michaelhobbs Use upstart config from docker docs. closes #1015
- #1047: @michaelhobbs Show logs on deploy success and failure
- #1038: @michaelshobbs Default container check. closes #1020
- #1036: @michaelshobbs Create config set/unset without restart. closes #908
- #1009: @michaelshobbs Extract first port from Dockerfile and set config variable for use in deploy phase. closes #993
- #1042: @michaelshobbs Update to Support xip.io wildcard DNS as a VHOST
- #1043: @michaelshobbs Use upstart config from docker docs. closes #1015
- #1047: @michaelshobbs Show logs on deploy success and failure
- #1049: @ebeigarts [docs] Change Slack Notifications link
- #1051: @Flink [docs] Add dokku-airbrake-deploy to plugins
- #1057: @josegonzalez Updated deb packaging
## 0.3.15
- #950: @michaelhobbs Do not count blank lines in `make count`
- #952: @michaelhobbs Document cli args over ssh. closes #951
- #954: @michaelhobbs Dockerfile support
- #955: @michaelhobbs Quick style refactor
- #956: @michaelhobbs Comment out skipped tests as we pay the cost for setup() and teardown() anyway
- #957: @michaelhobbs Implement dokku shell and ls (by @plietar). refs #312
- #960: @michaelhobbs Use consistent bash shebang. closes #959
- #950: @michaelshobbs Do not count blank lines in `make count`
- #952: @michaelshobbs Document cli args over ssh. closes #951
- #954: @michaelshobbs Dockerfile support
- #955: @michaelshobbs Quick style refactor
- #956: @michaelshobbs Comment out skipped tests as we pay the cost for setup() and teardown() anyway
- #957: @michaelshobbs Implement dokku shell and ls (by @plietar). refs #312
- #960: @michaelshobbs Use consistent bash shebang. closes #959
- #962: @josegonzalez Update debian package building due to man page generation changes
- #964: @michaelhobbs Only look for long args in global space. allows for short args in plugins. closes #963
- #964: @michaelshobbs Only look for long args in global space. allows for short args in plugins. closes #963
- #966: @djelic handle upgrade in debian/preinst script
## 0.3.14
@@ -114,31 +266,31 @@
- #891: @josegonzalez Keep existing configuration files when installing nginx. Refs #886
- #892: @josegonzalez Change documentation on where the ssh config PORT is setup
- #894: @josegonzalez Dokku client improvements
- #895: @michaelhobbs Document deploying private git submodules. Closes #644
- #896: @michaelhobbs Add docker-args pluginhook call to build phase. Closes #515
- #897: @michaelhobbs Official PS plugin
- #895: @michaelshobbs Document deploying private git submodules. Closes #644
- #896: @michaelshobbs Add docker-args pluginhook call to build phase. Closes #515
- #897: @michaelshobbs Official PS plugin
- #898: @joliv Update man page for 0.3.13
- #899: @joliv Use help2man to automatically generate man pages
- #900: @michaelhobbs Support extracting SANs from SSL certificates and adding them to nginx config
- #900: @michaelshobbs Support extracting SANs from SSL certificates and adding them to nginx config
- #901: @misto Pull new tags when upgrading to update VERSION
- #904: @michaelhobbs Prevent error on restartall when no apps deployed
- #904: @michaelshobbs Prevent error on restartall when no apps deployed
- #905: @vincentfretin robv/dokku-elasticsearch not compatible with latest version
- #907: @vincentfretin Don't use -o pipefail for plugin
- #914: @michaelhobbs Conditionally set interactive and tty on dokku run. Closes #552. Closes #913
- #915: @michaelhobbs Document default sites in nginx. Closes #650
- #916: @michaelhobbs Document build phase troubleshooting suggestions. Closes #841. Closes #911.
- #917: @michaelhobbs Document resolvconf troubleshooting step. Closes #649
- #922: @michaelhobbs Use tty cmd to detect if we have one. Closes #921
- #925: @michaelhobbs Implement rebuild command that reuses git_archive_all
- #914: @michaelshobbs Conditionally set interactive and tty on dokku run. Closes #552. Closes #913
- #915: @michaelshobbs Document default sites in nginx. Closes #650
- #916: @michaelshobbs Document build phase troubleshooting suggestions. Closes #841. Closes #911.
- #917: @michaelshobbs Document resolvconf troubleshooting step. Closes #649
- #922: @michaelshobbs Use tty cmd to detect if we have one. Closes #921
- #925: @michaelshobbs Implement rebuild command that reuses git_archive_all
- #926: @dyson Update Troubleshooting link in README.md.
- #927: @michaelhobbs Support both docker-args PHASE and docker-args-PHASE. Closes #906
- #933: @michaelhobbs Remove references to .pem. Closes #930
- #936: @michaelhobbs Only execute build stack if we have access to /var/run/docker.sock. Closes #929
- #927: @michaelshobbs Support both docker-args PHASE and docker-args-PHASE. Closes #906
- #933: @michaelshobbs Remove references to .pem. Closes #930
- #936: @michaelshobbs Only execute build stack if we have access to /var/run/docker.sock. Closes #929
- #938: @vincentfretin Enable ssl_prefer_server_ciphers
- #940: @michaelhobbs Use valid composer json with specified php runtime
- #941: @michaelhobbs Source global env prior to app env. Closes #931
- #942: @michaelhobbs Test clojure app
- #949: @michaelhobbs Common functions library with simple argument parsing. Closes #932. Closes #945
- #940: @michaelshobbs Use valid composer json with specified php runtime
- #941: @michaelshobbs Source global env prior to app env. Closes #931
- #942: @michaelshobbs Test clojure app
- #949: @michaelshobbs Common functions library with simple argument parsing. Closes #932. Closes #945
## 0.3.13
@@ -147,45 +299,45 @@
- #859: @josegonzalez Pass command being executed when retrieving DOCKER_ARGS via pluginhook.
- #861: @josegonzalez Default DOKKU_ROOT to ~dokku if unspecified. Closes #587
- #863: @josegonzalez Add missing properties to the php composer.json
- #864: @michaelhobbs bind docker container to internal port if using vhosts
- #867: @michaelhobbs silent grep stderr. closes #862
- #868: @michaelhobbs use circleci for automated testing
- #872: @michaelhobbs fix/enable multi buildpack test
- #873: @michaelhobbs support pre deployment usage of domains plugin. fixes interface binding issue
- #864: @michaelshobbs bind docker container to internal port if using vhosts
- #867: @michaelshobbs silent grep stderr. closes #862
- #868: @michaelshobbs use circleci for automated testing
- #872: @michaelshobbs fix/enable multi buildpack test
- #873: @michaelshobbs support pre deployment usage of domains plugin. fixes interface binding issue
- #874: @josegonzalez Add advanced installation docs that were removed in #706. Closes #869
- #876: @vincentfretin give CACHE_PATH env variable for forward compatibility with herokuish
- #877: @michaelhobbs add MH to AUTHORS
- #880: @michaelhobbs disable VHOST deployment if global VHOST file is missing and an app domain has not been added
- #877: @michaelshobbs add MH to AUTHORS
- #880: @michaelshobbs disable VHOST deployment if global VHOST file is missing and an app domain has not been added
- #881: @jomo troubleshooting typo: 64 != 46
- #884: @michaelhobbs IP and PORT are likely to get clobbered. rename them
- #885: @michaelhobbs test deploy node app without procfile
- #884: @michaelshobbs IP and PORT are likely to get clobbered. rename them
- #885: @michaelshobbs test deploy node app without procfile
## 0.3.12
- #846: @michaelhobbs add certificate CN to app VHOST if it's not already
- #846: @michaelshobbs add certificate CN to app VHOST if it's not already
- #847: @leonardodino Update bootstrap.sh: new docs url
- #849: @cjoudrey Add docs for CHECKS
- #850: @michaelhobbs test scala deployment
- #850: @michaelshobbs test scala deployment
## 0.3.11
- #821: @michaelhobbs use wercker for automated testing
- #833: @michaelhobbs auto remove the cache dir cleanup container
- #835: @michaelhobbs make sure we match the specific string in VHOST
- #838: @michaelhobbs quote build_env vars to allow for spaces in config
- #839: @michaelhobbs notify irc on builds
- #844: @michaelhobbs build app urls based on wildcard ssl or app ssl
- #821: @michaelshobbs use wercker for automated testing
- #833: @michaelshobbs auto remove the cache dir cleanup container
- #835: @michaelshobbs make sure we match the specific string in VHOST
- #838: @michaelshobbs quote build_env vars to allow for spaces in config
- #839: @michaelshobbs notify irc on builds
- #844: @michaelshobbs build app urls based on wildcard ssl or app ssl
## 0.3.10
- #783: @josegonzalez New domains plugin and nginx extension
- #818: @michaelhobbs rebuild nginx config on domain change
- #827: @michaelhobbs Handle IP only access
- #828: @michaelhobbs Display the port for an app when falling back to the ip address
- #818: @michaelshobbs rebuild nginx config on domain change
- #827: @michaelshobbs Handle IP only access
- #828: @michaelshobbs Display the port for an app when falling back to the ip address
## 0.3.9
- #787: @josegonzalez/@michaelhobbs Official user-env-compile plugin
- #787: @josegonzalez/@michaelshobbs Official user-env-compile plugin
- Uses ENV and APP/ENV files
- Supports old `BUILD_ENV` files (which are likely in wide-use)
- Allows user's to override globals with app-specific configuration
@@ -222,7 +374,7 @@
## 0.3.4
- #780: @josegonzalez Output error message when a command is not found. Closes #778
- #781: @michaelhobbs use DOKKU_IMAGE (i.e. progrium/buildstep)
- #781: @michaelshobbs use DOKKU_IMAGE (i.e. progrium/buildstep)
## 0.3.3
@@ -236,7 +388,7 @@
## 0.3.2
- #675: @michaelhobbs port wait-to-retire from broadly/dokku
- #675: @michaelshobbs port wait-to-retire from broadly/dokku
- #765: @josegonzalez Ignore tls directory when listing apps
- #766: @josegonzalez Sort output of apps command
- #771: @josegonzalez Doc updates

View File

@@ -3,7 +3,7 @@ DOKKU_VERSION = master
SSHCOMMAND_URL ?= https://raw.github.com/progrium/sshcommand/master/sshcommand
PLUGINHOOK_URL ?= https://s3.amazonaws.com/progrium-pluginhook/pluginhook_0.1.0_amd64.deb
STACK_URL ?= https://github.com/progrium/buildstep.git
PREBUILT_STACK_URL ?= https://github.com/progrium/buildstep/releases/download/2014-12-16/2014-12-16_42bd9f4aab.tar.gz
PREBUILT_STACK_URL ?= https://github.com/progrium/buildstep/releases/download/2015-07-14/2015-07-14_1afb78e747.tar.gz
PLUGINS_PATH ?= /var/lib/dokku/plugins
# If the first argument is "vagrant-dokku"...
@@ -86,15 +86,17 @@ docker: aufs
apt-get install -qq -y curl
egrep -i "^docker" /etc/group || groupadd docker
usermod -aG docker dokku
ifndef CI
curl -sSL https://get.docker.com/gpg | apt-key add -
echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
apt-get update
ifdef DOCKER_VERSION
apt-get install -qq -y lxc-docker-${DOCKER_VERSION}
else
apt-get install -qq -y lxc-docker
apt-get install -qq -y lxc-docker-1.6.2
endif
sleep 2 # give docker a moment i guess
endif
aufs:
ifndef CI

View File

@@ -1,4 +1,4 @@
# Dokku [![Build Status](https://img.shields.io/circleci/project/progrium/dokku.svg "Build Status")](https://circleci.com/gh/progrium/dokku/tree/master) [![Ubuntu Package](https://img.shields.io/badge/package-ubuntu-brightgreen.svg?style=flat-square "Ubuntu Package")](https://packagecloud.io/dokku/dokku) [![IRC Network](https://img.shields.io/badge/irc-freenode-blue.svg "IRC Freenode")](https://webchat.freenode.net/?channels=dokku) [![Documentation](https://img.shields.io/badge/docs-viewdocs-blue.svg "Viewdocs")](http://progrium.viewdocs.io/dokku/index)
# Dokku [![Build Status](https://img.shields.io/circleci/project/progrium/dokku.svg "Build Status")](https://circleci.com/gh/progrium/dokku/tree/master) [![Ubuntu Package](https://img.shields.io/badge/package-ubuntu-brightgreen.svg?style=flat-square "Ubuntu Package")](https://packagecloud.io/dokku/dokku) [![IRC Network](https://img.shields.io/badge/irc-freenode-blue.svg "IRC Freenode")](https://webchat.freenode.net/?channels=dokku) [![Documentation](https://img.shields.io/badge/docs-viewdocs-blue.svg "Viewdocs")](http://progrium.viewdocs.io/dokku/)
Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen. Sponsored by our friends at [Deis](http://deis.io/).
@@ -10,8 +10,8 @@ Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen. S
To install the latest stable release, you can run the following commands as a user that has access to `sudo`:
wget https://raw.github.com/progrium/dokku/v0.3.18/bootstrap.sh
sudo DOKKU_TAG=v0.3.18 bash bootstrap.sh
wget https://raw.github.com/progrium/dokku/v0.3.24/bootstrap.sh
sudo DOKKU_TAG=v0.3.24 bash bootstrap.sh
### Upgrading
@@ -19,7 +19,7 @@ To install the latest stable release, you can run the following commands as a us
## Documentation
Full documentation - including advanced installation docs - are available online at [docs](http://progrium.viewdocs.io/dokku/index)
Full documentation - including advanced installation docs - are available online at [docs](http://progrium.viewdocs.io/dokku/)
## Support

2
Vagrantfile vendored
View File

@@ -46,7 +46,7 @@ Vagrant::configure("2") do |config|
end
config.vm.define "build", autostart: false do |vm|
vm.vm.provision :shell, :inline => "DEBIAN_FRONTEND=noninteractive apt-get -qq -y install git > /dev/null && cd /root/dokku && #{make_cmd}"
vm.vm.provision :shell, :inline => "apt-get update > /dev/null && DEBIAN_FRONTEND=noninteractive apt-get -qq -y install git > /dev/null && cd /root/dokku && #{make_cmd}"
vm.vm.provision :shell, :inline => "cd /root/dokku && make deb-all"
end

View File

@@ -5,16 +5,27 @@
# If installing a tag higher than 0.3.13, it may install dokku via a package (so long as the package is higher than 0.3.13)
# It checks out the dokku source code from Github into ~/dokku and then runs 'make install' from dokku source.
# We wrap this whole script in a function, so that we won't execute
# until the entire script is downloaded.
# That's good because it prevents our output overlapping with curl's.
# It also means that we can't run a partially downloaded script.
bootstrap () {
set -eo pipefail
export DEBIAN_FRONTEND=noninteractive
export DOKKU_REPO=${DOKKU_REPO:-"https://github.com/progrium/dokku.git"}
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://progrium.viewdocs.io/dokku/advanced-installation ."
exit 1
fi
apt-get update
which curl > /dev/null || apt-get install -qq -y curl
[[ $(lsb_release -sr) == "12.04" ]] && apt-get install -qq -y python-software-properties
dokku_install_source() {
@@ -31,19 +42,19 @@ dokku_install_source() {
}
dokku_install_package() {
curl --silent https://get.docker.io/gpg 2> /dev/null | apt-key add - > /dev/null 2>&1
curl --silent https://packagecloud.io/gpg.key 2> /dev/null | apt-key add - > /dev/null 2>&1
curl -sSL https://get.docker.io/gpg | apt-key add -
curl -sSL https://packagecloud.io/gpg.key | apt-key add -
echo "deb http://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
echo "deb https://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" > /etc/apt/sources.list.d/dokku.list
sudo apt-get update > /dev/null
sudo apt-get install -qq -y "linux-image-extra-$(uname -r)" apt-transport-https
apt-get update > /dev/null
apt-get install -qq -y "linux-image-extra-$(uname -r)" apt-transport-https
if [[ -n $DOKKU_CHECKOUT ]]; then
sudo apt-get install -qq -y dokku=$DOKKU_CHECKOUT
apt-get install -qq -y dokku=$DOKKU_CHECKOUT
else
sudo apt-get install -qq -y dokku
apt-get install -qq -y dokku
fi
}
@@ -67,3 +78,7 @@ elif [[ -n $DOKKU_TAG ]]; then
else
dokku_install_package
fi
}
bootstrap

View File

@@ -21,9 +21,9 @@ if ARGV[0] == "onboot"
exit
end
version = "v0.3.18"
version = "v0.3.24"
dokku_root = ENV["DOKKU_ROOT"] || "/home/dokku"
admin_key = `cat /root/.ssh/authorized_keys`.split("\n").first
admin_keys = `cat /root/.ssh/authorized_keys`.split("\n")
hostname = `bash -c '[[ $(dig +short $HOSTNAME) ]] && echo $HOSTNAME || curl icanhazip.com'`.strip
template = DATA.read
@@ -42,7 +42,10 @@ post "/setup" do
`rm #{dokku_root}/VHOST`
end
File.open("#{dokku_root}/HOSTNAME", "w") {|f| f.write params[:hostname] }
Open3.capture2("sshcommand acl-add dokku admin", :stdin_data => params[:key])
keys = params[:keys].split("\n")
keys.each do |k|
Open3.capture2("sshcommand acl-add dokku admin", :stdin_data => k)
end
Thread.new {
`rm /etc/nginx/conf.d/dokku-installer.conf && /etc/init.d/nginx stop && /etc/init.d/nginx start`
`rm /etc/init/dokku-installer.conf && stop dokku-installer`
@@ -63,7 +66,7 @@ __END__
<div class="form-group">
<h3><small style="text-transform: uppercase;">Admin Access</small></h3>
<label for="key">Public Key</label><br />
<textarea class="form-control" name="key" rows="7" id="key"><%= admin_key %></textarea>
<textarea class="form-control" name="keys" rows="7" id="key"><% admin_keys.each do |key| %><%= key + "\n" %><% end %></textarea>
</div>
<div class="form-group">
<h3><small style="text-transform: uppercase;">Hostname Configuration</small></h3>

View File

@@ -102,6 +102,11 @@ if [[ ! -z $DOKKU_HOST ]]; then
if [[ ! "$1" =~ --* ]]; then
verb=$1
shift
if [[ "$1" == "$appname" ]]; then
shift
fi
args="$*"
else
long_args="--"
@@ -119,7 +124,7 @@ if [[ ! -z $DOKKU_HOST ]]; then
ssh -t "dokku@$DOKKU_HOST" $long_args "$verb" "$appname" "${args[@]}"
}
if [[ "$0" == "dokku" ]] || [[ "$0" == *dokku_client.sh ]]; then
if [[ "$0" == "dokku" ]] || [[ "$0" == *dokku_client.sh ]] || [[ "$0" == $(which dokku) ]]; then
_dokku "$@"
exit $?
fi

View File

@@ -149,7 +149,7 @@ function install_prerequisites {
sudo apt-get install -qq -y apt-transport-https > /dev/null 2>&1
logit "Setting up apt repositories"
echo "deb http://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
echo "deb https://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" > /etc/apt/sources.list.d/dokku.list
logit "Running apt-get update"

11
deb.mk
View File

@@ -1,6 +1,6 @@
BUILDSTEP_DESCRIPTION = 'Buildstep uses Docker and Buildpacks to build applications like Heroku'
BUILDSTEP_REPO_NAME ?= progrium/buildstep
BUILDSTEP_VERSION ?= 0.0.1
BUILDSTEP_VERSION ?= 0.0.2
BUILDSTEP_ARCHITECTURE = amd64
BUILDSTEP_PACKAGE_NAME = buildstep_$(BUILDSTEP_VERSION)_$(BUILDSTEP_ARCHITECTURE).deb
@@ -10,7 +10,7 @@ DOKKU_ARCHITECTURE = amd64
PLUGINHOOK_DESCRIPTION = 'Simple dispatcher and protocol for shell-based plugins, an improvement to hook scripts'
PLUGINHOOK_REPO_NAME ?= progrium/pluginhook
PLUGINHOOK_VERSION ?= 0.0.1
PLUGINHOOK_VERSION ?= 0.2.0
PLUGINHOOK_ARCHITECTURE = amd64
PLUGINHOOK_PACKAGE_NAME = pluginhook_$(PLUGINHOOK_VERSION)_$(PLUGINHOOK_ARCHITECTURE).deb
@@ -40,7 +40,7 @@ install-from-deb:
curl --silent https://packagecloud.io/gpg.key 2> /dev/null | apt-key add - 2>&1 >/dev/null
echo "--> Setting up apt repositories"
echo "deb http://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
echo "deb https://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" > /etc/apt/sources.list.d/dokku.list
echo "--> Running apt-get update"
@@ -89,7 +89,7 @@ deb-buildstep: deb-setup
cp -rf /tmp/tmp/buildstep /tmp/build/var/lib/buildstep
echo "-> Creating $(BUILDSTEP_PACKAGE_NAME)"
sudo fpm -t deb -s dir -C /tmp/build -n buildstep -v $(BUILDSTEP_VERSION) -a $(BUILDSTEP_ARCHITECTURE) -p $(BUILDSTEP_PACKAGE_NAME) --deb-pre-depends 'lxc-docker >= 1.4.0' --after-install /tmp/tmp/post-install --url "https://github.com/$(BUILDSTEP_REPO_NAME)" --description $(BUILDSTEP_DESCRIPTION) --license 'MIT License' .
sudo fpm -t deb -s dir -C /tmp/build -n buildstep -v $(BUILDSTEP_VERSION) -a $(BUILDSTEP_ARCHITECTURE) -p $(BUILDSTEP_PACKAGE_NAME) --deb-pre-depends 'lxc-docker-1.6.2' --after-install /tmp/tmp/post-install --url "https://github.com/$(BUILDSTEP_REPO_NAME)" --description $(BUILDSTEP_DESCRIPTION) --license 'MIT License' .
mv *.deb /tmp
deb-dokku: deb-setup
@@ -138,8 +138,9 @@ deb-pluginhook: deb-setup
echo "-> Copying files into place"
mkdir -p /tmp/build/usr/local/bin $(GOPATH)
sudo apt-get update > /dev/null
sudo apt-get install -qq -y git golang mercurial 2>&1 > /dev/null
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH) && go get "code.google.com/p/go.crypto/ssh/terminal"
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH) && go get "golang.org/x/crypto/ssh/terminal"
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH) && cd /tmp/tmp/pluginhook && go build -o pluginhook
mv /tmp/tmp/pluginhook/pluginhook /tmp/build/usr/local/bin/pluginhook

3
debian/control vendored
View File

@@ -3,8 +3,7 @@ Version: 0.3.12
Section: base
Priority: optional
Architecture: amd64
Depends: locales, git, make, curl, software-properties-common, lxc-docker (>= 1.4.0), gcc, python-software-properties, man-db, buildstep, sshcommand, pluginhook
Depends: locales, git, make, curl, software-properties-common, lxc-docker-1.6.2, gcc, python-software-properties, man-db, buildstep, sshcommand, pluginhook
Pre-Depends: nginx, dnsutils, ruby, ruby-dev, rubygem-rack, rubygem-rack-protection, rubygem-sinatra, rubygem-tilt, apparmor, cgroup-lite
Provides: dokku
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>
Description: Docker powered mini-Heroku in around 100 lines of Bash

2
debian/postinst vendored
View File

@@ -16,7 +16,7 @@ case "$1" in
sshcommand create dokku /usr/local/bin/dokku
egrep -i "^docker" /etc/group || groupadd docker
usermod -aG docker dokku
dokku plugins-install
echo "WARNING: Run 'dokku plugins-install' after installation if using custom plugins"
rm -f /home/dokku/VERSION
cp /var/lib/dokku/STABLE_VERSION /home/dokku/VERSION

54
debian/preinst vendored
View File

@@ -5,6 +5,34 @@ set -e
case "$1" in
install)
db_get "dokku/web_config"
if [ "$RET" = "true" ]; then
INIT_CONF="/etc/init/dokku-installer.conf"
NGINX_CONF="/etc/nginx/conf.d/dokku-installer.conf"
rm -f $INIT_CONF
touch $INIT_CONF
echo 'start on runlevel [2345]' >> $INIT_CONF
echo 'exec /usr/local/share/dokku/contrib/dokku-installer.rb selfdestruct' >> $INIT_CONF
rm -f $NGINX_CONF
touch $NGINX_CONF
{
echo 'upstream dokku-installer { server 127.0.0.1:2000; }'
echo 'server {'
echo ' listen 80;'
echo ' location / {'
echo ' proxy_pass http://dokku-installer;'
echo ' }'
echo '}'
} >> $NGINX_CONF
rm -f /etc/nginx/sites-enabled/*
service nginx reload || /etc/init.d/nginx reload
exit 0
fi
if [ -z "${DEBCONF_RECONFIGURE}" ]; then
db_get "dokku/key_file"
if [ ! -f "$RET" ]; then
@@ -14,32 +42,6 @@ case "$1" in
exit 1
fi
fi
db_get "dokku/web_config"
if [ "$RET" = "false" ]; then
exit 0
fi
INIT_CONF="/etc/init/dokku-installer.conf"
NGINX_CONF="/etc/nginx/conf.d/dokku-installer.conf"
rm -f $INIT_CONF
touch $INIT_CONF
echo 'start on runlevel [2345]' >> $INIT_CONF
echo 'exec /usr/local/share/dokku/contrib/dokku-installer.rb selfdestruct' >> $INIT_CONF
rm -f $NGINX_CONF
touch $NGINX_CONF
echo 'upstream dokku-installer { server 127.0.0.1:2000; }' >> $NGINX_CONF
echo 'server {' >> $NGINX_CONF
echo ' listen 80;' >> $NGINX_CONF
echo ' location / {' >> $NGINX_CONF
echo ' proxy_pass http://dokku-installer;' >> $NGINX_CONF
echo ' }' >> $NGINX_CONF
echo '}' >> $NGINX_CONF
rm -f /etc/nginx/sites-enabled/*
service nginx reload
;;
upgrade)

View File

@@ -57,3 +57,25 @@ If you are using the vagrant installation, you can use the following command to
$ cat ~/.ssh/id_rsa.pub | make vagrant-acl-add
That's it!
## VMs with less than 1GB of memory
Having less than 1GB of system memory available for dokku and its containers, for example Digital Ocean's small 512MB machines, might result in unexpected errors, such as **! [remote rejected] master -> master (pre-receive hook declined)** during installation of NPM dependencies (https://github.com/npm/npm/issues/3867).
To work around this issue, it might suffice to augment the linux swap file size to a maximum of twice the physical memory size.
To resize the swap file of a 512MB machine to 1GB, follow these steps while in SSH within your machine:
```shell
cd /var
touch swap.img
chmod 600 swap.img
dd if=/dev/zero of=/var/swap.img bs=1024k count=1000
mkswap /var/swap.img
swapon /var/swap.img
free
echo "/var/swap.img none swap sw 0 0" >> /etc/fstab
```
Reference: https://www.digitalocean.com/community/tutorials/how-to-configure-virtual-memory-swap-file-on-a-vps

View File

@@ -50,6 +50,28 @@ ssh -T git@github.com
If buildpack detection isn't working well for you or you want to specify a custom buildpack for one repository you can create & commit a file in the root of your git repository named `.env` containing `export BUILDPACK_URL=<repository>` before pushing. This will tell buildstep to fetch the specified buildpack and use it instead of relying on the built-in buildpacks & their detection methods.
## Dockerfile deployment
Deployment of `Dockerfile` repos is supported as of v0.3.15. Simply place a Dockerfile in the root of your repo and push to dokku. If you are converting from a heroku/dokku buildpack deployment, ensure you are not setting `$BUILDPACK_URL` or including a `.buildpacks` file in the root of your repo.
By default, we will extract the first `EXPOSE` port and tell nginx to proxy your app to that port. Alternatively, you can set `$DOCKERFILE_PORT` in your app's dokku configuration.
By default no arguments are passed to `docker run` when deploying the container and the `CMD` or `ENTRYPOINT` defined in the `Dockerfile` are executed. You can take advantage of docker ability of overriding the `CMD` or passing parameters to your `ENTRYPOINT` setting `$DOKKU_DOCKERFILE_START_CMD`. Let's say for example you are deploying a base nodejs image, with the following `ENTRYPOINT`:
```
ENTRYPOINT ["node"]
```
You can do:
```
dokku config:set DOKKU_DOCKERFILE_START_CMD="--harmony server.js"
```
To tell docker what to run.
Setting `$DOKKU_DOCKERFILE_CACHE_BUILD` to `true` or `false` will enable or disable docker's image layer cache. Lastly, for more granular build control, you may also pass any `docker build` option to `docker`, by setting `$DOKKU_DOCKER_BUILD_OPTS`.
## Default vhost
You might notice the default vhost for Nginx will be one of the apps. If an app doesn't exist, it will use this vhost and it may be confusing for it to go to another app. You can create a default vhost using a configuration under `sites-enabled`. You just have to change one thing in the main nginx.conf:
@@ -101,11 +123,11 @@ This is in particular useful, then you want to deploy to root domain, as
# Zero downtime deploy
Following a deploy Dokku's default behaviour is to switch new traffic over to the new container immediately.
Following a deploy, dokku will now wait `DOKKU_DEFAULT_CHECKS_WAIT` seconds (default: `10`), and if the container is still running, then route traffic to the new container.
This can be problematic for applications that take some time to boot up and can lead to `502 Bad Gateway` errors.
This can be problematic for applications whose boot up time can vary and can lead to `502 Bad Gateway` errors.
Dokku provides a way to run a set of checks against the new container, and only switch traffic over if all checks complete successfully.
Dokku provides a way to run a set of more precise checks against the new container, and only switch traffic over if all checks complete successfully.
To specify checks, add a `CHECKS` file to the root of your project directory. This is a text file with one line per check. Empty lines and lines starting with `#` are ignored.
@@ -115,12 +137,14 @@ A check is a relative URL and may be followed by expected content from the page,
/about Our Amazing Team
```
Dokku will wait `DOKKU_CHECKS_WAIT` seconds (default: `5`) before running the checks to give server time to start. For shorter/longer wait, change the `DOKKU_CHECKS_WAIT` environment variable. This can be overridden in the CHECKS file by setting WAIT=nn.
Dokku will wait `DOKKU_CHECKS_WAIT` seconds (default: `5`) before running the checks to give server time to start. For shorter/longer wait, change the `DOKKU_CHECKS_WAIT` environment variable. This can also be overridden in the CHECKS file by setting WAIT=nn.
Dokku will wait `DOKKU_WAIT_TO_RETIRE` seconds (default: `60`) before stopping the old container such that no existing connections to it are dropped.
Dokku will retry the checks DOKKU_CHECKS_ATTEMPTS times until the checks are successful or DOKKU_CHECKS_ATTEMPTS is exceeded. In the latter case, the deployment is considered failed. This can be overridden in the CHECKS file by setting ATTEMPTS=nn.
Checks can be skipped entirely by setting `DOKKU_SKIP_ALL_CHECKS` to `true` either globally or per application. You can choose to skip only default checks by setting `DOKKU_SKIP_DEFAULT_CHECKS` to `true` either globally or per application.
See [checks-examples.md](checks-examples.md) for examples and output.
# Removing a deployed app
@@ -130,3 +154,7 @@ SSH onto the server, then execute:
```shell
dokku apps:destroy myapp
```
# Dokku/Docker Container Management Compatibility
Dokku is, at it's core, a docker container manager. Thus, it does not necessarily play well with other out-of-band processes interacting with the docker daemon. One thing to note as in [issue #1220](https://github.com/progrium/dokku/issues/1220), dokku executes a cleanup function prior to every deployment. This function removes all exited containers and all 'unattached' images.

BIN
docs/assets/docker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
docs/assets/extend.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
docs/assets/git.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

125
docs/assets/style.css Normal file
View File

@@ -0,0 +1,125 @@
body {
padding-bottom: 40px;
color: #5a5a5a;
}
h1 {
color: #5a5a5a;
font-family: 'montserrat', Optima, Segoe, "Segoe UI", Candara, Calibri, Arial, sans-serif;
font-weight: 700;
line-height: 1.1;
margin-bottom: 12px;
margin-top: 12px;
text-rendering: optimizelegibility;
}
.header {
background-color: #2a8fbd;
padding: 22px 0;
}
.header .heading {
color: #fff;
font-size: 23px;
margin: 0;
padding: 0;
}
.blurb {
color: #424242;
background-color: #ededed;
background-image: url(gplaypattern.png);
padding: 45px 0;
text-align: center;
}
.blurb p {
font-size: 17px;
font-weight: 300;
margin: 18px 0 18px;
text-align: center;
}
.quickstart-code {
display: block;
font-size: 12px;
line-height: 1.3em;
margin: 45px auto;
max-width: 650px;
padding: 0;
}
.quickstart-code .title {
background-color: #dfdfdf;
background-image: linear-gradient(top, #f7f7f7 0%, #dfdfdf 7%, #ccc 100%);
border-bottom: 1px solid #111;
color: #444;
display: block;
font-weight: 400;
font-size: 14px;
margin: 0 20px;
padding: 3px 0;
text-align: center;
text-shadow: 0 1px 0 rgba(255,255,255,0.5);
border-radius: 5px 5px 0 0;
box-shadow: 0 3px 0 rgba(0,0,0,0.5);
}
.quickstart-code .shell {
background-color: #171717;
font-family: Menlo, Consolas, "Courier New", Courier, "Liberation Mono", monospace;
margin: 0 20px;
padding: 20px;
text-shadow: none;
border-radius: 0 0 5px 5px;
box-shadow: 0 5px 30px rgba(0,0,0,0.3);
}
.quickstart-code .line {
display: block;
margin: 0;
padding: 0;
}
.quickstart-code .line span {
display: inline-block;
}
.quickstart-code .path {
color: #2a8fbd;
user-select: none;
}
.quickstart-code .prompt {
color: #ff9900;
user-select: none;
}
.quickstart-code .command {
color: #ffffcc;
}
.marketing .col-lg-4 {
margin-bottom: 20px;
text-align: center;
}
.marketing .col-lg-4 p {
margin-right: 10px;
margin-left: 10px;
}
.featurette-divider {
margin: 20px 0;
}
.featurette-heading {
font-weight: normal;
line-height: 1;
letter-spacing: -1px;
}
.featurette-heading .text-muted {
font-weight: 300;
}
@media (min-width: 768px) {
.quickstart-code {
font-size: 14px;
line-height: 22px;
}
.featurette-heading {
font-size: 50px;
}
}
@media (min-width: 992px) {
.featurette-heading {
margin-top: 120px;
}
}

View File

@@ -4,7 +4,7 @@ Given the constraints, running dokku commands remotely via SSH is fine. For cert
While dokku does not yet have an official client, there are a multitude of ways in which you can interact with your dokku installation. The easiest is to use the **bash** client, though you may wish to use another.
## (bash) `dokku_client.sh`
## (bash, zsh, etc.) `dokku_client.sh`
Of all methods, this is the *most* official method of interacting with your dokku installation. It is a bash script that interacts with a remote dokku installation via ssh. It is available in `contrib/dokku_client.sh` in the root of the dokku repository.
@@ -18,6 +18,19 @@ git clone git@github.com:progrium/dokku.git ~/.dokku
alias dokku='$HOME/.dokku/contrib/dokku_client.sh'
```
Alternatively, if using another shell such as **zsh**, create an alias command which invokes the script using **bash**:
```shell
# zsh: add the following to either .zshenv or .zshrc
alias dokku='bash $HOME/.dokku/contrib/dokku_client.sh'
# fish: add the following to ~/.config/fish/config.fish
alias dokku 'bash $HOME/.dokku/contrib/dokku_client.sh'
# csh: add the following to .cshrc
alias dokku 'bash $HOME/.dokku/contrib/dokku_client.sh'
```
Configure the `DOKKU_HOST` environment variable or run `dokku` from a repository with a git remote named dokku pointed at your dokku host in order to use the script as normal.
## (nodejs) dokku-toolbelt

View File

@@ -11,6 +11,6 @@ config:set <app> KEY1=VALUE1 [KEY2=VALUE2 ...] - set one or more config vars
config:unset <app> KEY1 [KEY2 ...] - unset one or more config vars
```
The variables are available both at at run time and during the application build/compilation step. You no longer need a `user-env` plugin as Dokku handles this functionality in a way equivalent to how Heroku handles it.
The variables are available both at run time and during the application build/compilation step. You no longer need a `user-env` plugin as Dokku handles this functionality in a way equivalent to how Heroku handles it.
> Note: Global `BUILD_ENV` files are currently migrated into a global `ENV` file and sourced before app-specific variables. This means that app-specific variables will take precedence over global variables. Configuring your global `ENV` file is manual, and should be considered potentially dangerous as configuration applies to all applications.

View File

@@ -3,9 +3,10 @@
If you create your own plugin:
1. Take a look at the plugins shipped with dokku and hack away!
2. Upload your plugin to github with a repository name in form of `dokku-<name>` (e.g. `dokku-mariadb`)
3. Edit [this page](http://progrium.viewdocs.io/dokku/plugins) and add a link to it.
4. Subscribe to the [dokku development blog](http://progrium.com) to be notified about API changes and releases
2. Check out the [list of hooks](http://progrium.viewdocs.io/dokku/development/pluginhooks) your plugin can implement.
3. Upload your plugin to github with a repository name in form of `dokku-<name>` (e.g. `dokku-mariadb`)
4. Edit [this page](http://progrium.viewdocs.io/dokku/plugins) and add a link to it.
5. Subscribe to the [dokku development blog](http://progrium.com) to be notified about API changes and releases
### Sample plugin
@@ -31,8 +32,8 @@ case "$1" in
help)
cat && cat<<EOF
hello <app> Says "Hello <app>"
hello:world Says "Hello world"
hello <app>, Says "Hello <app>"
hello:world, Says "Hello world"
EOF
;;
@@ -47,7 +48,7 @@ A few notes:
- You should always support `DOKKU_TRACE` as specified on the 2nd line of the plugin.
- If your command requires that an application exists, ensure you check for it's existence in the manner prescribed above.
- A `help` command is required, though it is allowed to be empty.
- A `help` command is required, though it is allowed to be empty. Also, the command syntax will need to separated by `, ` in order to maintain columnar output alignment.
- Commands *should* be namespaced.
- As of 0.3.3, a catch-all should be implemented which exits with a `DOKKU_NOT_IMPLEMENTED_EXIT` code. This allows dokku to output a `command not found` message.
- Be sure you want the "set -eo pipefail" option. Look at the following example :

View File

@@ -107,8 +107,8 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
case "$1" in
help | derp:help)
cat && cat<<EOF
derp:herp Herps the derp
derp:serp [file] Shows the file's serp
derp:herp, Herps the derp
derp:serp [file], Shows the file's serp
EOF
;;
@@ -589,3 +589,27 @@ APP="$1"; REV="$2"
dokku hg-build $APP $REV
```
### `receive-branch`
- Description: Allows you to customize what occurs when a specific branch is received. Can be used to add support for specific branch names
- Invoked by: `dokku git-hook`, `dokku ps:rebuild`
- Arguments: `$APP $REV $REFNAME`
- Example:
```shell
#!/bin/bash
# Gives dokku the ability to support multiple branches for a given service
# Allowing you to have multiple staging environments on a per-branch basis
reference_app=$1
refname=$3
newrev=$2
APP=${refname/*\//}.$reference_app
if [[ ! -d "$DOKKU_ROOT/$APP" ]]; then
REFERENCE_REPO="$DOKKU_ROOT/$reference_app
git clone --bare --shared --reference "$REFERENCE_REPO" "$REFERENCE_REPO" "$DOKKU_ROOT/$APP" > /dev/null
fi
pluginhook receive-app $APP $newrev
```

View File

@@ -0,0 +1,68 @@
# Release Process
Dokku is released in intervals *at most* three weeks apart, though may be released much quicker.
To propose a release, the following tasks need to be performed:
- The installable version must be changed in the `docs/installation.md` file.
- The installable version must be changed in the `README.md` file.
- The installable version must be changed in the `contrib/dokku-installer.rb` 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`
- 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.
## Versioning
Dokku follows semver standards. As we are not yet at a stable release, breaking changes will require *only* a minor release, while all other changes only require a patch release. Once we hit stable, breaking changes will require a major release.
Tags should be created via the following method:
```shell
git tag v0.9.9
```
At the moment, tags need not be signed, though that may change in the future.
## Debian 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.
Debian package information is held in the `debian` directory of the dokku project.
For the public project, releases should be pushed to packagecloud.io *after* a tag is created but *before* said tag is pushed to github. The following may be the release workflow:
```shell
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
```
If new versions of other packages were created, these should also be pushed at this time.
> If you are a maintainer and need the PACKAGECLOUD_TOKEN in order to make a release, please contact @josegonzalez to get this information.
## Changelog format
The `HISTORY.md` should be added to based on the changes made since the previous release. This can be done by reviewing all merged pull requests to the master branch on github. The format is as follows:
```
## 0.9.9
Some description concerning major changes in this release, or potential incompatibilities.
### New Features
- #SOME_ID: @pull-request-creator Description
### Bug Fixes
- #SOME_ID: @pull-request-creator Description
### Docs Changes
- #SOME_ID: @pull-request-creator Description
```

View File

@@ -8,51 +8,59 @@ Usage
$ dokku help
...
docker-options <app> Display apps docker options for all phases
docker-options <app> <phase(s)> Display apps docker options for phase (comma seperated phase list)
docker-options:add <app> <phase(s)> OPTION Add docker option to app for phase (comma seperated phase list)
docker-options:remove <app> <phase(s)> OPTION Remove docker option from app for phase (comma seperated phase list)
docker-options <app> <phase(s)> Display apps docker options for phase (comma-separated phase list)
docker-options:add <app> <phase(s)> OPTION Add docker option to app for phase (comma-separated phase list)
docker-options:remove <app> <phase(s)> OPTION Remove docker option from app for phase (comma-separated phase list)
...
````
Add some options
Add some options (first, for the deployed/running app and second when executing `dokku run`)
```bash
$ dokku docker-options:add myapp deploy "-v /host/path:/container/path"
$ dokku docker-options:add myapp run "-v /another/container/path"
$ dokku docker-options:add myapp "-link container_name:alias"
```
Check what we added
```bash
$ dokku docker-options myapp
-link container_name:alias
-v /host/path:/container/path
-v /another/container/path
Deploy options:
-v /host/path:/container/path
Run options:
-v /another/container/path
```
Remove an option
```bash
$ dokku docker-options:remove myapp "-link container_name:alias"
$ dokku docker-options:remove myapp run "--link container_name:alias"
```
Note about `dokku` phases and `docker-options`
------------
`dokku` deploys your application in multiple "phases" and the `docker-options` plugin allows you to pass arguments to the underlying docker container in the following 3 phases/containers
- `build`: the container that executes the appropriate buildpack
- `deploy`: the container that executes your running/deployed application
- `run`: the container that executes any arbitrary command via `dokku run myapp`
Advanced Usage (avoid if possible)
------------
In your applications folder (/home/dokku/app_name) create a file called DOCKER_OPTIONS.
In your applications folder (`/home/dokku/app_name`) create a file called `DOCKER_OPTIONS_RUN` (or `DOCKER_OPTIONS_BUILD` or `DOCKER_OPTIONS_DEPLOY`).
Inside this file list one docker option per line. For example:
```bash
-link container_name:alias
--link container_name:alias
-v /host/path:/container/path
-v /another/container/path
```
The above example will result in the following options being passed to docker during deploy and docker run:
The above example will result in the following options being passed to docker during `dokku run`:
```bash
-link container_name:alias -v /host/path:/container/path -v /another/container/path
--link container_name:alias -v /host/path:/container/path -v /another/container/path
```
You may also include comments (lines beginning with a #) and blank lines in the DOCKER_OPTIONS file.

73
docs/dokku-events-logs.md Normal file
View File

@@ -0,0 +1,73 @@
# Dokku Event Logs
Docker provides an _events_ command to show system's real time events. Likewise, Dokku can record events as syslog entries and also provides a plugin to display the last ones.
```
events [-t] Show the last events (-t follows)
events:list List logged events
events:on Enable events logger
events:off Disable events logger
```
## Usage
Enable the plugin:
```
$ dokku events:on
Enabling dokku events logger
```
Dokku will then write log entries to ``/var/log/syslog`` as well as a Dokku-specific logs sub-directory ``/var/log/dokku/events.log``, which can be easily displayed with the command `dokku events`:
```
Jul 3 16:09:48 dokku.me dokku[127630]: INVOKED: pre-release-buildstep( pythonapp )
Jul 3 16:10:02 dokku.me dokku[128095]: INVOKED: docker-args-run( rubyapp )
Jul 3 16:10:02 dokku.me dokku[128114]: INVOKED: docker-args-run( nhl )
Jul 3 16:10:03 dokku.me dokku[128136]: INVOKED: post-release-buildstep( pythonapp )
Jul 3 16:10:03 dokku.me dokku[128195]: INVOKED: pre-deploy( pythonapp )
Jul 3 16:10:23 dokku.me dokku[129253]: INVOKED: docker-args-deploy( pythonapp )
Jul 3 16:10:24 dokku.me dokku[129337]: INVOKED: bind-external-ip( pythonapp )
Jul 3 16:10:24 dokku.me dokku[129451]: INVOKED: check-deploy( pythonapp 6274ced0d4be11af4490cd18abaf77cdd593f025133f403d984e80d86a39acec web 5000 10.0.16.80 )
Jul 3 16:10:35 dokku.me dokku[129561]: INVOKED: docker-args-deploy( pythonapp )
Jul 3 16:10:35 dokku.me dokku[129649]: INVOKED: bind-external-ip( pythonapp )
Jul 3 16:10:36 dokku.me dokku[129760]: INVOKED: check-deploy( pythonapp ac88a56ee4161ff37e4b92d1498c3eadc91f0aa7c8b81b44fc077e2a51d54cc0 worker )
Jul 3 16:10:46 dokku.me dokku[129851]: INVOKED: post-deploy( pythonapp )
Jul 3 16:10:46 dokku.me dokku[129945]: INVOKED: nginx-pre-reload( pythonapp )
Jul 3 16:15:02 dokku.me dokku[130397]: INVOKED: docker-args-run( goapp )
Jul 3 16:21:02 dokku.me dokku[130796]: INVOKED: docker-args-run( rubyapp )
Jul 3 16:30:02 dokku.me dokku[131384]: INVOKED: docker-args-run( rubyapp )
```
You can list all events that are currently being recorded via `dokku events:list`:
```
=====> Events currently logged
backup-check
docker-args-build
pre-delete
post-deploy
receive-app
pre-release-buildstep
nginx-pre-reload
docker-args-deploy
post-build-buildstep
post-domains-update
post-release-dockerfile
check-deploy
backup-import
backup-export
git-pre-pull
git-post-pull
nginx-hostname
bind-external-ip
pre-deploy
post-delete
dependencies
pre-build-buildstep
docker-args-run
pre-build-dockerfile
post-release-buildstep
post-build-dockerfile
pre-release-dockerfile
update
```

View File

@@ -3,13 +3,13 @@
As of 0.3.18, dokku defaults to being installed via debian package. 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
curl --silent https://get.docker.io/gpg 2> /dev/null | apt-key add - 2>&1 >/dev/null
curl --silent https://packagecloud.io/gpg.key 2> /dev/null | apt-key add - 2>&1 >/dev/null
curl -sL https://get.docker.io/gpg 2> /dev/null | sudo apt-key add - 2>&1 >/dev/null
curl -sL https://packagecloud.io/gpg.key 2> /dev/null | sudo apt-key add - 2>&1 >/dev/null
echo "deb http://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" > /etc/apt/sources.list.d/dokku.list
echo "deb https://get.docker.io/ubuntu docker main" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" | sudo tee /etc/apt/sources.list.d/dokku.list >/dev/null
sudo apt-get update > /dev/null
sudo apt-get update -qq
sudo apt-get install -qq -y linux-image-extra-`uname -r` apt-transport-https
sudo apt-get install -qq -y dokku
```
@@ -21,7 +21,7 @@ In case you want to perform an unattended installation of dokku, this is made po
You can set any of the below options through the `debconf-set-selections` command, for example to enable vhost-based deployments:
```bash
echo "dokku dokku/vhost_enable boolean true" | debconf-set-selections
sudo echo "dokku dokku/vhost_enable boolean true" | debconf-set-selections
```
After setting the desired options, proceed with the installation as described above.

View File

@@ -30,7 +30,7 @@
```
Host dokku.me
Port 2222
Port 22
```
- 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.

128
docs/home.html Normal file
View File

@@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
<style type="text/css">
body{padding-bottom:40px;color:#5a5a5a}
h1{color:#5a5a5a;font-family:'montserrat',Optima,Segoe,"Segoe UI",Candara,Calibri,Arial,sans-serif;font-weight:700;line-height:1.1;margin-bottom:12px;margin-top:12px;text-rendering:optimizelegibility}
.header{background-color:#2a8fbd;padding:22px 0}
.header .heading{color:#fff;font-size:23px;margin:0;padding:0}
.blurb{color:#424242;background-color:#ededed;background-image:url(./assets/gplaypattern.png);padding:45px 0;text-align:center}
.blurb p{font-size:17px;font-weight:300;margin:18px 0;text-align:center}
.quickstart-code{display:block;font-size:12px;line-height:1.3em;margin:45px auto;max-width:650px;padding:0}
.quickstart-code .title{background-color:#dfdfdf;background-image:linear-gradient(top,#f7f7f7 0%,#dfdfdf 7%,#ccc 100%);border-bottom:1px solid #111;color:#444;display:block;font-weight:400;font-size:14px;margin:0 20px;padding:3px 0;text-align:center;text-shadow:0 1px 0 rgba(255,255,255,0.5);border-radius:5px 5px 0 0;box-shadow:0 3px 0 rgba(0,0,0,0.5)}
.quickstart-code .shell{background-color:#171717;font-family:Menlo,Consolas,"Courier New",Courier,"Liberation Mono",monospace;margin:0 20px;padding:20px;text-shadow:none;border-radius:0 0 5px 5px;box-shadow:0 5px 30px rgba(0,0,0,0.3)}
.quickstart-code .line{display:block;margin:0;padding:0}
.quickstart-code .line span{display:inline-block}
.quickstart-code .path{color:#2a8fbd;user-select:none}
.quickstart-code .prompt{color:#f90;user-select:none}
.quickstart-code .command{color:#ffc}
.marketing .col-lg-4{margin-bottom:20px;text-align:center}
.marketing .col-lg-4 p{margin-right:10px;margin-left:10px}
.featurette-divider{margin:20px 0}
.featurette-heading{font-weight:400;line-height:1;letter-spacing:-1px}
.featurette-heading .text-muted{font-weight:300}
@media (min-width: 768px) {
.quickstart-code{font-size:14px;line-height:22px}
.featurette-heading{font-size:50px}
}
@media (min-width: 992px) {
.featurette-heading{margin-top:120px}
}
</style>
</head>
<body>
<div class="header">
<div class="container">
<h1 class="heading">Dokku</h1>
</div>
</div>
<div class="blurb">
<div class="container">
<h2>The smallest PaaS implementation you've ever seen</h2>
<p>Docker powered mini-Heroku in around 200 lines of Bash</p>
<div class="blurb-buttons">
<a class="btn btn-lg btn-warning" href="http://progrium.viewdocs.io/dokku/installation">View Documentation</a>
</div>
</div>
</div>
<div class="container marketing">
<div class="quickstart-code">
<p class="title">Quick-start Instructions</p>
<div class="shell">
<p class="line">
<span class="path">~</span>
<span class="prompt">$</span>
<span class="command">wget https://raw.github.com/progrium/dokku/v0.3.24/bootstrap.sh</span>
</p>
<p class="line">
<span class="path">~</span>
<span class="prompt">$</span>
<span class="command">sudo DOKKU_TAG=v0.3.24 bash bootstrap.sh</span>
</p>
<p class="line">
<span class="output"># =&gt; Go to your server's IP and follow the web installer</span>
</p>
</div>
</div>
<hr class="featurette-divider">
<!-- START THE FEATURETTES -->
<div class="row featurette">
<div class="col-md-7">
<h2 class="featurette-heading">Own Your PaaS. <span class="text-muted">Infrastructure at a fraction of the cost.</span></h2>
<p class="lead">Powered by Docker, you can install Dokku on any hardware. Use it on inexpensive cloud providers. Use the extra cash to buy a pony or feed kittens. You'll save tens of dollars a year on your dog photo sharing website.</p>
</div>
<div class="col-md-5">
<img class="featurette-image img-responsive center-block" alt="Docker Logo" src="./assets/docker.png">
</div>
</div>
<hr class="featurette-divider">
<div class="row featurette">
<div class="col-md-7 col-md-push-5">
<h2 class="featurette-heading">Easy Git Deploys. <span class="text-muted">From your command-line to the cloud.</span></h2>
<p class="lead">Once it's set up on a host, you can push Heroku-compatible applications to it via Git. They'll build using Heroku buildpacks and then run in isolated containers. The end result is your own, single-host version of Heroku.</p>
</div>
<div class="col-md-5 col-md-pull-7">
<img class="featurette-image img-responsive center-block" alt="Git Logo" src="./assets/git.png">
</div>
</div>
<hr class="featurette-divider">
<div class="row featurette">
<div class="col-md-7">
<h2 class="featurette-heading">Extensible Platform. <span class="text-muted">Customize your PaaS.</span></h2>
<p class="lead">Write dokku plugins in any language. Share them online with others, and extend those already available. Dokku's simple core is easy to hack and add the features you need to get your job done.</p>
</div>
<div class="col-md-5">
<img class="featurette-image img-responsive center-block" alt="Extend Logo" src="./assets/extend.png">
</div>
</div>
<hr class="featurette-divider">
</div>
<div class="container">
<footer>
<p class="pull-right"><a href="#">Back to top</a></p>
<p>&copy; 2013 Dokku</p>
</footer>
</div>
</body>
</html>

View File

@@ -1,40 +1,70 @@
# Dokku Documentation
<div class="blurb">
<div class="container">
<h2>The smallest PaaS implementation you've ever seen</h2>
<p>Docker powered mini-Heroku in around 200 lines of Bash</p>
<div class="blurb-buttons">
<a class="btn btn-lg btn-warning" href="http://progrium.viewdocs.io/dokku/installation">View Documentation</a>
</div>
</div>
</div>
Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen.
<div class="container marketing">
<div class="quickstart-code">
<p class="title">Quick-start Instructions</p>
<div class="shell">
<p class="line">
<span class="path">~</span>
<span class="prompt">$</span>
<span class="command">wget https://raw.github.com/progrium/dokku/v0.3.24/bootstrap.sh</span>
</p>
<p class="line">
<span class="path">~</span>
<span class="prompt">$</span>
<span class="command">sudo DOKKU_TAG=v0.3.24 bash bootstrap.sh</span>
</p>
<p class="line">
<span class="output"># =&gt; Go to your server's IP and follow the web installer</span>
</p>
</div>
</div>
### Getting Started
<hr class="featurette-divider">
- [Installation](http://progrium.viewdocs.io/dokku/installation)
- [Upgrading](http://progrium.viewdocs.io/dokku/upgrading)
- [Troubleshooting](http://progrium.viewdocs.io/dokku/troubleshooting)
- [Getting Help](http://progrium.viewdocs.io/dokku/getting-started/where-to-get-help)
<!-- START THE FEATURETTES -->
### Deployment
<div class="row featurette">
<div class="col-md-7">
<h2 class="featurette-heading">Own Your PaaS. <span class="text-muted">Infrastructure at a fraction of the cost.</span></h2>
<p class="lead">Powered by Docker, you can install Dokku on any hardware. Use it on inexpensive cloud providers. Use the extra cash to buy a pony or feed kittens. You'll save tens of dollars a year on your dog photo sharing website.</p>
</div>
<div class="col-md-5">
<img class="featurette-image img-responsive center-block" alt="Docker Logo" src="assets/docker.png">
</div>
</div>
- [Application Deployment](http://progrium.viewdocs.io/dokku/application-deployment)
- [Configuration management](http://progrium.viewdocs.io/dokku/configuration-management)
- [Process management](http://progrium.viewdocs.io/dokku/process-management)
- [DNS Configuration](http://progrium.viewdocs.io/dokku/dns)
- [Nginx Configuration](http://progrium.viewdocs.io/dokku/nginx)
- [Running Remote commands](http://progrium.viewdocs.io/dokku/remote-commands)
- [Container Options](http://progrium.viewdocs.io/dokku/docker-options)
<hr class="featurette-divider">
### Community Contributions
<div class="row featurette">
<div class="col-md-7 col-md-push-5">
<h2 class="featurette-heading">Easy Git Deploys. <span class="text-muted">From your command-line to the cloud.</span></h2>
<p class="lead">Once it's set up on a host, you can push Heroku-compatible applications to it via Git. They'll build using Heroku buildpacks and then run in isolated containers. The end result is your own, single-host version of Heroku.</p>
</div>
<div class="col-md-5 col-md-pull-7">
<img class="featurette-image img-responsive center-block" alt="Git Logo" src="assets/git.png">
</div>
</div>
- [Clients](http://progrium.viewdocs.io/dokku/community/clients)
- [Plugins](http://progrium.viewdocs.io/dokku/plugins)
<hr class="featurette-divider">
### Development
<div class="row featurette">
<div class="col-md-7">
<h2 class="featurette-heading">Extensible Platform. <span class="text-muted">Customize your PaaS.</span></h2>
<p class="lead">Write dokku plugins in any language. Share them online with others, and extend those already available. Dokku's simple core is easy to hack and add the features you need to get your job done.</p>
</div>
<div class="col-md-5">
<img class="featurette-image img-responsive center-block" alt="Extend Logo" src="assets/extend.png">
</div>
</div>
- [Plugin Creation](http://progrium.viewdocs.io/dokku/development/plugin-creation)
- [Pluginhooks](http://progrium.viewdocs.io/dokku/development/pluginhooks)
- [Test Suite](http://progrium.viewdocs.io/dokku/development/testing)
## Things this project won't do
* **Multi-host.** It runs on one host. If you need more, have a look at [Deis](http://deis.io/).
* **Multitenancy.** Multi-app, and loosely multi-user based on SSH keys, but that's it.
## Sponsors
Though we love everybody doing open source, we especially love [Deis](http://deis.io/) for sponsoring Dokku.
<hr class="featurette-divider">
</div>

View File

@@ -3,8 +3,10 @@
## Requirements
- A fresh VM running Ubuntu `14.04 x64`
- At least `1GB` of system memory ([workaround for 512MB machines](http://progrium.viewdocs.io/dokku/advanced-installation))
- The VM should have a FQDN set before installation (check by running `sudo hostname -f`).
Ubuntu 14.04 x64 x64. Ideally have a domain ready to point to your host. It's designed for and is probably best to use a fresh VM. The bootstrapper will install everything it needs.
Ubuntu 14.04 x64. Ideally have a domain ready to point to your host. It's designed for and is probably best to use a fresh VM. The bootstrapper will install everything it needs.
## Installing the latest Stable version
@@ -12,10 +14,11 @@ To install the latest stable version of dokku, you can run the following bootstr
```shell
# installs dokku via apt-get
wget https://raw.github.com/progrium/dokku/v0.3.18/bootstrap.sh
sudo DOKKU_TAG=v0.3.18 bash bootstrap.sh
wget https://raw.github.com/progrium/dokku/v0.3.24/bootstrap.sh
sudo DOKKU_TAG=v0.3.24 bash bootstrap.sh
# Go to your server's IP and follow the web installer
# By default, this will do cli-based setup, though you may *also*
# go to your server's IP and follow the web installer
```
For various reasons, certain hosting providers may have other steps that should be preferred to the above. If hosted on any of the following popular hosts, please follow the linked to instructions:

View File

@@ -1,6 +1,6 @@
# Nginx
Dokku uses nginx as it's server for routing requests to specific applications.
Dokku uses nginx as it's server for routing requests to specific applications. By default, access and error logs are written for each app to `/var/log/nginx/${APP}-access.log` and `/var/log/nginx/${APP}-error.log` respectively
## TLS/SPDY support
@@ -8,9 +8,17 @@ Dokku provides easy TLS/SPDY support out of the box. This can be done app-by-app
### Per App
To enable TLS connection to to one of your applications, copy or symlink the `.crt` and `.key` files into the application's `/home/dokku/:app/tls` folder (create this folder if it doesn't exist) as `server.crt` and `server.key` respectively.
To enable TLS connections to to one of your applications, do the following:
* Create a key file and a cert file.
* You can find detailed steps for generating a self-signed certificate at https://devcenter.heroku.com/articles/ssl-certificate-self
* If you are not paranoid and need it just for a DEV or STAGING app, you can use http://www.selfsignedcertificate.com/ to generate your 2 files more easily.
* Rename your files to server.key and server.crt
* tar these 2 files together, *without* subdirectories. Example: tar cvf cert-key.tar server.crt server.key
* Install the pair for your app, like this: ssh dokku@ip-of-your-dokku-server nginx:import-ssl < cert-key.tar
You will need to repeat the steps above for each domain used to serve your app. You can't simply create a single tar with all key/cert files in it (see https://github.com/progrium/dokku/issues/1195).
Redeployment of the application will be needed to apply TLS configuration. Once it is redeployed, the application will be accessible by `https://` (redirection from `http://` is applied as well).
### All Subdomains
@@ -45,17 +53,23 @@ This archive should is expanded via `tar xvf`. It should contain `server.crt` an
## Customizing the nginx configuration
> New as of 0.3.10
> New as of 0.3.17.
Dokku currently templates out an nginx configuration that is included in the `nginx-vhosts` plugin. If you'd like to provide a custom template for your application, you should copy the existing template - ssl or non-ssl - into your `$DOKKU_ROOT/$APP` directory at the file `nginx.conf.template`.
Dokku currently templates out an nginx configuration that is included in the `nginx-vhosts` plugin. If you'd like to provide a custom template for your application, you should copy the existing template - ssl or non-ssl - into your application repository's root directory as the file `nginx.conf.template`. The next time you deploy, Nginx will use your template instead of the default.
For instance - assuming defaults - to customize the nginx template in use for the `myapp` application, create a file at `/home/dokku/myapp/nginx.conf.template` with the following contents:
> New as of 0.3.10.
You may also place this file on disk at the path `/home/dokku/myapp/nginx.conf.template`. If placed on disk on the dokku server, the template file **must** be owned by the user `dokku:dokku`.
For instance - assuming defaults - to customize the nginx template in use for the `myapp` application, create the file `nginx.conf.template` in your repo or on disk with the with the following contents:
```
server {
listen [::]:80;
listen 80;
server_name $NOSSL_SERVER_NAME;
access_log /var/log/nginx/${APP}-access.log;
error_log /var/log/nginx/${APP}-error.log;
# set a custom header for requests
add_header X-Served-By www-ec2-01;
@@ -75,7 +89,7 @@ server {
}
```
The above is a sample http configuration that adds an `X-Served-By` header to requests. The template file **must** be owned by the user `dokku:dokku`.
The above is a sample http configuration that adds an `X-Served-By` header to requests.
A few tips for custom nginx templates:
@@ -83,6 +97,21 @@ A few tips for custom nginx templates:
- Templated files will be validated via `nginx -t`.
- Application environment variables can be used within your nginx configuration.
After your changes a `dokku deploy myapp` will regenerate the `/home/dokku/myapp/nginx.conf` file which is then used.
### Customizing via configuration files included by the default templates
The default nginx.conf- templates will include everything from your apps `nginx.conf.d/` subdirectory in the main `server {}` block (see above):
include $DOKKU_ROOT/$APP/nginx.conf.d/*.conf;
. That means you can put additional configuration in separate files, for example to limit the uploaded body size to 50 megabytes, do
mkdir /home/dokku/myapp/nginx.conf.d/
echo 'client_max_body_size 50M;' > /home/dokku/myapp/nginx.conf.d/upload.conf
chown dokku:dokku /home/dokku/myapp/nginx.conf.d/upload.conf
service nginx reload
## Customizing hostnames
Applications typically have the following structure for their hostname:

View File

@@ -16,9 +16,6 @@ cd /var/lib/dokku/plugins
git clone <git url>
dokku plugins-install
```
> todo: add a command to dokku to install a plugin, given a git repository `dokku plugin:install <git url>`?
## Creating your own plugin
[See the full documentation](http://progrium.viewdocs.io/dokku/development/plugin-creation).
@@ -29,6 +26,7 @@ Note: The following plugins have been supplied by our community and may not have
[agco-adm]: https://github.com/agco-adm
[ademuk]: https://github.com/ademuk
[alessio]: https://github.com/alessio
[alex-sherwin]: https://github.com/alex-sherwin
[alexanderbeletsky]: https://github.com/alexanderbeletsky
[Aomitayo]: https://github.com/Aomitayo
@@ -37,7 +35,7 @@ Note: The following plugins have been supplied by our community and may not have
[cameron-martin]: https://github.com/cameron-martin
[cedricziel]: https://github.com/cedricziel
[cef]: https://github.com/cef
[cjblomqvist]: https://github.com/cjblomqvist
[cjblomqvist]: https://github.com/cjblomqvist
[darkpixel]: https://github.com/darkpixel
[dyson]: https://github.com/dyson
[F4-Group]: https://github.com/F4-Group
@@ -48,7 +46,6 @@ Note: The following plugins have been supplied by our community and may not have
[hughfletcher]: https://github.com/hughfletcher
[iskandar]: https://github.com/iskandar
[jeffutter]: https://github.com/jeffutter
[jezdez]: https://github.com/jezdez
[jlachowski]: https://github.com/jlachowski
[krisrang]: https://github.com/krisrang
[Kloadut]: https://github.com/Kloadut
@@ -81,6 +78,10 @@ Note: The following plugins have been supplied by our community and may not have
[ribot]: https://github.com/ribot
[Benjamin-Dobell]: https://github.com/Benjamin-Dobell
[jagandecapri]: https://github.com/jagandecapri
[mixxorz]: https://github.com/mixxorz
[Maciej Łebkowski]: https://github.com/mlebkowski
[abossard]: https://github.com/dudagroup
[alexkruegger]: https://github.com/alexkruegger
### Datastores
@@ -92,7 +93,6 @@ Note: The following plugins have been supplied by our community and may not have
| [MariaDB (single container)](https://github.com/ohardy/dokku-mariadb) | [ohardy][] | Compatible with 0.2.0 |
| [MySQL](https://github.com/hughfletcher/dokku-mysql-plugin) | [hughfletcher][] | |
| [PostgreSQL](https://github.com/Kloadut/dokku-pg-plugin) | [Kloadut][] | Compatible with 0.2.0 |
| [PostgreSQL](https://github.com/jezdez/dokku-postgres-plugin) | [jezdez][] | Compatible with 0.2.0 |
| [PostgreSQL](https://github.com/jlachowski/dokku-pg-plugin) | [jlachowski][] | IP & PORT available directly in linked app container env variables (requires link plugin)|
| [PostgreSQL (single container)](https://github.com/jeffutter/dokku-postgresql-plugin) | [jeffutter][] | This plugin creates a single postgresql container that all your apps can use. Thus only one instance of postgresql running (good for servers without a ton of memory). |
| [PostgreSQL (single container)](https://github.com/ohardy/dokku-psql) | [ohardy][] | Compatible with 0.2.0 |
@@ -103,9 +103,7 @@ Note: The following plugins have been supplied by our community and may not have
| Plugin | Author | Compatibility |
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
| [Memcached](https://github.com/jezdez/dokku-memcached-plugin) | [jezdez][] | Compatible with 0.2.0 |
| [Memcached](https://github.com/jlachowski/dokku-memcached-plugin) | [jlachowski][] | IP & PORT available directly in linked app container env variables (requires link plugin)|
| [Redis](https://github.com/jezdez/dokku-redis-plugin) | [jezdez][] | Requires https://github.com/rlaneve/dokku-link; compatible with 0.2.0 |
| [Redis](https://github.com/luxifer/dokku-redis-plugin) | [luxifer][] | |
| [Redis](https://github.com/sekjun9878/dokku-redis-plugin) | [sekjun9878][] | A better Redis plugin with automatic instance creation and Dokku Link support
| [Redis (single container)](https://github.com/ohardy/dokku-redis) | [ohardy][] | Compatible with 0.2.0 |
@@ -124,12 +122,11 @@ Note: The following plugins have been supplied by our community and may not have
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
| [CouchDB](https://github.com/racehub/dokku-couchdb-plugin) | [RaceHub][] | Compatible with 0.2.0 |
| [Elasticsearch](https://github.com/robv/dokku-elasticsearch) | [robv][] | Not compatible with >= 0.3.0 (still uses /home/git) |
| [Elasticsearch](https://github.com/jezdez/dokku-elasticsearch-plugin) | [jezdez][] | Compatible with 0.2.0 to 0.3.13 |
| [Elasticsearch](https://github.com/blag/dokku-elasticsearch-plugin)<sup>1</sup> | [blag][] | Compatible with 0.2.0 |
| [MongoDB (single container)](https://github.com/jeffutter/dokku-mongodb-plugin) | [jeffutter][] | |
| [Neo4j](https://github.com/Aomitayo/dokku-neo4j-plugin) | [Aomitayo][] | |
| [RethinkDB](https://github.com/stuartpb/dokku-rethinkdb-plugin) | [stuartpb][] | 2014-02-22: targeting dokku @ [latest][217d00a]; will fail with Dokku earlier than [28de3ec][]. |
| [RiakCS (single container)](https://github.com/jeffutter/dokku-riakcs-plugin) | [jeffutter][] | Incompatible with 0.2.0 (checked at [dccee02][]) |
| [Neo4j](https://github.com/Aomitayo/dokku-neo4j-plugin) | [Aomitayo][] | |
[dccee02]: https://github.com/jeffutter/dokku-riakcs-plugin/commit/dccee02702e7001851917b7814e78a99148fb709
@@ -138,11 +135,11 @@ Note: The following plugins have been supplied by our community and may not have
| Plugin | Author | Compatibility |
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
| [Circus](https://github.com/apmorton/dokku-circus) | [apmorton][] | |
| [Forego](https://github.com/iskandar/dokku-forego) | [iskandar][] | Compatible with 0.2.x |
| [Logging Supervisord](https://github.com/sehrope/dokku-logging-supervisord) | [sehrope][] | Works with dokku @ [c77cbf1][] - no 0.2.0 compatibility |
| [Monit](https://github.com/cjblomqvist/dokku-monit) | [cjblomqvist][] | |
| [Shoreman ](https://github.com/statianzo/dokku-shoreman) | [statianzo][] | Compatible with 0.2.0 |
| [Supervisord](https://github.com/statianzo/dokku-supervisord) | [statianzo][] | Compatible with 0.2.0 |
| [Logging Supervisord](https://github.com/sehrope/dokku-logging-supervisord) | [sehrope][] | Works with dokku @ [c77cbf1][] - no 0.2.0 compatibility |
| [Forego](https://github.com/iskandar/dokku-forego) | [iskandar][] | Compatible with 0.2.x |
| [Monit](https://github.com/cjblomqvist/dokku-monit) | [cjblomqvist][] | |
[c77cbf1]: https://github.com/progrium/dokku/commit/c77cbf1d3ae07f0eafb85082ed7edcae9e836147
[28de3ec]: https://github.com/progrium/dokku/commit/28de3ecaa3231a223f83fd8d03f373308673bc40
@@ -155,28 +152,22 @@ Note: The following plugins have been supplied by our community and may not have
| [Docker Direct](https://github.com/heichblatt/dokku-docker-direct) | [heichblatt][] | |
| [Dokku Name](https://github.com/alex-sherwin/dokku-name) | [alex-sherwin][] | dokku >= [c77cbf1][] |
| [Dokku Registry](https://github.com/agco-adm/dokku-registry)<sup>1</sup> | [agco-adm][] | |
| [git rev-parse HEAD in env](https://github.com/nornagon/dokku-git-rev) | [nornagon][] | Compatible with 0.2.0 |
| [git rev-parse HEAD in env](https://github.com/cjblomqvist/dokku-git-rev) | [cjblomqvist][] | Compatible with 0.3.0 |
| [Graduate (Environment Management)](https://github.com/glassechidna/dokku-graduate) | [Benjamin-Dobell][] | dokku >= v0.3.14 |
| [HTTP Auth](https://github.com/Flink/dokku-http-auth) | [Flink][] | |
| [HTTP Auth Secure Apps](https://github.com/matto1990/dokku-secure-apps) | [matto1990][] | Works with v0.2.3 |
| [Host Port binding](https://github.com/stuartpb/dokku-bind-port) | [stuartpb][] | dokku >= [c77cbf1][]. 2014-02-17: [a043e98][] targeting dokku @ [latest][217d00a] |
| [Hostname](https://github.com/michaelshobbs/dokku-hostname) | [michaelshobbs][] | |
| [Link Containers](https://github.com/rlaneve/dokku-link) | [rlaneve][] | dokku >= [c77cbf1][] |
| [Maintenance mode](https://github.com/Flink/dokku-maintenance) | [Flink][] | |
| [Multi-Buildpack](https://github.com/pauldub/dokku-multi-buildpack) | [pauldub][] | |
| [Nginx-Alt](https://github.com/mikexstudios/dokku-nginx-alt) | [mikexstudios][] | Works with v0.2.3 |
| [Persistent Storage](https://github.com/dyson/dokku-persistent-storage) | [dyson][] | Requires dokku >= [c77cbf1][] |
| [Ports](https://github.com/heichblatt/dokku-ports) | [heichblatt][] | |
| [Pre-Deploy Tasks](https://github.com/michaelshobbs/dokku-app-predeploy-tasks) | [michaelshobbs][] | |
| [SSH Deployment Keys](https://github.com/cedricziel/dokku-deployment-keys)<sup>2</sup> | [cedricziel][] | 2014-01-17: compatible with upstream/master |
| [SSH Hostkeys](https://github.com/cedricziel/dokku-hostkeys-plugin)<sup>3</sup> | [cedricziel][] | 2014-01-17: compatible with upstream/master |
| [VHOSTS Custom Configuration](https://github.com/neam/dokku-nginx-vhosts-custom-configuration) | [motin][] | Compatible with 0.3.1 |
| [Volume (persistent storage)](https://github.com/ohardy/dokku-volume) | [ohardy][] | Compatible with 0.2.0 |
| [Maintenance mode](https://github.com/Flink/dokku-maintenance) | [Flink][] | |
| [HTTP Auth](https://github.com/Flink/dokku-http-auth) | [Flink][] | |
| [App Configfiles](https://github.com/alexkruegger/dokku-app-configfiles) | [alexkruegger][] | Compatible with 0.3.17+ |
[8fca220]: https://github.com/progrium/dokku/commit/8fca2204edb0017796d6915ca9157c05b1238e28
[217d00a]: https://github.com/progrium/dokku/commit/217d00a1bc47a7e24d8847617bb08a1633025fc7
[98332de]: https://github.com/dyson/dokku-persistent-storage/commit/98332de4b5b640610bee535f4d5260263074e18b
[a043e98]: https://github.com/stuartpb/dokku-bind-port/commit/a043e9892f4815b6525c850131e09fd64db5c1fa
<sup>1</sup> On Heroku similar functionality is offered by the [heroku-labs pipeline feature](https://devcenter.heroku.com/articles/labs-pipelines), which allows you to promote builds across multiple environments (staging -> production)
@@ -188,23 +179,25 @@ Note: The following plugins have been supplied by our community and may not have
| Plugin | Author | Compatibility |
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
| [Wordpress](https://github.com/dudagroup/dokku-wordpress-template) | [abossard][] | Dokku dev, mariadb, volume, domains |
| [Node](https://github.com/pnegahdar/dokku-node) | [pnegahdar][] | |
| [Node](https://github.com/ademuk/dokku-nodejs) | [ademuk][] | |
| [Airbrake deploy](https://github.com/Flink/dokku-airbrake-deploy) | [Flink][] | |
| [APT](https://github.com/F4-Group/dokku-apt) | [F4-Group][] | |
| [Chef cookbooks](https://github.com/fgrehm/chef-dokku) | [fgrehm][] | |
| [Bower install](https://github.com/alexanderbeletsky/dokku-bower-install) | [alexanderbeletsky][] | |
| [Bower/Grunt](https://github.com/thrashr888/dokku-bower-grunt-build-plugin) | [thrashr888][] | |
| [Bower/Gulp](https://github.com/gdi2290/dokku-bower-gulp-build-plugin) | [gdi2290][] | |
| [Bower/Gulp](https://github.com/jagandecapri/dokku-bower-gulp-build-plugin) | [jagandecapri][] | |
| [Docker auto volumes](https://github.com/Flink/dokku-docker-auto-volumes) | [Flink][] | 0.3.17+, auto-persist docker volumes |
| [HipChat Notifications](https://github.com/cef/dokku-hipchat) | [cef][] | |
| [Slack Notifications](https://github.com/ribot/dokku-slack) | [ribot][] | |
| [Graphite/statsd](https://github.com/jlachowski/dokku-graphite-plugin) | [jlachowski][] | |
| [APT](https://github.com/F4-Group/dokku-apt) | [F4-Group][] | |
| [User ACL](https://github.com/mlebkowski/dokku-acl) | [Maciej Łebkowski][] | |
| [PrimeCache](https://github.com/darkpixel/dokku-prime-cache) | [darkpixel][] | |
| [Webhooks](https://github.com/nickstenning/dokku-webhooks) | [nickstenning][] | |
| [Logspout](https://github.com/michaelshobbs/dokku-logspout) | [michaelshobbs][] | |
| [Node](https://github.com/pnegahdar/dokku-node) | [pnegahdar][] | |
| [Node](https://github.com/ademuk/dokku-nodejs) | [ademuk][] | |
| [Rails logs](https://github.com/Flink/dokku-rails-logs) | [Flink][] | |
| [Airbrake deploy](https://github.com/Flink/dokku-airbrake-deploy) | [Flink][] | |
| [Reset mtime](https://github.com/mixxorz/dokku-docker-reset-mtime) | [mixxorz][] | 0.3.15+, Dockerfile support |
| [Slack Notifications](https://github.com/ribot/dokku-slack) | [ribot][] | |
| [User ACL](https://github.com/mlebkowski/dokku-acl) | [Maciej Łebkowski][] | |
| [Webhooks](https://github.com/nickstenning/dokku-webhooks) | [nickstenning][] | |
| [Wordpress](https://github.com/dudagroup/dokku-wordpress-template) | [abossard][] | Dokku dev, mariadb, volume, domains |
<sup>1</sup> Forked from [jezdez/dokku-elasticsearch-plugin](https://github.com/jezdez/dokku-elasticsearch-plugin): uses Elasticsearch 1.2 (instead of 0.90), doesn't depend on dokku-link, runs as elasticsearch user instead of root, and turns off multicast autodiscovery for use in a VPS environment.
@@ -217,11 +210,20 @@ The following plugins have been removed as their functionality is now in Dokku C
| [Custom Domains](https://github.com/neam/dokku-custom-domains) | [motin][] | v0.3.10 (domains plugin) |
| [Debug](https://github.com/heichblatt/dokku-debug) | [heichblatt][] | v0.3.9 (trace command) |
| [Docker Options](https://github.com/dyson/dokku-docker-options) | [dyson][] | v0.3.17 (docker-options plugin) |
| [Events Logger](https://github.com/alessio/dokku-events) | [alessio][] | v0.3.21 (events plugin) |
| [Host Port binding](https://github.com/stuartpb/dokku-bind-port) | [stuartpb][] | v0.3.17 (docker-options plugin) |
| [Multiple Domains](https://github.com/wmluke/dokku-domains-plugin)<sup>1</sup> | [wmluke][] | v0.3.10 (domains plugin) |
| [Nginx-Alt](https://github.com/mikexstudios/dokku-nginx-alt) | [mikexstudios][] | v0.3.10 (domains plugin) |
| [Persistent Storage](https://github.com/dyson/dokku-persistent-storage) | [dyson][] | v0.3.17 (docker-options plugin) |
| [PrimeCache](https://github.com/darkpixel/dokku-prime-cache) | [darkpixel][] | v0.3.0 (zero downtime deploys) |
| [Rebuild application](https://github.com/scottatron/dokku-rebuild) | [scottatron][] | v0.3.14 (ps plugin) |
| [Supply env vars to buildpacks](https://github.com/cameron-martin/dokku-build-env)<sup>2</sup> | [cameron-martin][] | v0.3.9 (build-env plugin) |
| [user-env-compile](https://github.com/musicglue/dokku-user-env-compile)<sup>2</sup> | [musicglue][] | v0.3.9 (build-env plugin) |
| [user-env-compile](https://github.com/motin/dokku-user-env-compile)<sup>2</sup> | [motin][] | v0.3.9 (build-env plugin) |
| [VHOSTS Custom Configuration](https://github.com/neam/dokku-nginx-vhosts-custom-configuration) | [motin][] | v0.3.10 (domains plugin) |
<sup>1</sup> Conflicts with [VHOSTS Custom Configuration](https://github.com/neam/dokku-nginx-vhosts-custom-configuration)
<sup>2</sup> Similar to the heroku-labs feature (see https://devcenter.heroku.com/articles/labs-user-env-compile)
[a043e98]: https://github.com/stuartpb/dokku-bind-port/commit/a043e9892f4815b6525c850131e09fd64db5c1fa

View File

@@ -4,10 +4,38 @@ Dokku supports rudimentary process (really container) management via the `ps` pl
```
ps <app> List processes running in app container(s)
ps:rebuildall Rebuild all apps
ps:rebuild <app> Rebuild an app
ps:restartall Restart all deployed app containers
ps:restart <app> Restart app container(s)
ps:scale <app> <proc>=<count> [<proc>=<count>] Set how many processes of a given process to run
ps:start <app> Start app container(s)
ps:stop <app> Stop app container(s)
ps:restart <app> Restart app container(s)
ps:restartall Restart all deployed app containers
```
*NOTE*: As of v0.3.14, `dokku deploy:all` in now deprecated by `ps:restartall` and will be removed in a future version.
## Scaling
Dokku allows you to run multiple process types at different container counts. For example, if you had an app that contained 1 web app listener and 1 background job processor, dokku can, spin up 1 container for each process type defined in the Procfile. By default we will only start the web process. However, if you wanted 2 job processors running simultaneously, you can modify this behavior in a few ways.
## Include a DOKKU_SCALE file in your repo
Dokku expects this file to contain one line for every process defined in your Procfile. Example:
```
web=1
worker=2
```
## Use the ps:scale command. Example:
```
dokku ps:scale app_name web=1 worker=2
```
*NOTE*: Dokku will always use the DOKKU_SCALE file that ships with the repo to override any local settings.
## The web proctype
Like Heroku, we handle the `web` proctype differently from others. The `web` proctype is the only proctype that will invoke custom checks as defined by a CHECKS file. It is also the only proctype that will be launched in a container that is either proxied via nginx or bound to an external port.

View File

@@ -1,105 +1,116 @@
<!doctype html>
<head>
<meta charset="utf-8">
<title>{{NAME}} :: viewdocs.io</title>
<link href='http://fonts.googleapis.com/css?family=Source+Code+Pro:300,600' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Montserrat:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="http://static.gist.io/css/screen.css">
<style type="text/css">
body {
background: #f0f3f3;
font: 500 16px proxima-nova-1, proxima-nova-2, 'Proxima Nova', 'Montserrat', HelveticaNeue, Helvetica, Arial, sans-serif;
}
article pre {
background-color: #fff;
border-radius: 2px;
box-shadow: 0 0 10px rgba(0,0,0,.1);
color: #222;
font-family: 'Source Code Pro', Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
font-size: 14px;
overflow: auto;
padding: 10px;
width: 100%;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
}
article p code {
background-color: #fff;
border-radius: 2px;
box-shadow: 0 0 10px rgba(0,0,0,.1);
color: #333;
font-family: 'Source Code Pro', Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
font-size: 14px;
padding: 0 4px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
}
article .highlight {
padding: 0;
}
article h1 {
font-size: 2em;
font-weight: bold;
}
article h2 {
font-size: 1.5em;
font-weight: bold;
}
article h3 {
font-size: 1em;
text-transform: uppercase;
font-weight: bold;
}
article ul, article ol {
list-style-position: outside;
padding-left: 20px;
}
th:nth-of-type(1) {
width: 230px;
}
th:nth-of-type(2) {
width: 140px;
}
tr, td {
line-height: 24px;
text-align: left;
}
#gistbody h1:first-child {
border-bottom: 1px solid #dadada;
display: block;
color: #000;
font-weight: 700;
font-size: 20px;
line-height: 1;
margin: 0 0 24px 0;
padding-bottom: 31px;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.content {
font-size: 1em;
}
</style>
</head>
<body>
<section class="content">
<header>
<h1 id="gistid"><a href="http://github.com/{{USER}}/{{NAME}}">{{NAME}}</a> :: <a href="/{{NAME}}">index</a></h1>
</header>
<article id="gistbody" class="instapaper_body entry-content">
{{CONTENT}}
</article>
</section>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
<style type="text/css">
body{padding-bottom:40px;color:#5a5a5a}
h1{color:#5a5a5a;font-family:'montserrat',Optima,Segoe,"Segoe UI",Candara,Calibri,Arial,sans-serif;font-weight:700;line-height:1.1;margin-bottom:12px;margin-top:12px;text-rendering:optimizelegibility}
.header{background-color:#2a8fbd;padding:22px 0}
.header .heading{color:#fff;font-size:23px;margin:0;padding:0}
.blurb{color:#424242;background-color:#ededed;background-image:url(gplaypattern.png);padding:45px 0;text-align:center}
.blurb p{font-size:17px;font-weight:300;margin:18px 0;text-align:center}
.quickstart-code{display:block;font-size:12px;line-height:1.3em;margin:45px auto;max-width:650px;padding:0}
.quickstart-code .title{background-color:#dfdfdf;background-image:linear-gradient(top,#f7f7f7 0%,#dfdfdf 7%,#ccc 100%);border-bottom:1px solid #111;color:#444;display:block;font-weight:400;font-size:14px;margin:0 20px;padding:3px 0;text-align:center;text-shadow:0 1px 0 rgba(255,255,255,0.5);border-radius:5px 5px 0 0;box-shadow:0 3px 0 rgba(0,0,0,0.5)}
.quickstart-code .shell{background-color:#171717;font-family:Menlo,Consolas,"Courier New",Courier,"Liberation Mono",monospace;margin:0 20px;padding:20px;text-shadow:none;border-radius:0 0 5px 5px;box-shadow:0 5px 30px rgba(0,0,0,0.3)}
.quickstart-code .line{display:block;margin:0;padding:0}
.quickstart-code .line span{display:inline-block}
.quickstart-code .path{color:#2a8fbd;user-select:none}
.quickstart-code .prompt{color:#f90;user-select:none}
.quickstart-code .command{color:#ffc}
.marketing .col-lg-4{margin-bottom:20px;text-align:center}
.marketing .col-lg-4 p{margin-right:10px;margin-left:10px}
.featurette-divider{margin:20px 0}
.featurette-heading{font-weight:400;line-height:1;letter-spacing:-1px}
.featurette-heading .text-muted{font-weight:300}
@media (min-width: 768px) {
.quickstart-code{font-size:14px;line-height:22px}
.featurette-heading{font-size:50px}
}
@media (min-width: 992px) {
.featurette-heading{margin-top:120px}
}
</style>
</head>
<body>
<div class="header">
<div class="container">
<h1 class="heading">Dokku</h1>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col-xs-4 col-md-2" style="padding-top:16px">
<div class="list-group">
<a href="#" class="list-group-item disabled">Getting Started</a>
<a href="http://progrium.viewdocs.io/dokku/installation" class="list-group-item">Installation</a>
<a href="http://progrium.viewdocs.io/dokku/upgrading" class="list-group-item">Upgrading</a>
<a href="http://progrium.viewdocs.io/dokku/troubleshooting" class="list-group-item">Troubleshooting</a>
<a href="http://progrium.viewdocs.io/dokku/getting-started/where-to-get-help" class="list-group-item">Getting Help</a>
<a href="#" class="list-group-item disabled">Deployment</a>
<a href="http://progrium.viewdocs.io/dokku/application-deployment" class="list-group-item">Application Deployment</a>
<a href="http://progrium.viewdocs.io/dokku/configuration-management" class="list-group-item">Configuration management</a>
<a href="http://progrium.viewdocs.io/dokku/process-management" class="list-group-item">Process management</a>
<a href="http://progrium.viewdocs.io/dokku/dns" class="list-group-item">DNS Configuration</a>
<a href="http://progrium.viewdocs.io/dokku/nginx" class="list-group-item">Nginx Configuration</a>
<a href="http://progrium.viewdocs.io/dokku/remote-commands" class="list-group-item">Running Remote commands</a>
<a href="http://progrium.viewdocs.io/dokku/docker-options" class="list-group-item">Container Options</a>
<a href="http://progrium.viewdocs.io/dokku/dokku-events-logs" class="list-group-item">Dokku Event Logs</a>
<a href="#" class="list-group-item disabled">Community Contributions</a>
<a href="http://progrium.viewdocs.io/dokku/community/clients" class="list-group-item">Clients</a>
<a href="http://progrium.viewdocs.io/dokku/plugins" class="list-group-item">Plugins</a>
<a href="#" class="list-group-item disabled">Development</a>
<a href="http://progrium.viewdocs.io/dokku/development/plugin-creation" class="list-group-item">Plugin Creation</a>
<a href="http://progrium.viewdocs.io/dokku/development/pluginhooks" class="list-group-item">Pluginhooks</a>
<a href="http://progrium.viewdocs.io/dokku/development/testing" class="list-group-item">Test Suite</a>
<a href="http://progrium.viewdocs.io/dokku/development/release-process" class="list-group-item">Release Process</a>
</div>
</div>
<div class="col-xs-8 col-md-10">
{{CONTENT}}
</div>
</div>
</div>
<div class="container">
<footer>
<p class="pull-right"><a href="#">Back to top</a></p>
<p>&copy; 2013 Dokku</p>
</footer>
</div>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-6824126-17', 'viewdocs.io');
ga('send', 'pageview');
document.addEventListener("DOMContentLoaded", function (e) {
var elements = document.querySelectorAll('table'),
classNames = ['table', 'table-striped', 'table-hover', 'table-condensed'],
addClass = function (el, className) {
if (el.classList) {
el.classList.add(className);
} else {
el.className += ' ' + className;
}
}
Array.prototype.forEach.call(classNames, function (className, i) {
Array.prototype.forEach.call(elements, function (el, i) {
addClass(el, className);
});
});
});
</script>
<script src="//static.getclicky.com/js" type="text/javascript"></script>
<script type="text/javascript">try{ clicky.init(100672863); }catch(e){}</script>
<noscript><p><img alt="Clicky" width="1" height="1" src="//in.getclicky.com/100672863ns.gif" /></p></noscript>
</body>
</html>

162
dokku
View File

@@ -10,6 +10,9 @@ export PLUGIN_PATH=${PLUGIN_PATH:="/var/lib/dokku/plugins"}
export DOKKU_NOT_IMPLEMENTED_EXIT=10
export DOKKU_VALID_EXIT=0
export DOKKU_LOGS_DIR=${DOKKU_LOGS_DIR:="/var/log/dokku"}
export DOKKU_EVENTS_LOGFILE=${DOKKU_EVENTS_LOGFILE:="$DOKKU_LOGS_DIR/events.log"}
source "$PLUGIN_PATH/common/functions"
[[ -f $DOKKU_ROOT/dokkurc ]] && source $DOKKU_ROOT/dokkurc
@@ -63,77 +66,140 @@ case "$1" in
;;
deploy)
[[ -z $2 ]] && dokku_log_fail "Please specify an app to deploy"
APP="$2"; IMAGE="dokku/$APP"
verify_app_name "$APP"
pluginhook pre-deploy $APP
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
oldid=$(< "$DOKKU_ROOT/$APP/CONTAINER")
fi
# start the app
DOCKER_ARGS=$(: | pluginhook docker-args $APP deploy)
DOCKER_ARGS+=$(: | pluginhook docker-args-deploy $APP)
BIND_EXTERNAL=$(pluginhook bind-external-ip $APP)
is_image_buildstep_based "$IMAGE" && DOKKU_BUILDSTEP=true
[[ -n "$DOKKU_BUILDSTEP" ]] && START_CMD="/start web"
[[ -z "$DOKKU_BUILDSTEP" ]] && DOKKU_DOCKERFILE_PORT=$(dokku config:get $APP DOKKU_DOCKERFILE_PORT || true)
DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE"
oldids=$(get_app_container_ids $APP)
if [[ "$BIND_EXTERNAL" = "false" ]];then
port=${DOKKU_DOCKERFILE_PORT:=5000}
id=$(docker run -d -e PORT=$port $DOCKER_ARGS $IMAGE $START_CMD)
ipaddr=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' $id)
else
id=$(docker run -d -p 5000 -e PORT=5000 $DOCKER_ARGS $IMAGE $START_CMD)
port=$(docker port $id 5000 | sed 's/[0-9.]*://')
ipaddr=127.0.0.1
fi
while read line || [ -n "$line" ]
do
PROC_TYPE=${line%%=*}
PROC_COUNT=${line#*=}
CONTAINER_INDEX=1
# if we can't post-deploy successfully, kill new container
kill_new() {
docker inspect $id &> /dev/null && docker stop $id > /dev/null && docker kill $id > /dev/null
trap - INT TERM EXIT
kill -9 $$
}
while [[ $CONTAINER_INDEX -le $PROC_COUNT ]];do
id=""; port=""; ipaddr=""
DOKKU_CONTAINER_ID_FILE="$DOKKU_ROOT/$APP/CONTAINER.$PROC_TYPE.$CONTAINER_INDEX"
DOKKU_IP_FILE="$DOKKU_ROOT/$APP/IP.$PROC_TYPE.$CONTAINER_INDEX"
DOKKU_PORT_FILE="$DOKKU_ROOT/$APP/PORT.$PROC_TYPE.$CONTAINER_INDEX"
# run checks first, then post-deploy hooks, which switches Nginx traffic
trap kill_new INT TERM EXIT
dokku_log_info1 "Running pre-flight checks"
pluginhook check-deploy $APP $port $ipaddr $id
trap - INT TERM EXIT
# start the app
DOCKER_ARGS=$(: | pluginhook docker-args $APP deploy)
DOCKER_ARGS+=" -e DYNO=$PROC_TYPE "
DOCKER_ARGS+=$(: | pluginhook docker-args-deploy $APP)
BIND_EXTERNAL=$(pluginhook bind-external-ip $APP)
# now using the new container
echo $id > "$DOKKU_ROOT/$APP/CONTAINER"
echo $ipaddr > "$DOKKU_ROOT/$APP/IP"
echo $port > "$DOKKU_ROOT/$APP/PORT"
echo "http://$(< "$DOKKU_ROOT/HOSTNAME"):$port" > "$DOKKU_ROOT/$APP/URL"
[[ -n "$DOKKU_BUILDSTEP" ]] && START_CMD="/start $PROC_TYPE"
if [[ -z "$DOKKU_BUILDSTEP" ]];then
DOKKU_DOCKERFILE_PORT=$(dokku config:get $APP DOKKU_DOCKERFILE_PORT || true)
START_CMD=$(dokku config:get $APP DOKKU_DOCKERFILE_START_CMD || $START_CMD)
fi
if [[ "$PROC_TYPE" == "web" ]]; then
port=${DOKKU_DOCKERFILE_PORT:=5000}
if [[ "$BIND_EXTERNAL" = "true" ]];then
id=$(docker run -d -p $port -e PORT=$port $DOCKER_ARGS $IMAGE $START_CMD)
port=$(docker port $id $port | sed 's/[0-9.]*://')
ipaddr=127.0.0.1
else
id=$(docker run -d -e PORT=$port $DOCKER_ARGS $IMAGE $START_CMD)
ipaddr=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' $id)
fi
else
id=$(docker run -d $DOCKER_ARGS $IMAGE $START_CMD)
fi
# if we can't post-deploy successfully, kill new container
kill_new() {
docker inspect $id &> /dev/null && docker stop $id > /dev/null && docker kill $id > /dev/null
trap - INT TERM EXIT
kill -9 $$
}
DOKKU_APP_SKIP_ALL_CHECKS=$(dokku config:get $APP DOKKU_SKIP_ALL_CHECKS || true)
DOKKU_APP_SKIP_DEFAULT_CHECKS=$(dokku config:get $APP DOKKU_SKIP_DEFAULT_CHECKS || true)
DOKKU_GLOBAL_SKIP_ALL_CHECKS=$(dokku config:get --global DOKKU_SKIP_ALL_CHECKS || true)
DOKKU_GLOBAL_SKIP_DEFAULT_CHECKS=$(dokku config:get --global DOKKU_SKIP_DEFAULT_CHECKS || true)
DOKKU_SKIP_ALL_CHECKS=${DOKKU_APP_SKIP_ALL_CHECKS:="$DOKKU_GLOBAL_SKIP_ALL_CHECKS"}
DOKKU_SKIP_DEFAULT_CHECKS=${DOKKU_APP_SKIP_DEFAULT_CHECKS:="$DOKKU_GLOBAL_SKIP_DEFAULT_CHECKS"}
# run checks first, then post-deploy hooks, which switches Nginx traffic
if [[ "$DOKKU_SKIP_ALL_CHECKS" = "true" ]]; then
dokku_log_info1 "Skipping pre-flight checks"
else
trap kill_new INT TERM EXIT
dokku_log_info1 "Running pre-flight checks"
pluginhook check-deploy $APP $id $PROC_TYPE $port $ipaddr
trap - INT TERM EXIT
fi
# now using the new container
[[ -n "$id" ]] && echo $id > "$DOKKU_CONTAINER_ID_FILE"
[[ -n "$ipaddr" ]] && echo $ipaddr > "$DOKKU_IP_FILE"
[[ -n "$port" ]] && echo $port > "$DOKKU_PORT_FILE"
[[ -n "$port" ]] && echo "http://$(< "$DOKKU_ROOT/HOSTNAME"):$port" > "$DOKKU_ROOT/$APP/URL"
# cleanup pre-migration files
rm -f $DOKKU_ROOT/$APP/CONTAINER $DOKKU_ROOT/$APP/IP $DOKKU_ROOT/$APP/PORT
CONTAINER_INDEX=$(( CONTAINER_INDEX + 1 ))
done
# cleanup when we scale down
if [[ "$PROC_COUNT" == 0 ]]; then
CONTAINER_IDX_OFFSET=0
else
CONTAINER_IDX_OFFSET=$((PROC_COUNT + 1))
fi
for container_state_filetype in CONTAINER IP PORT; do
cd $DOKKU_ROOT/$APP
find . -maxdepth 1 -name "$container_state_filetype.$PROC_TYPE.*" -printf "%f\n" | sort -t . -k 3 -n | tail -n +$CONTAINER_IDX_OFFSET | xargs rm -f
done
done < "$DOKKU_SCALE_FILE"
dokku_log_info1 "Running post-deploy"
pluginhook post-deploy $APP $port $ipaddr
pluginhook post-deploy $APP $port $ipaddr
# kill the old container
if [[ -n "$oldid" ]]; then
if [[ -n "$oldids" ]]; then
if [[ -z "$DOKKU_WAIT_TO_RETIRE" ]];then
DOKKU_APP_DOKKU_WAIT_TO_RETIRE=$(dokku config:get $APP DOKKU_WAIT_TO_RETIRE || true)
DOKKU_GLOBAL_DOKKU_WAIT_TO_RETIRE=$(dokku config:get --global DOKKU_WAIT_TO_RETIRE || true)
DOKKU_WAIT_TO_RETIRE=${DOKKU_APP_DOKKU_WAIT_TO_RETIRE:="$DOKKU_GLOBAL_DOKKU_WAIT_TO_RETIRE"}
fi
# Let the old container finish processing requests, before terminating it
WAIT="${DOKKU_WAIT_TO_RETIRE:-60}"
dokku_log_info1 "Shutting down old container in $WAIT seconds"
dokku_log_info1 "Shutting down old containers in $WAIT seconds"
for oldid in $oldids; do
dokku_log_info2 "$oldid"
done
(
exec >/dev/null 2>/dev/null </dev/null
trap '' INT HUP
sleep $WAIT
docker stop $oldid
docker kill $oldid
for oldid in $oldids; do
docker stop $oldid &> /dev/null
docker kill $oldid &> /dev/null # force a kill as docker seems to not send SIGKILL as the docs would indicate
done
) & disown -a
# Use trap since disown/nohup don't seem to keep child alive
# Give child process just enough time to set the traps
sleep 0.1
fi
;;
cleanup)
# delete all non-running container
# shellcheck disable=SC2046
docker rm $(docker ps -a -f 'status=exited' -q) &> /dev/null &
docker rm $(docker ps -a -f 'status=exited' -q) &> /dev/null || true
# delete unused images
# shellcheck disable=SC2046
docker rmi $(docker images -f 'dangling=true' -q) &> /dev/null &
@@ -166,11 +232,11 @@ case "$1" in
echo ""
echo "Options:"
cat<<EOF | pluginhook commands help | sort
help Print the list of commands
plugins Print active plugins
plugins-install Install active plugins
plugins-update Update active plugins
cat<<EOF | pluginhook commands help | sort | column -c2 -t -s,
help, Print the list of commands
plugins, Print active plugins
plugins-install, Install active plugins
plugins-update, Update active plugins
EOF
;;

View File

@@ -7,6 +7,7 @@ case "$1" in
APP="$2"; IMAGE="dokku/$APP"; IMAGE_SOURCE_TYPE="$3"; TMP_WORK_DIR="$4"
CACHE_DIR="$DOKKU_ROOT/$APP/cache"
[[ -f "$DOKKU_ROOT/$APP/ENV" ]] && source "$DOKKU_ROOT/$APP/ENV"
pushd "$TMP_WORK_DIR" &> /dev/null
case "$IMAGE_SOURCE_TYPE" in
@@ -35,13 +36,14 @@ case "$1" in
dockerfile)
# extract first port from Dockerfile
DOCKERFILE_PORT=$(grep EXPOSE Dockerfile | head -1 | awk '{ print $2 }' || true)
DOCKERFILE_PORT=$(get_dockerfile_exposed_port Dockerfile)
[[ -n "$DOCKERFILE_PORT" ]] && dokku config:set-norestart $APP DOKKU_DOCKERFILE_PORT=$DOCKERFILE_PORT
# buildstep pluginhooks don't necessarily make sense for dockerfiles. call the new breed!!!
pluginhook pre-build-dockerfile "$APP"
docker build -t "$IMAGE" .
[[ "$DOKKU_DOCKERFILE_CACHE_BUILD" == "false" ]] && DOKKU_DOCKER_BUILD_OPTS="$DOKKU_DOCKER_BUILD_OPTS --no-cache"
docker build $DOKKU_DOCKER_BUILD_OPTS -t "$IMAGE" .
pluginhook post-build-dockerfile "$APP"
;;
@@ -109,15 +111,23 @@ case "$1" in
;;
ls)
apps=$(ls -d $DOKKU_ROOT/*/ 2>/dev/null) || (echo "You haven't depoyed any applications yet" && exit 1)
dokku_apps=$(ls -d $DOKKU_ROOT/*/ 2>/dev/null) || (echo "You haven't deployed any applications yet" && exit 1)
dokku_col_log_info2_quiet "App Name" "Container id"
dokku_col_log_info1_quiet "App Name" "Container Type" "Container Id" "Status"
for app in $apps; do
if [[ -f $app/CONTAINER ]]; then
dokku_col_log_msg "$(basename $app)" "$(< $app/CONTAINER)"
for dokku_app in $dokku_apps; do
APP=$(basename $dokku_app)
DOKKU_APP_CIDS=$(get_app_container_ids $APP)
DOCKER_RUNNING_CONTAINERS=$(docker ps -q --no-trunc)
if [[ -n $DOKKU_APP_CIDS ]]; then
for DOKKU_APP_CID in $DOKKU_APP_CIDS; do
DOKKU_APP_CONTAINER_STATUS="stopped"
[[ $DOCKER_RUNNING_CONTAINERS =~ $DOKKU_APP_CID ]] && DOKKU_APP_CONTAINER_STATUS="running"
DOKKU_APP_CONTAINER_TYPE=$(grep -l $DOKKU_APP_CID $DOKKU_ROOT/$APP/CONTAINER.* | awk -F '/' '{ print $5 }' | awk -F '.' '{ print $2 }')
dokku_col_log_msg "$APP" "$DOKKU_APP_CONTAINER_TYPE" "${DOKKU_APP_CID:0:12}" "$DOKKU_APP_CONTAINER_STATUS"
done
else
dokku_col_log_msg "$(basename $app)"
dokku_col_log_msg "$APP" "NOT_DEPLOYED" "NOT_DEPLOYED" "NOT_DEPLOYED"
fi
done
;;
@@ -127,13 +137,23 @@ case "$1" in
verify_app_name "$2"
APP="$2";
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
CONTAINER=$(<$DOKKU_ROOT/$APP/CONTAINER)
if (is_deployed $APP); then
CONTAINER_IDS=( $(get_app_container_ids $APP) )
LAST_CONTAINER_ID=${CONTAINER_IDS[${#CONTAINER_IDS[@]} - 1]}
if [[ $3 == "-t" ]]; then
docker logs --follow $CONTAINER
DOKKU_LOGS_ARGS="--follow"
else
docker logs $CONTAINER | tail -n 100
DOKKU_LOGS_ARGS="--tail 100"
fi
for CID in "${CONTAINER_IDS[@]}";do
if [[ "$CID" != "$LAST_CONTAINER_ID" ]];then
DOKKU_LOGS_CMD+="docker logs $DOKKU_LOGS_ARGS $CID& "
else
DOKKU_LOGS_CMD+="docker logs $DOKKU_LOGS_ARGS $CID; "
fi
done
bash -c "($DOKKU_LOGS_CMD)"
else
echo "Application's container not found"
fi
@@ -160,6 +180,8 @@ case "$1" in
verify_app_name "$2"
APP="$2";
[[ -f "$DOKKU_ROOT/$APP/ENV" ]] && source "$DOKKU_ROOT/$APP/ENV"
if [[ -s "$DOKKU_ROOT/$APP/URLS" ]]; then
case "$1" in
url)
@@ -178,10 +200,12 @@ case "$1" in
SCHEME="https"
fi
if [[ -f "$DOKKU_ROOT/VHOST" ]]; then
if [[ -f "$DOKKU_ROOT/VHOST" ]] && [[ "$NO_VHOST" != "1" ]]; then
echo "$SCHEME://$(< "$DOKKU_ROOT/VHOST")"
else
echo "$SCHEME://$(< "$DOKKU_ROOT/HOSTNAME"):$(< "$DOKKU_ROOT/$APP/PORT")"
for PORT_FILE in $DOKKU_ROOT/$APP/PORT.*; do
echo "$SCHEME://$(< "$DOKKU_ROOT/HOSTNAME"):$(< "$PORT_FILE")"
done
fi
;;
@@ -194,12 +218,12 @@ case "$1" in
help)
cat && cat<<EOF
ls Pretty listing of deployed applications and containers
logs <app> [-t] Show the last logs for an application (-t follows)
run <app> <cmd> Run a command in the environment of an application
url <app> Show the first URL for an application (compatibility)
urls <app> Show all URLs for an application
version Print dokku's version
ls, Pretty listing of deployed applications and containers
logs <app> [-t], Show the last logs for an application (-t follows)
run <app> <cmd>, Run a command in the environment of an application
url <app>, Show the first URL for an application (compatibility)
urls <app>, Show all URLs for an application
version, Print dokku's version
EOF
;;

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

55
plugins/20_events/commands Executable file
View File

@@ -0,0 +1,55 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
PLUGIN_DIR="$(dirname $0)"
case "$1" in
events)
if [[ -f $DOKKU_EVENTS_LOGFILE ]] ; then
if [[ $2 == "-t" ]]; then
tail -f $DOKKU_EVENTS_LOGFILE
else
tail -n 100 $DOKKU_EVENTS_LOGFILE
fi
fi
;;
events:on)
echo "Enabling dokku events logger"
[[ -d $DOKKU_ROOT/.dokkurc ]] || mkdir -p $DOKKU_ROOT/.dokkurc
echo "export DOKKU_EVENTS=1" > $DOKKU_ROOT/.dokkurc/DOKKU_EVENTS
;;
events:off)
echo "Disabling dokku events logger"
rm -f $DOKKU_ROOT/.dokkurc/DOKKU_EVENTS
;;
events:list)
if [[ "$DOKKU_EVENTS" ]]; then
logged="$(find $PLUGIN_DIR -type l -printf '%f ' | sort)"
dokku_col_log_info2_quiet "Events currently logged"
for hook in $logged ; do
dokku_col_log_msg "$hook"
done
else
dokku_log_warn "Events logger disabled"
fi
;;
help | events:help)
cat && cat<<EOF
events [-t], Show the last events (-t follows)
events:list, List logged events
events:on, Enable events logger
events:off, Disable events logger
EOF
;;
*)
exit $DOKKU_NOT_IMPLEMENTED_EXIT
;;
esac

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

5
plugins/20_events/hook Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
[[ ! "$DOKKU_EVENTS" ]] || dokku_log_pluginhook_call "$(basename $0)" "$@"

54
plugins/20_events/install Executable file
View File

@@ -0,0 +1,54 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
DOKKU_RSYSLOG_FILTER=/etc/rsyslog.d/99-dokku.conf
DOKKU_LOGROTATE_FILE=/etc/logrotate.d/dokku
flag_rsyslog_needs_restart=n
# This can be done unconditionally as mkdir -p
# exits gracefully if the path already exists
mkdir -m 775 -p "$DOKKU_LOGS_DIR"
chown syslog:dokku "$DOKKU_LOGS_DIR"
if [[ ! -f "$DOKKU_EVENTS_LOGFILE" ]]; then
touch "$DOKKU_EVENTS_LOGFILE"
# chown syslog:root might not work on SUSE
chown syslog:dokku "$DOKKU_EVENTS_LOGFILE"
chmod 664 "$DOKKU_EVENTS_LOGFILE"
fi
if [[ ! -f "$DOKKU_RSYSLOG_FILTER" ]]; then
cat >"$DOKKU_RSYSLOG_FILTER" <<EOF
:syslogtag, contains, "dokku" $DOKKU_EVENTS_LOGFILE
EOF
flag_rsyslog_needs_restart=y
fi
if [[ ! -f "$DOKKU_LOGROTATE_FILE" ]]; then
cat >"$DOKKU_LOGROTATE_FILE" <<EOF
$DOKKU_LOGS_DIR/*.log {
daily
rotate 7
missingok
notifempty
su syslog dokku
compress
delaycompress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
create 664 syslog dokku
}
EOF
flag_rsyslog_needs_restart=y
fi
if [[ "$flag_rsyslog_needs_restart" == "y" ]]; then
service rsyslog restart
fi
[[ ! "$DOKKU_EVENTS" ]] || dokku_log_pluginhook_call "$(basename $0)" "$@"
exit 0

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

1
plugins/20_events/update Symbolic link
View File

@@ -0,0 +1 @@
hook

View File

@@ -40,11 +40,12 @@ case "$1" in
echo "Destroying $APP (including all add-ons)"
pluginhook pre-delete $APP
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
docker stop $ID > /dev/null || true
docker rm $ID > /dev/null || true
DOKKU_APP_CIDS=$(get_app_container_ids $APP)
if [[ -n $DOKKU_APP_CIDS ]]; then
for ID in $DOKKU_APP_CIDS;do
docker stop $ID > /dev/null || true
docker rm $ID > /dev/null || true
done
fi
docker images | grep $IMAGE | awk '{print $3}' | xargs docker rmi &> /dev/null &
@@ -54,9 +55,9 @@ case "$1" in
help | apps:help)
cat && cat<<EOF
apps List your apps
apps:create <app> Create a new app
apps:destroy <app> Permanently destroy an app
apps, List your apps
apps:create <app>, Create a new app
apps:destroy <app>, Permanently destroy an app
EOF
;;

View File

@@ -87,8 +87,8 @@ case "$1" in
help | backup:help)
cat && cat<<EOF
backup:export [file] Export dokku configuration files
backup:import [file] Import dokku configuration files
backup:export [file], Export dokku configuration files
backup:import [file], Import dokku configuration files
EOF
;;

View File

@@ -24,7 +24,7 @@
# The default behavior is to wait for 5 seconds before running the first check,
# and timeout each check to 30 seconds.
#
# By default, checks will be retried 5 times.
# By default, checks will be retried 5 times.
# You can change these by setting WAIT, TIMEOUT and ATTEMPTS to different values, for
# example:
@@ -37,15 +37,16 @@
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
APP="$1"; DOKKU_APP_LISTEN_PORT="$2"; DOKKU_APP_LISTEN_IP="$3"; DOKKU_APP_CONTAINER_ID="$4"
APP="$1"; DOKKU_APP_CONTAINER_ID="$2"; DOKKU_APP_CONTAINER_TYPE="$3"; DOKKU_APP_LISTEN_PORT="$4"; DOKKU_APP_LISTEN_IP="$5"
if [[ -z "$DOKKU_APP_LISTEN_PORT" ]] && [[ -f "$DOKKU_ROOT/$APP/PORT" ]]; then
DOKKU_APP_LISTEN_PORT=$(< "$DOKKU_ROOT/$APP/PORT")
fi
if [[ -z "$DOKKU_APP_LISTEN_IP" ]] && [[ -f "$DOKKU_ROOT/$APP/IP" ]]; then
DOKKU_APP_LISTEN_IP=$(< "$DOKKU_ROOT/$APP/IP")
fi
if [[ -z "$DOKKU_APP_CONTAINER_ID" ]] && [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
DOKKU_APP_CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
if [[ -z "$DOKKU_APP_CONTAINER_ID" ]]; then
DOKKU_APP_CIDS=( $(get_app_container_ids $APP) )
DOKKU_APP_CONTAINER_ID=${DOKKU_APP_CIDS[0]}
fi
@@ -77,7 +78,11 @@ cleanup() {
}
trap cleanup EXIT
if [[ ! -s "${TMPDIR}/CHECKS" ]] ; then
if [[ ! -s "${TMPDIR}/CHECKS" ]] || [[ "$DOKKU_APP_CONTAINER_TYPE" != "web" ]]; then
if [[ "$DOKKU_SKIP_DEFAULT_CHECKS" = "true" ]]; then
dokku_log_verbose "Skipping default check..."
exit 0
fi
dokku_log_verbose "For more efficient zero downtime deployments, create a file CHECKS."
dokku_log_verbose "See http://progrium.viewdocs.io/dokku/checks-examples.md for examples"
dokku_log_verbose "CHECKS file not found in container: Running simple container check..."
@@ -86,11 +91,11 @@ if [[ ! -s "${TMPDIR}/CHECKS" ]] ; then
# simple default check to see if the container stuck around
# for more thorough checks, create a CHECKS file
DOKKU_DEFAULT_WAIT=$((WAIT+TIMEOUT))
dokku_log_info1 "Waiting for $DOKKU_DEFAULT_WAIT seconds ..."
sleep $DOKKU_DEFAULT_WAIT
DOKKU_DEFAULT_CHECKS_WAIT="${DOKKU_DEFAULT_CHECKS_WAIT:-10}"
dokku_log_info1 "Waiting for $DOKKU_DEFAULT_CHECKS_WAIT seconds ..."
sleep $DOKKU_DEFAULT_CHECKS_WAIT
docker ps -q --no-trunc | grep -q "$DOKKU_APP_CONTAINER_ID" || dokku_log_fail "App container failed to start!!"
! (is_container_running $DOKKU_APP_CONTAINER_ID) && dokku_log_fail "App container failed to start!!"
dokku_log_info1 "Default container check successful!" && exit 0
fi
@@ -116,30 +121,36 @@ do
ATTEMPT=$(( ATTEMPT + 1 ))
dokku_log_info1 "Attempt $ATTEMPT/$ATTEMPTS Waiting for $WAIT seconds ..."
sleep $WAIT
# -q do not use .curlrc (must come first)
# --compressed Test compression handled correctly
# --fail Fail on server errors (4xx, 5xx)
# --location Follow redirects
CURL_OPTIONS="-q --compressed --fail --location --max-time $TIMEOUT"
# Set X-Forwarded-Proto header if TLS is enabled.
SSL="$DOKKU_ROOT/$APP/tls"; WILDCARD_SSL="$DOKKU_ROOT/tls"
if [[ -e "$SSL/server.crt" && -e "$SSL/server.key" ]] || [[ -e "$WILDCARD_SSL/server.crt" && -e "$WILDCARD_SSL/server.key" ]]; then
CURL_OPTIONS+=" -H X-Forwarded-Proto:https"
fi
exec < "$FILENAME"
while read CHECK_URL EXPECTED ; do
# Ignore empty lines and lines starting with #
# shellcheck disable=SC1001
[[ -z "$CHECK_URL" || "$CHECK_URL" =~ ^\# ]] && continue
# Ignore variables
[[ "$CHECK_URL" =~ ^.+= ]] && continue
# Ignore if it's not a URL in a supported format
# shellcheck disable=SC1001
! [[ "$CHECK_URL" =~ ^(http(s)?:)?\/.* ]] && continue
if [[ "$CHECK_URL" =~ ^https?: ]] ; then
URL_PROTOCOL=${CHECK_URL%:*}
CHECK_URL=${CHECK_URL#*:}
else
URL_PROTOCOL="http"
fi
if [[ "$CHECK_URL" =~ ^//.+ ]] ; then
# To test a URL with specific host name, we still make request to localhost,
# but we set Host header to $SEND_HOST.
@@ -149,22 +160,22 @@ do
UNPREFIXED=${CHECK_URL#//}
URL_HOSTNAME=${UNPREFIXED%%/*}
URL_PATHNAME=${UNPREFIXED#$URL_HOSTNAME}
HEADERS="-H Host:$URL_HOSTNAME"
else
URL_HOSTNAME=localhost
URL_PATHNAME=$CHECK_URL
fi
# This URL will show up in the messages
LOG_URL="$URL_PROTOCOL://$URL_HOSTNAME$URL_PATHNAME"
# And how we formulate the CURL request
CURL_ARGS="$CURL_OPTIONS $URL_PROTOCOL://$DOKKU_APP_LISTEN_IP:$DOKKU_APP_LISTEN_PORT$URL_PATHNAME $HEADERS"
dokku_log_verbose "CHECKS expected result:"
dokku_log_verbose "$LOG_URL => \"$EXPECTED\""
[[ $DOKKU_TRACE ]] && dokku_log_verbose "$ curl $CURL_ARGS"
# Capture HTTP response or CURL error message
if OUTPUT=$(curl -# $CURL_ARGS 2>&1) ; then
# OUTPUT contains the HTTP response
@@ -178,7 +189,7 @@ do
FAILEDCHECKS=$(( FAILEDCHECKS + 1 ))
fi
done
if [ $FAILEDCHECKS -gt 0 ]; then
dokku_log_warn "Check attempt $ATTEMPT/$ATTEMPTS failed."
SUCCESS=0

View File

@@ -34,36 +34,36 @@ dokku_log_info2_quiet() {
}
dokku_col_log_info1() {
printf "%-40s %-40s\n" "-----> $@"
printf "%-25s %-25s %-25s %-25s\n" "-----> $@"
}
dokku_col_log_info1_quiet() {
if [[ -z "$DOKKU_QUIET_OUTPUT" ]];then
printf "%-40s %-40s\n" "-----> $@"
printf "%-25s %-25s %-25s %-25s\n" "-----> $@"
else
return 0
fi
}
dokku_col_log_info2() {
printf "%-40s %-40s\n" "=====> $@"
printf "%-25s %-25s %-25s %-25s\n" "=====> $@"
}
dokku_col_log_info2_quiet() {
if [[ -z "$DOKKU_QUIET_OUTPUT" ]];then
printf "%-40s %-40s\n" "=====> $@"
printf "%-25s %-25s %-25s %-25s\n" "=====> $@"
else
return 0
fi
}
dokku_col_log_msg() {
printf "%-40s %-40s\n" "$@"
printf "%-25s %-25s %-25s %-25s\n" "$@"
}
dokku_col_log_msg_quiet() {
if [[ -z "$DOKKU_QUIET_OUTPUT" ]];then
printf "%-40s %-40s\n" "$@"
printf "%-25s %-25s %-25s %-25s\n" "$@"
else
return 0
fi
@@ -90,6 +90,17 @@ dokku_log_fail() {
exit 1
}
dokku_log_event() {
logger -t dokku -i -- "$@"
}
dokku_log_pluginhook_call() {
local l_hook
l_hook="$1" ; shift
dokku_log_event "INVOKED: ${l_hook}( $@ )"
}
dokku_container_log_verbose_quiet() {
CID=$1;
shift
@@ -110,10 +121,29 @@ verify_app_name() {
return 0
}
verify_image() {
local IMAGE="$1"
DOKKU_APP_IMAGES=$(docker images -q $IMAGE)
if [[ -n "$DOKKU_APP_IMAGES" ]]; then
return 0
else
return 1
fi
}
is_image_buildstep_based() {
# circleci can't support --rm as they run lxc in lxc
[[ ! -f "/home/ubuntu/.circlerc" ]] && local DOCKER_ARGS="--rm"
docker run --entrypoint="/bin/bash" $DOCKER_ARGS "$@" -c "[[ -f /exec ]]"
docker run --entrypoint="/bin/sh" $DOCKER_ARGS "$@" -c "test -f /exec"
}
is_number() {
local NUMBER=$1; local NUM_RE='^[0-9]+$'
if [[ $NUMBER =~ $NUM_RE ]];then
return 0
else
return 1
fi
}
parse_args() {
@@ -135,3 +165,83 @@ parse_args() {
done
return 0
}
copy_from_image() {
local IMAGE="$1"; local SRC_FILE="$2"; local DST_DIR="$3"; verify_app_name $APP
if verify_image "$IMAGE"; then
CID=$(docker run -d $IMAGE bash)
docker cp "$CID:$SRC_FILE" "$DST_DIR"
docker rm -f "$CID" &> /dev/null
else
return 1
fi
}
get_app_container_ids() {
APP="$1"
verify_app_name $APP
[[ -f $DOKKU_ROOT/$APP/CONTAINER ]] && DOKKU_CIDS+=$(< $DOKKU_ROOT/$APP/CONTAINER)
shopt -s nullglob
for DOKKU_CID_FILE in $DOKKU_ROOT/$APP/CONTAINER.*; do
DOKKU_CIDS+=" "
DOKKU_CIDS+=$(< $DOKKU_CID_FILE)
DOKKU_CIDS+=" "
done
shopt -u nullglob
echo $DOKKU_CIDS
}
get_dockerfile_exposed_port() {
local DOCKERFILE_PORT=$(grep "^EXPOSE \+[[:digit:]]\+\(\/tcp\)\? *$" $1 | head -1 | sed 's/EXPOSE \+\([[:digit:]]\+\)\(\/tcp\)\?.*/\1/' || true)
echo "$DOCKERFILE_PORT"
}
get_app_running_container_ids() {
local APP=$1
verify_app_name $APP
! (is_deployed $APP) && dokku_log_fail "App $APP has not been deployed"
local CIDS=$(get_app_container_ids $APP)
for CID in $CIDS;do
local APP_CONTAINER_STATUS=$(docker inspect -f '{{.State.Running}}' "$CID" || true)
[[ "$APP_CONTAINER_STATUS" == "true" ]] && local APP_RUNNING_CONTAINER_IDS+="$CID "
done
echo "$APP_RUNNING_CONTAINER_IDS"
}
is_deployed() {
APP="$1"
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] || [[ $(ls $DOKKU_ROOT/$APP/CONTAINER.* &> /dev/null; echo $?) -eq 0 ]];then
return 0
else
return 1
fi
}
is_container_running () {
local CID=$1
local CONTAINER_STATUS=$(docker inspect -f '{{.State.Running}}' "$CID" || true)
if [[ "$CONTAINER_STATUS" == "true" ]]; then
return 0
else
return 1
fi
}
is_app_running() {
local APP="$1"
verify_app_name $APP
local APP_RUNNING_CONTAINER_IDS=$(get_app_running_container_ids $APP)
if [[ -n "$APP_RUNNING_CONTAINER_IDS" ]]; then
return 0
else
return 1
fi
}

View File

@@ -2,8 +2,6 @@
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
ENV_FILE="$DOKKU_ROOT/$2/ENV"
ENV_FILE_TEMP="$DOKKU_ROOT/$2/ENV.tmp"
config_create () {
[ -f $ENV_FILE ] || {
touch $ENV_FILE
@@ -24,7 +22,7 @@ config_styled_hash () {
while read -r word; do
KEY=$(echo $word | cut -d"=" -f1)
VALUE=$(echo $word | cut -d"=" -f2- | sed -e "s/^'//" -e "s/'$//")
VALUE=$(echo $word | cut -d"=" -f2- | sed -e "s/^'//" -e "s/'$//" -e "s/\$$//g")
num_zeros=$((${#longest} - ${#KEY}))
zeros=" "
@@ -38,7 +36,9 @@ config_styled_hash () {
config_write() {
ENV_TEMP="$1"
echo -e "$ENV_TEMP" | sed '/^$/d' | sort > $ENV_FILE_TEMP
ENV_FILE_TEMP="${ENV_FILE}.tmp"
echo "$ENV_TEMP" | sed '/^$/d' | sort > $ENV_FILE_TEMP
if ! cmp -s $ENV_FILE $ENV_FILE_TEMP; then
cp -f $ENV_FILE_TEMP $ENV_FILE
chmod 600 $ENV_FILE
@@ -46,14 +46,43 @@ config_write() {
rm -f $ENV_FILE_TEMP
}
parse_config_args() {
case "$2" in
--global)
ENV_FILE="$DOKKU_ROOT/ENV"
DOKKU_CONFIG_TYPE="global"
DOKKU_CONFIG_RESTART=false
;;
--no-restart)
APP="$3"
ENV_FILE="$DOKKU_ROOT/$APP/ENV"
DOKKU_CONFIG_RESTART=false
DOKKU_CONFIG_TYPE="app"
set -- "${@:1:1}" "${@:3}"
esac
APP=${APP:="$2"}
ENV_FILE=${ENV_FILE:="$DOKKU_ROOT/$APP/ENV"}
DOKKU_CONFIG_TYPE=${DOKKU_CONFIG_TYPE:="app"}
DOKKU_CONFIG_RESTART=${DOKKU_CONFIG_RESTART:=true}
if [[ "$DOKKU_CONFIG_TYPE" = "app" ]]; then
if [[ -z $APP ]]; then
echo "Please specify an app to run the command on" >&2 && exit 1
else
verify_app_name "$2"
fi
fi
export APP ENV_FILE DOKKU_CONFIG_TYPE DOKKU_CONFIG_RESTART
}
case "$1" in
config)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
APP="$2"
parse_config_args "$@"
config_create
[[ ! -s $ENV_FILE ]] && echo "$APP has no config vars" && exit 1
[[ "$APP" ]] && DOKKU_CONFIG_TYPE=$APP
[[ ! -s $ENV_FILE ]] && echo "no config vars for $DOKKU_CONFIG_TYPE" && exit 1
VARS=$(grep -Eo "export ([a-zA-Z_][a-zA-Z0-9_]*=.*)" $ENV_FILE | cut -d" " -f2-)
@@ -64,14 +93,13 @@ case "$1" in
fi
done
dokku_log_info2_quiet "$APP config vars"
dokku_log_info2_quiet "$DOKKU_CONFIG_TYPE config vars"
config_styled_hash "$VARS"
;;
config:get)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
APP="$2"
parse_config_args "$@"
if [[ -z $3 ]]; then
echo "Usage: dokku config:get APP KEY"
@@ -90,26 +118,8 @@ case "$1" in
;;
config:set)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
APP="$2"
if [[ -z "${*:3}" ]]; then
echo "Usage: dokku config:set APP KEY1=VALUE1 [KEY2=VALUE2 ...]"
echo "Must specify KEY and VALUE to set."
exit 1
fi
shift 2
dokku config:set-norestart $APP "$@"
dokku_log_info1 "Restarting app $APP"
dokku ps:restart $APP
;;
config:set-norestart)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
APP="$2"
parse_config_args "$@"
[[ "$2" = "--no-restart" ]] && set -- "${@:1:1}" "${@:3}"
if [[ -z "${*:3}" ]]; then
echo "Usage: dokku config:set APP KEY1=VALUE1 [KEY2=VALUE2 ...]"
@@ -137,8 +147,9 @@ case "$1" in
if [[ $KEY =~ [a-zA-Z_][a-zA-Z0-9_]* ]]; then
RESTART_APP=true
ENV_TEMP=$(echo -e "${ENV_TEMP}" | sed "/^export $KEY=/ d")
ENV_TEMP="${ENV_TEMP}\nexport $KEY='$VALUE'"
ENV_TEMP=$(echo "${ENV_TEMP}" | sed "/^export $KEY=/ d")
ENV_TEMP="${ENV_TEMP}
export $KEY='$VALUE'"
ENV_ADD=$(echo -e "${ENV_ADD}" | sed "/^$KEY=/ d")
ENV_ADD="${ENV_ADD}$
${var}"
@@ -152,29 +163,16 @@ ${var}"
config_write "$ENV_TEMP"
fi
if [[ "$DOKKU_CONFIG_RESTART" == "true" ]]; then
dokku_log_info1 "Restarting app $APP"
dokku ps:restart $APP
fi
;;
config:unset)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
APP="$2"
if [[ -z $3 ]]; then
echo "Usage: dokku config:unset APP KEY1 [KEY2 ...]"
echo "Must specify KEY to unset."
exit 1
fi
shift 2
dokku config:unset-norestart $APP "$@"
dokku_log_info1 "Restarting app $APP"
dokku ps:restart $APP
;;
config:unset-norestart)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
APP="$2"
parse_config_args "$@"
[[ "$2" = "--no-restart" ]] && set -- "${@:1:1}" "${@:3}"
if [[ -z $3 ]]; then
echo "Usage: dokku config:unset APP KEY1 [KEY2 ...]"
@@ -192,14 +190,31 @@ ${var}"
config_write "$ENV_TEMP"
done
if [[ "$DOKKU_CONFIG_RESTART" == "true" ]]; then
dokku_log_info1 "Restarting app $APP"
dokku ps:restart $APP
fi
;;
config:set-norestart)
dokku_log_info2 "$1 is deprecated as of v0.3.22"
shift 1
dokku config:set --no-restart "$@"
;;
config:unset-norestart)
dokku_log_info2 "$1 is deprecated as of v0.3.22"
shift 1
dokku config:unset --no-restart "$@"
;;
help | config:help)
cat && cat<<EOF
config <app> Display the config vars for an app
config:get <app> KEY Display a config value for an app
config:set <app> KEY1=VALUE1 [KEY2=VALUE2 ...] Set one or more config vars
config:unset <app> KEY1 [KEY2 ...] Unset one or more config vars
config (<app>|--global), Display all global or app-specific config vars
config:get (<app>|--global) KEY, Display a global or app-specific config value
config:set (<app>|--global) KEY1=VALUE1 [KEY2=VALUE2 ...], Set one or more config vars
config:unset (<app>|--global) KEY1 [KEY2 ...], Unset one or more config vars
EOF
;;

View File

@@ -81,7 +81,8 @@ get_passed_docker_option() {
add_passed_docker_option() {
local passed_phases=("${!1}")
local passed_option_string=$2
shift
local passed_option_string="$*"
local phase
for phase in "${passed_phases[@]}"; do
get_phase_file_path $phase
@@ -94,7 +95,8 @@ add_passed_docker_option() {
remove_passed_docker_option() {
local passed_phases=("${!1}")
local passed_option_string=$2
shift
local passed_option_string="$*"
local phase
for phase in "${passed_phases[@]}"; do
get_phase_file_path $phase
@@ -139,10 +141,10 @@ case "$1" in
# Display usage help
help)
cat && cat<<EOF
docker-options <app> Display apps docker options for all phases
docker-options <app> <phase(s)> Display apps docker options for phase (comma seperated phase list)
docker-options:add <app> <phase(s)> OPTION Add docker option to app for phase (comma seperated phase list)
docker-options:remove <app> <phase(s)> OPTION Remove docker option from app for phase (comma seperated phase list)
docker-options <app>, Display apps docker options for all phases
docker-options <app> <phase(s)>, Display apps docker options for phase (comma separated phase list)
docker-options:add <app> <phase(s)> OPTION, Add docker option to app for phase (comma separated phase list)
docker-options:remove <app> <phase(s)> OPTION, Remove docker option from app for phase (comma separated phase list)
EOF
;;

View File

@@ -133,10 +133,10 @@ case "$1" in
help | domains:help)
cat && cat<<EOF
domains <app> List custom domains for app
domains:add <app> DOMAIN Add a custom domain to app
domains:clear <app> Clear all custom domains for app
domains:remove <app> DOMAIN Remove a custom domain from app
domains <app>, List custom domains for app
domains:add <app> DOMAIN, Add a custom domain to app
domains:clear <app>, Clear all custom domains for app
domains:remove <app> DOMAIN, Remove a custom domain from app
EOF
;;

View File

@@ -39,8 +39,12 @@ case "$1" in
# broken out into pluginhook so we might support other methods to receive an app
pluginhook receive-app $APP $newrev
else
echo $'\e[1G\e[K'"-----> WARNING: deploy did not complete, you must push to master."
echo $'\e[1G\e[K'"-----> for example, try 'git push <dokku> ${refname/refs\/heads\/}:master'"
if test -f "$PLUGIN_PATH"/enabled/*/receive-branch; then
pluginhook receive-branch $APP $newrev $refname
else
echo $'\e[1G\e[K'"-----> WARNING: deploy did not complete, you must push to master."
echo $'\e[1G\e[K'"-----> for example, try 'git push <dokku> ${refname/refs\/heads\/}:master'"
fi
fi
done
;;

View File

@@ -35,13 +35,23 @@ case "$1" in
SSL="$DOKKU_ROOT/$APP/tls"
APP_NGINX_TEMPLATE="$DOKKU_ROOT/$APP/nginx.conf.template"
if [[ -z "$DOKKU_APP_LISTEN_PORT" ]] && [[ -f "$DOKKU_ROOT/$APP/PORT" ]]; then
DOKKU_APP_LISTEN_PORT=$(< "$DOKKU_ROOT/$APP/PORT")
fi
if [[ -z "$DOKKU_APP_LISTEN_IP" ]] && [[ -f "$DOKKU_ROOT/$APP/IP" ]]; then
DOKKU_APP_LISTEN_IP=$(< "$DOKKU_ROOT/$APP/IP")
if [[ -z "$DOKKU_APP_LISTEN_PORT" ]] && [[ -z "$DOKKU_APP_LISTEN_IP" ]]; then
shopt -s nullglob
for DOKKU_APP_IP_FILE in $DOKKU_ROOT/$APP/IP.web.*;do
DOKKU_APP_PORT_FILE=$(echo $DOKKU_APP_IP_FILE | sed -e "s:IP:PORT:g")
DOKKU_APP_LISTENER_IP=$(< $DOKKU_APP_IP_FILE)
DOKKU_APP_LISTENER_PORT=$(< $DOKKU_APP_PORT_FILE)
DOKKU_APP_LISTENERS+=" "
DOKKU_APP_LISTENERS+="$DOKKU_APP_LISTENER_IP:$DOKKU_APP_LISTENER_PORT"
DOKKU_APP_LISTENERS+=" "
done
shopt -u nullglob
fi
DOKKU_APP_CIDS=($(get_app_container_ids $APP))
docker cp "${DOKKU_APP_CIDS[0]}:/app/nginx.conf.template" "$DOKKU_ROOT/$APP/" 2> /dev/null || true
[[ -f "$DOKKU_ROOT/ENV" ]] && source $DOKKU_ROOT/ENV
[[ -f "$DOKKU_ROOT/$APP/ENV" ]] && source $DOKKU_ROOT/$APP/ENV
[[ -f "$APP_NGINX_TEMPLATE" ]] && NGINX_TEMPLATE="$APP_NGINX_TEMPLATE" && NGINX_CUSTOM_TEMPLATE="true" && dokku_log_info1 'Overriding default nginx.conf with detected nginx.conf.template'
@@ -69,19 +79,20 @@ EOF
SSL_HOSTNAME=$(openssl x509 -in $SSL_INUSE/server.crt -noout -subject | tr '/' '\n' | grep CN= | cut -c4-)
if [[ -n "$SSL_HOSTNAME" ]]; then
SSL_HOSTNAME_REGEX=$(echo "$SSL_HOSTNAME" | sed 's|\.|\\.|g' | sed 's/\*/\[^\.\]\*/g')
[[ -z "$(egrep "^${SSL_HOSTNAME_REGEX}$" $VHOST_PATH)" ]] && echo "$SSL_HOSTNAME" >> $VHOST_PATH
[[ -z "$(egrep "^${SSL_HOSTNAME_REGEX}$" $VHOST_PATH)" ]] && [[ ! "$SSL_HOSTNAME" =~ ^\*.* ]] && echo "$SSL_HOSTNAME" >> $VHOST_PATH
fi
SSL_HOSTNAME_ALT=$(openssl x509 -in $SSL_INUSE/server.crt -noout -text | grep --after-context=1 '509v3 Subject Alternative Name:' | tail -n 1 | sed -e "s/[[:space:]]*DNS://g" | tr ',' '\n' || true)
if [[ -n "$SSL_HOSTNAME_ALT" ]]; then
SSL_HOSTNAME_ALT_REGEX=$(echo "$SSL_HOSTNAME_ALT" | sed 's|\.|\\.|g' | sed 's/\*/\[^\.\]\*/g')
[[ -z "$(egrep "^${SSL_HOSTNAME_ALT_REGEX}$" $VHOST_PATH)" ]] && echo "$SSL_HOSTNAME_ALT" >> $VHOST_PATH
[[ -z "$(egrep "^${SSL_HOSTNAME_ALT_REGEX}$" $VHOST_PATH)" ]] && [[ ! "$SSL_HOSTNAME_ALT" =~ ^\*.* ]] && echo "$SSL_HOSTNAME_ALT" >> $VHOST_PATH
fi
SSL_VHOSTS=$(egrep "^${SSL_HOSTNAME_REGEX}$|^${SSL_HOSTNAME_ALT_REGEX}$" $VHOST_PATH || exit 0)
NONSSL_VHOSTS=$(egrep -v "^${SSL_HOSTNAME_REGEX}$|^${SSL_HOSTNAME_ALT_REGEX}$" $VHOST_PATH || exit 0)
while read line; do
[[ -z "$line" ]] && continue
dokku_log_info1 "Configuring SSL for $line..."
SSL_SERVER_NAME=$line
NOSSL_SERVER_NAME=$line
@@ -98,18 +109,23 @@ EOF
if [[ -n "$DOKKU_APP_LISTEN_PORT" ]] && [[ -n "$DOKKU_APP_LISTEN_IP" ]]; then
echo "upstream $APP { server $DOKKU_APP_LISTEN_IP:$DOKKU_APP_LISTEN_PORT; }" >> $NGINX_CONF
elif [[ -n "$DOKKU_APP_LISTENERS" ]]; then
echo "upstream $APP { " >> $NGINX_CONF
for listener in $DOKKU_APP_LISTENERS;do
echo " server $listener;" >> $NGINX_CONF
done
echo "}" >> $NGINX_CONF
fi
dokku_log_info1 "Creating $SCHEME nginx.conf"
mv $NGINX_CONF "$DOKKU_ROOT/$APP/nginx.conf"
if [[ -n "$DOKKU_APP_LISTEN_PORT" ]] && [[ -n "$DOKKU_APP_LISTEN_IP" ]]; then
if is_deployed "$APP"; then
dokku_log_info1 "Running nginx-pre-reload"
pluginhook nginx-pre-reload $APP $DOKKU_APP_LISTEN_PORT $DOKKU_APP_LISTEN_IP
dokku_log_verbose "Reloading nginx"
validate_nginx
restart_nginx
validate_nginx && restart_nginx
fi
echo "# THIS FILE IS GENERATED BY DOKKU - DO NOT EDIT, YOUR CHANGES WILL BE OVERWRITTEN" > $URLS_PATH
@@ -120,12 +136,18 @@ EOF
dokku_log_info1 "VHOST support disabled, deleting $APP/VHOST"
rm "$DOKKU_ROOT/$APP/VHOST"
fi
if [[ -f "$DOKKU_ROOT/$APP/URLS" ]]; then
dokku_log_info1 "VHOST support disabled, deleting $APP/URLS"
rm "$DOKKU_ROOT/$APP/URLS"
fi
if [[ -f "$DOKKU_ROOT/$APP/nginx.conf" ]]; then
dokku_log_info1 "VHOST support disabled, deleting nginx.conf"
rm "$DOKKU_ROOT/$APP/nginx.conf"
dokku_log_info1 "VHOST support disabled, reloading nginx after nginx.conf deletion"
restart_nginx
if is_deployed "$APP"; then
dokku_log_info1 "VHOST support disabled, reloading nginx after nginx.conf deletion"
validate_nginx && restart_nginx
fi
fi
fi
;;
@@ -152,8 +174,8 @@ EOF
help | nginx:help)
cat && cat<<EOF
nginx:import-ssl <app> Imports a tarball from stdin; should contain server.crt and server.key
nginx:build-config <app> (Re)builds nginx config for given app
nginx:import-ssl <app>, Imports a tarball from stdin; should contain server.crt and server.key
nginx:build-config <app>, (Re)builds nginx config for given app
EOF
;;

View File

@@ -2,13 +2,15 @@
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
APP="$1"; PORT="$2"; IP="$3"
NO_VHOST=$(dokku config:get $APP NO_VHOST || true)
APP="$1"
if [[ -f "$DOKKU_ROOT/$APP/IP.web.1" ]] && [[ -f "$DOKKU_ROOT/$APP/PORT.web.1" ]]; then
NO_VHOST=$(dokku config:get $APP NO_VHOST || true)
if [[ -n "$NO_VHOST" ]]; then
dokku_log_info1 "NO_VHOST config detected"
elif [[ ! -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
dokku domains:setup $APP
if [[ -n "$NO_VHOST" ]]; then
dokku_log_info1 "NO_VHOST config detected"
elif [[ ! -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
dokku domains:setup $APP
fi
dokku nginx:build-config $APP
fi
dokku nginx:build-config $APP $PORT $IP

View File

@@ -2,7 +2,18 @@ server {
listen [::]:80;
listen 80;
server_name $NOSSL_SERVER_NAME;
access_log /var/log/nginx/${APP}-access.log;
error_log /var/log/nginx/${APP}-error.log;
location / {
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/x-javascript application/json application/xml application/rss+xml font/truetype application/x-font-ttf font/opentype application/vnd.ms-fontobject image/svg+xml;
gzip_vary on;
gzip_comp_level 6;
proxy_pass http://$APP;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;

View File

@@ -2,18 +2,30 @@ server {
listen [::]:80;
listen 80;
server_name $NOSSL_SERVER_NAME;
return 301 https://$SSL_SERVER_NAME\$request_uri;
access_log /var/log/nginx/${APP}-access.log;
error_log /var/log/nginx/${APP}-error.log;
return 301 https://\$host\$request_uri;
}
server {
listen [::]:443 ssl spdy;
listen 443 ssl spdy;
server_name $SSL_SERVER_NAME;
access_log /var/log/nginx/${APP}-access.log;
error_log /var/log/nginx/${APP}-error.log;
$SSL_DIRECTIVES
keepalive_timeout 70;
add_header Alternate-Protocol 443:npn-spdy/2;
location / {
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/x-javascript application/json application/xml application/rss+xml font/truetype application/x-font-ttf font/opentype application/vnd.ms-fontobject image/svg+xml;
gzip_vary on;
gzip_comp_level 6;
proxy_pass http://$APP;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;

View File

@@ -1,47 +1,27 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
release_and_deploy() {
source "$(dirname $0)/../common/functions"
local APP="$1"; local IMAGE="dokku/$APP"
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
if is_image_buildstep_based "$IMAGE"; then
IMAGE_SOURCE_TYPE="buildstep"
else
IMAGE_SOURCE_TYPE="dockerfile"
fi
dokku_log_info1 "Releasing $APP ..."
dokku release "$APP" "$IMAGE_SOURCE_TYPE"
dokku_log_info1 "Deploying $APP ..."
dokku deploy "$APP"
dokku_log_info2 "Application deployed:"
dokku urls $APP | sed "s/^/ /"
echo
fi
}
source "$(dirname $0)/functions"
case "$1" in
ps)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
APP="$2"; CONTAINER_IDS=$(get_app_container_ids $APP)
! (is_deployed $APP) && echo "App $APP has not been deployed" && exit 0
docker exec -ti "$CONTAINER_ID" /bin/bash -c "ps auxwww"
for CID in $CONTAINER_IDS; do
docker exec -ti "$CID" /bin/sh -c "ps auxwww"
done
;;
ps:start)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
verify_app_name "$2"; APP="$2"
! (is_deployed $APP) && echo "App $APP has not been deployed" && exit 0
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
if [[ "$(docker ps -q --no-trunc| grep -q $CONTAINER_ID; echo $?)" != "0" ]]; then
if ! (is_app_running $APP); then
release_and_deploy $APP
else
echo "App $APP already running"
@@ -52,12 +32,13 @@ case "$1" in
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
APP="$2"; CONTAINER_IDS=$(get_app_container_ids $APP)
! (is_deployed $APP) && echo "App $APP has not been deployed" && exit 0
if [[ "$(docker ps -q --no-trunc| grep -q $CONTAINER_ID; echo $?)" = "0" ]]; then
DOKKU_APP_RUNNING_CONTAINER_IDS=$(get_app_running_container_ids $APP)
if [[ -n "$DOKKU_APP_RUNNING_CONTAINER_IDS" ]]; then
echo "Stopping $APP ..."
docker stop $CONTAINER_ID > /dev/null
docker stop $DOKKU_APP_RUNNING_CONTAINER_IDS > /dev/null || true
else
echo "App $APP already stopped"
fi
@@ -73,39 +54,61 @@ case "$1" in
ps:rebuildall)
shopt -s nullglob
for app in $DOKKU_ROOT/*/CONTAINER; do
APP=$(basename "$(dirname $app)");
dokku ps:rebuild $APP
for app in $DOKKU_ROOT/*; do
[[ ! -d $app ]] && continue
APP=$(basename $app)
is_deployed $APP && dokku ps:rebuild $APP
done
shopt -u nullglob
;;
ps:restart)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
APP="$2"
! (is_deployed $APP) && echo "App $APP has not been deployed" && exit 0
release_and_deploy $APP
;;
ps:restartall)
shopt -s nullglob
for app in $DOKKU_ROOT/*/CONTAINER; do
APP=$(basename "$(dirname $app)");
for app in $DOKKU_ROOT/*; do
[[ ! -d $app ]] && continue
APP=$(basename $app)
dokku ps:restart $APP
done
shopt -u nullglob
;;
ps:scale)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
verify_app_name "$2"
APP="$2"; DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE"
shift 2
generate_scale_file "$APP"
if [[ -z "$@" ]];then
dokku_log_info1 "Scaling for $APP"
dokku_log_info2 "$(< $DOKKU_SCALE_FILE)"
else
set_scale "$APP" "$@"
release_and_deploy "$APP"
fi
;;
help | ps:help)
cat && cat<<EOF
ps <app> List processes running in app container(s)
ps:start <app> Start app container(s)
ps:stop <app> Stop app container(s)
ps:rebuild <app> Rebuild an app
ps:rebuildall Rebuild all apps
ps:restart <app> Restart app container(s)
ps:restartall Restart all deployed app containers
ps <app>, List processes running in app container(s)
ps:scale <app> <proc>=<count> [<proc>=<count>], Set how many instances of a given process to run
ps:start <app>, Start app container(s)
ps:stop <app>, Stop app container(s)
ps:rebuild <app>, Rebuild an app
ps:rebuildall, Rebuild all apps
ps:restart <app>, Restart app container(s)
ps:restartall, Restart all deployed app containers
EOF
;;

57
plugins/ps/functions Executable file
View File

@@ -0,0 +1,57 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
release_and_deploy() {
source "$(dirname $0)/../common/functions"
local APP="$1"; local IMAGE="dokku/$APP"
if verify_image "$IMAGE"; then
if is_image_buildstep_based "$IMAGE"; then
IMAGE_SOURCE_TYPE="buildstep"
else
IMAGE_SOURCE_TYPE="dockerfile"
fi
dokku_log_info1 "Releasing $APP ..."
dokku release "$APP" "$IMAGE_SOURCE_TYPE"
dokku_log_info1 "Deploying $APP ..."
dokku deploy "$APP"
dokku_log_info2 "Application deployed:"
dokku urls $APP | sed "s/^/ /"
echo
fi
}
generate_scale_file() {
local APP="$1"; local IMAGE="dokku/$APP"; local DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE"
copy_from_image "$IMAGE" "/app/DOKKU_SCALE" "$DOKKU_ROOT/$APP" 2>/dev/null || true
if [[ ! -f $DOKKU_SCALE_FILE ]]; then
dokku_log_info1_quiet "DOKKU_SCALE not found in app image. Defaulting to a single web process"
echo "web=1" >> $DOKKU_SCALE_FILE
dokku_log_info1_quiet "New DOKKU_SCALE file generated"
while read line || [ -n "$line" ]
do
dokku_log_info2_quiet "$line"
done < "$DOKKU_SCALE_FILE"
fi
}
set_scale() {
local APP="$1"; local DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE"
shift 1
local SCALE_SETTINGS=("$@")
for procscale in "${SCALE_SETTINGS[@]}"; do
PROC_NAME=${procscale%%=*}
PROC_COUNT=${procscale#*=}
is_number $PROC_COUNT || dokku_log_fail "ps:scale $PROC_COUNT is not a number"
dokku_log_info1_quiet "Scaling $APP:$PROC_NAME to $PROC_COUNT"
if (egrep -q ^${PROC_NAME}= $DOKKU_SCALE_FILE > /dev/null 2>&1);then
sed --in-place "s:^${PROC_NAME}=.*:$PROC_NAME=$PROC_COUNT:g" $DOKKU_SCALE_FILE
else
echo "$PROC_NAME=$PROC_COUNT" >> $DOKKU_SCALE_FILE
fi
done
}

8
plugins/ps/pre-deploy Executable file
View File

@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
source "$(dirname $0)/functions"
APP="$1"
generate_scale_file $APP

View File

@@ -48,7 +48,7 @@ case "$1" in
help | shell:help)
cat && cat<<EOF
shell Spawn dokku shell
shell, Spawn dokku shell
EOF
;;

View File

@@ -75,6 +75,10 @@ else
@$(QUIET) ./tests/ci/unit_test_runner.sh $$UNIT_TEST_BATCH
endif
deploy-test-checks-root:
@echo deploying checks-root app...
cd tests && ./test_deploy ./apps/checks-root dokku.me '' true
deploy-test-clojure:
@echo deploying config app...
cd tests && ./test_deploy ./apps/clojure dokku.me
@@ -115,6 +119,10 @@ deploy-test-nodejs-express-noprocfile:
@echo deploying nodejs-express app with no Procfile...
cd tests && ./test_deploy ./apps/nodejs-express-noprocfile dokku.me
deploy-test-nodejs-worker:
@echo deploying nodejs-worker app...
cd tests && ./test_deploy ./apps/nodejs-worker dokku.me
deploy-test-php:
@echo deploying php app...
cd tests && ./test_deploy ./apps/php dokku.me
@@ -137,6 +145,7 @@ deploy-test-static:
deploy-tests:
@echo running deploy tests...
@$(QUIET) $(MAKE) deploy-test-checks-root
@$(QUIET) $(MAKE) deploy-test-config
@$(QUIET) $(MAKE) deploy-test-clojure
@$(QUIET) $(MAKE) deploy-test-dockerfile
@@ -147,6 +156,7 @@ deploy-tests:
@$(QUIET) $(MAKE) deploy-test-multi
@$(QUIET) $(MAKE) deploy-test-nodejs-express
@$(QUIET) $(MAKE) deploy-test-nodejs-express-noprocfile
@$(QUIET) $(MAKE) deploy-test-nodejs-worker
@$(QUIET) $(MAKE) deploy-test-php
@$(QUIET) $(MAKE) deploy-test-python-flask
@$(QUIET) $(MAKE) deploy-test-scala

View File

@@ -0,0 +1,2 @@
ATTEMPTS=2
/

View File

@@ -0,0 +1,11 @@
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.sendStatus(404);
});
var port = process.env.PORT || 5000;
app.listen(port, function() {
console.log('Listening on port ' + port);
});

View File

@@ -0,0 +1,14 @@
{
"name": "node-example",
"version": "0.0.1",
"dependencies": {
"express": "4.x"
},
"engines": {
"node": "0.12.x",
"npm": "2.x"
},
"scripts": {
"start": "node index.js"
}
}

View File

@@ -2,7 +2,9 @@ FROM ubuntu:trusty
ENV LC_ALL C
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN true
EXPOSE 3000
EXPOSE 3001/udp
EXPOSE 3000/tcp
EXPOSE 3003
RUN apt-get install -y software-properties-common && add-apt-repository ppa:chris-lea/node.js && apt-get update
RUN apt-get install -y build-essential curl postgresql-client-9.3 nodejs git

View File

@@ -1 +1,3 @@
cron: node worker.js
web: node web.js
worker: node worker.js

View File

@@ -9,4 +9,4 @@ app.get('/', function(request, response) {
var port = process.env.PORT || 5000;
app.listen(port, function() {
console.log("Listening on " + port);
});
});

View File

@@ -0,0 +1,6 @@
function worker() {
console.log('sleeping for 60 seconds');
setTimeout(worker, 60 * 1000);
}
worker();

View File

@@ -0,0 +1,2 @@
web=0
worker=1

View File

@@ -0,0 +1 @@
worker: node worker.js

View File

@@ -0,0 +1,2 @@
#!/usr/bin/env bash
set -e; output="$(pgrep -f "node worker.js" | wc -l)"; echo "$output"; test "$output" == "1"

View File

@@ -0,0 +1,8 @@
{
"name": "node-example",
"version": "0.0.1",
"engines": {
"node": "0.10.x",
"npm": "2.7.x"
}
}

View File

@@ -0,0 +1,6 @@
function worker() {
console.log('sleeping for 60 seconds');
setTimeout(worker, 60 * 1000);
}
worker();

View File

@@ -3,7 +3,7 @@
MODE="$1"; MODE=${MODE:="testing"}
setup_circle() {
MAKE_ENV="CI=true DOCKER_VERSION=1.5.0"
MAKE_ENV="CI=true"
[[ "$1" == "buildstack" ]] && MAKE_ENV+=" BUILD_STACK=true "
echo "setting up with MAKE_ENV: $MAKE_ENV"
sudo -E CI=true make -e sshcommand

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -xeo pipefail
SELF=$(which $0); APP="$1"; TARGET="$2"; FORWARDED_PORT="$3"
SELF=$(which $0); APP="$1"; TARGET="$2"; FORWARDED_PORT="$3"; SHOULD_FAIL="$4"
REMOTE="dokku@$TARGET"
REPO="test-$(basename $APP)-$RANDOM"
@@ -15,6 +15,12 @@ failed(){
exit 1
}
succeeded(){
echo "************ $1 succeeded but should have failed ************"
destroy_app
exit 1
}
TMP=$(mktemp -d -t "$TARGET.XXXXX")
rmdir $TMP && cp -r "$(dirname "$SELF")"/$APP $TMP
cd $TMP
@@ -28,11 +34,21 @@ git add .
[[ -x pre-commit ]] && ./pre-commit $REMOTE $REPO
git commit -m 'initial commit'
git push target master || failed git-push
if [[ "$SHOULD_FAIL" == true ]]; then
git push target master && succeeded git-push
else
git push target master || failed git-push
fi
if [[ -x post-deploy ]]; then
./post-deploy $REMOTE $REPO || failed post-deploy
fi
if [[ "$SHOULD_FAIL" == true ]]; then
echo "-----> Deploy failed (as it should have)!"
destroy_app
exit 0
fi
URL=$(dokku url $REPO)$FORWARDED_PORT
sleep 2
if (./check_deploy $URL); then

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