Compare commits

...

464 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
9256248cfd Release 0.18.3
# History

## 0.18.3

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.3/bootstrap.sh
sudo DOKKU_TAG=v0.18.3 bash bootstrap.sh
```

### Bug Fixes

- #3660: @josegonzalez Trigger builder-release for dockerfile correctly
- #3655: @znz Fix filename of sshcommand tarball
- #3648: @josegonzalez Copy the deb file before creating the image

### New Features

- #3656: @josegonzalez Allow users to customize the container start command
- #3657: @josegonzalez Show error message when docker-related build commands fail
- #3654: @josegonzalez Update herokuish to 0.5.3

### Documentation

- #3652: @josegonzalez Correct issue in inspect call for issue template
2019-08-22 14:23:24 -04:00
Jose Diaz-Gonzalez
e074cffd4f Merge pull request #3660 from dokku/builder-plugn-trigger-once
Trigger builder-release for dockerfile correctly
2019-08-22 14:22:45 -04:00
Jose Diaz-Gonzalez
30ac3c24c0 fix: trigger builder-release for dockerfile correctly 2019-08-22 14:22:16 -04:00
Jose Diaz-Gonzalez
4c766b8f0e Merge pull request #3656 from dokku/custom-start-command
Allow users to customize the container start command
2019-08-22 14:21:13 -04:00
Jose Diaz-Gonzalez
e30fad51de Merge pull request #3657 from dokku/app-build-failure
Show error message when docker-related build commands fail
2019-08-22 14:21:04 -04:00
Jose Diaz-Gonzalez
9734d09ff1 feat: show error message when docker-related build commands fail
This makes it more apparent that a deploy has failed than the silent error exit that might otherwise happen.
2019-08-20 17:31:14 -04:00
Jose Diaz-Gonzalez
0c3f659854 feat: allow users to customize the container start command
This can be useful when testing base images that are similar to herokuish but have a different entrypoint.
2019-08-20 17:12:18 -04:00
Jose Diaz-Gonzalez
2b1c8f64fb Merge pull request #3654 from dokku/update-herokuish
Update herokuish to 0.5.3
2019-08-20 14:12:21 -04:00
Jose Diaz-Gonzalez
2cf3a3d0cf Merge pull request #3655 from znz/fix-typo
Fix filename of sshcommand tarball
2019-08-20 13:33:59 -04:00
Kazuhiro NISHIYAMA
4105f0027c Fix filename of sshcommand tarball 2019-08-20 22:12:08 +09:00
Jose Diaz-Gonzalez
1dc2a7e20a feat: update herokuish to 0.5.3 2019-08-19 17:38:17 -04:00
Jose Diaz-Gonzalez
d8753ca8d4 Merge pull request #3652 from dokku/josegonzalez-patch-1
Correct issue in inspect call for issue template
2019-08-15 12:51:12 -04:00
Jose Diaz-Gonzalez
d68d02b204 docs: correct issue in inspect call for issue template
[ci skip]
2019-08-15 12:49:46 -04:00
Jose Diaz-Gonzalez
8b046b9bd7 fix: always add the built deb to dokku.deb 2019-08-13 16:49:40 -04:00
Jose Diaz-Gonzalez
5b19256109 Merge pull request #3648 from dokku/fix-deb-copy
Copy the deb file before creating the image
2019-08-13 14:33:18 -04:00
Jose Diaz-Gonzalez
79b0bebb78 fix: copy the deb file before creating the image 2019-08-13 14:31:54 -04:00
Jose Diaz-Gonzalez
950b7ed6be Release 0.18.2
# History

## 0.18.2

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.2/bootstrap.sh
sudo DOKKU_TAG=v0.18.2 bash bootstrap.sh
```

### New Features

- #3645: @josegonzalez Use version in DOKKU_LIB_ROOT
- #3644: @josegonzalez Refactor temp file handling
- #3643: @josegonzalez Quiet deploy output
- #3641: @josegonzalez Pass SOURCECODE_WORK_DIR to build-buildpack triggers
- #3639: @josegonzalez Refer to upstream sshcommand package

### Documentation

- #3642: @josegonzalez Correct issue with label change in docs
- #3640: @josegonzalez Add missing popd to post-extract example
2019-08-13 13:57:56 -04:00
Jose Diaz-Gonzalez
9432cdd37c fix: remove the build-env plugin from rpm installs
Closes #3646
2019-08-13 13:57:19 -04:00
Jose Diaz-Gonzalez
5bd499a9bc Merge pull request #3645 from dokku/version-outside-dokku-root
Use version in DOKKU_LIB_ROOT
2019-08-13 01:59:44 -04:00
Jose Diaz-Gonzalez
5506c9e27d refactor: use version in DOKKU_LIB_ROOT
The version in DOKKU_ROOT may be incorrect for docker-based installs if that directory is mounted from an external volume. Instead, pull it from the DOKKU_LIB_ROOT directory, and respect the STABLE_VERSION if specified (VERSION will be the entire version, including commit sha).
2019-08-13 00:53:49 -04:00
Jose Diaz-Gonzalez
e07703645e Merge pull request #3644 from dokku/tmp-files
Refactor temp file handling
2019-08-12 19:27:24 -04:00
Jose Diaz-Gonzalez
3ca6245b00 fix: use 6 X to support running under busybox
mktemp from busybox requires that all templates end with XXXXXX.
2019-08-12 18:16:16 -04:00
Jose Diaz-Gonzalez
925c6c4c28 feat: inject the dokku PID into temporary files/directories
This will allow background processes to cleanup these files if they were unable to be cleaned up during a run of the dokku binary, as is the case for files copied by the docker binary when running in docker.
2019-08-12 17:56:17 -04:00
Jose Diaz-Gonzalez
0588b6f161 refactor: directly use a tmp file for app.json 2019-08-12 17:53:15 -04:00
Jose Diaz-Gonzalez
fee2d50148 Merge pull request #3643 from dokku/quieter-deploys
Quiet deploy output
2019-08-12 17:40:10 -04:00
Jose Diaz-Gonzalez
9a2c8e04a5 feat: quiet down deploys 2019-08-12 17:39:01 -04:00
Jose Diaz-Gonzalez
2517d392a4 Merge pull request #3642 from dokku/fix-label-docs
Correct issue with label change in docs
2019-08-12 16:20:50 -04:00
Jose Diaz-Gonzalez
a0b6663bef docs: correct issue with label change in docs
[ci skip]
2019-08-12 16:20:22 -04:00
Jose Diaz-Gonzalez
5fb7b0a74c Merge pull request #3641 from dokku/pass-sourcecode-work-dir
Pass SOURCECODE_WORK_DIR to build-buildpack triggers
2019-08-12 16:14:51 -04:00
Jose Diaz-Gonzalez
026d04a65f feat: pass SOURCECODE_WORK_DIR to build-buildpack triggers
This will allow those triggers to insert and extract files from the sourcecode work directory. Note that changes are not committed to this directory, nor will they be reflected in the committed codebase.
2019-08-12 16:08:31 -04:00
Jose Diaz-Gonzalez
94ace70626 Merge pull request #3639 from dokku/upgrade-sshcommand
Refer to upstream sshcommand package
2019-08-12 11:11:33 -04:00
Jose Diaz-Gonzalez
2d36dc2a04 Merge pull request #3640 from dokku/josegonzalez-patch-1
Add missing popd to post-extract example
2019-08-12 11:11:18 -04:00
Jose Diaz-Gonzalez
f3819a46e9 docs: add missing popd to post-extract example
[ci skip]
2019-08-12 11:10:54 -04:00
Jose Diaz-Gonzalez
c66e08041a refactor: refer to upstream sshcommand package
sshcommand now packages itself.
2019-08-10 19:55:21 -04:00
Jose Diaz-Gonzalez
9e9f601690 Release 0.18.1
# History

## 0.18.1

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.1/bootstrap.sh
sudo DOKKU_TAG=v0.18.1 bash bootstrap.sh
```

### New Features

- #3636: @josegonzalez Unify deb and rpm creation code
- #3635: @josegonzalez Upgrade herokuish to 0.5.2
2019-08-10 14:32:13 -04:00
Jose Diaz-Gonzalez
c9bc4f8615 Merge pull request #3636 from dokku/refactor-deb-install
Unify deb and rpm creation code
2019-08-10 14:29:29 -04:00
Jose Diaz-Gonzalez
34ee8e7079 Merge pull request #3635 from dokku/upgrade-herokuish
Upgrade herokuish to 0.5.2
2019-08-08 15:52:48 -04:00
Jose Diaz-Gonzalez
4ab30b8c14 chore: unify deb and rpm creation code
- split things into functions
- port code that handled postinst on deb to rpm and vice-versa
2019-08-08 15:18:00 -04:00
Jose Diaz-Gonzalez
3bc6f071cf feat: upgrade herokuish to 0.5.2 2019-08-08 14:53:50 -04:00
Jose Diaz-Gonzalez
0669121242 fix: correct minor issues in docker install docs 2019-08-07 11:53:18 -04:00
Jose Diaz-Gonzalez
03c7543060 Release 0.18.0
# History

## 0.18.0

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.0/bootstrap.sh
sudo DOKKU_TAG=v0.18.0 bash bootstrap.sh
```

### Bug Fixes

- #3627: @josegonzalez Make image removal synchronous
- #3618: @josegonzalez Ensure the dokku-retire timer is properly installed
- #3614: @alexquick Validate args for config:set and config:unset
- #3605: @josegonzalez Handle case where there are empty newlines in the authorized_keys file
- #3603: @josegonzalez Drop extra % sign in common.LogVerboseQuiet
- #3597: @josegonzalez Allow default trace function to work

### New Features

- #3628: @josegonzalez Handle file copying in a secure and reliable fashion
- #3630: @josegonzalez Fix issue where push warning on bad branch was skipped
- #3629: @josegonzalez Avoid calling the user-auth trigger where possible
- #3626: @josegonzalez Builder plugins
- #3599: @josegonzalez Scope docker-cleanup to specific app
- #3589: @michaelshobbs Allow running Dokku in Docker
- #3607: @josegonzalez Purge cache using herokuish image
- #3602: @alexymik Create a 502 error page to automatically refresh if backend status changes
- #3600: @josegonzalez Refactor IsImageHerokuishBased to match shell version

### Documentation

- #3625: @josegonzalez Remove old reference to SPONSORS.md
- #3619: @josegonzalez Cleanup plugin creation docs
- #3612: @jayjun Improve testing docs
- #3613: @Lyelt Remove all uses of proxy_set_header Connection "upgrade"
- #3596: @josegonzalez Add missing hooks to events plugin and plugin triggers docs

### Tests

- #3610: @jayjun Correct Bats path in single tests
2019-08-07 07:22:12 -04:00
Jose Diaz-Gonzalez
9730992f95 Merge pull request #3628 from dokku/3611-windows-newlines
Handle file copying in a secure and reliable fashion
2019-08-05 16:56:23 -04:00
Jose Diaz-Gonzalez
6fcb53113a fix: return true when removing temporary files extracted from docker
If you are running docker in docker, the permissions on the generated file are such that they may not be accessible by the normal dokku user. For dokku, it is good enough to ignore the failed removal.
2019-08-05 15:57:54 -04:00
Jose Diaz-Gonzalez
5affe42699 fix: remove unnecessary cat 2019-08-05 15:24:15 -04:00
Jose Diaz-Gonzalez
eef9f5eba5 fix: ignore errors in copy_from_image within the check-deploy trigger
The trigger will later on check if it needs to run checks on its own by inspecting the file.
2019-08-05 13:35:33 -04:00
Jose Diaz-Gonzalez
86febeb7ca fix: do not try to remove the container twice 2019-08-05 13:35:03 -04:00
Jose Diaz-Gonzalez
697afaa2cc fix: add missing dos2unix dependency 2019-08-05 12:44:34 -04:00
Jose Diaz-Gonzalez
78a5e4d331 docs: document copying files from images 2019-08-05 11:40:53 -04:00
Jose Diaz-Gonzalez
1a322eeeb8 refactor: use copy_from_image helper for copying CHECKS files
Closes #3611
2019-08-05 11:40:53 -04:00
Jose Diaz-Gonzalez
7dbeffd041 chore: drop unnecessary stdout redirect to /dev/null 2019-08-05 11:40:53 -04:00
Jose Diaz-Gonzalez
8dbf855d56 feat: handle case where docker cp is run as non root and tries to chown the file
This _may_ be cargo-cult, but its an easy way to handle any potential issues, so we'll include it regardless.
2019-08-05 11:40:53 -04:00
Jose Diaz-Gonzalez
dc9d597cd8 feat: handle case where file may not have trailing newline and parsing depends on it 2019-08-05 11:40:53 -04:00
Jose Diaz-Gonzalez
f771b272e3 fix: handle case where file may have windows newlines
Closes #3611
2019-08-05 11:40:53 -04:00
Jose Diaz-Gonzalez
6c8f716c11 refactor: handle case copied file is not directly readable
If "docker cp" is run within docker, it seems the owner is root, resulting in other processes not being able to directly read the file without resorting to `cat` trickery. Doing this in a single place avoids the problem completely.
2019-08-05 11:40:53 -04:00
Jose Diaz-Gonzalez
d326c17dfb chore: standardize on writing to file versus a destination 2019-08-05 11:40:53 -04:00
Jose Diaz-Gonzalez
0567bfd65d Merge pull request #3627 from dokku/3474-synchronous-image-removal
Make image removal synchronous
2019-08-05 11:38:49 -04:00
Jose Diaz-Gonzalez
008fafbed8 fix: force image pruning 2019-08-03 14:21:34 -04:00
Jose Diaz-Gonzalez
c959b236ea fix: do not prune all unused images
This would impact base images related to image building, as well as other images not managed by Dokku directly.
2019-08-02 11:38:08 -04:00
Jose Diaz-Gonzalez
85b41121de fix: make image removal synchronous
Asynchronous image removal would remove intermediate build images during the build process, causing intermittent build failures for users of multi-stage dockerfiles. While we still remove intermediate docker images that may be used in the current build, we now do so during the deploy, ensuring that there are no intermediate build failures in the future.

Closes #3474
2019-08-02 11:21:51 -04:00
Jose Diaz-Gonzalez
7de242b4ee Merge pull request #3630 from dokku/3592-notify-on-bad-branch
Fix issue where push warning on bad branch was skipped
2019-08-02 11:20:46 -04:00
Jose Diaz-Gonzalez
27ed3c52e3 Merge branch 'master' into 3592-notify-on-bad-branch 2019-08-02 11:20:37 -04:00
Jose Diaz-Gonzalez
c4c278fbcb Merge pull request #3629 from dokku/faster-execution
Avoid calling the user-auth trigger where possible
2019-08-02 11:20:26 -04:00
Jose Diaz-Gonzalez
5f4f12c27f fix: add run as prefix to deploy_app 2019-08-01 20:54:56 -04:00
Jose Diaz-Gonzalez
5000c32efe fix: add test for warning on pushing to wrong branch
Closes #3592
2019-08-01 20:54:38 -04:00
Jose Diaz-Gonzalez
5b53994447 feat: avoid calling the user-auth trigger where possible
As this trigger is always in the execution path, `plugn` starts and expensively checks to see if it can execute the trigger. Rather than call this on every invocation, skip the trigger if no non-core implementation exists.
2019-08-01 20:18:14 -04:00
Jose Diaz-Gonzalez
ba5b5d4596 Merge pull request #3626 from dokku/builder-plugins
Builder plugins
2019-08-01 18:17:09 -04:00
Jose Diaz-Gonzalez
a17a0e9a82 feat: add the ability to modify the DOKKU_IMAGE in use for the herokuish builder
This is a "one-shot" ability, meaning that it is highly discouraged for multiple plugins to implement the triggers.

The `builder-create-dokku-image` trigger is meant to modify the base DOKKU_IMAGE that will be used to build an application. A good use of the hook is to inject system packages by:

- calculating an image tag from the set of system packages
- checking that the image doesnt already exist
- creating the image if it does not

As the output is sent to stdout, we have to find an alternative way of fetching the new DOKKU_IMAGE. The `builder-dokku-image` trigger can output an image tag based on the calculated image tag. If no tag is output, then the DOKKU_IMAGE is used as is.

Using this pattern, users can efficiently modify the base image in use for an app without duplicating the work on every push. This is especially useful for package installation, where packages are required for app building, but may take a long time and can be error prone.
2019-07-30 14:58:49 -04:00
Jose Diaz-Gonzalez
0a8d5eb744 refactor: add initial support for builder plugins
A builder plugin implements some method for 'building' artifacts from a given source code archive. This refactor moves the majority of the image building code into separate plugins, allowing us to implement other builders, but also simplifying the common pugin codebase.

Also move the pre-build-buildpack hook from the build-env plugin to builder-herokuish.
2019-07-30 14:42:30 -04:00
Jose Diaz-Gonzalez
af8ade0a09 Merge pull request #3625 from dokku/josegonzalez-patch-1
Remove old reference to SPONSORS.md
2019-07-30 10:43:19 -04:00
Jose Diaz-Gonzalez
b3ba600cf8 docs: remove old reference to SPONSORS.md
Anyone wishing to sponsor should do so on Patreon or OpenCollective.

[ci skip]
2019-07-30 10:42:54 -04:00
Jose Diaz-Gonzalez
ce98222eec Merge pull request #3599 from dokku/3515-better-cleanup
Scope docker-cleanup to specific app
2019-07-29 21:37:54 -04:00
Jose Diaz-Gonzalez
6836e56b24 refactor: add global docker build and run args
This reduces duplication and allows users to rely on global arguments to generate most labels needed.

The 'commit' command cannot have global arguments because the whitespace within the label change breaks string-based interpolation, and shell arrays cannot be exported.
2019-07-20 05:52:20 -04:00
Jose Diaz-Gonzalez
193e40b4c3 feat: scope cleanup to app when specified
This will require changes in community plugins to properly add the specified labels to intermediate containers.

Closes #3515
2019-07-19 15:45:43 -04:00
Jose Diaz-Gonzalez
d1af10fc51 feat: add labels to all build, commit, create, and run docker calls
This will allow us to further filter containers and images by application when cleaning up containers.

Refs #3515
2019-07-19 15:45:43 -04:00
Jose Diaz-Gonzalez
968543c66c Merge pull request #3619 from dokku/josegonzalez-patch-1
Cleanup plugin creation docs
2019-07-19 15:45:32 -04:00
Jose Diaz-Gonzalez
da27ab3d40 docs: cleanup plugin creation docs
The plugin creation docs were hard to follow, unnecessarily complicating issues for developers. The new format should make the recommendations clear, and align examples with the core code.

[ci skip]
2019-07-19 15:31:44 -04:00
Jose Diaz-Gonzalez
034ebff42a Merge pull request #3589 from dokku/1076-run-in-docker
Allow running Dokku in Docker
2019-07-18 02:44:43 -04:00
Jose Diaz-Gonzalez
11241e5003 fix: add missing cgroupfs-mount 2019-07-18 01:15:44 -04:00
Michael Hobbs
b8c2259775 test docker image 2019-07-18 00:28:48 -04:00
Michael Hobbs
1437b77c6c run tests against native dokku 2019-07-18 00:28:48 -04:00
Michael Hobbs
ded056d003 hack: use tmp file for CHECKS file without EOF newline 2019-07-18 00:27:09 -04:00
Michael Hobbs
8830e15526 use custom docker bin 2019-07-18 00:27:09 -04:00
Michael Hobbs
67bdd47015 wait for CI dokku container to startup 2019-07-18 00:27:09 -04:00
Michael Hobbs
e8382362e5 remove tests/dhparam.pem dockerignore exception 2019-07-18 00:27:09 -04:00
Michael Hobbs
7de68e7052 remove unnecessary CI env vars 2019-07-18 00:27:09 -04:00
Michael Hobbs
f723333a90 don't run shfmt in CI 2019-07-18 00:26:31 -04:00
Michael Hobbs
d8ada6a6e9 install dokku from built deb package and use docker image for integrations tests 2019-07-18 00:26:31 -04:00
Michael Hobbs
1f882d09bf fix port typo 2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
ecfb54c668 refactor: switch to /mnt/dokku 2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
7aeb17986a docs: clarify usage of docker-based installation
ssh-key addition wasn't previously scoped out.
2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
3500dbfa6a refactor: clean up dockerfile to reduce image layers 2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
230a098b7b chore: drop unnecessary copy of test dhparam 2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
a568965d14 fix: run shfmt 2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
c5d5bc9a9c chore: minor fixes to docker-based install docs 2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
1a4af9b3ea feat: handle builds during the release process 2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
ea32544e37 feat: set the debconf value for the global hostname 2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
9b67ffe9d4 feat: properly handle dhparam
The dhparam file should be specific to each installation, and thus needs to be generated on first run.
2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
6fe984fd3c fix: ensure releases take docker-based installation into account when updating version numbers 2019-07-18 00:24:24 -04:00
Jose Diaz-Gonzalez
98bf4b7b31 docs: add documentation for docker-based installation 2019-07-18 00:24:23 -04:00
Jose Diaz-Gonzalez
d7bb131b37 feat: add the ability to install arbitrary plugins on container start 2019-07-18 00:24:23 -04:00
Jose Diaz-Gonzalez
01f317bbf3 feat: initialize plugins on boot 2019-07-18 00:24:23 -04:00
Jose Diaz-Gonzalez
56d8346d65 docs: standardizing installation doc titles 2019-07-18 00:24:23 -04:00
Jose Diaz-Gonzalez
3eb9c9b3ba feat: initial docker installation support
Refs #1076
2019-07-18 00:24:23 -04:00
Jose Diaz-Gonzalez
6b42fde028 fix: handle case where modprobe does not exist
This is possible when installing dokku within a docker image.
2019-07-18 00:24:23 -04:00
Jose Diaz-Gonzalez
b0b036549a Merge pull request #3618 from dokku/3615-systemd-retire
Ensure the dokku-retire timer is properly installed
2019-07-18 00:09:30 -04:00
Jose Diaz-Gonzalez
eada23d3f6 feat: build on systemd 2019-07-17 20:48:57 -04:00
Jose Diaz-Gonzalez
402c6db826 chore: move the event logging to it's own tag
Without this, rsyslog will shunt any logging output from the dokku user to the event log, garbling output for future investigation.
2019-07-17 20:48:57 -04:00
Jose Diaz-Gonzalez
5a52286309 fix: ensure the dokku-retire timer is properly installed
Closes #3615
2019-07-17 20:48:57 -04:00
Jose Diaz-Gonzalez
22ffa41d31 Merge pull request #3612 from jayjun/testing
Improve testing docs
2019-07-17 17:20:20 -04:00
Jose Diaz-Gonzalez
e8d6e879c8 Merge pull request #3614 from alexquick/fix-3606
[config] validate args for config:set and config:unset
2019-07-17 17:19:00 -04:00
Jose Diaz-Gonzalez
d4d69e5224 Merge pull request #3610 from jayjun/bats
Correct Bats path in single tests
2019-07-14 23:13:01 -07:00
Jose Diaz-Gonzalez
f4c0715299 Merge pull request #3613 from Lyelt/master
Remove all uses of proxy_set_header Connection "upgrade"
2019-07-14 23:11:57 -07:00
Alex Quick
2cab7f24ed [config] validate args for config:set and config:unset
Fixes dokku/dokku#3606
2019-07-14 12:16:56 -04:00
Nicholas Ghobrial
af9a43b4f5 Merge branch 'master' into master 2019-07-13 01:50:19 -04:00
Nicholas Ghobrial
dfda7d63f4 Escape $ 2019-07-13 01:25:55 -04:00
Nicholas Ghobrial
05bdda036f Remove all uses of
proxy_set_header Connection "upgrade"
2019-07-13 01:18:29 -04:00
Tan Jay Jun
a09cda126b docs: improve testing docs 2019-07-12 15:47:55 +08:00
Tan Jay Jun
9a43b41208 fix: correct bats path in single tests 2019-07-09 17:20:48 +08:00
Jose Diaz-Gonzalez
b3341999a1 Merge pull request #3607 from dokku/herokuish-cache-purge
Purge cache using herokuish image
2019-07-05 18:25:37 -04:00
Jose Diaz-Gonzalez
69e4cd7c44 refactor: use only a single implementation for cache purging
This change moves cache clearing into the repo plugin, and standardizes on a single way of clearing the cache.
2019-07-05 17:40:20 -04:00
Jose Diaz-Gonzalez
33423a0508 feat: purge cache using herokuish image
In some cases, the cache directory may exist but there may be no app image to use for cache purging. This may be the case if the app was never deployed.

Instead of failing, we can simply use the configured herokuish image for clearing cache, as that image is the base image for anything that would have modified cache.
2019-07-05 16:07:13 -04:00
Jose Diaz-Gonzalez
39f3f598a5 feat: add extra newline for good luck 2019-07-05 15:39:35 -04:00
Jose Diaz-Gonzalez
2c5106fe32 Merge pull request #3605 from dokku/empty-ssh-key
fix: handle case where there are empty newlines in the authorized_keys file
2019-07-05 15:32:41 -04:00
Jose Diaz-Gonzalez
699719b600 fix: handle case where there are empty newlines in the authorized_keys file
Previously, an empty line would result in a failing ssh-keys:list call, or a failure to verify the file. Newlines should be ignored.
2019-07-05 10:00:52 -04:00
Jose Diaz-Gonzalez
8481ea2306 Merge pull request #3603 from dokku/remove-percent
Drop extra % sign in common.LogVerboseQuiet
2019-07-03 14:33:34 -04:00
Jose Diaz-Gonzalez
a984464931 fix: drop extra % sign in common.LogVerboseQuiet 2019-07-03 13:53:56 -04:00
Jose Diaz-Gonzalez
f3e191988d Merge pull request #3602 from alexymik/master
Create a 502 error page to automatically refresh if backend status changes
2019-07-01 17:21:56 -04:00
Alexy Mikhailichenko
c99f92e9f2 Change 500 to 502 2019-07-01 17:17:14 -04:00
Alexy Mikhailichenko
a496ae987a Remove console calls 2019-07-01 17:10:45 -04:00
Alexy Mikhailichenko
75036dfa27 Remove console calls 2019-07-01 14:24:36 -04:00
Alexy Mikhailichenko
b35235f1e9 Change 502 error page to automatically refresh if backend status changes 2019-07-01 14:14:34 -04:00
Jose Diaz-Gonzalez
eabcf84f0b Merge pull request #3600 from dokku/simple-herokuish-go-check
Refactor IsImageHerokuishBased to match shell version
2019-06-29 17:13:02 -04:00
Jose Diaz-Gonzalez
7fc8770027 feat: refactor IsImageHerokuishBased to match shell version
The shell version is faster due to not needing to create a new container.
2019-06-29 15:43:02 -04:00
Jose Diaz-Gonzalez
23d647ee51 Merge pull request #3597 from dokku/trace-tests
Allow default trace function to work
2019-06-21 11:05:58 -04:00
Jose Diaz-Gonzalez
2fd53a7a01 fix: allow default trace function to work
Also add some simple tests for the trace plugin.
2019-06-21 10:24:33 -04:00
Jose Diaz-Gonzalez
3decb8c4d3 Merge pull request #3596 from dokku/update-hooks
Add missing hooks to events plugin and plugin triggers docs
2019-06-19 13:52:56 -04:00
Jose Diaz-Gonzalez
966afcb787 chore: add missing hooks to events plugin and plugin triggers docs 2019-06-19 13:50:29 -04:00
Jose Diaz-Gonzalez
48484732a0 Release 0.17.9
# History

## 0.17.9

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.9/bootstrap.sh
sudo DOKKU_TAG=v0.17.9 bash bootstrap.sh
```

### Bug Fixes

- #3593: @JakeAngell Fix nginx template for https in "Connection" header

### Documentation

- #3595: @josegonzalez Drop extra help output for trace
2019-06-18 12:32:49 -04:00
Jose Diaz-Gonzalez
3e5e6b10dd Merge pull request #3595 from dokku/josegonzalez-patch-1
Drop extra help output for trace
2019-06-18 12:28:11 -04:00
Jose Diaz-Gonzalez
2d47931cc4 docs: drop extra help output for trace
Closes #3594

[ci skip]
2019-06-18 12:27:43 -04:00
Jose Diaz-Gonzalez
c13c3f8012 Merge pull request #3593 from JakeAngell/patch-1
Fix nginx template for https in "Connection" header
2019-06-18 11:38:29 -04:00
JakeAngell
4e4e256a27 Update nginx.conf.sigil 2019-06-17 21:21:10 +01:00
Jose Diaz-Gonzalez
161380d639 Release 0.17.8
# History

## 0.17.8

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.8/bootstrap.sh
sudo DOKKU_TAG=v0.17.8 bash bootstrap.sh
```

### Bug Fixes

- #3591: @palfrey Allow SSH keys with no ending newline

### New Features

- #3587: @josegonzalez feat: drop make and gcc as dependencies
2019-06-14 12:59:57 -05:00
Jose Diaz-Gonzalez
5f36b138fb Merge pull request #3591 from palfrey/3590-ssh-key-without-newlines
Allow SSH keys with no ending newline
2019-06-14 12:59:02 -05:00
Tom Parker-Shemilt
024fd958e8 Add no-newline SSH key test 2019-06-12 22:30:26 +01:00
Tom Parker-Shemilt
a848d92823 Allow SSH keys with no ending newline (fixes #3590) 2019-06-12 22:16:02 +01:00
Jose Diaz-Gonzalez
3696757e8f Merge pull request #3587 from dokku/drop-unused-deps
feat: drop make and gcc as dependencies
2019-06-10 18:08:16 -04:00
Jose Diaz-Gonzalez
2cabf0a21f feat: drop make and gcc as dependencies
They aren't actually used within Dokku.
2019-06-10 16:25:41 -04:00
Jose Diaz-Gonzalez
283ff056da Release 0.17.7
# History

## 0.17.7

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.7/bootstrap.sh
sudo DOKKU_TAG=v0.17.7 bash bootstrap.sh
```

### New Features

- #3586: @josegonzalez ps plugin parallel usage cleanup

### Documentation

- #3584: @josegonzalez Fix no-install-recommends documentation

### Other

- #3579: @znz Update plugin list
2019-06-10 16:06:24 -04:00
Jose Diaz-Gonzalez
9bcd81c8bd Merge pull request #3586 from dokku/parallel-cleanup
ps plugin parallel usage cleanup
2019-06-10 14:10:29 -04:00
Jose Diaz-Gonzalez
0ebb400d91 feat: allow users to specify custom parallel arguments 2019-06-10 13:07:23 -04:00
Jose Diaz-Gonzalez
fc5544ac70 refactor: use a single method for running the ps:*all commands
This reduces the duplication at the cost of slightly more complexity.
2019-06-10 13:05:57 -04:00
Jose Diaz-Gonzalez
4a7f13c3d8 Merge pull request #3584 from dokku/josegonzalez-patch-1
Fix no-install-recommends documentation
2019-06-09 17:03:22 +02:00
Jose Diaz-Gonzalez
737e4a5bf4 docs: fix no-install-recommends documentation
[ci skip]
2019-06-09 11:02:46 -04:00
Jose Diaz-Gonzalez
d047db108b Merge pull request #3579 from znz/update-plugin-list
Update plugin list
2019-06-04 10:05:20 -05:00
Kazuhiro NISHIYAMA
73f5fde99d Update output of plugin:list 2019-06-04 07:48:57 +09:00
Kazuhiro NISHIYAMA
a17ed7981e Use plugin:list instead of deprecated plugin 2019-06-04 07:48:45 +09:00
Jose Diaz-Gonzalez
8a5504574d Release 0.17.6
# History

## 0.17.6

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.6/bootstrap.sh
sudo DOKKU_TAG=v0.17.6 bash bootstrap.sh
```

### New Features

- #3578: @josegonzalez Allow omitting resource args by setting DOKKU_OMIT_RESOURCE_ARGS
2019-05-30 17:40:21 -04:00
Jose Diaz-Gonzalez
8ac35766f3 Merge pull request #3578 from dokku/allow-omit-resource-args
Allow omitting resource args by setting DOKKU_OMIT_RESOURCE_ARGS
2019-05-30 17:00:02 -04:00
Jose Diaz-Gonzalez
5fd5e235d8 feat: allow omitting resource args by setting DOKKU_OMIT_RESOURCE_ARGS
This is useful for one-off containers that should have full-access to server resources.
2019-05-30 13:24:11 -04:00
Jose Diaz-Gonzalez
8d526b964b Release 0.17.5
# History

## 0.17.5

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.5/bootstrap.sh
sudo DOKKU_TAG=v0.17.5 bash bootstrap.sh
```

### New Features

- #3576: @josegonzalez Allow setting DOCKER_BIN path for docker execution
2019-05-29 01:28:50 -04:00
Jose Diaz-Gonzalez
084906d684 Merge pull request #3576 from dokku/docker-bin
Allow setting DOCKER_BIN path for docker execution
2019-05-29 01:27:18 -04:00
Jose Diaz-Gonzalez
79d4f4578d fix: use correct method for executing dokku within tests 2019-05-29 00:46:56 -04:00
Jose Diaz-Gonzalez
785d9b4937 feat: allow setting DOCKER_BIN path for docker execution
This change allows operators to specify a DOCKER_BIN environment variable. This will specify a binary to run when executing docker, which is useful in cases where the 'docker' command being run must be modified in a way that would otherwise be invasive to Dokku, but minimalistic if done within a wrapper.
2019-05-29 00:46:19 -04:00
Jose Diaz-Gonzalez
0e03c82139 Release 0.17.4
# History

## 0.17.4

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.4/bootstrap.sh
sudo DOKKU_TAG=v0.17.4 bash bootstrap.sh
```

### New Features

- #3575: @josegonzalez Add a way to cleanup apps for specific schedulers
2019-05-28 17:22:06 -04:00
Jose Diaz-Gonzalez
84e33f2c57 Merge pull request #3575 from dokku/scheduler-post-delete
Add a way to cleanup apps for specific schedulers
2019-05-28 17:21:36 -04:00
Jose Diaz-Gonzalez
a6408c0c56 feat: add a way to cleanup apps for specific schedulers
The post-delete hook will delete config, and thus scheduler-post-delete is the best place to actually delete resources where some local config may be necessary in order to reference resources.
2019-05-28 17:21:10 -04:00
Jose Diaz-Gonzalez
915ef6a8d5 Release 0.17.3
# History

## 0.17.3

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.3/bootstrap.sh
sudo DOKKU_TAG=v0.17.3 bash bootstrap.sh
```

### Bug Fixes

- #3570: @znz Fix typos in trace help

### New Features

- #3574: @josegonzalez Add support for pulling app status from scheduler plugins
- #3571: @znz Simplify hostname_regex
2019-05-28 14:55:13 -04:00
Jose Diaz-Gonzalez
684f9fd175 Merge pull request #3574 from dokku/scheduler-app-status
Add support for pulling app status from scheduler plugins
2019-05-28 14:54:04 -04:00
Jose Diaz-Gonzalez
e276ebbc27 feat: add support for pulling app status from scheduler plugins
Previously, this was impossible to do if using an alternative scheduler.
2019-05-28 14:53:42 -04:00
Jose Diaz-Gonzalez
0988e62418 Merge pull request #3571 from znz/simplify-hostname_regex
Simplify hostname_regex
2019-05-24 18:01:14 -04:00
Jose Diaz-Gonzalez
bbc8c8a533 Merge pull request #3570 from znz/fix-typos
Fix typos in trace help
2019-05-23 11:51:31 -04:00
Kazuhiro NISHIYAMA
082e9458e5 Simplify hostname_regex
`[a-z0-9\.\*-]+` includes `\.` and `[a-z0-9\*-]+`.
So I think `^([a-z0-9\.\*-]+\.)*[a-z0-9\*-]+$` means last char is `[a-z0-9\*-]`
and other optional chars are `[a-z0-9\.\*-]*`.
2019-05-23 23:23:10 +09:00
Kazuhiro NISHIYAMA
0a17358352 Fix typos in trace help 2019-05-23 23:20:16 +09:00
Jose Diaz-Gonzalez
3a2bdd83f8 Release 0.17.2
# History

## 0.17.2

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.2/bootstrap.sh
sudo DOKKU_TAG=v0.17.2 bash bootstrap.sh
```

### Bug Fixes

- #3568: @josegonzalez Correct issue with clearing global domains
2019-05-23 07:02:38 -04:00
Jose Diaz-Gonzalez
625424de68 Merge pull request #3568 from dokku/fix-global-clearing
Correct issue with clearing global domains
2019-05-23 06:56:07 -04:00
Jose Diaz-Gonzalez
0d71293fca Delete FUNDING.yml 2019-05-23 06:40:45 -04:00
Jose Diaz-Gonzalez
b6128dc54e Create FUNDING.yml 2019-05-23 06:26:04 -04:00
Jose Diaz-Gonzalez
919ba7ed93 fix: correct issue with clearing global domains
Also update tests
2019-05-23 06:18:22 -04:00
Jose Diaz-Gonzalez
f80788147c Release 0.17.1
# History

## 0.17.1

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.1/bootstrap.sh
sudo DOKKU_TAG=v0.17.1 bash bootstrap.sh
```

### Bug Fixes

- #3567: @josegonzalez Ignore SC2064
2019-05-21 14:42:45 -04:00
Jose Diaz-Gonzalez
eb7deedd65 Merge pull request #3567 from dokku/SC2064-shellcheck
Ignore SC2064
2019-05-21 10:51:23 -07:00
Jose Diaz-Gonzalez
eb8347bcc1 fix: ignore SC2064
Late expansion was causing issues with variables not actually making it into the trap call, resulting in poor cleaning up temp files.
2019-05-21 11:02:24 -04:00
Jose Diaz-Gonzalez
48752a762c Release 0.17.0
# History

## 0.17.0

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.0/bootstrap.sh
sudo DOKKU_TAG=v0.17.0 bash bootstrap.sh
```

### Bug Fixes

- #3565: @josegonzalez Properly cleanup temp files
- #3563: @josegonzalez Properly split strings in sanitized ps:inspect
- #3560: @josegonzalez Resource setting fixes
- #3556: @josegonzalez Add missing domains:clear-global command
- #3554: @znz Switch from rawgit to jsdelivr in manifest.json too

### New Features

- #3566: @josegonzalez Allow users to specify wildcard domains
- #3564: @josegonzalez Add config:clear command
- #3477: @alexquick Allow specifying environment variables for dokku run
- #3540: @josegonzalez Do not append the global domain for matching subdomains
- #3559: @josegonzalez Add trace:on and trace:off
- #3561: @josegonzalez feat: disable scaling if app contains DOKKU_SCALE file
- #3558: @josegonzalez Add nginx:show-conf command
- #3549: @josegonzalez Add message indicating that the user is looking at default limits/reservations

### Documentation

- #3557: @josegonzalez Standardize on node-js-app in examples
- #3548: @josegonzalez Remove outdated global resource setting

### Other

- #3562: @josegonzalez Proxy ports manipulation updates
2019-05-20 22:23:13 -07:00
Jose Diaz-Gonzalez
42a405355f Merge pull request #3566 from dokku/3075-wildcard-domains
Allow users to specify wildcard domains
2019-05-20 22:22:44 -07:00
Jose Diaz-Gonzalez
b921aed073 feat: allow users to specify wildcard domains
Closes #3075
2019-05-20 21:03:55 -07:00
Jose Diaz-Gonzalez
73b8c3df55 Merge pull request #3565 from dokku/3473-tmp-cleanup
Properly cleanup temp files
2019-05-20 20:54:32 -07:00
Jose Diaz-Gonzalez
1b92f4a97e chore: standardize how temporary files are named 2019-05-20 18:01:17 -07:00
Jose Diaz-Gonzalez
c8a491ed7f fix: only use the RETURN signal for the suppress file removal
Closes #3473
2019-05-20 18:01:03 -07:00
Jose Diaz-Gonzalez
da4361583b fix: reverse quotes for variable expansion
Without reversing quotes, the variables are sometimes improperly expanded, resulting in files not being removed.
2019-05-20 17:56:50 -07:00
Jose Diaz-Gonzalez
0087296bd3 Merge pull request #3563 from dokku/3551-ps-inspect
Properly split strings in sanitized ps:inspect
2019-05-20 15:06:26 -07:00
Jose Diaz-Gonzalez
6221b7bf4a Merge pull request #3564 from dokku/3537-config-clear
Add config:clear command
2019-05-20 14:34:22 -07:00
Jose Diaz-Gonzalez
f977edabb2 feat: add config:clear command
Closes #3537
2019-05-20 13:26:21 -07:00
Jose Diaz-Gonzalez
980ffab600 fix: properly split strings in sanitized ps:inspect
Closes #3551
2019-05-20 12:58:41 -07:00
Jose Diaz-Gonzalez
a34d36c5d2 Merge pull request #3477 from alexquick/feature-run-env
Allow specifying environment variables for dokku run
2019-05-20 12:30:47 -07:00
Jose Diaz-Gonzalez
b2a0b69ed5 Merge branch 'master' into feature-run-env 2019-05-19 23:20:34 -07:00
Jose Diaz-Gonzalez
2315a127ea Merge pull request #3540 from dokku/3529-better-default-vhost
Do not append the global domain for matching subdomains
2019-05-19 23:00:17 -07:00
Jose Diaz-Gonzalez
1c1ff64c67 Merge pull request #3559 from dokku/3553-trace-mode
Add trace:on and trace:off
2019-05-19 22:59:56 -07:00
Jose Diaz-Gonzalez
9e2a129854 Merge pull request #3561 from dokku/3544-ps-can-scale
feat: disable scaling if app contains DOKKU_SCALE file
2019-05-19 22:59:08 -07:00
Jose Diaz-Gonzalez
a475af1974 Merge pull request #3562 from dokku/3550-proxy-ports-update
Proxy ports manipulation updates
2019-05-19 22:58:55 -07:00
Jose Diaz-Gonzalez
4264380e15 feat: disable scaling if app contains DOKKU_SCALE file
A DOKKU_SCALE file will always be used for managing the scale count for an app if it exists in a repository. As such, ps:scale usage should be disabled in those cases. This commit makes that more apparent.

Also document how to build a specific core plugin for testing purposes.

Closes #3544
2019-05-18 15:24:59 -07:00
Jose Diaz-Gonzalez
676aa1a05b docs: clarify proxy:ports-* commands
Closes #3550
2019-05-18 15:04:16 -07:00
Jose Diaz-Gonzalez
94c06bbdd2 fix: correct issue in proxy:ports-set invocation 2019-05-18 15:03:36 -07:00
Jose Diaz-Gonzalez
1c600b8846 Merge pull request #3560 from dokku/resource-setting-fixes
Resource setting fixes
2019-05-17 14:12:27 -04:00
Jose Diaz-Gonzalez
7dd9007607 fix: cpu limiting isn't available on CircleCI 2019-05-17 12:46:23 -04:00
Jose Diaz-Gonzalez
e71ad53b0e tests: check the cpu setting
Switch to 0.5 as its safer to run tests on a single-core VM
2019-05-17 12:03:35 -04:00
Jose Diaz-Gonzalez
a92687d3e8 fix: correct calls to fetch process-specific build and deploy args 2019-05-17 12:00:05 -04:00
Jose Diaz-Gonzalez
2aac9c71fc fix: cpu flag becomes cpus for the docker-scheduler 2019-05-17 11:59:15 -04:00
Jose Diaz-Gonzalez
ceac86b58f fix: correct issue where resource setting was overriding pre-existing values 2019-05-17 11:58:53 -04:00
Jose Diaz-Gonzalez
3fb8a576a0 fix: add trace:on and trace:off
Closes #3553
2019-05-16 18:24:59 -04:00
Jose Diaz-Gonzalez
c786b9e45e Merge pull request #3558 from dokku/3552-nginx-show-conf
Add nginx:show-conf command
2019-05-16 17:27:53 -04:00
Jose Diaz-Gonzalez
68fcd67327 feat: Add nginx:show-conf command
Closes #3552
2019-05-14 18:03:16 -04:00
Jose Diaz-Gonzalez
a54fa57136 Merge pull request #3557 from dokku/docs-sample
Standardize on node-js-app in examples
2019-05-14 17:55:37 -04:00
Jose Diaz-Gonzalez
343a6a159f docs: standardize on node-js-app in examples
[ci skip]
2019-05-14 17:55:00 -04:00
Jose Diaz-Gonzalez
dc2a680a29 Merge pull request #3549 from dokku/resource-default
Add message indicating that the user is looking at default limits/reservations
2019-05-14 12:43:58 -04:00
Jose Diaz-Gonzalez
72fce08e87 feat: add message indicating that the user is looking at default limits/reservations
Without this bit of metadata, it appears to the user that the resource limits are just that, whereas this is actually scoped to per-process-type.
2019-05-14 12:43:37 -04:00
Jose Diaz-Gonzalez
b60934629e Merge pull request #3556 from dokku/domains-clear-global
Add missing domains:clear-global command
2019-05-14 12:01:17 -04:00
Jose Diaz-Gonzalez
e59f115311 fix: add missing domains:clear-global command 2019-05-14 11:59:44 -04:00
Jose Diaz-Gonzalez
19dd92e6c7 Merge pull request #3554 from znz/rawgit-to-jsdelivr
Switch from rawgit to jsdelivr in manifest.json too
2019-05-14 10:34:36 -04:00
Kazuhiro NISHIYAMA
aab390edb6 Switch from rawgit to jsdelivr in manifest.json too
ref bb8d0324b5
2019-05-14 23:20:58 +09:00
Jose Diaz-Gonzalez
0c11068129 Merge pull request #3548 from dokku/docs-no-global-resource
Remove outdated global resource setting
2019-05-13 17:33:08 -04:00
Jose Diaz-Gonzalez
ad804f6d3f docs: remove outdated global resource setting
This was removed in c9bbddcfcb as it was more complicated for operators to figure out _exactly_ which combination of limits/reservations would apply to their applications. Unfortunately, the documentation was never updated.

We may re-add this functionality in the future, but for now, cleaning up the docs is the best option.

[ci skip]
2019-05-13 17:32:42 -04:00
Jose Diaz-Gonzalez
de43eb1e3d Release 0.16.4
# History

## 0.16.4

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.4/bootstrap.sh
sudo DOKKU_TAG=v0.16.4 bash bootstrap.sh
```

### Bug Fixes

- #3547: @josegonzalez Correct retrieval of resource values for alternative schedulers

### New Features

- #3546: @josegonzalez Add ability to trigger an arbitrary plugin hook
2019-05-13 16:39:33 -04:00
Jose Diaz-Gonzalez
5d9daa9367 Merge pull request #3546 from dokku/plugin-trigger
feat: add ability to trigger an arbitrary plugin hook
2019-05-13 16:38:59 -04:00
Jose Diaz-Gonzalez
0d9e424ede Merge pull request #3547 from dokku/fix-resource-fetching
Correct retrieval of resource values for alternative schedulers
2019-05-13 16:38:42 -04:00
Jose Diaz-Gonzalez
603dc0fad6 fix: correct retrieval of resource values for alternative schedulers 2019-05-13 16:37:57 -04:00
Jose Diaz-Gonzalez
0cf03baa78 feat: add ability to trigger an arbitrary plugin hook
This is useful in cases where the command output must be tested, but it is otherwise embedded in a specific part of the dokku core.
As the 'plugin' commands require root, this is safe to add to the core.
2019-05-13 16:17:55 -04:00
Jose Diaz-Gonzalez
ba3af25423 Release 0.16.3
# History

## 0.16.3

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.3/bootstrap.sh
sudo DOKKU_TAG=v0.16.3 bash bootstrap.sh
```

### Bug Fixes

- #3541: @josegonzalez Handle case where image is null on first deploy

### New Features

- #3543: @josegonzalez Add ability to clear global domains
- #3517: @josegonzalez SSH key updates
- #3538: @josegonzalez Silence dokku run 'errors'

### Documentation

- #3523: @MarcDiethelm Add an example how to specify a Dockerfile for deployment
- #3539: @josegonzalez Warn users when ufw is enabled
2019-05-13 13:54:35 -04:00
Jose Diaz-Gonzalez
a084c62e3f Merge pull request #3543 from dokku/domains-global-clear
Add ability to clear global domains
2019-05-13 12:45:49 -04:00
Jose Diaz-Gonzalez
b429af8ff2 feat: do not append the global domain for matching subdomains
If the subdomain is url-like, assume it is a valid url and use it for the default domain name. This allows users to specify the default domain for an app even if that is a subdomain of a global vhost.

Closes #3529
2019-05-13 12:07:52 -04:00
Jose Diaz-Gonzalez
287f383f6c feat: add ability to clear global domains 2019-05-13 12:00:26 -04:00
Jose Diaz-Gonzalez
aefb24082d Merge pull request #3517 from dokku/ssh-key-updates
SSH key updates
2019-05-13 00:56:36 -04:00
Jose Diaz-Gonzalez
dee0144c7c fix: add missing awk to get number of lines in key file 2019-05-12 19:08:55 -04:00
Jose Diaz-Gonzalez
6ca4813247 fix: invert check 2019-05-12 19:04:50 -04:00
Jose Diaz-Gonzalez
a717cb99a3 fix: correct shfmt and update error message 2019-05-12 19:04:50 -04:00
Jose Diaz-Gonzalez
8551dfb297 refactor: switch to temporary file for key verification 2019-05-12 19:04:50 -04:00
Jose Diaz-Gonzalez
6a5bbd63a3 refactor: always use a temp file for interacting with ssh keys
Rather than have stdin open everywhere, try to coerce input into a temporary file for later use.
2019-05-12 19:04:50 -04:00
Jose Diaz-Gonzalez
ca0b2937b9 refactor: fetch ssh key via argument before stdin
This allows the ssh-keys:add command to work in environments where there is no stdin/tty available, such as via server automation.
2019-05-12 19:04:50 -04:00
Jose Diaz-Gonzalez
948d507909 chore: update dockerignore for upcoming install from docker
[ci skip]
2019-05-12 19:03:02 -04:00
Jose Diaz-Gonzalez
037324d850 Merge pull request #3523 from MarcDiethelm/pr/dockerfile-file-option-example
Add an example how to specify a Dockerfile for deployment
2019-05-12 18:59:09 -04:00
Jose Diaz-Gonzalez
6006303409 docs: clarify that a dockerfile is still needed
[ci skip]
2019-05-12 18:58:28 -04:00
Jose Diaz-Gonzalez
d1b1841034 Merge pull request #3541 from dokku/null-herokuish-image
Handle case where image is null on first deploy
2019-05-12 18:51:32 -04:00
Jose Diaz-Gonzalez
bc70a24e1d fix: handle case where image is null on first deploy 2019-05-12 07:37:21 -04:00
Jose Diaz-Gonzalez
acc2e84eda Merge pull request #3539 from dokku/3455-ufw-warn
Warn users when ufw is enabled
2019-05-12 07:14:15 -04:00
Jose Diaz-Gonzalez
4f23dd2dd6 docs: Warn users when ufw is enabled
Closes #3455
2019-05-12 06:09:05 -04:00
Jose Diaz-Gonzalez
3a5f68e4d1 Merge pull request #3538 from dokku/3522-silence-dokku-run
feat: silence dokku run 'errors'
2019-05-12 05:56:29 -04:00
Jose Diaz-Gonzalez
d30a948be0 feat: silence dokku run 'errors'
In certain cases, a command can be specified but found - or not - in the Procfile, resulting in unnecessary output for cron tasks.

Closes #3522
2019-05-12 05:15:53 -04:00
Jose Diaz-Gonzalez
c44db3f2cf Release 0.16.2
# History

## 0.16.2

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.2/bootstrap.sh
sudo DOKKU_TAG=v0.16.2 bash bootstrap.sh
```

### Documentation

- #3536: @josegonzalez docs: Add documentation for nginx-pre-reload limitation
- #3535: @josegonzalez Add help output for apps:exists
2019-05-11 20:51:17 -04:00
Jose Diaz-Gonzalez
1272287d62 Merge pull request #3536 from dokku/3533-nginx-pre-reload-limitations
docs: Add documentation for nginx-pre-reload limitation
2019-05-11 20:48:09 -04:00
Jose Diaz-Gonzalez
f4b96cc688 docs: Add documentation for nginx-pre-reload limitation
Closes #3533

[ci skip]
2019-05-11 20:47:41 -04:00
Jose Diaz-Gonzalez
65fb016bc3 Merge pull request #3535 from dokku/3534-document-apps-exists
Add help output for apps:exists
2019-05-11 20:45:11 -04:00
Jose Diaz-Gonzalez
2eccb95477 docs: Add help output for apps:exists
[ci skip]
2019-05-11 20:44:41 -04:00
Jose Diaz-Gonzalez
b9152ee77e Release 0.16.1
# History

## 0.16.1

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.1/bootstrap.sh
sudo DOKKU_TAG=v0.16.1 bash bootstrap.sh
```

### New Features

- #3532: @josegonzalez refactor: allow the scheduler to decide if an app is deployed

### Documentation

- #3530: @jhstatewide Updated info about supported Ubuntu versions
2019-05-10 18:34:41 -04:00
Jose Diaz-Gonzalez
99ec1c0606 Merge pull request #3532 from dokku/3531-is-deployed
refactor: allow the scheduler to decide if an app is deployed
2019-05-10 18:33:04 -04:00
Jose Diaz-Gonzalez
5373cf2989 refactor: allow the scheduler to decide if an app is deployed
Without moving this to the scheduler, all applications are assumed to not be deployed unless the scheduler is set to docker-local.

Closes #3531
2019-05-10 17:47:39 -04:00
Jose Diaz-Gonzalez
b85b4c6e99 Merge pull request #3530 from jhstatewide/patch-1
Updated info about supported Ubuntu versions
2019-05-08 23:35:32 -04:00
Joshua Harding
7be4a3ee48 Updated info about supported Ubuntu versions 2019-05-08 23:04:00 -04:00
Jose Diaz-Gonzalez
2f83b29f1a Release 0.16.0
# History

## 0.16.0

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.0/bootstrap.sh
sudo DOKKU_TAG=v0.16.0 bash bootstrap.sh
```

### Bug Fixes

- #3527: @josegonzalez Use DOKKU_IMAGE for report command

### New Features

- #3528: @josegonzalez feat: add support for quiet ps:scale output
- #3516: @ape-box fix nginx template with Connection header to http_connection
- #3513: @Mayeu Support installing plugins via file:// scheme

### Documentation

- #3525: @artofrawr add multi dockerfile plugin to plugins.md
- #3518: @renestalder Add GitLab GIT_STRATEGY for stop_preview_app
- #3506: @vanastassiou Clarify application deployment documentation
- #3512: @Mayeu Update example app in deploy tutorial
2019-05-07 12:02:19 -04:00
Jose Diaz-Gonzalez
7709a3a2ec Merge pull request #3528 from dokku/3520-quiet-ps-scale
feat: add support for quiet ps:scale output
2019-05-06 13:21:22 -04:00
Jose Diaz-Gonzalez
06d0b07f36 Merge pull request #3527 from dokku/report-dokku-image
Use DOKKU_IMAGE for report command
2019-05-06 11:31:34 -04:00
Jose Diaz-Gonzalez
0275c65b8a feat: add support for quiet ps:scale output
The previous output required too much parsing to be used in an automated fashion. This change makes that a bit easier, without sacrificing usability.

Note that the output is quite a bit different from heroku. This is purposeful as we do not have the concept of dynos.

Closes #3520
2019-05-06 11:19:08 -04:00
Jose Diaz-Gonzalez
1617796bc6 Merge pull request #3516 from ape-box/kestrelfix
fix nginx template with Connection header to http_connection
2019-05-06 11:07:25 -04:00
Jose Diaz-Gonzalez
6869fda75b fix: use DOKKU_IMAGE for report command 2019-05-06 10:51:20 -04:00
Jose Diaz-Gonzalez
06017d17ae Merge pull request #3525 from artofrawr/pr/dokku-multi-dockerfile
add multi dockerfile plugin to plugins.md
2019-05-03 10:57:26 -04:00
Jens Fischer
9fc26aeb41 add multi dockerfile plugin to plugins.md 2019-05-02 22:09:27 -04:00
Alex Quick
dad5db4e9b [feature] add --env to dokku run
`dokku run [ --env KEY=VALUE | -e KEY=VALUE ] app command`

__note__ this changes the scheduler-run trigger to expect the following arguments:
scheduler_name, app_name, env_count, env_0, ..., env_n, app_arg_0, ..., app_arg_n

resolves: dokku/dokku#3291
2019-04-28 14:42:07 -04:00
Marc Diethelm
d356cef183 Adds an example how to specify a Dockerfile for deployment 2019-04-27 14:32:08 +02:00
Jose Diaz-Gonzalez
c49d849917 Merge pull request #3518 from renestalder/patch-2
Add GitLab GIT_STRATEGY for stop_preview_app
2019-04-23 12:20:17 -04:00
Jose Diaz-Gonzalez
b36a2a9154 Merge pull request #3513 from Mayeu/patch-2
Support installing plugins via file:// scheme
2019-04-23 12:19:56 -04:00
Mayeu
252092c73a feat: support the file:// scheme to install plugin 2019-04-23 15:23:35 +07:00
René Stalder
f6cc77bc3a docs: add GitLab GIT_STRATEGY for stop_preview_app
Use `GIT_STRATEGY: none` in `stop_review_app` to make job work after successful
merges and when the branch was deleted.

Without this, the application is not stopped when the branch is deleted on merge as the runner pulls the git repository by default, but cannot find the tree in this moment.

[skip ci]
2019-04-23 10:17:50 +02:00
Alessio
cb16cae09b fix nginx template with Connection header to http_connection 2019-04-22 22:08:28 +01:00
Jose Diaz-Gonzalez
bb494b69ea Merge pull request #3506 from vanastassiou/patch-2
Update application-deployment.md
2019-04-22 04:22:11 -04:00
V Anastassiou
f13a660698 Update application-deployment.md
Clarity and style edits
2019-04-22 04:20:48 -04:00
Jose Diaz-Gonzalez
ce1ca5cc17 Merge pull request #3512 from Mayeu/patch-1
docs: fix the deploy tutorial
2019-04-22 04:04:38 -04:00
Mayeu - Cast
e700ad32a3 docs: fix the deploy tutorial
Heroku's [ruby-rails-sample](https://github.com/heroku/ruby-rails-sample) does not run anymore on Dokku (or Heroku), and has been archived and replaced by [ruby-getting-started](https://github.com/heroku/ruby-getting-started).

This commit replace all the occurrences of `ruby-rails-sample` by `ruby-getting-started`.
2019-04-22 14:56:13 +07:00
Jose Diaz-Gonzalez
0fd829ed3b Release 0.15.5
# History

## 0.15.5

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.5/bootstrap.sh
sudo DOKKU_TAG=v0.15.5 bash bootstrap.sh
```

### New Features

- #3511: @josegonzalez Add json output to config:export

### Documentation

- #3510: @josegonzalez Remove SPONSORS doc in favor of OpenCollective
- #3509: @Neamar Missing space in markdown formatting
- #3507: @renestalder Fix GitLab CI examples
2019-04-21 21:15:35 -04:00
Jose Diaz-Gonzalez
f9a59180f2 Merge pull request #3511 from dokku/config-json
Add json output to config:export
2019-04-21 21:14:02 -04:00
Jose Diaz-Gonzalez
04c9fe974e feat: add json output to config:export
This change adds json output as both key/value as well as a list of objects. The former can be used in quick scripting environments, while the latter allows higher-level languages to have a bit more structure around how environment variables are declared. Specifically, systems such as kubernetes understand the latter method, while the former can be used within Nomad job files.
2019-04-21 18:39:06 -04:00
Jose Diaz-Gonzalez
4b63c96434 feat: pre-sort config:help commands 2019-04-21 16:16:39 -04:00
Jose Diaz-Gonzalez
ef55ce8919 Merge pull request #3510 from dokku/josegonzalez-patch-1
Remove SPONSORS doc in favor of OpenCollective
2019-04-21 16:10:26 -04:00
Jose Diaz-Gonzalez
0ba6e26788 chore: remove SPONSORS doc
This was a very incomplete list. Public sponsors for the project can be found on OpenCollective.
2019-04-21 16:09:59 -04:00
Jose Diaz-Gonzalez
1b481d214c Merge pull request #3509 from Neamar/patch-1
Missing space in markdown formatting
2019-04-21 16:08:55 -04:00
Matthieu Bacconnier
d33ea360ac Missing space in markdown formatting
Title was not properly displayed in github
2019-04-21 08:13:08 +01:00
Jose Diaz-Gonzalez
8e07d70070 Merge pull request #3507 from renestalder/patch-1
Fix GitLab CI examples
2019-04-18 12:36:48 -04:00
René Stalder
06b4585a62 docs: fix GitLab CI examples
The GitLab CI examples used `$CI_ENVIRONMENT_SLUG` for defining the environment names
of the deploy jobs. But this variable is actually the OUTPUT of setting the environment name,
thus, it tries to reference itself, but does not exist in that moment.

The correct way to set this is to use `$CI_COMMIT_REF_NAME` as based on the documentation
of GitLab's dynamic environments.
2019-04-18 18:06:52 +02:00
Jose Diaz-Gonzalez
dbc5182193 Release 0.15.4
# History

## 0.15.4

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.4/bootstrap.sh
sudo DOKKU_TAG=v0.15.4 bash bootstrap.sh
```

### Bug Fixes

- #3499: @josegonzalez Ensure the .buildpacks file exists before writing to it
- #3500: @josegonzalez Always allow ps:scale proc=0
- #3497: @josegonzalez Allow reporting domains when there are none specified

### New Features

- #3502: @josegonzalez Add a trigger to fetch the git revision
- #3501: @josegonzalez Move log retrieval to docker-local scheduler
- #3498: @josegonzalez Add ability to report domains globally
- #3496: @josegonzalez Cleanup glide plugins when running src-clean

### Documentation

- #3504: @vanastassiou Edits for readability and conciseness
- #3490: @josegonzalez Add missing link to resource management docs
2019-04-17 17:24:10 -04:00
Jose Diaz-Gonzalez
46c023e73d Merge pull request #3504 from vanastassiou/patch-1
Edits for readability and conciseness
2019-04-17 17:22:05 -04:00
Jose Diaz-Gonzalez
f39d0fc0cf docs: correct docs link to work on both site and github
[ci skip]
2019-04-17 17:21:45 -04:00
Jose Diaz-Gonzalez
277429db5a Merge pull request #3502 from dokku/3484-git-revision-trigger
Add a trigger to fetch the git revision
2019-04-17 17:20:51 -04:00
Jose Diaz-Gonzalez
9a447c16f2 feat: add a trigger to fetch the git revision
This allows other plugins to fetch the current git revision without needing to duplicate logic from the git plugin.

Closes #3484
2019-04-17 17:19:59 -04:00
V Anastassiou
c4c7d0d82d Edits for readability and conciseness 2019-04-17 14:03:48 -07:00
Jose Diaz-Gonzalez
e5c76d3795 Merge pull request #3501 from dokku/3487-scheduler-logs
Move log retrieval to docker-local scheduler
2019-04-17 15:44:55 -04:00
Jose Diaz-Gonzalez
662c8c2831 refactor: move log retrieval to docker-local scheduler
This change will allow other schedulers to implement log retrieval as necessary for the platform specified.

Closes #3487
2019-04-17 15:03:37 -04:00
Jose Diaz-Gonzalez
3ec67073ce Merge pull request #3499 from dokku/3491-buildpacks-writing
Ensure the .buildpacks file exists before writing to it
2019-04-17 02:52:49 -04:00
Jose Diaz-Gonzalez
322dd2246f fix: ensure the .buildpacks file exists before writing to it 2019-04-17 02:04:06 -04:00
Jose Diaz-Gonzalez
13e3950f4a Merge pull request #3498 from dokku/global-domains-report
Add ability to report domains globally
2019-04-17 01:32:45 -04:00
Jose Diaz-Gonzalez
d03d5bc40c Merge pull request #3500 from dokku/3428-ps-scale-0
Always allow ps:scale proc=0
2019-04-17 01:32:26 -04:00
Jose Diaz-Gonzalez
5038050968 Merge pull request #3497 from dokku/empty-domains
Allow reporting domains when there are none specified
2019-04-16 23:06:05 -04:00
Jose Diaz-Gonzalez
97fe3f56b7 fix: Always allow ps:scale proc=0
With the introduciton of procfile-util, scaling a non-existent process to 0 was disabled. This brings back that functionality, allowing users to scale all processes to 0. This is especially useful when a user has accidentally scaled a non-existent process up, causing deploys to fail without any way to revert outside of manually editing files.

Closes #3428
2019-04-16 23:04:45 -04:00
Jose Diaz-Gonzalez
887c0ebdd6 feat: add ability to report domains globally
The `domains` command previously had this functionality, but is deprecated, and thus we should provide an alternative method of presenting the information.
2019-04-16 21:58:56 -04:00
Jose Diaz-Gonzalez
99869c520f Merge pull request #3496 from dokku/cleanup-plugins
Cleanup glide plugins when running src-clean
2019-04-16 21:34:26 -04:00
Jose Diaz-Gonzalez
65e82bcea1 fix: allow reporting domains when there are none specified
This previously bailed if the response was empty, which in this case is incorrect, as the response isn't based on whether the app is deployed or not.
2019-04-16 21:24:56 -04:00
Jose Diaz-Gonzalez
bf8b67b35d feat: cleanup glide plugins when running src-clean 2019-04-16 20:00:35 -04:00
Jose Diaz-Gonzalez
8a56740a7c Merge pull request #3490 from dokku/josegonzalez-patch-1
Add missing link to resource management docs
2019-04-10 00:44:40 -04:00
Jose Diaz-Gonzalez
3a7bac6218 docs: Add missing link to resource management docs
[ci skip]
2019-04-10 00:44:25 -04:00
Jose Diaz-Gonzalez
5b9e8ddb7d Release 0.15.3
# History

## 0.15.3

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.3/bootstrap.sh
sudo DOKKU_TAG=v0.15.3 bash bootstrap.sh
```

### New Features

- #3489: @josegonzalez feat: upgrade herokuish to 0.5.0 (Ubuntu 18.04)
2019-04-09 11:40:30 -04:00
Jose Diaz-Gonzalez
97649e86dd fix: update ruby version 2019-04-09 07:27:30 -04:00
Jose Diaz-Gonzalez
f8e3518aa6 Merge pull request #3489 from dokku/upgrade-herokuish
feat: upgrade herokuish to 0.5.0 (Ubuntu 18.04)
2019-04-09 06:56:02 -04:00
Jose Diaz-Gonzalez
ef5f7fe03e feat: upgrade herokuish to 0.5.0 (Ubuntu 18.04)
This moves the base image from Xenial to Bionic, which is the latest supported LTS release of Ubuntu. Note that all previous releases of herokuish are no longer supported, and users are encouraged to upgrade where possible.

In the case of upgrades, a 'dokku repo:purge-cache APP' should be called for each app, or built applications may include code linked to non-ABI compatible libraries due to the OS upgrade.

This sort of change is usually performed _only_ during a minor release, but as the window since the release is fairly small, the risk to our users is negligible in comparison to the inability to stay on a maintained herokuish release.
2019-04-09 06:55:34 -04:00
Jose Diaz-Gonzalez
286c6ed39d Release 0.15.2
# History

## 0.15.2

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.2/bootstrap.sh
sudo DOKKU_TAG=v0.15.2 bash bootstrap.sh
```

### Bug Fixes

- #3488: @josegonzalez fix: call ps:retire from system service
2019-04-09 06:18:54 -04:00
Jose Diaz-Gonzalez
f04fd6f218 Merge pull request #3488 from dokku/josegonzalez-patch-1
fix: call ps:retire from system service
2019-04-09 06:18:33 -04:00
Jose Diaz-Gonzalez
75239ae8b5 fix: call ps:retire from system service
[ci skip]
2019-04-09 06:18:16 -04:00
Jose Diaz-Gonzalez
b120a9cc57 Release 0.15.1
# History

## 0.15.1

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.1/bootstrap.sh
sudo DOKKU_TAG=v0.15.1 bash bootstrap.sh
```

### Bug Fixes

- #3485: @josegonzalez fix: ensure 'dokku report' always succeeds for any app
2019-04-09 03:19:40 -04:00
Jose Diaz-Gonzalez
6b71b66f8d Merge pull request #3485 from dokku/fix-report
fix: ensure 'dokku report' always succeeds for any app
2019-04-09 03:19:12 -04:00
Jose Diaz-Gonzalez
ecd88fbeeb fix: correctly name the testcase 2019-04-09 03:18:28 -04:00
Jose Diaz-Gonzalez
929c98ee90 fix: ensure 'dokku report' always succeeds for any app 2019-04-09 02:41:02 -04:00
Jose Diaz-Gonzalez
642c293d5a Release 0.15.0
# History

## 0.15.0

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.0/bootstrap.sh
sudo DOKKU_TAG=v0.15.0 bash bootstrap.sh
```

### Bug Fixes

- #3479: @josegonzalez Turn off logging for nginx validate configuration
- #3470: @josegonzalez fix: correct the argument for get_release_cmd

### New Features

- #3469: @josegonzalez Resource management
- #3466: @josegonzalez Quieter builds
- #3467: @josegonzalez feat: update golang in use for binary building
- #3465: @josegonzalez Vagrant VM Enhancements
- #3464: @josegonzalez Upgrade to go-procfile-util version 0.6.0
- #3463: @josegonzalez Implement version flags
- #3462: @josegonzalez Upgrade procfile-util
- #3449: @josegonzalez Only override the `WORKDIR` in copy_from_image if the image is `gliderlabs/herokuish` based
- #3461: @josegonzalez Allow skipping aws releases for plugins
- #3459: @josegonzalez Upgrade to herokuish:0.4.9
- #3413: @josegonzalez Implement buildpacks plugin

### Documentation

- #3482: @multikatt rails-database -> railsdatabase
- #3476: @lazyatom Add chrome plugin to documentation
- #3468: @josegonzalez Doc cleanup

### Other

- #3471: @josegonzalez chore: drop plugn package building
2019-04-08 18:03:29 -04:00
Jose Diaz-Gonzalez
f05247226d Merge pull request #3469 from dokku/resource-management
Resource management
2019-04-08 17:17:42 -04:00
Jose Diaz-Gonzalez
a4c30c2ba9 chore: standardize variable naming 2019-04-08 16:36:30 -04:00
Jose Diaz-Gonzalez
b24697443a fix: correct the name 2019-04-08 15:18:46 -04:00
Jose Diaz-Gonzalez
a4114bb29d fix: clearing values has no returnable errors 2019-04-08 14:36:38 -04:00
Jose Diaz-Gonzalez
c41753c747 fix: clearing resources for web doesn't actually clear for everything 2019-04-08 14:17:16 -04:00
Jose Diaz-Gonzalez
4a6d3c25a4 fix: do not crash when clearing properties 2019-04-08 13:56:06 -04:00
Jose Diaz-Gonzalez
beef464cc1 fix: only uncomment port for sshd-config 2019-04-08 13:42:01 -04:00
Jose Diaz-Gonzalez
6cc6d5a33f fix: correct port application during local tests 2019-04-08 13:22:40 -04:00
Jose Diaz-Gonzalez
ff945c64fe fix: correct local test running 2019-04-08 13:18:28 -04:00
Jose Diaz-Gonzalez
d7c7511ea9 fix: correct comment on GetResourceValue 2019-04-08 12:52:30 -04:00
Jose Diaz-Gonzalez
0af8b2421d fix: correct range call 2019-04-08 12:42:25 -04:00
Jose Diaz-Gonzalez
71be7026d7 fix: correct GetResourceValue errors 2019-04-08 12:41:48 -04:00
Jose Diaz-Gonzalez
1683095233 fix: try and decrease number of compiles during release process 2019-04-08 12:41:06 -04:00
Jose Diaz-Gonzalez
c2898ec040 feat: add trigger to allow retrieving resource properties on the fly 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
243d5ecc43 feat: integrate resource plugin with scheduler-docker-local 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
3f0126a471 fix: do not output empty arguments
Also ensure we use Printf instead of Print...
2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
8db3b8e333 fix: do not barf if there are no resources specified for an application 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
00c9e5a5e9 feat: first pass at implement resource limitation on a pre-process basis 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
e8134f9c2c feat: implement resource:report 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
c9bbddcfcb refactor: drop global resource limits
Global limits make it harder to reason about the inheritance in the system. Rather than support global limits, Dokku should provide primitives to automatically set them on an app at provision time, or explicitly set them for an app. Both of these are likely best suited for a higher-level provisioner, or a community plugin.
2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
278a80cc25 feat: switch from _all_ to _default_ for process type
This is a special process type that signifies it's the default value for everything.
2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
3ab271f756 refactor: drop implicit returns 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
982895ff71 fix: add missing argument 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
9acb9e527d feat: implement resource:*-clear commands 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
ab9f516c08 refactor: clean up duplication in retrieving and verifying the APP argument 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
c5717510ee feat: always get keys in order
Ranging over maps is unordered in golang, so we need to use the correct data structure if we need the output in an ordered way.
2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
8d23556831 fix: omit 2nd, unused value from range 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
04a6e30e45 refactor: drop -defaults command in favor of --global flag
This makes usage a bit simpler, at the cost of interface complexity.
2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
bdfde9a481 feat: initial stub implementation for resource:*-clear commands 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
9808ecde81 feat: implement default limit management
Also add generic report information when no flags are specified
2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
b36ab54b87 fix: correct variable name 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
ff35e95924 fix: correct type comment declaration 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
49e44ce59b fix: correct stickler-ci issues 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
ab88dbb03d feat: Implement resource:limit and resource:reserve
Also add the install and post-delete hooks
2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
2e895286cf docs: drop ability to process multiple process types at once 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
5b2d4b3559 feat: add initial documentation for resource management plugin 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
8ad74d0814 fix: correct buildpack plugin version 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
9486576add fix: drop nil err reference from log output 2019-04-08 11:31:34 -04:00
Jose Diaz-Gonzalez
2a353a9ca5 Merge pull request #3482 from multikatt/patch-1
rails-database -> railsdatabase
2019-04-05 18:20:29 -04:00
David
2d1f241677 rails-database -> railsdatabase
Naming the database rails-database throws
```Please specify a valid name for the service. Valid characters are: [A-Za-z0-9_]+```
2019-04-05 23:46:36 +02:00
Jose Diaz-Gonzalez
d6f122bfda Merge pull request #3479 from dokku/josegonzalez-patch-1
Turn off logging for nginx validate configuration
2019-03-28 12:30:27 -04:00
Jose Diaz-Gonzalez
54ef6514d5 fix: turn off error logging for validate config
This will allow validation to work if the default logging locations cannot be written to but the configuration is otherwise okay. This will be the case for users with custom nginx configurations that log to other places, such as syslog.
2019-03-26 17:10:32 -04:00
Jose Diaz-Gonzalez
abf7addaa6 Merge pull request #3476 from lazyatom/patch-1
Add chrome plugin to documentation
2019-03-19 14:29:25 -04:00
James Adam
e831b786f0 Add chrome plugin to documentation
Adds a link to the headless chrome plugin to the plugin documentation.
2019-03-19 17:20:21 +00:00
Jose Diaz-Gonzalez
c6074baad5 Merge pull request #3471 from dokku/plugn-builds-its-own-packages
chore: drop plugn package building
2019-03-16 03:49:05 -04:00
Jose Diaz-Gonzalez
7cb0d11b95 chore: drop plugn package building
The dokku/plugn project now builds and releases it's own packages on release creation.

Also upgrade to latest plugn version, 0.3.2
2019-03-16 03:16:28 -04:00
Jose Diaz-Gonzalez
87c77b1aa0 Merge pull request #3470 from dokku/josegonzalez-patch-1
fix: correct the argument for get_release_cmd
2019-03-14 14:26:10 -04:00
Jose Diaz-Gonzalez
7d2f5b84c8 fix: add missing head -n1 call to second build-env test
Otherwise `docker inspect` outputs a "condensed" json output that doesn't parse as well...
2019-03-14 13:44:54 -04:00
Jose Diaz-Gonzalez
8dcbfe5542 fix: correct case where there could be multiple build containers post-build
This happens when we execute several post-release scripts.
2019-03-14 13:12:07 -04:00
Jose Diaz-Gonzalez
f9023402ad fix: correct the argument for get_release_cmd
Closes #3438
2019-03-14 12:00:23 -04:00
Jose Diaz-Gonzalez
c658d60dc2 Merge pull request #3468 from dokku/doc-cleanup
Doc cleanup
2019-03-13 17:50:09 -04:00
Jose Diaz-Gonzalez
c1781c39ca docs: correct header
[ci skip]
2019-03-13 16:55:39 -04:00
Jose Diaz-Gonzalez
5f75b24fb2 docs: correct docker options information output 2019-03-13 16:55:11 -04:00
Jose Diaz-Gonzalez
3db5de1a9e Merge pull request #3466 from dokku/quieter-builds
Quieter builds
2019-03-13 15:00:27 -04:00
Jose Diaz-Gonzalez
520a72078e fix: remove useless cat 2019-03-13 14:12:35 -04:00
Jose Diaz-Gonzalez
ef5a45c7cb feat: add DOKKU_QUIET_OUTPUT=1 to all config_set/config_unset calls
This makes build output a bit more digestable.
2019-03-13 02:05:18 -04:00
Jose Diaz-Gonzalez
c6a1c0dcbf feat: respect --quiet in config.go
When setting environment variables, we should respect a passed `--quiet` flag - and the respective environment variable. This will allow users to have a nicer experience when using the config functions within their own plugins.
2019-03-13 02:05:18 -04:00
Jose Diaz-Gonzalez
c701429a05 chore: quiet down logging around scale declarations 2019-03-13 02:05:18 -04:00
Jose Diaz-Gonzalez
7f1fe3ccfd chore: follow logging pattern from heroku for phase command declarations 2019-03-13 02:05:18 -04:00
Jose Diaz-Gonzalez
6797971016 chore: drop extra echo in app-json method calls 2019-03-13 02:05:18 -04:00
Jose Diaz-Gonzalez
dc6abe691a Merge pull request #3467 from dokku/upgrade-golang
feat: update golang in use for binary building
2019-03-13 02:04:45 -04:00
Jose Diaz-Gonzalez
7333a630a1 feat: update golang in use for binary building
This change is not necessary other than for good house-keeping. All dokku-related binaries should _also_ be built with the latest golang.
2019-03-13 00:28:55 -04:00
Jose Diaz-Gonzalez
2edbc3fe39 Merge pull request #3465 from dokku/vm-enhancements
Vagrant VM Enhancements
2019-03-12 21:27:58 -04:00
Jose Diaz-Gonzalez
50357eb682 feat: add support for new vmware_desktop provider 2019-03-12 21:26:39 -04:00
Jose Diaz-Gonzalez
1203146ab9 feat: switch vagrant vm to ubuntu 18.04 2019-03-12 21:26:07 -04:00
Jose Diaz-Gonzalez
fc8637a0f5 Merge pull request #3464 from dokku/josegonzalez-patch-1
Upgrade to go-procfile-util version 0.6.0
2019-03-12 16:56:08 -04:00
Jose Diaz-Gonzalez
f3ace60a98 feat: upgrade to go-procfile-util version 0.6.0
Refs #3428
2019-03-12 16:23:33 -04:00
Jose Diaz-Gonzalez
8fe87358e1 Merge pull request #3463 from dokku/version-command
Implement version flags
2019-03-11 22:46:26 -04:00
Jose Diaz-Gonzalez
297a26aa20 feat: implement version flags
This moves the version command to the dokku binary, and also implements both -v and --version flags on the binary.
2019-03-11 21:50:05 -04:00
Jose Diaz-Gonzalez
2da16265cb Merge pull request #3462 from dokku/upgrade-procfile-util
feat: upgrade procfile-util
2019-03-11 21:13:28 -04:00
Jose Diaz-Gonzalez
25a65add4a Merge pull request #3449 from dokku/3263-copy-from-image
Only override the `WORKDIR` in copy_from_image if the image is `gliderlabs/herokuish` based
2019-03-11 21:01:21 -04:00
Jose Diaz-Gonzalez
a721abd972 feat: upgrade procfile-util
The new version properly handles trailing inline comments.
2019-03-11 20:09:53 -04:00
Jose Diaz-Gonzalez
acbe8fa805 fix: Only override the WORKDIR in copy_from_image if the image is gliderlabs/herokuish based
Rather than always assuming a missing `WORKDIR` means herokuish, we instead inspect the image to verify that it is. If it is, then and _only_ then do we set WORKDIR. Otherwise, we respect the decision of `docker cp` to execute from within the last known `WORKDIR` context, which is inherited at the image level, not image metadata level.

Additionally, speed up `is_image_herokuish_based` by inspecting the environment variables on the image. When there is a "USER=herokuishuser", we can more or less safely assume it is an image that Dokku built, and is therefore a herokuish image. While possible, it would be very strange if a non-herokuish image had this environment variable set, so it is a relatively safe change.
2019-03-11 20:09:13 -04:00
Jose Diaz-Gonzalez
57a1c68aba fix: correct shfmt 2019-03-11 19:12:57 -04:00
Jose Diaz-Gonzalez
83104bf919 Merge pull request #3461 from dokku/plugin-releasing
feat: allow skipping aws releases for plugins
2019-03-11 18:46:40 -04:00
Jose Diaz-Gonzalez
7574c407fa feat: allow skipping aws releases for plugins
If there is no configured s3 bucket/path, avoid attempting to push when `true` is passed as the second argument.
2019-03-11 18:30:03 -04:00
Jose Diaz-Gonzalez
f67a38864c Merge pull request #3459 from dokku/upgrade-herokuish
feat: upgrade to herokuish:0.4.9
2019-03-07 17:32:47 -05:00
Jose Diaz-Gonzalez
f632795904 feat: upgrade to herokuish:0.4.9 2019-03-07 17:29:42 -05:00
Jose Diaz-Gonzalez
0cf43b8623 Merge pull request #3413 from dokku/3256-buildpack-management
Implement buildpacks plugin
2019-03-05 22:22:56 -05:00
Jose Diaz-Gonzalez
d3d426a8d9 tests: add functional tests for buildpacks plugin 2019-03-05 21:41:23 -05:00
Jose Diaz-Gonzalez
6cae92e1f1 fix: add missing comments to exported functions 2019-03-05 21:41:23 -05:00
Jose Diaz-Gonzalez
3670d7efcd fix: correct fmt.Errorf violations 2019-03-05 21:41:23 -05:00
Jose Diaz-Gonzalez
887c1d4254 feat: implement buildpacks plugin
This will allow users to specify buildpacks outside of a git repository.

Note that this does not override any specified `BUILDPACK_URL`.

Closes #3256
2019-03-05 21:41:23 -05:00
Jose Diaz-Gonzalez
a56ae22614 refactor: switch to path.Join
This is the _correct_ way to join paths in golang
2019-03-05 21:34:26 -05:00
Jose Diaz-Gonzalez
884c45de0c chore: move print calls together 2019-03-05 21:34:26 -05:00
Jose Diaz-Gonzalez
8d6a1773a3 fix: correct the DOKKU_QUIET_OUTPUT env var check for golang log methods 2019-03-05 21:34:26 -05:00
Jose Diaz-Gonzalez
6f1e964c9f refactor: ensure all property-handling functions return an error
This will allow upstream functions to handle errors in the most appropriate manner
2019-03-05 21:34:26 -05:00
Jose Diaz-Gonzalez
4db7ebd743 feat: add helper method for ensuring a property file exists 2019-03-05 21:34:26 -05:00
Jose Diaz-Gonzalez
83f5e380d4 refactor: add helper method for getting the path of a property 2019-03-05 21:34:26 -05:00
Jose Diaz-Gonzalez
34f5eaeaa2 chore: rename helper method 2019-03-05 21:34:26 -05:00
Jose Diaz-Gonzalez
726f96089c Release 0.14.6
# History

## 0.14.6

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.6/bootstrap.sh
sudo DOKKU_TAG=v0.14.6 bash bootstrap.sh
```

### Bug Fixes

- #3448: @josegonzalez Remove https port mappings from new app during clone
- #3434: @tamanobi Ignore cache directories when clone

### New Features

- #3447: @josegonzalez Update herokuish to 0.4.8

### Documentation

- #3420: @baikunz Add reference to external post-deploy-script plugin
- #3453: @jayjun Fix Deployment guides style
- #3445: @zuccs Fix typo in deployment tasks documentation
- #3441: @josegonzalez Update issue template information
- #3436: @jayjun Fix Getting Started guides style
- #3425: @jayjun Add warning about PORT variable in deploy tutorial

### Tests

- #3435: @josegonzalez Fix lint issues across codebase
2019-02-19 11:50:20 -05:00
Jose Diaz-Gonzalez
6428b57775 Merge pull request #3420 from baikunz/patch-1
Add reference to external post-deploy-script plugin
2019-02-19 11:18:57 -05:00
Jose Diaz-Gonzalez
e3f0e09a4a Merge pull request #3453 from jayjun/deployment
Fix Deployment guides style
2019-02-19 10:41:42 -05:00
Jay Jun
e839c29916 Fix Deployment guides style 2019-02-19 20:01:24 +08:00
Jose Diaz-Gonzalez
42b6876f2c Merge pull request #3448 from dokku/3446-ssl-clone
Remove https port mappings from new app during clone
2019-02-15 03:59:47 -05:00
Jose Diaz-Gonzalez
d439518f13 fix: Remove https port mappings from new app during clone
Closes #3446
2019-02-15 03:15:14 -05:00
Jose Diaz-Gonzalez
f4be5adae0 Merge pull request #3447 from dokku/update-herokuish
Update herokuish to 0.4.8
2019-02-15 01:36:59 -05:00
Jose Diaz-Gonzalez
4b77a97148 feat: upgrade herokuish to 0.4.8 2019-02-15 01:36:24 -05:00
Jose Diaz-Gonzalez
dd92e9db1a feat: upgrade herokuish to 0.4.7 2019-02-15 01:36:06 -05:00
Jose Diaz-Gonzalez
ead82cdcf3 Merge pull request #3434 from tamanobi/fix/ignore-cache-directories-when-clone
ignore cache directories when clone
2019-02-15 01:24:05 -05:00
Jose Diaz-Gonzalez
9cce80d679 Merge pull request #3445 from zuccs/patch-1
Fix typo in deployment tasks documentation
2019-02-15 00:08:53 -05:00
zuccs
f43451de36 Fix typo 2019-02-15 16:05:24 +11:00
Jose Diaz-Gonzalez
5d1cd5ed47 Merge pull request #3441 from dokku/josegonzalez-patch-1
docs: Update issue template information
2019-02-11 11:10:37 -05:00
Jose Diaz-Gonzalez
de948e4d2b docs: Update issue template information
Remove duplicate information that is outdated.

[ci skip]
2019-02-11 11:10:18 -05:00
Kohki YAMAGIWA
db69f0cafa Merge branch 'master' into fix/ignore-cache-directories-when-clone 2019-02-10 21:59:01 +09:00
Jose Diaz-Gonzalez
c97ab482fb Merge pull request #3436 from jayjun/getting-started
Fix Getting Started guides style
2019-02-03 15:29:05 -05:00
Kohki YAMAGIWA
17ec77073a Merge branch 'master' into fix/ignore-cache-directories-when-clone 2019-02-04 00:30:58 +09:00
Tan Jay Jun
0967f3f7bf Fix Getting Started guides style 2019-02-03 16:15:42 +08:00
Jose Diaz-Gonzalez
86351724ff Merge pull request #3435 from dokku/lint-updates
Lint updates
2019-02-02 14:22:12 -05:00
Jose Diaz-Gonzalez
a97b3d1ed3 fix: exit with a status code between 1 and 255
Fixes SC2242
2019-02-02 13:52:42 -05:00
Jose Diaz-Gonzalez
c7b71b5d92 lint: remove unnecessary negation
Also use double-brackets where possible.

Fixes SC2236
2019-02-02 13:52:18 -05:00
Jose Diaz-Gonzalez
67ae374e60 lint: remove whitespaces before redirect 2019-02-02 13:49:24 -05:00
Jose Diaz-Gonzalez
b72deb2b2a Merge pull request #3425 from jayjun/port
Add warning about PORT variable in deploy tutorial
2019-01-29 12:57:24 -05:00
Jose Diaz-Gonzalez
c368cc0855 docs: must to should
Must is a bit too strong - its possible that the app responds to web requests, just on a different port...

[ci skip]
2019-01-29 12:57:07 -05:00
Tan Jay Jun
33800e226a Add warning about PORT variable in deploy tutorial 2019-01-30 01:47:27 +08:00
dorian ALKOUM
4539535c8c Reference Post Deploy Script plugin 2019-01-24 19:00:50 +01:00
Jose Diaz-Gonzalez
76bdac9747 Release 0.14.5
# History

## 0.14.5

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.5/bootstrap.sh
sudo DOKKU_TAG=v0.14.5 bash bootstrap.sh
```

### Bug Fixes

- #3419: @jayjun Fix Dokku installer checkbox for WebKit and Edge browsers
2019-01-24 10:32:52 -05:00
Jose Diaz-Gonzalez
d6b909adf4 Merge pull request #3419 from jayjun/checkbox
Fix Dokku installer checkbox for WebKit and Edge browsers
2019-01-24 10:07:32 -05:00
Tan Jay Jun
39a0e89a24 Fix Dokku installer checkbox for WebKit and Edge browsers 2019-01-24 22:54:29 +08:00
tamanobi
d35042066b return exit-status:0 when dokku clone 2019-01-24 22:07:15 +09:00
Jose Diaz-Gonzalez
9a690ba042 Release 0.14.4
# History

## 0.14.4

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.4/bootstrap.sh
sudo DOKKU_TAG=v0.14.4 bash bootstrap.sh
```

### Bug Fixes

- #3415: @josegonzalez Drop universe installation in debian
2019-01-22 13:31:40 -05:00
Jose Diaz-Gonzalez
11f90a1112 Merge pull request #3415 from dokku/josegonzalez-patch-1
Drop universe installation in debian
2019-01-22 13:31:16 -05:00
Jose Diaz-Gonzalez
954684f5b5 fix: drop universe installation in debian
This doesn't exist for debian, and is fine to skip.

[ci skip]
2019-01-22 13:30:59 -05:00
Jose Diaz-Gonzalez
39c0c316fc Release 0.14.3
# History

## 0.14.3

Install/update via the bootstrap script:

```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.3/bootstrap.sh
sudo DOKKU_TAG=v0.14.3 bash bootstrap.sh
```

### Bug Fixes

- #3412: @josegonzalez Ensure official golang plugins have correct help output
- #3411: @josegonzalez Properly handle the nginx installation dependency
- #3406: @josegonzalez Add missing semicolons to app-json script
- #3394: @josegonzalez Quiet ps:retire where possible

### New Features

- #3410: @josegonzalez Make installs quieter
- #3409: @josegonzalez Build golang binaries with higher concurrency
- #3408: @josegonzalez Disable container restarts for stopped containers
- #3389: @heyarne Remove jQuery from web-based installer

### Documentation

- #3407: @tkrugg Fix typo on domain docs

### Tests

- #3414: @josegonzalez Test and release changes
2019-01-22 01:08:04 -05:00
Jose Diaz-Gonzalez
3285cacc97 Merge pull request #3414 from dokku/dokku-release-changes
Test and release changes
2019-01-21 22:32:03 -05:00
Jose Diaz-Gonzalez
7ac9c33112 tests: split by classname instead of filename 2019-01-21 21:57:03 -05:00
Jose Diaz-Gonzalez
f5c45b99ad refactor: use a base image when running the build process in CI 2019-01-21 21:53:35 -05:00
Jose Diaz-Gonzalez
af35de509b fix: drop extra release call in test run 2019-01-21 21:40:29 -05:00
Jose Diaz-Gonzalez
0798841f83 chore: standardize on a single naming scheme for releases
- "build" Dockerfiles should start with build-
- "release" scripts should have the name of the thing they are building appended
2019-01-21 21:40:10 -05:00
Jose Diaz-Gonzalez
8d577b275e Merge pull request #3412 from dokku/full-golang-help
Ensure official golang plugins have correct help output
2019-01-21 02:16:06 -05:00
Jose Diaz-Gonzalez
35e04d58fe Merge pull request #3411 from dokku/nginx-dependencies
Properly handle the nginx installation dependency
2019-01-21 02:15:53 -05:00
Jose Diaz-Gonzalez
af8718cebe fix: ensure official golang plugins have correct help output
Previously, golang plugins would omit subcommands for 'dokku help --all', meaning they could not be introspected upon by outside tooling.
2019-01-20 22:50:48 -05:00
Jose Diaz-Gonzalez
b7e5bbed08 Merge pull request #3410 from dokku/quieter-install
Make installs quieter
2019-01-20 22:43:09 -05:00
Jose Diaz-Gonzalez
6b0cdae3d3 fix: properly handle the nginx installation dependency
- ensure nginx is always installed
- install nginx in the same way for apt-using distros
- do not install software-properties-common or python-software-properties if not needed
2019-01-20 20:57:40 -05:00
Jose Diaz-Gonzalez
e423676b11 feat: make installs quieter
This removes output from commands that otherwise should be silent - such as when not needing to migrate data.
2019-01-20 20:54:00 -05:00
Jose Diaz-Gonzalez
1757bc0207 Merge pull request #3409 from dokku/faster-build
Build golang binaries with higher concurrency
2019-01-20 18:58:12 -05:00
Jose Diaz-Gonzalez
e7fb6007d3 feat: build golang binaries with higher concurrency
This should allow us to shave off a few minutes of build time, both locally and on CI
2019-01-20 18:12:08 -05:00
Jose Diaz-Gonzalez
2e446fc3be Merge pull request #3408 from dokku/container-restart-no
Disable container restarts for stopped containers
2019-01-20 16:24:35 -05:00
Jose Diaz-Gonzalez
173b87928c feat: disable container restarts for stopped containers
This should avoid the case where the docker daemon starts the containers upon reboot.
2019-01-20 15:19:54 -05:00
Jose Diaz-Gonzalez
1edb734df9 Merge pull request #3406 from dokku/3404-missing-semicolon
Add missing semicolons to app-json script
2019-01-20 15:05:43 -05:00
Jose Diaz-Gonzalez
6da8a54f86 Merge pull request #3407 from tkrugg/patch-1
typo
2019-01-20 14:29:41 -05:00
Youcef Mammar
eea863e556 typo 2019-01-20 18:35:02 +01:00
Jose Diaz-Gonzalez
db0df4e4ca Merge pull request #3389 from rbb-data/feature/remove-jquery
Remove jQuery from web-based installer
2019-01-20 11:28:33 -05:00
Jose Diaz-Gonzalez
b9b4693e20 fix: add missing semicolons 2019-01-20 11:21:53 -05:00
Arne Schlüter
699d205060 Remove external dependencies and warnings from setup page
* Remove jQuery dependency
* Add charset declaration to installer page
2019-01-18 13:15:19 +01:00
Jose Diaz-Gonzalez
5579fe0006 Merge pull request #3394 from dokku/retire-fixes
Quiet ps:retire where possible
2019-01-12 22:54:06 -05:00
Jose Diaz-Gonzalez
0375bc3e97 fix: quiet ps:retire where possible
Log output for ps:retire was previously a bit too verbose because we weren't handling the following edge-cases.

- if a container doesn't exist, remove it from the dead container list
- ensure a restarting container is properly killed
- only attempt to stop/kill if the state is not dead or exited
- do not attempt to do anything if the container doesn't exist
- correct check on running state
2019-01-12 22:49:23 -05:00
357 changed files with 9231 additions and 1947 deletions

View File

@@ -1,23 +1,28 @@
version: 2
jobs:
build:
machine: true
machine:
image: ubuntu-1604:201903-01
parallelism: 4
steps:
- checkout
- run: |
make ci-dependencies
- run: |
./contrib/release build
./tests/ci/setup.sh
- run: |
echo 'export DOKKU_SKIP_CLEANUP=true' | sudo tee /home/dokku/.dokkurc/dokku_skip_cleanup
- run: |
# dokku.me now resolves to 10.0.0.2. add 10.0.0.2/24 to eth0
sudo ip a a 10.0.0.2/24 broadcast 10.0.0.255 dev eth0
if [[ "$(lsb_release -rs)" == "14.04" ]]; then
# dokku.me now resolves to 10.0.0.2. add 10.0.0.2/24 to eth0
sudo ip a a 10.0.0.2/24 broadcast 10.0.0.255 dev eth0
else
# dokku.me now resolves to 10.0.0.2. add 10.0.0.2/24 to ens4
sudo ip a a 10.0.0.2/24 broadcast 10.0.0.255 dev ens4
fi
- run: |
case $CIRCLE_NODE_INDEX in
0) sudo -E make -e lint go-tests ci-go-coverage ;;
0) sudo -E make -e lint-ci go-tests ci-go-coverage ;;
1) sudo -E make -e deploy-test-checks-root deploy-test-config ;;
2) sudo -E make -e deploy-test-multi ;;
3) sudo -E make -e deploy-test-go-fail-predeploy deploy-test-go-fail-postdeploy ;;
@@ -26,6 +31,11 @@ jobs:
shell: /bin/bash
command: sudo -E make -e test-ci
no_output_timeout: 60m
- run: |
if [ "${CIRCLE_NODE_INDEX}" == "0" ]; then
./tests/ci/setup.sh docker
DOKKU_SSH_PORT=3022 sudo -E make -e test-ci-docker
fi
- store_artifacts:
path: ./coverage.out
- store_artifacts:

View File

@@ -6,6 +6,9 @@ contrib
build
docs
tests
!build/dokku.deb
!contrib/dokku-installer.py
!contrib/dokku-update
!contrib/bash-completion
!contrib/docker
vendor

View File

@@ -55,22 +55,10 @@ doesn't already include that problem or suggestion before submitting an issue.
If you find a match, add a quick "+1" or "I have this problem too." Doing this
helps prioritize the most common problems and requests.
When reporting issues, please include your host OS (Ubuntu 14.04, CentOS 7,
etc). Please include:
* The output of `uname -a`.
* The output of `free -m`
* The output of `docker version`.
* The output of `docker -D info`.
* The output of `sigil -v`.
* The output of `docker run --rm -ti gliderlabs/herokuish:latest herokuish version`
* The output of `dokku version`.
* The output of `dokku plugin`.
Please also include the steps required to reproduce the problem if possible and
applicable. This information will help us review and fix your issue faster.
Our Issue Report Template is available [here](https://github.com/dokku/dokku/blob/master/ISSUE_TEMPLATE.md)
When reporting issues, please include all the information we ask for in our
[issue template](https://github.com/dokku/dokku/blob/master/ISSUE_TEMPLATE.md).
Not doing so will prolongue the support period, making it more difficult to support
you.
## Contributing
@@ -126,7 +114,7 @@ Be patient! The Dokku maintainers will review all pull requests and comment as
quickly as possible. There may be some back and forth while the details of your
pull request are discussed.
In the unlikely event that your pull request does not get merged, the dokku
In the unlikely event that your pull request does not get merged, the Dokku
maintainers will either provide an alternative patch or guide you towards a
better solution to the problem at hand.

52
Dockerfile Normal file
View File

@@ -0,0 +1,52 @@
FROM phusion/baseimage:0.11
CMD ["/sbin/my_init"]
ARG DOKKU_TAG=0.17.7
ARG DOKKU_GID=200
ARG DOKKU_UID=200
ARG DOKKU_HOSTNAME=dokku.invalid
ARG DOKKU_SKIP_KEY_FILE=true
ARG DOKKU_VHOST_ENABLE=false
ARG DOKKU_WEB_CONFIG=false
COPY ./build/dokku.deb /tmp/dokku.deb
RUN addgroup --gid $DOKKU_GID dokku \
&& adduser --uid $DOKKU_UID --gid $DOKKU_GID --disabled-password --gecos "" "dokku"
RUN echo "dokku dokku/hostname string $DOKKU_HOSTNAME" | debconf-set-selections \
&& echo "dokku dokku/skip_key_file boolean $DOKKU_SKIP_KEY_FILE" | debconf-set-selections \
&& echo "dokku dokku/vhost_enable boolean $DOKKU_VHOST_ENABLE" | debconf-set-selections \
&& echo "dokku dokku/web_config boolean $DOKKU_WEB_CONFIG" | debconf-set-selections \
&& curl -sSL https://packagecloud.io/dokku/dokku/gpgkey | apt-key add - \
&& echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ bionic main" | tee /etc/apt/sources.list.d/dokku.list \
&& apt-get update -qq \
&& apt-get install --no-install-recommends --only-upgrade -y -qq openssl openssh-server \
&& apt --no-install-recommends -qq -y install rsync /tmp/dokku.deb \
&& apt-get purge -y -q syslog-ng-core \
&& apt-get autoremove -y -q \
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
WORKDIR /tmp
COPY ./docker .
RUN \
rsync -a /tmp/ / \
&& rm -rf /tmp/* \
&& rm /etc/runit/runsvdir/default/sshd/down \
&& chown -R dokku:dokku /home/dokku/ \
&& mkdir -p /skel/etc /skel/home /skel/var/lib/dokku /var/log/services \
&& mv /etc/ssh /skel/etc/ssh \
&& mv /home/dokku /skel/home/dokku \
&& mv /var/lib/dokku/config /skel/var/lib/dokku/config \
&& mv /var/lib/dokku/data /skel/var/lib/dokku/data \
&& ln -sf /mnt/dokku/etc/ssh /etc/ssh \
&& ln -sf /mnt/dokku/home/dokku /home/dokku \
&& ln -sf /mnt/dokku/var/lib/dokku/config /var/lib/dokku/config \
&& ln -sf /mnt/dokku/var/lib/dokku/data /var/lib/dokku/data \
&& mv /etc/my_init.d/00_regen_ssh_host_keys.sh /etc/my_init.d/15_regen_ssh_host_keys \
&& rm /etc/nginx/sites-enabled/default /usr/share/nginx/html/index.html /etc/my_init.d/10_syslog-ng.init \
&& sed -i '/imklog/d' /etc/rsyslog.conf \
&& rm /var/log/btmp /var/log/wtmp /var/log/*log /var/log/apt/* /var/log/dokku/* /var/log/nginx/*

View File

@@ -1,5 +1,592 @@
# History
## 0.18.3
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.3/bootstrap.sh
sudo DOKKU_TAG=v0.18.3 bash bootstrap.sh
```
### Bug Fixes
- #3660: @josegonzalez Trigger builder-release for dockerfile correctly
- #3655: @znz Fix filename of sshcommand tarball
- #3648: @josegonzalez Copy the deb file before creating the image
### New Features
- #3656: @josegonzalez Allow users to customize the container start command
- #3657: @josegonzalez Show error message when docker-related build commands fail
- #3654: @josegonzalez Update herokuish to 0.5.3
### Documentation
- #3652: @josegonzalez Correct issue in inspect call for issue template
## 0.18.2
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.2/bootstrap.sh
sudo DOKKU_TAG=v0.18.2 bash bootstrap.sh
```
### New Features
- #3645: @josegonzalez Use version in DOKKU_LIB_ROOT
- #3644: @josegonzalez Refactor temp file handling
- #3643: @josegonzalez Quiet deploy output
- #3641: @josegonzalez Pass SOURCECODE_WORK_DIR to build-buildpack triggers
- #3639: @josegonzalez Refer to upstream sshcommand package
### Documentation
- #3642: @josegonzalez Correct issue with label change in docs
- #3640: @josegonzalez Add missing popd to post-extract example
## 0.18.1
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.1/bootstrap.sh
sudo DOKKU_TAG=v0.18.1 bash bootstrap.sh
```
### New Features
- #3636: @josegonzalez Unify deb and rpm creation code
- #3635: @josegonzalez Upgrade herokuish to 0.5.2
## 0.18.0
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.0/bootstrap.sh
sudo DOKKU_TAG=v0.18.0 bash bootstrap.sh
```
### Bug Fixes
- #3627: @josegonzalez Make image removal synchronous
- #3618: @josegonzalez Ensure the dokku-retire timer is properly installed
- #3614: @alexquick Validate args for config:set and config:unset
- #3605: @josegonzalez Handle case where there are empty newlines in the authorized_keys file
- #3603: @josegonzalez Drop extra % sign in common.LogVerboseQuiet
- #3597: @josegonzalez Allow default trace function to work
### New Features
- #3628: @josegonzalez Handle file copying in a secure and reliable fashion
- #3630: @josegonzalez Fix issue where push warning on bad branch was skipped
- #3629: @josegonzalez Avoid calling the user-auth trigger where possible
- #3626: @josegonzalez Builder plugins
- #3599: @josegonzalez Scope docker-cleanup to specific app
- #3589: @michaelshobbs Allow running Dokku in Docker
- #3607: @josegonzalez Purge cache using herokuish image
- #3602: @alexymik Create a 502 error page to automatically refresh if backend status changes
- #3600: @josegonzalez Refactor IsImageHerokuishBased to match shell version
### Documentation
- #3625: @josegonzalez Remove old reference to SPONSORS.md
- #3619: @josegonzalez Cleanup plugin creation docs
- #3612: @jayjun Improve testing docs
- #3613: @Lyelt Remove all uses of proxy_set_header Connection "upgrade"
- #3596: @josegonzalez Add missing hooks to events plugin and plugin triggers docs
### Tests
- #3610: @jayjun Correct Bats path in single tests
## 0.17.9
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.9/bootstrap.sh
sudo DOKKU_TAG=v0.17.9 bash bootstrap.sh
```
### Bug Fixes
- #3593: @JakeAngell Fix nginx template for https in "Connection" header
### Documentation
- #3595: @josegonzalez Drop extra help output for trace
## 0.17.8
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.8/bootstrap.sh
sudo DOKKU_TAG=v0.17.8 bash bootstrap.sh
```
### Bug Fixes
- #3591: @palfrey Allow SSH keys with no ending newline
### New Features
- #3587: @josegonzalez feat: drop make and gcc as dependencies
## 0.17.7
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.7/bootstrap.sh
sudo DOKKU_TAG=v0.17.7 bash bootstrap.sh
```
### New Features
- #3586: @josegonzalez ps plugin parallel usage cleanup
### Documentation
- #3584: @josegonzalez Fix no-install-recommends documentation
### Other
- #3579: @znz Update plugin list
## 0.17.6
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.6/bootstrap.sh
sudo DOKKU_TAG=v0.17.6 bash bootstrap.sh
```
### New Features
- #3578: @josegonzalez Allow omitting resource args by setting DOKKU_OMIT_RESOURCE_ARGS
## 0.17.5
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.5/bootstrap.sh
sudo DOKKU_TAG=v0.17.5 bash bootstrap.sh
```
### New Features
- #3576: @josegonzalez Allow setting DOCKER_BIN path for docker execution
## 0.17.4
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.4/bootstrap.sh
sudo DOKKU_TAG=v0.17.4 bash bootstrap.sh
```
### New Features
- #3575: @josegonzalez Add a way to cleanup apps for specific schedulers
## 0.17.3
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.3/bootstrap.sh
sudo DOKKU_TAG=v0.17.3 bash bootstrap.sh
```
### Bug Fixes
- #3570: @znz Fix typos in trace help
### New Features
- #3574: @josegonzalez Add support for pulling app status from scheduler plugins
- #3571: @znz Simplify hostname_regex
## 0.17.2
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.2/bootstrap.sh
sudo DOKKU_TAG=v0.17.2 bash bootstrap.sh
```
### Bug Fixes
- #3568: @josegonzalez Correct issue with clearing global domains
## 0.17.1
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.1/bootstrap.sh
sudo DOKKU_TAG=v0.17.1 bash bootstrap.sh
```
### Bug Fixes
- #3567: @josegonzalez Ignore SC2064
## 0.17.0
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.17.0/bootstrap.sh
sudo DOKKU_TAG=v0.17.0 bash bootstrap.sh
```
### Bug Fixes
- #3565: @josegonzalez Properly cleanup temp files
- #3563: @josegonzalez Properly split strings in sanitized ps:inspect
- #3560: @josegonzalez Resource setting fixes
- #3556: @josegonzalez Add missing domains:clear-global command
- #3554: @znz Switch from rawgit to jsdelivr in manifest.json too
### New Features
- #3566: @josegonzalez Allow users to specify wildcard domains
- #3564: @josegonzalez Add config:clear command
- #3477: @alexquick Allow specifying environment variables for dokku run
- #3540: @josegonzalez Do not append the global domain for matching subdomains
- #3559: @josegonzalez Add trace:on and trace:off
- #3561: @josegonzalez feat: disable scaling if app contains DOKKU_SCALE file
- #3558: @josegonzalez Add nginx:show-conf command
- #3549: @josegonzalez Add message indicating that the user is looking at default limits/reservations
### Documentation
- #3557: @josegonzalez Standardize on node-js-app in examples
- #3548: @josegonzalez Remove outdated global resource setting
### Other
- #3562: @josegonzalez Proxy ports manipulation updates
## 0.16.4
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.4/bootstrap.sh
sudo DOKKU_TAG=v0.16.4 bash bootstrap.sh
```
### Bug Fixes
- #3547: @josegonzalez Correct retrieval of resource values for alternative schedulers
### New Features
- #3546: @josegonzalez Add ability to trigger an arbitrary plugin hook
## 0.16.3
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.3/bootstrap.sh
sudo DOKKU_TAG=v0.16.3 bash bootstrap.sh
```
### Bug Fixes
- #3541: @josegonzalez Handle case where image is null on first deploy
### New Features
- #3543: @josegonzalez Add ability to clear global domains
- #3517: @josegonzalez SSH key updates
- #3538: @josegonzalez Silence dokku run 'errors'
### Documentation
- #3523: @MarcDiethelm Add an example how to specify a Dockerfile for deployment
- #3539: @josegonzalez Warn users when ufw is enabled
## 0.16.2
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.2/bootstrap.sh
sudo DOKKU_TAG=v0.16.2 bash bootstrap.sh
```
### Documentation
- #3536: @josegonzalez docs: Add documentation for nginx-pre-reload limitation
- #3535: @josegonzalez Add help output for apps:exists
## 0.16.1
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.1/bootstrap.sh
sudo DOKKU_TAG=v0.16.1 bash bootstrap.sh
```
### New Features
- #3532: @josegonzalez refactor: allow the scheduler to decide if an app is deployed
### Documentation
- #3530: @jhstatewide Updated info about supported Ubuntu versions
## 0.16.0
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.0/bootstrap.sh
sudo DOKKU_TAG=v0.16.0 bash bootstrap.sh
```
### Bug Fixes
- #3527: @josegonzalez Use DOKKU_IMAGE for report command
### New Features
- #3528: @josegonzalez feat: add support for quiet ps:scale output
- #3516: @ape-box fix nginx template with Connection header to http_connection
- #3513: @Mayeu Support installing plugins via file:// scheme
### Documentation
- #3525: @artofrawr add multi dockerfile plugin to plugins.md
- #3518: @renestalder Add GitLab GIT_STRATEGY for stop_preview_app
- #3506: @vanastassiou Clarify application deployment documentation
- #3512: @Mayeu Update example app in deploy tutorial
## 0.15.5
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.5/bootstrap.sh
sudo DOKKU_TAG=v0.15.5 bash bootstrap.sh
```
### New Features
- #3511: @josegonzalez Add json output to config:export
### Documentation
- #3510: @josegonzalez Remove SPONSORS doc in favor of OpenCollective
- #3509: @Neamar Missing space in markdown formatting
- #3507: @renestalder Fix GitLab CI examples
## 0.15.4
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.4/bootstrap.sh
sudo DOKKU_TAG=v0.15.4 bash bootstrap.sh
```
### Bug Fixes
- #3499: @josegonzalez Ensure the .buildpacks file exists before writing to it
- #3500: @josegonzalez Always allow ps:scale proc=0
- #3497: @josegonzalez Allow reporting domains when there are none specified
### New Features
- #3502: @josegonzalez Add a trigger to fetch the git revision
- #3501: @josegonzalez Move log retrieval to docker-local scheduler
- #3498: @josegonzalez Add ability to report domains globally
- #3496: @josegonzalez Cleanup glide plugins when running src-clean
### Documentation
- #3504: @vanastassiou Edits for readability and conciseness
- #3490: @josegonzalez Add missing link to resource management docs
## 0.15.3
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.3/bootstrap.sh
sudo DOKKU_TAG=v0.15.3 bash bootstrap.sh
```
### New Features
- #3489: @josegonzalez feat: upgrade herokuish to 0.5.0 (Ubuntu 18.04)
## 0.15.2
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.2/bootstrap.sh
sudo DOKKU_TAG=v0.15.2 bash bootstrap.sh
```
### Bug Fixes
- #3488: @josegonzalez fix: call ps:retire from system service
## 0.15.1
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.1/bootstrap.sh
sudo DOKKU_TAG=v0.15.1 bash bootstrap.sh
```
### Bug Fixes
- #3485: @josegonzalez fix: ensure 'dokku report' always succeeds for any app
## 0.15.0
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.15.0/bootstrap.sh
sudo DOKKU_TAG=v0.15.0 bash bootstrap.sh
```
### Bug Fixes
- #3479: @josegonzalez Turn off logging for nginx validate configuration
- #3470: @josegonzalez fix: correct the argument for get_release_cmd
### New Features
- #3469: @josegonzalez Resource management
- #3466: @josegonzalez Quieter builds
- #3467: @josegonzalez feat: update golang in use for binary building
- #3465: @josegonzalez Vagrant VM Enhancements
- #3464: @josegonzalez Upgrade to go-procfile-util version 0.6.0
- #3463: @josegonzalez Implement version flags
- #3462: @josegonzalez Upgrade procfile-util
- #3449: @josegonzalez Only override the `WORKDIR` in copy_from_image if the image is `gliderlabs/herokuish` based
- #3461: @josegonzalez Allow skipping aws releases for plugins
- #3459: @josegonzalez Upgrade to herokuish:0.4.9
- #3413: @josegonzalez Implement buildpacks plugin
### Documentation
- #3482: @multikatt rails-database -> railsdatabase
- #3476: @lazyatom Add chrome plugin to documentation
- #3468: @josegonzalez Doc cleanup
### Other
- #3471: @josegonzalez chore: drop plugn package building
## 0.14.6
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.6/bootstrap.sh
sudo DOKKU_TAG=v0.14.6 bash bootstrap.sh
```
### Bug Fixes
- #3448: @josegonzalez Remove https port mappings from new app during clone
- #3434: @tamanobi Ignore cache directories when clone
### New Features
- #3447: @josegonzalez Update herokuish to 0.4.8
### Documentation
- #3420: @baikunz Add reference to external post-deploy-script plugin
- #3453: @jayjun Fix Deployment guides style
- #3445: @zuccs Fix typo in deployment tasks documentation
- #3441: @josegonzalez Update issue template information
- #3436: @jayjun Fix Getting Started guides style
- #3425: @jayjun Add warning about PORT variable in deploy tutorial
### Tests
- #3435: @josegonzalez Fix lint issues across codebase
## 0.14.5
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.5/bootstrap.sh
sudo DOKKU_TAG=v0.14.5 bash bootstrap.sh
```
### Bug Fixes
- #3419: @jayjun Fix Dokku installer checkbox for WebKit and Edge browsers
## 0.14.4
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.4/bootstrap.sh
sudo DOKKU_TAG=v0.14.4 bash bootstrap.sh
```
### Bug Fixes
- #3415: @josegonzalez Drop universe installation in debian
## 0.14.3
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.3/bootstrap.sh
sudo DOKKU_TAG=v0.14.3 bash bootstrap.sh
```
### Bug Fixes
- #3412: @josegonzalez Ensure official golang plugins have correct help output
- #3411: @josegonzalez Properly handle the nginx installation dependency
- #3406: @josegonzalez Add missing semicolons to app-json script
- #3394: @josegonzalez Quiet ps:retire where possible
### New Features
- #3410: @josegonzalez Make installs quieter
- #3409: @josegonzalez Build golang binaries with higher concurrency
- #3408: @josegonzalez Disable container restarts for stopped containers
- #3389: @heyarne Remove jQuery from web-based installer
### Documentation
- #3407: @tkrugg Fix typo on domain docs
### Tests
- #3414: @josegonzalez Test and release changes
## 0.14.2
Install/update via the bootstrap script:

View File

@@ -29,9 +29,7 @@
### Additional information
- Container Inspect Output (if applicable):
- 0.13.0+: `dokku inspect APP_NAME`
- <0.13.0: `docker inspect CONTAINER_ID`: WARNING, `docker inspect` will print environment variables for some commands, be sure you're not exposing any sensitive information when posting issues. You may replace these values with XXXXXXX.
- Container Inspect Output (if applicable) via `dokku ps:inspect APP_NAME`
- `cat /home/dokku/<app>/nginx.conf` (if applicable):
- Link to the exact repository being deployed (if possible/applicable):
- If a deploy is failing or behaving unexpectedly:
@@ -40,5 +38,5 @@
- If using buildpacks, which custom buildpacks are in use
- If using a `Dockerfile`, the contents of that file
- If it exists, the contents of your `Procfile`.
- Output of failing Dokku commands after running `dokku trace on`
(BEWARE: `trace on` will print environment variables for some commands, be sure you're not exposing any sensitive information when posting issues. You may replace these values with XXXXXXX):
- Output of failing Dokku commands after running `dokku trace:on`
(BEWARE: `trace:on` will print environment variables for some commands, be sure you're not exposing any sensitive information when posting issues. You may replace these values with XXXXXX):

View File

@@ -1,9 +1,11 @@
DOKKU_VERSION ?= master
PROCFILE_VERSION ?= 0.4.0
SSHCOMMAND_URL ?= https://raw.githubusercontent.com/dokku/sshcommand/v0.7.0/sshcommand
PROCFILE_VERSION ?= 0.6.0
PLUGN_VERSION ?= 0.3.2
SSHCOMMAND_VERSION ?= 0.8.0
SSHCOMMAND_URL ?= https://github.com/dokku/sshcommand/releases/download/v${SSHCOMMAND_VERSION}/sshcommand_${SSHCOMMAND_VERSION}_linux_x86_64.tgz
PROCFILE_UTIL_URL ?= https://github.com/josegonzalez/go-procfile-util/releases/download/v${PROCFILE_VERSION}/procfile-util_${PROCFILE_VERSION}_linux_x86_64.tgz
PLUGN_URL ?= https://github.com/dokku/plugn/releases/download/v0.3.0/plugn_0.3.0_linux_x86_64.tgz
PLUGN_URL ?= https://github.com/dokku/plugn/releases/download/v${PLUGN_VERSION}/plugn_${PLUGN_VERSION}_linux_x86_64.tgz
SIGIL_URL ?= https://github.com/gliderlabs/sigil/releases/download/v0.4.0/sigil_0.4.0_Linux_x86_64.tgz
STACK_URL ?= https://github.com/gliderlabs/herokuish.git
PREBUILT_STACK_URL ?= gliderlabs/herokuish:latest
@@ -31,6 +33,7 @@ include common.mk
.PHONY: all apt-update install version copyfiles copyplugin man-db plugins dependencies sshcommand procfile-util plugn docker aufs stack count dokku-installer vagrant-acl-add vagrant-dokku go-build
include tests.mk
include package.mk
include deb.mk
include rpm.mk
include arch.mk
@@ -105,10 +108,11 @@ addman: help2man man-db
mandb
version:
mkdir -p ${DOKKU_LIB_ROOT}
ifeq ($(DOKKU_VERSION),master)
git describe --tags > ~dokku/VERSION 2> /dev/null || echo '~${DOKKU_VERSION} ($(shell date -uIminutes))' > ~dokku/VERSION
git describe --tags > ${DOKKU_LIB_ROOT}/VERSION 2>/dev/null || echo '~${DOKKU_VERSION} ($(shell date -uIminutes))' > ${DOKKU_LIB_ROOT}/VERSION
else
echo $(DOKKU_VERSION) > ~dokku/VERSION
echo $(DOKKU_VERSION) > ${DOKKU_LIB_ROOT}/STABLE_VERSION
endif
plugin-dependencies: plugn procfile-util
@@ -117,12 +121,15 @@ plugin-dependencies: plugn procfile-util
plugins: plugn procfile-util docker
sudo -E dokku plugin:install --core
dependencies: apt-update sshcommand plugn procfile-util docker help2man man-db sigil
dependencies: apt-update sshcommand plugn procfile-util docker help2man man-db sigil dos2unix
$(MAKE) -e stack
apt-update:
apt-get update -qq
dos2unix:
apt-get install -qq -y dos2unix
help2man:
apt-get install -qq -y help2man
@@ -130,8 +137,8 @@ man-db:
apt-get install -qq -y man-db
sshcommand:
wget -qO /usr/local/bin/sshcommand ${SSHCOMMAND_URL}
chmod +x /usr/local/bin/sshcommand
wget -qO /tmp/sshcommand_latest.tgz ${SSHCOMMAND_URL}
tar xzf /tmp/sshcommand_latest.tgz -C /usr/local/bin
sshcommand create dokku /usr/local/bin/dokku
procfile-util:

View File

@@ -13,8 +13,6 @@ Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen.
## Sponsors
See our list of past sponsors in the [SPONSORS](https://github.com/dokku/dokku/blob/master/SPONSORS.md) file.
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/dokku#sponsor)]
<a href="https://opencollective.com/dokku/sponsor/0/website" target="_blank"><img src="https://opencollective.com/dokku/sponsor/0/avatar.svg"></a>
@@ -98,8 +96,8 @@ A fresh VM running any of the following operating systems:
To install the latest stable release, run the following commands as a user who has access to `sudo`:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.2/bootstrap.sh
sudo DOKKU_TAG=v0.14.2 bash bootstrap.sh
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.3/bootstrap.sh
sudo DOKKU_TAG=v0.18.3 bash bootstrap.sh
```
You can then proceed to the ip address or domain name associated with your server to complete the web-based installation.

View File

@@ -1,7 +0,0 @@
#Sponsors
[Deis](http://deis.io)
[DigitalOcean](https://www.digitalocean.com/)
[Melvin Lammerts](http://dokku.net)

12
Vagrantfile vendored
View File

@@ -1,7 +1,7 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
BOX_NAME = ENV["BOX_NAME"] || "bento/ubuntu-14.04"
BOX_NAME = ENV["BOX_NAME"] || "bento/ubuntu-18.04"
BOX_CPUS = ENV["BOX_CPUS"] || "1"
BOX_MEMORY = ENV["BOX_MEMORY"] || "1024"
DOKKU_DOMAIN = ENV["DOKKU_DOMAIN"] || "dokku.me"
@@ -33,6 +33,10 @@ Vagrant::configure("2") do |config|
v.vmx["memsize"] = BOX_MEMORY
end
config.vm.provider :vmware_desktop do |v, override|
v.vmx["memsize"] = BOX_MEMORY
end
config.vm.define "empty", autostart: false
config.vm.define "dokku", primary: true do |vm|
@@ -49,7 +53,7 @@ Vagrant::configure("2") do |config|
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
end
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update > /dev/null && apt-get -qq -y install git > /dev/null && cd /root/dokku && #{make_cmd}"
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update >/dev/null && apt-get -qq -y install git >/dev/null && cd /root/dokku && #{make_cmd}"
vm.vm.provision :shell, :inline => "cd /root/dokku && make dokku-installer"
vm.vm.provision :shell do |s|
s.inline = <<-EOT
@@ -66,7 +70,7 @@ Vagrant::configure("2") do |config|
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
vm.vm.hostname = "#{DOKKU_DOMAIN}"
vm.vm.network :private_network, ip: DOKKU_IP
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update > /dev/null && apt-get -qq -y install git dos2unix > /dev/null"
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update >/dev/null && apt-get -qq -y install git dos2unix >/dev/null"
vm.vm.provision :shell, :inline => "cd /vagrant/ && export DOKKU_BRANCH=`git symbolic-ref -q --short HEAD 2>/dev/null` && export DOKKU_TAG=`git describe --tags --exact-match 2>/dev/null` && cd /root/ && cp /vagrant/bootstrap.sh ./ && dos2unix bootstrap.sh && bash bootstrap.sh"
end
@@ -92,7 +96,7 @@ Vagrant::configure("2") do |config|
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
vm.vm.hostname = "#{DOKKU_DOMAIN}"
vm.vm.network :private_network, ip: DOKKU_IP
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update > /dev/null && apt-get -qq -y install git > /dev/null && cd /root/dokku && #{make_cmd}"
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update >/dev/null && apt-get -qq -y install git >/dev/null && cd /root/dokku && #{make_cmd}"
vm.vm.provision :shell, :inline => "export IS_RELEASE=true && cd /root/dokku && make deb-all rpm-all"
end

View File

@@ -32,7 +32,13 @@ install-requirements() {
echo "--> Ensuring we have the proper dependencies"
case "$DOKKU_DISTRO" in
debian | ubuntu)
debian)
if ! dpkg -l | grep -q software-properties-common; then
apt-get update -qq >/dev/null
apt-get -qq -y install software-properties-common
fi
;;
ubuntu)
if ! dpkg -l | grep -q software-properties-common; then
apt-get update -qq >/dev/null
apt-get -qq -y install software-properties-common

View File

@@ -1,4 +1,4 @@
GO_REPO_ROOT := /go/src/github.com/dokku/dokku
BUILD_IMAGE := golang:1.9.1
BUILD_IMAGE := golang:1.12
.PHONY: build-in-docker build clean src-clean

View File

@@ -0,0 +1,6 @@
FROM ubuntu:14.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get -y install gcc git build-essential wget ruby-dev ruby1.9.1 lintian rpm help2man man-db
RUN command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc

View File

@@ -1,9 +1,9 @@
FROM ubuntu:14.04
FROM dokku/build-base:0.0.1
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get -y install gcc git build-essential wget ruby-dev ruby1.9.1 lintian rpm help2man man-db
RUN command -v fpm > /dev/null || sudo gem install fpm --no-ri --no-rdoc
RUN command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
ARG WORKDIR=/go/src/github.com/dokku/dokku

View File

@@ -1,9 +1,9 @@
FROM ubuntu:14.04
FROM dokku/build-base:0.0.1
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get -y install gcc git build-essential wget ruby-dev ruby1.9.1 lintian rpm help2man man-db
RUN command -v fpm > /dev/null || sudo gem install fpm --no-ri --no-rdoc
RUN command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
ARG GOLANG_VERSION
@@ -36,7 +36,7 @@ RUN PLUGIN_MAKE_TARGET=${PLUGIN_MAKE_TARGET} \
SKIP_GO_CLEAN=true \
make version copyfiles \
&& rm -rf plugins/common/*.go plugins/common/glide* plugins/common/vendor/ \
&& make deb-herokuish deb-dokku deb-plugn deb-sshcommand deb-sigil deb-dokku-update \
rpm-herokuish rpm-dokku rpm-plugn rpm-sshcommand rpm-sigil rpm-dokku-update
&& make deb-dokku deb-sigil \
rpm-dokku rpm-sigil
RUN ls -lha /tmp/

View File

@@ -1,9 +1,9 @@
FROM ubuntu:14.04
FROM dokku/build-base:0.0.1
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get -y install gcc git build-essential wget ruby-dev ruby1.9.1 lintian rpm help2man man-db
RUN command -v fpm > /dev/null || sudo gem install fpm --no-ri --no-rdoc
RUN command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
ARG WORKDIR=/go/src/github.com/dokku/dokku

8
contrib/dokku-docker-bin.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x && DOKKU_DOCKER_ENV="--env DOKKU_TRACE=on"
DOKKU_DOCKER_CONTAINER_NAME=${DOKKU_DOCKER_CONTAINER_NAME:=dokku}
# TODO: handle cases where we need a tty
# shellcheck disable=SC2086
docker exec $DOKKU_DOCKER_ENV -i "$DOKKU_DOCKER_CONTAINER_NAME" dokku "$@"

View File

@@ -10,7 +10,7 @@ import subprocess
import sys
import threading
VERSION = 'v0.14.2'
VERSION = 'v0.18.3'
hostname = ''
try:
@@ -37,6 +37,15 @@ if os.path.isfile(key_file):
except subprocess.CalledProcessError:
pass
ufw_display = 'block'
try:
command = "sudo ufw status"
ufw_output = subprocess.check_output(command, shell=True).strip()
if "inactive" in ufw_output:
ufw_display = 'none'
except subprocess.CalledProcessError:
ufw_display = 'none'
def check_boot():
if 'onboot' not in sys.argv:
@@ -77,6 +86,7 @@ def check_boot():
class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
content = PAGE.replace('{VERSION}', VERSION)
content = content.replace('{UFW_DISPLAY}', ufw_display)
content = content.replace('{HOSTNAME}', hostname)
content = content.replace('{AUTHORIZED_KEYS_LOCATION}', key_file)
content = content.replace('{ADMIN_KEYS}', "\n".join(admin_keys))
@@ -218,9 +228,9 @@ def main():
PAGE = """
<html>
<head>
<meta charset="utf-8" />
<title>Dokku Setup</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<style>
.bd-callout {
padding: 1.25rem;
@@ -294,6 +304,9 @@ PAGE = """
<small class="form-text text-muted">When enabled, Nginx will be run on port 80 and proxy requests to apps based on hostname.</small>
<small class="form-text text-muted">When disabled, a specific port will be setup for each application on first deploy, and requests to that port will be proxied to the relevant app.</small>
</div>
<div class="alert alert-warning small mt-3 d-{UFW_DISPLAY}" role="alert">
<strong>Warning:</strong> UFW is active. To allow traffic to specific ports, run <code>sudo ufw allow PORT</code> for the port in question.
</div>
<div class="bd-callout bd-callout-info">
<h5>What will app URLs look like?</h5>
<pre><code id="example">http://hostname:port</code></pre>
@@ -306,44 +319,59 @@ PAGE = """
<div id="error-output"></div>
<script>
var $ = document.querySelector.bind(document)
function setup() {
if ($.trim($("#key").val()) == "") {
if ($("#key").value.trim() == "") {
alert("Your admin public key cannot be blank.")
return
}
if ($.trim($("#hostname").val()) == "") {
if ($("#hostname").value.trim() == "") {
alert("Your hostname cannot be blank.")
return
}
data = $("#form").serialize()
$("input,textarea,button").prop("disabled", true);
$.post('/setup', data)
.done(function() {
$(".result").addClass('text-success');
$(".result").html("Success! Redirecting in 3 seconds. ..")
var data = new FormData($("#form"))
var inputs = [].slice.call(document.querySelectorAll("input, textarea, button"))
inputs.forEach(function (input) {
input.disabled = true
})
var result = $(".result")
fetch("/setup", {method: "POST", body: data})
.then(function(response) {
if (response.ok) {
return response.json()
} else {
throw new Error('Server returned error')
}
})
.then(function(response) {
result.classList.add("text-success");
result.textContent = "Success! Redirecting in 3 seconds. .."
setTimeout(function() {
window.location.href = "http://dokku.viewdocs.io/dokku~{VERSION}/deployment/application-deployment/";
}, 3000);
})
.fail(function(data) {
$(".result").addClass('text-danger');
$(".result").html("Something went wrong...")
$("#error-output").html(data.responseText)
});
.catch(function (error) {
result.classList.add("text-danger");
result.textContent = "Could not send the request"
})
}
function update() {
if ($("#vhost").is(":checked") && $("#hostname").val().match(/^(\d{1,3}\.){3}\d{1,3}$/)) {
if ($("#vhost").matches(":checked") && $("#hostname").value.match(/^(\d{1,3}\.){3}\d{1,3}$/)) {
alert("In order to use virtualhost naming, the hostname must not be an IP but a valid domain name.")
$("#vhost").prop('checked', false);
$("#vhost").checked = false;
}
if ($("#vhost").is(':checked')) {
$("#example").html("http://&lt;app-name&gt;."+$("#hostname").val())
if ($("#vhost").matches(':checked')) {
$("#example").textContent = "http://<app-name>."+$("#hostname").value
} else {
$("#example").html("http://"+$("#hostname").val()+":&lt;app-port&gt;")
$("#example").textContent = "http://"+$("#hostname").value+":<app-port>"
}
}
$("#vhost").change(update);
$("#hostname").change(update);
$("#vhost").addEventListener("change", update);
$("#hostname").addEventListener("input", update);
update();
</script>
</body>

View File

@@ -19,7 +19,7 @@
"sleep 30",
"echo '--> Updating apt repositories'",
"sudo apt-get update -qq > /dev/null",
"sudo apt-get update -qq >/dev/null",
"echo '--> Installing make requirement'",
"sudo apt-get -qq -y install build-essential",

View File

@@ -3,10 +3,10 @@ set -eo pipefail
[[ $TRACE ]] && set -x
readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)"
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXX")"
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXXXX")"
readonly DOKKU_GIT_REV="$(git rev-parse HEAD)"
trap 'rm -rf "$TMP_WORK_DIR" > /dev/null' RETURN INT TERM EXIT
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
log-info() {
# shellcheck disable=SC2034
@@ -24,7 +24,7 @@ log-fail() {
# shellcheck disable=SC2034
declare desc="Log fail formatter"
log-error "$*"
exit -1
exit 1
}
fn-build-dokku() {
@@ -49,7 +49,7 @@ fn-build-dokku() {
--build-arg IS_RELEASE="$IS_RELEASE" \
--build-arg PLUGIN_MAKE_TARGET="build" \
--build-arg GOLANG_VERSION="$GOLANG_VERSION" \
-f "contrib/build.Dockerfile" \
-f "contrib/build-dokku.Dockerfile" \
-t "$NAME" .
return "$?"
}
@@ -206,20 +206,22 @@ fn-repo-update() {
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" contrib/dokku-installer.py
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" debian/control
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" Dockerfile
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/advanced-usage/plugin-management.md
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/favicons/browserconfig.xml
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/favicons/manifest.json
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/style.css
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/development/release-process.md
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/home.html
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/getting-started/install/docker.md
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/getting-started/installation.md
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/home.html
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/template.html
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" README.md
if [[ "$RELEASE" == 'patch' ]]; then
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/versions.json
else
versions=$(python -c 'import json,sys;d=json.load(sys.stdin);d["max-versions"].append("'"${NEXT_VERSION}"'"); print json.dumps(d, indent=2, sort_keys=True)' <docs/assets/versions.json)
versions=$(python -c 'import json,sys;d=json.load(sys.stdin);d["max-versions"].append("'"${NEXT_VERSION}"'"); print(json.dumps(d, indent=2, sort_keys=True))' <docs/assets/versions.json)
echo "$versions" >docs/assets/versions.json
git add docs/assets/versions.json
fi
@@ -317,6 +319,13 @@ fn-require-bin() {
fi
}
fn-build-docker-image() {
declare desc="Builds the dokku docker image and tags it with the given version"
declare VERSION="$1"
docker build -t "dokku/dokku:$VERSION" .
docker push "dokku/dokku:$VERSION"
}
main() {
declare RELEASE="$1"
local CURRENT_VERSION NEXT_VERSION IS_RELEASE
@@ -354,10 +363,12 @@ main() {
fn-build-dokku "$IS_RELEASE" "$NEXT_VERSION" || log-fail "Error building package"
fn-extract-package "$IS_RELEASE" "dokku_${NEXT_VERSION}_amd64.deb" || log-fail "Error extracting deb package"
fn-extract-package "$IS_RELEASE" "dokku-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error extracting rpm package"
cp -f "build/dokku_${NEXT_VERSION}_amd64.deb" build/dokku.deb
if [[ "$RELEASE" != "build" ]]; then
fn-publish-package "$IS_RELEASE" "deb" "build/dokku_${NEXT_VERSION}_amd64.deb" || log-fail "Error publishing deb package"
fn-publish-package "$IS_RELEASE" "rpm" "build/dokku-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error publishing rpm package"
fn-build-docker-image "$NEXT_VERSION" || log-fail "Error building docker image"
fn-repo-push-tags "$IS_RELEASE"
fi

View File

@@ -3,10 +3,10 @@ set -eo pipefail
[[ $TRACE ]] && set -x
readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)"
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXX")"
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXXXX")"
readonly DOKKU_GIT_REV="$(git rev-parse HEAD)"
trap 'rm -rf "$TMP_WORK_DIR" > /dev/null' RETURN INT TERM EXIT
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
log-info() {
# shellcheck disable=SC2034
@@ -24,7 +24,7 @@ log-fail() {
# shellcheck disable=SC2034
declare desc="Log fail formatter"
log-error "$*"
exit -1
exit 1
}
fn-build-dokku() {
@@ -32,7 +32,7 @@ fn-build-dokku() {
pushd "$ROOT_DIR" >/dev/null
docker build \
-f "contrib/update-build.Dockerfile" \
-f "contrib/build-dokku-update.Dockerfile" \
-t dokku-update:build .
return "$?"
}

View File

@@ -3,10 +3,10 @@ set -eo pipefail
[[ $TRACE ]] && set -x
readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)"
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXX")"
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXXXX")"
readonly DOKKU_GIT_REV="$(git rev-parse HEAD)"
trap 'rm -rf "$TMP_WORK_DIR" > /dev/null' RETURN INT TERM EXIT
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
log-info() {
# shellcheck disable=SC2034
@@ -24,7 +24,7 @@ log-fail() {
# shellcheck disable=SC2034
declare desc="Log fail formatter"
log-error "$*"
exit -1
exit 1
}
fn-build-dokku() {
@@ -32,7 +32,7 @@ fn-build-dokku() {
pushd "$ROOT_DIR" >/dev/null
docker build \
-f "contrib/herokuish-build.Dockerfile" \
-f "contrib/build-herokuish.Dockerfile" \
-t herokuish:build .
return "$?"
}

View File

@@ -2,9 +2,9 @@
set -eo pipefail
[[ $TRACE ]] && set -x
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-plugin-release.XXXX")"
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-plugin-release.XXXXXX")"
trap 'rm -rf "$TMP_WORK_DIR" > /dev/null' RETURN INT TERM EXIT
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
log-info() {
# shellcheck disable=SC2034
@@ -22,7 +22,7 @@ log-fail() {
# shellcheck disable=SC2034
declare desc="Log fail formatter"
log-error "$*"
exit -1
exit 1
}
fn-github-download-release() {
@@ -53,7 +53,7 @@ fn-require-bin() {
}
main() {
local RELEASE="$1"
local RELEASE="$1" AWS_RELEASE="$2"
local CURRENT_VERSION FILENAME NEXT_VERSION ORG_REPO_NAME REPO_NAME major minor patch
if [[ -z "$RELEASE" ]]; then
@@ -91,6 +91,10 @@ EOF
fn-require-bin "git"
if [[ "$AWS_RELEASE" != "true" ]] && [[ "$AWS_RELEASE" != "false" ]]; then
local AWS_RELEASE=true
fi
if [[ "$CI" != "true" ]] && [[ -z "$DOKKU_PLUGIN_GITHUB_ACCESS_TOKEN" ]]; then
log-info "You are running this without a DOKKU_PLUGIN_GITHUB_ACCESS_TOKEN environment variable."
log-info "Doing so disables uploading releases to S3, which may be necessary for installing private plugins."
@@ -104,7 +108,7 @@ EOF
done
fi
if [[ -n "$DOKKU_PLUGIN_GITHUB_ACCESS_TOKEN" ]]; then
if [[ "$AWS_RELEASE" == "true" ]]; then
fn-require-bin "aws"
fn-require-bin "curl"
if [[ -z "$DOKKU_PLUGIN_S3_BUCKET" ]]; then
@@ -156,7 +160,7 @@ EOF
REPO_NAME="$(echo "$ORG_REPO_NAME" | cut -d'/' -f2)"
FILENAME="${REPO_NAME}-${NEXT_VERSION}.tar.gz"
if [[ -n "$DOKKU_PLUGIN_GITHUB_ACCESS_TOKEN" ]]; then
if [[ "$AWS_RELEASE" == "true" ]]; then
DOKKU_PLUGIN_S3_BUCKET="${DOKKU_PLUGIN_S3_BUCKET%/}"
DOKKU_PLUGIN_S3_PATH="${DOKKU_PLUGIN_S3_PATH%/}"
if [[ "$DOKKU_PLUGIN_S3_PATH" != "/" ]]; then

151
deb.mk
View File

@@ -2,7 +2,7 @@ BUILD_DIRECTORY ?= /tmp
HEROKUISH_DESCRIPTION = 'Herokuish uses Docker and Buildpacks to build applications like Heroku'
HEROKUISH_REPO_NAME ?= gliderlabs/herokuish
HEROKUISH_VERSION ?= 0.4.6
HEROKUISH_VERSION ?= 0.5.3
HEROKUISH_ARCHITECTURE = amd64
HEROKUISH_PACKAGE_NAME = herokuish_$(HEROKUISH_VERSION)_$(HEROKUISH_ARCHITECTURE).deb
@@ -16,29 +16,6 @@ DOKKU_UPDATE_VERSION ?= 0.1.0
DOKKU_UPDATE_ARCHITECTURE = amd64
DOKKU_UPDATE_PACKAGE_NAME = dokku-update_$(DOKKU_UPDATE_VERSION)_$(DOKKU_UPDATE_ARCHITECTURE).deb
define PLUGN_DESCRIPTION
Hook system that lets users extend your application with plugins
Plugin triggers are simply scripts that are executed by the system.
You can use any language you want, so long as the script is
executable and has the proper language requirements installed
endef
PLUGN_REPO_NAME ?= dokku/plugn
PLUGN_VERSION ?= 0.3.0
PLUGN_ARCHITECTURE = amd64
PLUGN_PACKAGE_NAME = plugn_$(PLUGN_VERSION)_$(PLUGN_ARCHITECTURE).deb
PLUGN_URL = https://github.com/dokku/plugn/releases/download/v$(PLUGN_VERSION)/plugn_$(PLUGN_VERSION)_linux_x86_64.tgz
define SSHCOMMAND_DESCRIPTION
Turn SSH into a thin client specifically for your app
Simplifies running a single command over SSH, and
manages authorized keys (ACL) and users in order to do so.
endef
SSHCOMMAND_REPO_NAME ?= dokku/sshcommand
SSHCOMMAND_VERSION ?= 0.7.0
SSHCOMMAND_ARCHITECTURE = amd64
SSHCOMMAND_PACKAGE_NAME = sshcommand_$(SSHCOMMAND_VERSION)_$(SSHCOMMAND_ARCHITECTURE).deb
SSHCOMMAND_URL ?= https://raw.githubusercontent.com/dokku/sshcommand/v$(SSHCOMMAND_VERSION)/sshcommand
define SIGIL_DESCRIPTION
Standalone string interpolator and template processor
Sigil is a command line tool for template processing
@@ -56,15 +33,13 @@ ifndef IS_RELEASE
IS_RELEASE = true
endif
export PLUGN_DESCRIPTION
export SIGIL_DESCRIPTION
export SSHCOMMAND_DESCRIPTION
.PHONY: install-from-deb deb-all deb-herokuish deb-dokku deb-dokku-update deb-plugn deb-setup deb-sshcommand deb-sigil
.PHONY: install-from-deb deb-all deb-herokuish deb-dokku deb-dokku-update deb-setup deb-sigil
install-from-deb:
@echo "--> Initial apt-get update"
sudo apt-get update -qq > /dev/null
sudo apt-get update -qq >/dev/null
sudo apt-get install -qq -y apt-transport-https
@echo "--> Installing docker"
@@ -72,19 +47,19 @@ install-from-deb:
@echo "--> Installing dokku"
wget -nv -O - https://packagecloud.io/dokku/dokku/gpgkey | apt-key add -
@echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ $(shell lsb_release -cs 2> /dev/null || echo "trusty") main" | sudo tee /etc/apt/sources.list.d/dokku.list
sudo apt-get update -qq > /dev/null
@echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ $(shell lsb_release -cs 2>/dev/null || echo "trusty") main" | sudo tee /etc/apt/sources.list.d/dokku.list
sudo apt-get update -qq >/dev/null
sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get install -yy dokku
deb-all: deb-setup deb-herokuish deb-dokku deb-plugn deb-sshcommand deb-sigil deb-dokku-update
deb-all: deb-setup deb-herokuish deb-dokku deb-sigil deb-dokku-update
mv $(BUILD_DIRECTORY)/*.deb .
@echo "Done"
deb-setup:
@echo "-> Updating deb repository and installing build requirements"
@sudo apt-get update -qq > /dev/null
@sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get install -qq -y gcc git build-essential wget ruby-dev ruby1.9.1 lintian > /dev/null 2>&1
@command -v fpm > /dev/null || sudo gem install fpm --no-ri --no-rdoc
@sudo apt-get update -qq >/dev/null
@sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get install -qq -y gcc git build-essential wget ruby-dev ruby1.9.1 lintian >/dev/null 2>&1
@command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
@ssh -o StrictHostKeyChecking=no git@github.com || true
deb-herokuish:
@@ -95,9 +70,9 @@ deb-herokuish:
@echo "#!/usr/bin/env bash" >> /tmp/tmp/post-install
@echo "sleep 5" >> /tmp/tmp/post-install
@echo "echo 'Importing herokuish into docker (around 5 minutes)'" >> /tmp/tmp/post-install
@echo 'if [[ ! -z $${http_proxy+x} ]]; then echo "See the docker pull docs for proxy configuration"; fi' >> /tmp/tmp/post-install
@echo 'if [[ ! -z $${https_proxy+x} ]]; then echo "See the docker pull docs for proxy configuration"; fi' >> /tmp/tmp/post-install
@echo 'if [[ ! -z $${BUILDARGS+x} ]]; then echo "See the docker pull docs for proxy configuration"; fi' >> /tmp/tmp/post-install
@echo 'if [[ -n $${http_proxy+x} ]]; then echo "See the docker pull docs for proxy configuration"; fi' >> /tmp/tmp/post-install
@echo 'if [[ -n $${https_proxy+x} ]]; then echo "See the docker pull docs for proxy configuration"; fi' >> /tmp/tmp/post-install
@echo 'if [[ -n $${BUILDARGS+x} ]]; then echo "See the docker pull docs for proxy configuration"; fi' >> /tmp/tmp/post-install
@echo "sudo docker pull gliderlabs/herokuish:v${HEROKUISH_VERSION} && sudo docker tag gliderlabs/herokuish:v${HEROKUISH_VERSION} gliderlabs/herokuish:latest" >> /tmp/tmp/post-install
@echo "-> Creating $(HEROKUISH_PACKAGE_NAME)"
@@ -113,53 +88,20 @@ deb-herokuish:
--license 'MIT License' \
.
deb-dokku:
rm -rf /tmp/tmp /tmp/build dokku_*_$(DOKKU_ARCHITECTURE).deb
mkdir -p /tmp/tmp /tmp/build
deb-dokku: /tmp/build-dokku/var/lib/dokku/GIT_REV
rm -f $(BUILD_DIRECTORY)/dokku_*_$(DOKKU_ARCHITECTURE).deb
cp -r debian /tmp/build/DEBIAN
mkdir -p /tmp/build/usr/share/bash-completion/completions
mkdir -p /tmp/build/usr/bin
mkdir -p /tmp/build/usr/share/doc/dokku
mkdir -p /tmp/build/usr/share/dokku/contrib
mkdir -p /tmp/build/usr/share/lintian/overrides
mkdir -p /tmp/build/usr/share/man/man1
mkdir -p /tmp/build/var/lib/dokku/core-plugins/available
cp dokku /tmp/build/usr/bin
cp LICENSE /tmp/build/usr/share/doc/dokku/copyright
cp contrib/bash-completion /tmp/build/usr/share/bash-completion/completions/dokku
find . -name ".DS_Store" -depth -exec rm {} \;
$(MAKE) go-build
cp common.mk /tmp/build/var/lib/dokku/core-plugins/common.mk
cp -r plugins/* /tmp/build/var/lib/dokku/core-plugins/available
find plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do cd /tmp/build/var/lib/dokku/core-plugins/available/$$plugin && if [ -e Makefile ]; then $(MAKE) src-clean; fi; done
find plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do touch /tmp/build/var/lib/dokku/core-plugins/available/$$plugin/.core; done
rm /tmp/build/var/lib/dokku/core-plugins/common.mk
$(MAKE) help2man
$(MAKE) addman
cp /usr/local/share/man/man1/dokku.1 /tmp/build/usr/share/man/man1/dokku.1
gzip -9 /tmp/build/usr/share/man/man1/dokku.1
cp contrib/dokku-installer.py /tmp/build/usr/share/dokku/contrib
ifeq ($(DOKKU_VERSION),master)
git describe --tags > /tmp/build/var/lib/dokku/VERSION
else
echo $(DOKKU_VERSION) > /tmp/build/var/lib/dokku/VERSION
endif
cat /tmp/build/var/lib/dokku/VERSION | cut -d '-' -f 1 | cut -d 'v' -f 2 > /tmp/build/var/lib/dokku/STABLE_VERSION
cat /tmp/build-dokku/var/lib/dokku/VERSION | cut -d '-' -f 1 | cut -d 'v' -f 2 > /tmp/build-dokku/var/lib/dokku/STABLE_VERSION
ifneq (,$(findstring false,$(IS_RELEASE)))
sed -i.bak -e "s/^/`date +%s`:/" /tmp/build/var/lib/dokku/STABLE_VERSION && rm /tmp/build/var/lib/dokku/STABLE_VERSION.bak
sed -i.bak -e "s/^/`date +%s`:/" /tmp/build-dokku/var/lib/dokku/STABLE_VERSION && rm /tmp/build-dokku/var/lib/dokku/STABLE_VERSION.bak
endif
rm -f /tmp/build/DEBIAN/lintian-overrides
cp debian/lintian-overrides /tmp/build/usr/share/lintian/overrides/dokku
ifdef DOKKU_GIT_REV
echo "$(DOKKU_GIT_REV)" > /tmp/build/var/lib/dokku/GIT_REV
else
git rev-parse HEAD > /tmp/build/var/lib/dokku/GIT_REV
endif
sed -i.bak "s/^Version: .*/Version: `cat /tmp/build/var/lib/dokku/STABLE_VERSION`/g" /tmp/build/DEBIAN/control && rm /tmp/build/DEBIAN/control.bak
dpkg-deb --build /tmp/build "$(BUILD_DIRECTORY)/dokku_`cat /tmp/build/var/lib/dokku/VERSION`_$(DOKKU_ARCHITECTURE).deb"
lintian "$(BUILD_DIRECTORY)/dokku_`cat /tmp/build/var/lib/dokku/VERSION`_$(DOKKU_ARCHITECTURE).deb"
cp -r debian /tmp/build-dokku/DEBIAN
rm -f /tmp/build-dokku/DEBIAN/lintian-overrides
cp debian/lintian-overrides /tmp/build-dokku/usr/share/lintian/overrides/dokku
sed -i.bak "s/^Version: .*/Version: `cat /tmp/build-dokku/var/lib/dokku/STABLE_VERSION`/g" /tmp/build-dokku/DEBIAN/control && rm /tmp/build-dokku/DEBIAN/control.bak
dpkg-deb --build /tmp/build-dokku "$(BUILD_DIRECTORY)/dokku_`cat /tmp/build-dokku/var/lib/dokku/VERSION`_$(DOKKU_ARCHITECTURE).deb"
lintian "$(BUILD_DIRECTORY)/dokku_`cat /tmp/build-dokku/var/lib/dokku/VERSION`_$(DOKKU_ARCHITECTURE).deb"
deb-dokku-update:
rm -rf /tmp/dokku-update*.deb dokku-update*.deb
@@ -175,53 +117,6 @@ deb-dokku-update:
contrib/dokku-update=/usr/local/bin/dokku-update \
contrib/dokku-update-version=/var/lib/dokku-update/VERSION
deb-plugn:
rm -rf /tmp/tmp /tmp/build $(PLUGN_PACKAGE_NAME)
mkdir -p /tmp/tmp /tmp/build /tmp/build/usr/bin
@echo "-> Downloading package"
wget -q -O /tmp/tmp/plugn-$(PLUGN_VERSION).tgz $(PLUGN_URL)
cd /tmp/tmp/ && tar zxf /tmp/tmp/plugn-$(PLUGN_VERSION).tgz
@echo "-> Copying files into place"
cp /tmp/tmp/plugn /tmp/build/usr/bin/plugn && chmod +x /tmp/build/usr/bin/plugn
@echo "-> Creating $(PLUGN_PACKAGE_NAME)"
sudo fpm -t deb -s dir -C /tmp/build -n plugn \
--version $(PLUGN_VERSION) \
--architecture $(PLUGN_ARCHITECTURE) \
--package $(BUILD_DIRECTORY)/$(PLUGN_PACKAGE_NAME) \
--url "https://github.com/$(PLUGN_REPO_NAME)" \
--maintainer "Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>" \
--category utils \
--description "$$PLUGN_DESCRIPTION" \
--license 'MIT License' \
.
deb-sshcommand:
rm -rf /tmp/tmp /tmp/build $(SSHCOMMAND_PACKAGE_NAME)
mkdir -p /tmp/tmp /tmp/build /tmp/build/usr/local/bin
@echo "-> Downloading package"
wget -q -O /tmp/tmp/sshcommand-$(SSHCOMMAND_VERSION) $(SSHCOMMAND_URL)
@echo "-> Copying files into place"
mkdir -p "/tmp/build/usr/local/bin"
cp /tmp/tmp/sshcommand-$(SSHCOMMAND_VERSION) /tmp/build/usr/local/bin/sshcommand
chmod +x /tmp/build/usr/local/bin/sshcommand
@echo "-> Creating $(SSHCOMMAND_PACKAGE_NAME)"
sudo fpm -t deb -s dir -C /tmp/build -n sshcommand \
--version $(SSHCOMMAND_VERSION) \
--architecture $(SSHCOMMAND_ARCHITECTURE) \
--package $(BUILD_DIRECTORY)/$(SSHCOMMAND_PACKAGE_NAME) \
--url "https://github.com/$(SSHCOMMAND_REPO_NAME)" \
--maintainer "Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>" \
--category admin \
--description "$$SSHCOMMAND_DESCRIPTION" \
--license 'MIT License' \
.
deb-sigil:
rm -rf /tmp/tmp /tmp/build $(SIGIL_PACKAGE_NAME)
mkdir -p /tmp/tmp /tmp/build /tmp/build/usr/bin

4
debian/control vendored
View File

@@ -1,9 +1,9 @@
Package: dokku
Version: 0.14.2
Version: 0.18.3
Section: web
Priority: optional
Architecture: amd64
Depends: locales, git, make, curl, gcc, man-db, netcat, sshcommand (>= 0.6.0), gliderlabs-sigil, docker-engine-cs (>= 1.7.1) | docker-engine (>= 1.7.1) | docker-io (>= 1.7.1) | docker.io (>= 1.7.1) | docker-ce | docker-ee, net-tools, software-properties-common, procfile-util, python-software-properties | python3-software-properties, rsyslog
Depends: locales, git, curl, man-db, netcat, sshcommand (>= 0.6.0), gliderlabs-sigil, docker-engine-cs (>= 1.7.1) | docker-engine (>= 1.7.1) | docker-io (>= 1.7.1) | docker.io (>= 1.7.1) | docker-ce | docker-ee, net-tools, software-properties-common, procfile-util, python-software-properties | python3-software-properties, rsyslog, dos2unix
Recommends: herokuish (>= 0.3.4), parallel, dokku-update
Pre-Depends: nginx (>= 1.8.0) | openresty, dnsutils, cgroupfs-mount | cgroup-lite, plugn (>= 0.3.0), sudo, python2.7, debconf
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>

212
debian/postinst vendored
View File

@@ -26,6 +26,115 @@ call-sshcommand() {
fi
}
setup-user() {
echo "Setting up dokku user"
call-sshcommand create dokku /usr/bin/dokku
egrep -i "^docker" /etc/group || groupadd docker
usermod -aG docker dokku
mkdir -p "$DOKKU_ROOT/.ssh" "$DOKKU_ROOT/.dokkurc"
touch "$DOKKU_ROOT/.ssh/authorized_keys"
chown -R dokku:dokku "$DOKKU_ROOT/.ssh" "${DOKKU_ROOT}/.dokkurc"
}
setup-storage() {
echo "Setting up storage directories"
mkdir -p "${DOKKU_LIB_ROOT}/data" "${DOKKU_LIB_ROOT}/data/storage"
chown dokku:dokku "${DOKKU_LIB_ROOT}/data"
}
setup-plugins() {
echo "Setting up plugin directories"
# should be replaced by `plugn init`
mkdir -p "${DOKKU_LIB_ROOT}/core-plugins/available" "${DOKKU_LIB_ROOT}/plugins/available"
mkdir -p "${DOKKU_LIB_ROOT}/core-plugins/enabled" "${DOKKU_LIB_ROOT}/plugins/enabled"
touch "${DOKKU_LIB_ROOT}/core-plugins/config.toml" "${DOKKU_LIB_ROOT}/plugins/config.toml"
echo "Migrating old plugins"
find ${DOKKU_LIB_ROOT}/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
if [ "$plugin" = "available" ] || [ "$plugin" = "enabled" ]; then
continue
elif [ -f ${DOKKU_LIB_ROOT}/plugins/$plugin/.core ]; then
rm -rf ${DOKKU_LIB_ROOT}/plugins/$plugin
elif [ ! -d ${DOKKU_LIB_ROOT}/plugins/available/$plugin ]; then
mv ${DOKKU_LIB_ROOT}/plugins/$plugin ${DOKKU_LIB_ROOT}/plugins/available
fi
done
db_get "dokku/nginx_enable"
echo "Enabling all core plugins"
find "${DOKKU_LIB_ROOT}/core-plugins/available" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
if [ "$plugin" = "nginx-vhosts" ] && [ "$RET" = "false" ]; then
echo "Skipping enable of nginx-vhosts plugin"
continue
elif [ ! -d "${DOKKU_LIB_ROOT}/plugins/available/$plugin" ]; then
ln -s "${DOKKU_LIB_ROOT}/core-plugins/available/$plugin" "${DOKKU_LIB_ROOT}/plugins/available/$plugin"
PLUGIN_PATH="${DOKKU_LIB_ROOT}/core-plugins" plugn enable "$plugin"
PLUGIN_PATH="${DOKKU_LIB_ROOT}/plugins" plugn enable "$plugin"
fi
done
find -L "${DOKKU_LIB_ROOT}" -type l -delete
chown dokku:dokku -R "${DOKKU_LIB_ROOT}/plugins" "${DOKKU_LIB_ROOT}/core-plugins"
echo "Install all core plugins"
dokku plugin:install --core
}
setup-sshcommand() {
echo "Ensure proper sshcommand path"
echo '/usr/bin/dokku' >"${DOKKU_ROOT}/.sshcommand"
if [[ -f .ssh/authorized_keys ]]; then
sed -i.bak 's#/usr/local/bin/dokku#/usr/bin/dokku#' "${DOKKU_ROOT}/.ssh/authorized_keys"
rm "${DOKKU_ROOT}/.ssh/authorized_keys"
fi
}
setup-dokku-installer() {
if [[ -f /etc/nginx/conf.d/dokku-installer.conf ]]; then
echo "Setting up dokku-installer"
/usr/share/dokku/contrib/dokku-installer.py onboot
if command -v systemctl &>/dev/null; then
echo "Enabling dokku-installer"
systemctl enable dokku-installer
fi
installer_status="$(service dokku-installer status 2>/dev/null || true)"
if echo $installer_status | grep -Eq "(inactive|waiting)" >/dev/null; then
echo "Starting dokku-installer"
service dokku-installer start || echo "Unable to start dokku-installer"
fi
fi
}
dpkg-handling() {
db_get "dokku/web_config"
if [ "$RET" = "true" ]; then
db_stop
exit 0
fi
if [ -f "${DOKKU_ROOT}/VHOST" ]; then
echo "VHOST file detected, skipping modification"
else
db_get "dokku/vhost_enable"
if [ "$RET" = "true" ]; then
db_get "dokku/hostname"
echo "Setting VHOST contents to $RET"
echo "$RET" >"${DOKKU_ROOT}/VHOST"
fi
fi
db_get "dokku/hostname"
echo "$RET" >"${DOKKU_ROOT}/HOSTNAME"
if [ -z "${DEBCONF_RECONFIGURE}" ]; then
db_get "dokku/key_file"
if [ -f "$RET" ]; then
call-sshcommand acl-add dokku default <"$RET" || true
fi
fi
}
case "$1" in
abort-upgrade | abort-remove | abort-deconfigure) ;;
@@ -33,103 +142,16 @@ case "$1" in
configure)
mandb
[ ! -x /usr/bin/docker.io ] || ln -sf /usr/bin/docker.io /usr/local/bin/docker
modprobe aufs || echo "WARNING: Restart server to finish installing dokku!"
call-sshcommand create dokku /usr/bin/dokku
egrep -i "^docker" /etc/group || groupadd docker
usermod -aG docker dokku
echo "Setting up storage directories"
mkdir -p ${DOKKU_LIB_ROOT}/data ${DOKKU_LIB_ROOT}/data/storage
chown dokku:dokku ${DOKKU_LIB_ROOT}/data ${DOKKU_LIB_ROOT}/data/storage
echo "Setting up plugin directories"
# should be replaced by `plugn init`
mkdir -p ${DOKKU_LIB_ROOT}/core-plugins/available ${DOKKU_LIB_ROOT}/plugins/available
mkdir -p ${DOKKU_LIB_ROOT}/core-plugins/enabled ${DOKKU_LIB_ROOT}/plugins/enabled
touch ${DOKKU_LIB_ROOT}/core-plugins/config.toml ${DOKKU_LIB_ROOT}/plugins/config.toml
echo "Migrating old plugins"
find ${DOKKU_LIB_ROOT}/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
if [ "$plugin" = "available" ] || [ "$plugin" = "enabled" ]; then
continue
elif [ -f ${DOKKU_LIB_ROOT}/plugins/$plugin/.core ]; then
rm -rf ${DOKKU_LIB_ROOT}/plugins/$plugin
elif [ ! -d ${DOKKU_LIB_ROOT}/plugins/available/$plugin ]; then
mv ${DOKKU_LIB_ROOT}/plugins/$plugin ${DOKKU_LIB_ROOT}/plugins/available
fi
done
db_get "dokku/nginx_enable"
echo "Enabling all core plugins"
find ${DOKKU_LIB_ROOT}/core-plugins/available -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
if [ "$plugin" = "nginx-vhosts" ] && [ "$RET" = "false" ]; then
echo "Skipping enable of nginx-vhosts plugin"
continue
elif [ ! -d ${DOKKU_LIB_ROOT}/plugins/available/$plugin ]; then
ln -s ${DOKKU_LIB_ROOT}/core-plugins/available/$plugin ${DOKKU_LIB_ROOT}/plugins/available/$plugin
PLUGIN_PATH=${DOKKU_LIB_ROOT}/core-plugins plugn enable $plugin
PLUGIN_PATH=${DOKKU_LIB_ROOT}/plugins plugn enable $plugin
fi
done
find -L ${DOKKU_LIB_ROOT} -type l -delete
chown dokku:dokku -R ${DOKKU_LIB_ROOT}/plugins ${DOKKU_LIB_ROOT}/core-plugins
echo "Ensure proper sshcommand path"
echo '/usr/bin/dokku' >"${DOKKU_ROOT}/.sshcommand"
if [[ -f .ssh/authorized_keys ]]; then
sed -i.bak 's#/usr/local/bin/dokku#/usr/bin/dokku#' "${DOKKU_ROOT}/.ssh/authorized_keys"
rm "${DOKKU_ROOT}/.ssh/authorized_keys"
if [[ -f /sbin/modprobe ]]; then
modprobe aufs || echo "WARNING: Restart server to finish installing dokku!"
fi
echo "Install all core plugins"
dokku plugin:install --core
rm -f ${DOKKU_ROOT}/VERSION
cp ${DOKKU_LIB_ROOT}/STABLE_VERSION ${DOKKU_ROOT}/VERSION
if [[ -f /etc/nginx/conf.d/dokku-installer.conf ]]; then
echo "Setting up dokku-installer"
/usr/share/dokku/contrib/dokku-installer.py onboot
if command -v systemctl &>/dev/null; then
echo "Enabling dokku-installer"
systemctl enable dokku-installer
fi
installer_status="$(service dokku-installer status 2>/dev/null || true)"
if echo $installer_status | grep -Eq "(inactive|waiting)" >/dev/null; then
echo "Starting dokku-installer"
service dokku-installer start || echo "Unable to start dokku-installer"
fi
fi
db_get "dokku/web_config"
if [ "$RET" = "true" ]; then
db_stop
exit 0
fi
if [ -f "${DOKKU_ROOT}/VHOST" ]; then
echo "VHOST file detected, skipping modification"
else
db_get "dokku/vhost_enable"
if [ "$RET" = "true" ]; then
db_get "dokku/hostname"
echo "Setting VHOST contents to $RET"
echo "$RET" >"${DOKKU_ROOT}/VHOST"
fi
fi
db_get "dokku/hostname"
echo "$RET" >"${DOKKU_ROOT}/HOSTNAME"
if [ -z "${DEBCONF_RECONFIGURE}" ]; then
db_get "dokku/key_file"
if [ -f "$RET" ]; then
call-sshcommand acl-add dokku default <"$RET" || true
fi
fi
setup-user
setup-storage
setup-plugins
setup-sshcommand
setup-dokku-installer
dpkg-handling
;;
*)

View File

@@ -0,0 +1,4 @@
PATH=/usr/local/bin:/usr/bin:/bin
SHELL=/bin/bash
*/5 * * * * root /usr/bin/dokku ps:retire >> /var/log/dokku/retire.log 2>&1

View File

@@ -0,0 +1,9 @@
/var/log/services/* {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
}

View File

@@ -0,0 +1,62 @@
#!/bin/bash
set -eo pipefail
log-info() {
declare desc="Log info formatter"
echo " $*" 1>&2
}
log-fail() {
declare desc="Log fail formatter"
echo "! $*" 1>&2
exit 1
}
main() {
if [[ ! -d /mnt/dokku ]]; then
log-info "Creating missing /mnt/dokku"
mkdir -p /mnt/dokku
fi
directories=("/etc/ssh" "/home/dokku" "/var/lib/dokku/config" "/var/lib/dokku/data")
for dir in "${directories[@]}"; do
if [[ ! -e "$dir" ]]; then
log-info "Copying ${dir} skel into place"
mkdir -p "/mnt/dokku${dir}"
rsync -a "/skel${dir}/" "${dir}/" || log-fail "Unable to copy ${dir} skel into place"
fi
# chown mount directories to "dokku:dokku"
if [[ "$dir" != "/etc/ssh" ]]; then
find "$dir" -print0 | xargs -0 chown -h dokku:dokku
fi
done
if [[ -f /mnt/dokku/plugin-list ]]; then
while read line; do
dokku plugin:install "$(echo "$line" | awk '{print $2}')" "$(echo "$line" | cut -d':' -f1)"
done </mnt/dokku/plugin-list
fi
if [[ -n "$DOKKU_HOSTNAME" ]]; then
echo "dokku dokku/hostname string $DOKKU_HOSTNAME" | debconf-set-selections
echo "dokku dokku/vhost_enable boolean true" | debconf-set-selections
dokku --quiet domains:set-global "$DOKKU_HOSTNAME"
fi
if [[ -x /usr/local/bin/docker ]]; then
mkdir -p /home/dokku/.dokkurc
echo "export DOCKER_BIN=/usr/local/bin/docker" >"/home/dokku/.dokkurc/DOCKER_BIN"
fi
if [[ ! -f /mnt/dokku/etc/nginx/dhparam.pem ]]; then
mkdir -p /mnt/dokku/etc/nginx
openssl dhparam -out /mnt/dokku/etc/nginx/dhparam.pem 2048
fi
cp -f /mnt/dokku/etc/nginx/dhparam.pem /etc/nginx/dhparam.pem
chown root:root /etc/nginx/dhparam.pem
chown root:root /etc/nginx/conf.d
}
main "$@"

View File

@@ -0,0 +1,15 @@
#!/bin/bash
exec >>/var/log/services/dokku-restore
exec 2>&1
if [[ "$1" -ne 0 ]]; then
echo "Error restoring dokku apps! Retrying in 30 seconds..."
exec sleep 30
exit 0
fi
echo "Done restoring dokku apps."
exec sleep infinity
exit 0

View File

@@ -0,0 +1,9 @@
#!/bin/bash
exec >>/var/log/services/dokku-restore
exec 2>&1
echo "Running dokku-restore"
cd /tmp || exit 1
exec dokku ps:restore

View File

@@ -0,0 +1,7 @@
#!/bin/bash
exec >>/var/log/services/nginx
exec 2>&1
echo "Running nginx"
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"

View File

@@ -0,0 +1,7 @@
#!/bin/bash
exec >>/var/log/services/rsyslog
exec 2>&1
echo "Running rsyslog"
exec /usr/sbin/rsyslogd -n

View File

@@ -0,0 +1 @@
dokku ALL=NOPASSWD:SETENV:/usr/bin/docker

20
docker/usr/local/bin/docker Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -eo pipefail
[[ $TRACE ]] && set -x
main() {
declare desc="re-runs docker commands as sudo"
local DOCKER_BIN=""
if [[ -x "/usr/bin/docker" ]]; then
DOCKER_BIN="/usr/bin/docker"
fi
if [[ -z "$DOCKER_BIN" ]]; then
echo "! No docker binary found" 1>&2
exit 1
fi
sudo -E "$DOCKER_BIN" "$@"
}
main "$@"

View File

@@ -43,7 +43,7 @@ Dokku provides limited support for the `app.json` manifest from Heroku (document
- `scripts.dokku.predeploy`: This is run _after_ an app's docker image is built, but _before_ any containers are scheduled. Changes made to your image are committed at this phase.
- `scripts.dokku.postdeploy`: This is run _after_ an app's containers are scheduled. Changes made to your image are *not* committed at this phase.
For buildpack-based deployments, the location of the `app.json` file should be at the root of your repository. Dockefile-based app deploys should have the `app.json` in the configured `WORKDIR` directory; otherwise Dokku defaults to the buildpack app behavior of looking in `/app`.
For buildpack-based deployments, the location of the `app.json` file should be at the root of your repository. Dockerfile-based app deploys should have the `app.json` in the configured `WORKDIR` directory; otherwise Dokku defaults to the buildpack app behavior of looking in `/app`.
> Warning: Any failed `app.json` deployment task will fail the deploy. In the case of either phase, a failure will not affect any running containers.

View File

@@ -44,7 +44,7 @@ dokku docker-options:add node-js-app run "-v /var/log/node-js-app:/app/logs"
dokku docker-options:remove node-js-app run "-v /var/log/node-js-app:/app/logs"
```
### Displaying docker-options reports about an app
### Displaying docker-options reports for an app
> New as of 0.8.1
@@ -77,9 +77,9 @@ dokku docker-options:report node-js-app
```
=====> node-js-app docker options information
Storage build mounts:
Storage deploy mounts: -v /var/log/node-js-app:/app/logs
Storage run mounts: -v /var/log/node-js-app:/app/logs
Docker options build:
Docker options deploy: -v /var/log/node-js-app:/app/logs
Docker options run: -v /var/log/node-js-app:/app/logs
```
You can pass flags which will output only the value of the specific information you want. For example:
@@ -88,7 +88,6 @@ You can pass flags which will output only the value of the specific information
dokku docker-options:report node-js-app --docker-options-build
```
## Advanced usage
In your applications folder `/home/dokku/app_name` create a file called `DOCKER_OPTIONS_RUN` (or `DOCKER_OPTIONS_BUILD` or `DOCKER_OPTIONS_DEPLOY`).

View File

@@ -65,7 +65,7 @@ dokku storage:mount app-name /var/lib/dokku/data/storage/node-js-app:/app/storag
You can mount one or more directories as desired by following the above pattern.
### Displaying storage reports about an app
### Displaying storage reports for an app
> New as of 0.8.1

View File

@@ -8,6 +8,7 @@ plugin:enable <name> # Enable a previously disabled plugin
plugin:install [--core|git-url [--committish tag|branch|commit|--name custom-plugin-name]] # Optionally download git-url (with custom tag/committish) & run install trigger for active plugins (or only core ones)
plugin:install-dependencies [--core] # Run install-dependencies trigger for active plugins (or only core ones)
plugin:list # Print active plugins
plugin:trigger <args...>. # Trigger an arbitrary plugin hook
plugin:uninstall <name> # Uninstall a plugin (third-party only)
plugin:update [name [committish]] # Optionally update named plugin from git (with custom tag/committish) & run update trigger for active plugins
```
@@ -23,39 +24,43 @@ dokku plugins-install
## Usage
You can list all installed plugins using the `plugin` command:
You can list all installed plugins using the `plugin:list` command:
```shell
dokku plugin
dokku plugin:list
```
```
plugn: dev
00_dokku-standard 0.14.2 enabled dokku core standard plugin
20_events 0.14.2 enabled dokku core events logging plugin
apps 0.14.2 enabled dokku core apps plugin
build-env 0.14.2 enabled dokku core build-env plugin
certs 0.14.2 enabled dokku core certificate management plugin
checks 0.14.2 enabled dokku core checks plugin
common 0.14.2 enabled dokku core common plugin
config 0.14.2 enabled dokku core config plugin
docker-options 0.14.2 enabled dokku core docker-options plugin
domains 0.14.2 enabled dokku core domains plugin
enter 0.14.2 enabled dokku core enter plugin
git 0.14.2 enabled dokku core git plugin
logs 0.14.2 enabled dokku core logs plugin
named-containers 0.14.2 enabled dokku core named containers plugin
network 0.14.2 enabled dokku core network plugin
nginx-vhosts 0.14.2 enabled dokku core nginx-vhosts plugin
plugin 0.14.2 enabled dokku core plugin plugin
proxy 0.14.2 enabled dokku core proxy plugin
ps 0.14.2 enabled dokku core ps plugin
repo 0.14.2 enabled dokku core repo plugin
shell 0.14.2 enabled dokku core shell plugin
ssh-keys 0.14.2 enabled dokku core ssh-keys plugin
storage 0.14.2 enabled dokku core storage plugin
tags 0.14.2 enabled dokku core tags plugin
tar 0.14.2 enabled dokku core tar plugin
00_dokku-standard 0.18.3 enabled dokku core standard plugin
20_events 0.18.3 enabled dokku core events logging plugin
app-json 0.18.3 enabled dokku core app-json plugin
apps 0.18.3 enabled dokku core apps plugin
build-env 0.18.3 enabled dokku core build-env plugin
buildpacks 0.18.3 enabled dokku core buildpacks plugin
certs 0.18.3 enabled dokku core certificate management plugin
checks 0.18.3 enabled dokku core checks plugin
common 0.18.3 enabled dokku core common plugin
config 0.18.3 enabled dokku core config plugin
docker-options 0.18.3 enabled dokku core docker-options plugin
domains 0.18.3 enabled dokku core domains plugin
enter 0.18.3 enabled dokku core enter plugin
git 0.18.3 enabled dokku core git plugin
logs 0.18.3 enabled dokku core logs plugin
network 0.18.3 enabled dokku core network plugin
nginx-vhosts 0.18.3 enabled dokku core nginx-vhosts plugin
plugin 0.18.3 enabled dokku core plugin plugin
proxy 0.18.3 enabled dokku core proxy plugin
ps 0.18.3 enabled dokku core ps plugin
repo 0.18.3 enabled dokku core repo plugin
resource 0.18.3 enabled dokku core resource plugin
scheduler-docker-local 0.18.3 enabled dokku core scheduler-docker-local plugin
shell 0.18.3 enabled dokku core shell plugin
ssh-keys 0.18.3 enabled dokku core ssh-keys plugin
storage 0.18.3 enabled dokku core storage plugin
tags 0.18.3 enabled dokku core tags plugin
tar 0.18.3 enabled dokku core tar plugin
trace 0.18.3 enabled dokku core trace plugin
```
Installing a plugin is easy as well using the `plugin:install` command. This command will also trigger the `install` pluginhook on all existing plugins.

View File

@@ -0,0 +1,304 @@
# Resource Management
> New as of 0.15.0
```
resource:limit [--process-type <process-type>] [RESOURCE_OPTS...] <app> # Limit resources for a given app/process-type combination
resource:limit-clear [--process-type <process-type>] <app> # Limit resources for a given app/process-type combination
resource:report [<app>] [<flag>] # Displays a resource report for one or more apps
resource:reserve [--process-type <process-type>] [RESOURCE_OPTS...] <app> # Reserve resources for a given app/process-type combination
resource:reserve-clear [--process-type <process-type>] <app> # Reserve resources for a given app/process-type combination
```
The resource plugin is meant to allow users to limit or reserve resources for a given app/process-type combination.
## Usage
By default, Dokku allows unlimited resource access to apps deployed on a server. In some cases, it may be desirable to limit this on a per-app or per-process-type basis. The `resource` plugin allows management of both resource "limits" and resource "reservations", where each resource request type has specific meaning to the scheduler in use for a given app.
> The meaning of a values and it's units are specific to the scheduler in use for a given app. If a scheduler does not support a given resource type combination, it will be ignored. All resource commands require an app rebuild or deploy in order to take effect.
Valid resource options include:
- `--cpu`
- `--memory`
- `--memory-swap`
- `--network`
- `--network-ingress`
- `--network-egress`
Resource limits and reservations are applied only during the `run` and `deploy` phases of an application, and will not impact the `build` phase of an application.
### Resource Limits
When specified and supported, a resource limit will ensure that your app does not go _over_ the specified value. If this occurs, the underlying scheduler may either cap resource utilization, or it may decide to terminate and reschedule your process.
Resource limits may be set via the `resource:limit` command:
```shell
dokku resource:limit --memory 100 node-js-app
```
```
=====> Setting resource limits for node-js-app
memory: 100
```
Multiple resources can be limited in a single call:
```shell
dokku resource:limit --cpu 100 --memory 100 node-js-app
```
```
=====> Setting resource limits for node-js-app
cpu: 100
memory: 100
```
Resources can also be limited on a per-process type basis. If specified, this will override any generic limits set for the app.
```shell
dokku resource:limit --cpu 100 --memory 100 --process-type worker node-js-app
```
```
=====> Setting resource limits for node-js-app (worker)
cpu: 100
memory: 100
```
#### Displaying Resource Limits
Running the `resource:limit` command without any flags will display the currently configured default app limits.
```shell
dokku resource:limit node-js-app
```
```
=====> resource limits node-js-app information [defaults]
cpu:
memory:
memory-swap: 100
network: 100
network-ingress:
network-egress:
```
This may also be combined with the `--process-type` flag to see app limits on a process-type level. Note that the displayed values are not merged with the defaults.
```shell
dokku resource:limit --process-type web node-js-app
```
```
=====> resource limits node-js-app information (web)
cpu: 100
memory: 100
memory-swap:
network:
network-ingress:
network-egress:
```
#### Clearing Resource Limits
In cases where the values are incorrect - or there is no desire to limit resources - resource limits may be cleared using the `resource:limit-clear` command.
```shell
dokku resource:limit-clear node-js-app
```
```
-----> Clearing resource limit for node-js-app
```
Defaults can also be cleared by leaving the app unspecified.
```shell
dokku resource:limit-clear
```
```
-----> Clearing default resource limits
```
### Resource Reservations
When specified and supported, a resource reservation will ensure that your server has _at least_ the specified resources before placing a given app's process. If there a resource exhaustion, future rebuilds and deploys may fail.
Resource reservations may be set via the `resource:reserve` command:
```shell
dokku resource:reserve --memory 100 node-js-app
```
```
=====> Setting resource reservation for node-js-app
memory: 100
```
Multiple resources can be limited in a single call:
```shell
dokku resource:reserve --cpu 100 --memory 100 node-js-app
```
```
=====> Setting resource reservation for node-js-app
cpu: 100
memory: 100
```
Resources can also be limited on a per-process type basis. If specified, this will override any generic limits set for the app.
```shell
dokku resource:reserve --cpu 100 --memory 100 --process-type worker node-js-app
```
```
=====> Setting resource reservation for node-js-app (worker)
cpu: 100
memory: 100
```
#### Displaying Resource Reservations
Running the `resource:reserve` command without any flags will display the currently configured default app reservations.
```shell
dokku resource:reserve node-js-app
```
```
=====> resource reservation node-js-app information [defaults]
cpu: 100
memory: 100
memory-swap:
network:
network-ingress:
network-egress:
```
This may also be combined with the `--process-type` flag to see app reservations on a process-type level. Note that the displayed values are not merged with the defaults.
```shell
dokku resource:reserve --process-type web node-js-app
```
```
=====> resource reservation node-js-app information (web)
cpu: 100
memory: 100
memory-swap:
network:
network-ingress:
network-egress:
```
#### Clearing Resource Reservations
In cases where the values are incorrect - or there is no desire to reserve resources - resource reservations may be cleared using the `resource:reserve-clear` command.
```shell
dokku resource:reserve-clear node-js-app
```
```
-----> Clearing resource reservation for node-js-app
```
Defaults can also be cleared by leaving the app unspecified.
```shell
dokku resource:reserve-clear
```
```
-----> Clearing default resource reservation
```
### Displaying resource reports for an app
You can get a report about the app's resource status using the `resource:report` command:
```shell
dokku resource:report
```
```
=====> node-js-app resource information
web limit cpu:
web limit memory: 1024
web limit memory swap: 0
web limit network: 10
web limit network ingress:
web limit network egress:
web reservation cpu:
web reservation memory: 512
web reservation memory swap:
web reservation network: 8
web reservation network ingress:
web reservation network egress:
=====> python-sample resource information
web limit cpu:
web limit memory:
web limit memory swap:
web limit network:
web limit network ingress:
web limit network egress:
web reservation cpu:
web reservation memory:
web reservation memory swap:
web reservation network:
web reservation network ingress:
web reservation network egress:
=====> ruby-sample resource information
web limit cpu:
web limit memory:
web limit memory swap:
web limit network:
web limit network ingress:
web limit network egress:
web reservation cpu:
web reservation memory:
web reservation memory swap:
web reservation network:
web reservation network ingress:
web reservation network egress:
```
You can run the command for a specific app also.
```shell
dokku resource:report node-js-app
```
```
=====> node-js-app resource information
web limit cpu:
web limit memory: 1024
web limit memory swap: 0
web limit network: 10
web limit network ingress:
web limit network egress:
web reservation cpu:
web reservation memory: 512
web reservation memory swap:
web reservation network: 8
web reservation network ingress:
web reservation network egress:
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
# Note the periods in the flag name
dokku resource:report node-js-app --resource-web.limit.memory
```
```
1024
```

View File

@@ -43,13 +43,32 @@ This plugin implements various functionality through `plugn` triggers to integra
- `check-deploy`
- `core-post-deploy`
- `post-app-clone-setup`
- `post-create`
- `post-delete`
- `pre-deploy`
- `pre-restore`
- `scheduler-deploy`
- `scheduler-docker-cleanup`
- `scheduler-inspect`
- `scheduler-logs-failed`
- `scheduler-logs`
- `scheduler-retire`
- `scheduler-run`
- `scheduler-stop`
- `scheduler-tags-create`
- `scheduler-tags-destroy`
## Supported Resource Management Properties
The `docker-local` scheduler supports a minimal list of resource _limits_ and _reservations_. The following properties are supported:
### Resource Limits
- cpu: (docker option: `--cpus`), and is specified in number of CPUs a process can access.
- memory: (docker option: `--memory`) and should be specified with a suffix of `b` (bytes), `k` (kilobytes), `m` (megabytes), `g` (gigabytes)
- memory-swap: (docker option: `--memory-swap`) and should be specified with a suffix of `b` (bytes), `k` (kilobytes), `m` (megabytes), `g` (gigabytes)
### Resource Reservations
- memory: (docker option: `--memory-reservation`) and should be specified with a suffix of `b` (bytes), `k` (kilobytes), `m` (megabytes), `g` (gigabytes)

View File

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

View File

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

View File

@@ -39,13 +39,13 @@ h1 {
font-size: 1.6em;
}
.header .navbar-brand a {
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/dokku.png);
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/dokku.png);
text-indent: 40px;
}
.blurb {
color: #424242;
background-color: #ededed;
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/gplaypattern.png);
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/gplaypattern.png);
padding: 45px 0;
text-align: center;
}

View File

@@ -1,16 +1,20 @@
{
"max-versions": [
"0.3.26",
"0.4.14",
"0.5.8",
"0.6.5",
"0.7.2",
"0.8.2",
"0.9.4",
"0.10.5",
"0.11.6",
"0.12.13",
"0.13.4",
"0.14.2"
"0.3.26",
"0.4.14",
"0.5.8",
"0.6.5",
"0.7.2",
"0.8.2",
"0.9.4",
"0.10.5",
"0.11.6",
"0.12.13",
"0.13.4",
"0.14.6",
"0.15.5",
"0.16.4",
"0.17.9",
"0.18.3"
]
}

View File

@@ -57,6 +57,7 @@ The following plugins are available and provided by Dokku maintainers. Where not
[Aluxian]: https://github.com/Aluxian
[Aomitayo]: https://github.com/Aomitayo
[apmorton]: https://github.com/apmorton
[artofrawr]: https://github.com/artofrawr
[basgys]: https://github.com/basgys
[Benjamin-Dobell]: https://github.com/Benjamin-Dobell
[blag]: https://github.com/blag
@@ -126,6 +127,8 @@ The following plugins are available and provided by Dokku maintainers. Where not
[Zenedith]: https://github.com/Zenedith
[fteychene]: https://github.com/fteychene
[sarendsen]: https://github.com/sarendsen
[baikunz]: https://github.com/baikunz
[lazyatom]: https://github.com/lazyatom
### Datastores
@@ -165,6 +168,7 @@ The following plugins are available and provided by Dokku maintainers. Where not
| [FakeSNS](https://github.com/cu12/dokku-fake_sns) | [cu12][] | 0.5.0+ |
| [InfluxDB](https://github.com/basgys/dokku-influxdb) | [basgys][] | 0.4.x |
| [RethinkDB](https://github.com/stuartpb/dokku-rethinkdb-plugin) | [stuartpb][] | 0.3.x |
| [Headless Chrome](https://github.com/lazyatom/dokku-chrome) | [lazyatom][] | 0.8.1+ |
[dccee02]: https://github.com/jeffutter/dokku-riakcs-plugin/commit/dccee02702e7001851917b7814e78a99148fb709
[c77cbf1]: https://github.com/dokku/dokku/commit/c77cbf1d3ae07f0eafb85082ed7edcae9e836147
@@ -194,6 +198,7 @@ The following plugins are available and provided by Dokku maintainers. Where not
| [SSH Deployment Keys](https://github.com/cedricziel/dokku-deployment-keys)<sup>3</sup> | [cedricziel][] | 0.4.0+ |
| [SSH Hostkeys](https://github.com/cedricziel/dokku-hostkeys-plugin)<sup>4</sup> | [cedricziel][] | 0.3.x |
| [Application build hook](https://github.com/fteychene/dokku-build-hook) | [fteychene][] | 0.4.0+ |
| [Post Deploy Script](https://github.com/baikunz/dokku-post-deploy-script) | [baikunz][] | 0.4.0+ |
[217d00a]: https://github.com/dokku/dokku/commit/217d00a1bc47a7e24d8847617bb08a1633025fc7
@@ -225,6 +230,7 @@ The following plugins are available and provided by Dokku maintainers. Where not
| [Long Timeout](https://github.com/investtools/dokku-long-timeout-plugin) | [investtools][] | 0.4.0+ |
| [Monit](https://github.com/cjblomqvist/dokku-monit) | [cjblomqvist][] | 0.3.x |
| [Monorepo](https://github.com/iamale/dokku-monorepo) | [iamale][] | 0.4.0+ |
| [Multi Dockerfile](https://github.com/artofrawr/dokku-multi-dockerfile) | [artofrawr][] | 0.4.0+ |
| [Node](https://github.com/ademuk/dokku-nodejs) | [ademuk][] | 0.3.x |
| [Node](https://github.com/pnegahdar/dokku-node) | [pnegahdar][] | 0.3.x |
| [Rollbar](https://github.com/iloveitaly/dokku-rollbar) | [iloveitaly][] | 0.5.0+ |

View File

@@ -65,7 +65,7 @@ review_app:
image: ilyasemenov/gitlab-ci-git-push
stage: deploy
environment:
name: review/$CI_ENVIRONMENT_SLUG
name: review/$CI_COMMIT_REF_NAME
url: https://$CI_ENVIRONMENT_SLUG.dokku.me/
on_stop: stop_review_app
only:
@@ -87,8 +87,10 @@ The above only runs for non-master branches, and will _also_ trigger an `on_stop
stop_review_app:
image: ilyasemenov/gitlab-ci-git-push
stage: deploy
variables:
GIT_STRATEGY: none
environment:
name: review/$CI_ENVIRONMENT_SLUG
name: review/$CI_COMMIT_REF_NAME
action: stop
when: manual
script:

View File

@@ -6,11 +6,12 @@
domains:add <app> <domain> [<domain> ...] # Add domains to app
domains:add-global <domain> [<domain> ...] # Add global domain names
domains:clear <app> # Clear all domains for app
domains:clear-global # Clear global domain names
domains:disable <app> # Disable VHOST support
domains:enable <app> # Enable VHOST support
domains:remove <app> <domain> [<domain> ...] # Remove domains from app
domains:remove-global <domain> [<domain> ...] # Remove global domain names
domains:report [<app>] [<flag>] # Displays a domains report for one or more apps
domains:report [<app>|--global] [<flag>] # Displays a domains report for one or more apps
domains:set <app> <domain> [<domain> ...] # Set domains for app
domains:set-global <domain> [<domain> ...] # Set global domain names
```
@@ -27,21 +28,10 @@ scheme://subdomain.domain.tld
The `subdomain` is inferred from the pushed application name, while the `domain.tld` is set during initial dokku configuration. It can then be modified with `dokku domains:add-global` and `dokku domains:remove-global`. This value is used as a default TLD for all applications on a host.
If a FQDN such as `other.tld` is used as the application name, the global virtualhost will be ignored and the resulting vhost URL for that application will be `other.tld`. The exception to this rule being that if the FQDN has the same ending as the default vhost (such as `subdomain.domain.tld`), then the entire FQDN will be treated as a subdomain. The application will therefore be deployed at `subdomain.domain.tld.domain.tld`.
If an FQDN such as `dokku.org` is used as the application name, the global virtualhost will be ignored and the resulting vhost URL for that application will be `dokku.org`.
You can optionally override this in a plugin by implementing the `nginx-hostname` plugin trigger. For example, you can reverse the subdomain with the following sample `nginx-hostname` plugin trigger:
You can optionally override this in a plugin by implementing the `nginx-hostname` plugin trigger. If the `nginx-hostname` plugin has no output, the normal hostname algorithm will be executed. See the [plugin trigger documentation](/docs/development/plugin-triggers.md#nginx-hostname) for more information.
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
APP="$1"; SUBDOMAIN="$2"; VHOST="$3"
NEW_SUBDOMAIN=`echo $SUBDOMAIN | rev`
echo "$NEW_SUBDOMAIN.$VHOST"
```
If the `nginx-hostname` plugin has no output, the normal hostname algorithm will be executed.
## Disabling VHOSTS
@@ -75,7 +65,7 @@ dokku domains:remove node-js-app dokku.me
dokku domains:set node-js-app dokku.me dokku.org
```
## Displaying domains reports about an app
## Displaying domains reports for an app
> New as of 0.8.1
@@ -88,17 +78,17 @@ dokku domains:report
```
=====> node-js-app domains information
Domains app enabled: true
Domains app vhosts: ruby-sample.dokku.org
Domains app vhosts: node-js-app.dokku.org
Domains global enabled: true
Domains global vhosts: dokku.org
=====> python-sample domains information
=====> python-app domains information
Domains app enabled: true
Domains app vhosts: ruby-sample.dokku.org
Domains app vhosts: python-app.dokku.org
Domains global enabled: true
Domains global vhosts: dokku.org
=====> ruby-sample domains information
=====> ruby-app domains information
Domains app enabled: true
Domains app vhosts: ruby-sample.dokku.org
Domains app vhosts: ruby-app.dokku.org
Domains global enabled: true
Domains global vhosts: dokku.org
```

View File

@@ -6,12 +6,13 @@ The `config` plugin provides the following commands to manage your variables:
```
config (<app>|--global) Pretty-print an app or global environment
config:bundle (<app>|--global) [--merged] Bundle environment into tarfile
config:clear (<app>|--global) Clears environment variables
config:export (<app>|--global) [--envfile] Export a global or app environment
config:get (<app>|--global) KEY Display a global or app-specific config value
config:keys (<app>|--global) [--merged] Show keys set in environment
config:set [--encoded] [--no-restart] (<app>|--global) KEY1=VALUE1 [KEY2=VALUE2 ...] Set one or more config vars
config:unset [--no-restart] (<app>|--global) KEY1 [KEY2 ...] Unset one or more config vars
config:export (<app>|--global) [--envfile] Export a global or app environment
config:keys (<app>|--global) [--merged] Show keys set in environment
config:bundle (<app>|--global) [--merged] Bundle environment into tarfile
```
> For security reasons - and as per [docker recommendations](https://github.com/docker/docker/issues/13490) - Dockerfile-based deploys have variables available *only* during runtime, as noted in [this issue](https://github.com/dokku/dokku/issues/1860).
@@ -92,7 +93,7 @@ The following list config variables have special meaning and can be set in a var
| `DOKKU_DETACH_CONTAINER` | none | `--detach` flag | Whether to detach a container started via `dokku run`. |
| `DOKKU_QUIET_OUTPUT` | none | `--quiet` flag | Silences certain header output for `dokku` commands. |
| `DOKKU_RM_CONTAINER` | none | `dokku config:set` <br /> `--rm-container` flag <br /> `--rm` flag | Whether to keep `dokku run` containers around or not. |
| `DOKKU_TRACE` | none | `dokku trace on` <br /> `dokku trace false` <br /> `--trace` flag | Turn on very verbose debugging. |
| `DOKKU_TRACE` | none | `dokku trace:on` <br /> `dokku trace:off` <br /> `--trace` flag | Turn on very verbose debugging. |
| `DOKKU_APP_PROXY_TYPE` | `nginx` | `dokku proxy:set` | |
| `DOKKU_APP_RESTORE` | `1` | `dokku config:set` <br /> `dokku ps:stop` | |
| `DOKKU_APP_SHELL` | `/bin/bash` | `dokku config:set` | Allows users to change the default shell used by Dokku for `dokku enter` and execution of deployment tasks. |
@@ -113,6 +114,7 @@ The following list config variables have special meaning and can be set in a var
| `DOKKU_DOCKERFILE_ENTRYPOINT` | dockerfile entrypoint | `dokku config:set` | |
| `DOKKU_DOCKERFILE_PORTS` | dockerfile ports | `dokku config:set` | |
| `DOKKU_DOCKERFILE_START_CMD` | none | `dokku config:set` | |
| `DOKKU_PARALLEL_ARGUMENTS`. | none | `dokku config:set` | Allows passing custom arguments to parallel for `ps:*all` commands |
| `DOKKU_PROXY_PORT` | automatically assigned | `dokku config:set` | |
| `DOKKU_PROXY_SSL_PORT` | automatically assigned | `dokku config:set` | |
| `DOKKU_PROXY_PORT_MAP` | automatically assigned | `dokku proxy:ports-add` <br /> `dokku proxy:ports-remove`, `dokku proxy:ports-clear` | |
@@ -120,6 +122,7 @@ The following list config variables have special meaning and can be set in a var
| `DOKKU_SKIP_CLEANUP` | | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | When a deploy is triggered, if this is set to a non-empty value, then old docker containers and images will not be removed. |
| `DOKKU_SKIP_DEFAULT_CHECKS` | | `dokku config:set` | |
| `DOKKU_SKIP_DEPLOY` | | `dokku config:set` | |
| `DOKKU_START_CMD` | none | `dokku config:set` | Command to run instead of `/start $PROC_TYPE` |
| `DOKKU_SYSTEM_GROUP` | `dokku` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | System group to chown files as. |
| `DOKKU_SYSTEM_USER` | `dokku` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | System user to chown files as. |
| `DOKKU_WAIT_TO_RETIRE` | `60` | `dokku config:set` | After a successful deploy, the grace period given to old containers before they are stopped/terminated. This is useful for ensuring completion of long-running http connections. |

View File

@@ -56,7 +56,7 @@ If you decide to obtain a CA signed certificate, you can import that certificate
The `certs:remove` command only works on app-specific certificates. It will `rm` the app-specific tls directory, rebuild the nginx configuration, and reload nginx.
### Displaying certificate reports about an app
### Displaying certificate reports for an app
> New as of 0.8.1
@@ -67,17 +67,17 @@ dokku certs:report
```
```
=====> node-js-sample
Ssl dir: /home/dokku/node-js-sample/tls
=====> node-js-app
Ssl dir: /home/dokku/node-js-app/tls
Ssl enabled: true
Ssl hostnames: *.node-js-sample.org node-js-sample.org
Ssl hostnames: *.node-js-app.org node-js-app.org
Ssl expires at: Oct 5 23:59:59 2019 GMT
Ssl issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Domain Validation Secure Server CA
Ssl starts at: Oct 5 00:00:00 2016 GMT
Ssl subject: OU=Domain Control Validated; OU=PositiveSSL Wildcard; CN=*.node-js-sample.org
Ssl subject: OU=Domain Control Validated; OU=PositiveSSL Wildcard; CN=*.node-js-app.org
Ssl verified: self signed.
=====> python-sample
Ssl dir: /home/dokku/python-sample/tls
=====> python-app
Ssl dir: /home/dokku/python-app/tls
Ssl enabled: false
Ssl hostnames:
Ssl expires at:
@@ -90,12 +90,12 @@ dokku certs:report
You can run the command for a specific app also.
```shell
dokku certs:report node-js-sample
dokku certs:report node-js-app
```
```
=====> node-js-sample ssl information
Ssl dir: /home/dokku/node-js-sample/tls
=====> node-js-app ssl information
Ssl dir: /home/dokku/node-js-app/tls
Ssl enabled: true
Ssl hostnames: *.dokku.org dokku.org
Ssl expires at: Oct 5 23:59:59 2019 GMT
@@ -108,7 +108,7 @@ dokku certs:report node-js-sample
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku certs:report node-js-sample --ssl-enabled
dokku certs:report node-js-app --ssl-enabled
```
## HSTS Header
@@ -139,7 +139,7 @@ server {
proxy_pass http://{{ .APP }};
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Connection $http_connection;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_set_header X-Forwarded-For $http_x_forwarded_for;

View File

@@ -1,30 +1,31 @@
# Deploying to Dokku
> Note: This document uses the hostname `dokku.me` in commands. For your server please
> substitute your server's hostname instead.
> Note: This walkthrough uses the hostname `dokku.me` in commands. When deploying to your own server, you should set the `DOKKU_DOMAIN` value in the `Vagrantfile` before you initialize the Vagrant VM.
## Deploy tutorial
Once Dokku has been configured with at least one user, applications can be deployed via a `git push` command. To quickly see Dokku deployment in action, you can use the Heroku Ruby on Rails example app.
Once you have configured Dokku with at least one user, you can deploy applications using `git push`. To quickly see Dokku deployment in action, try using [the Heroku Ruby on Rails "Getting Started" app](https://github.com/heroku/ruby-getting-started).
```shell
# from your local machine
# SSH access to github must be enabled on this host
git clone git@github.com:heroku/ruby-rails-sample.git
git clone git@github.com:heroku/ruby-getting-started.git
```
### Create the app
Create the application on the Dokku host. You will need to ssh onto the host to run this command.
SSH into the Dokku host and create the application as follows:
```shell
# on the Dokku host
dokku apps:create ruby-rails-sample
dokku apps:create ruby-getting-started
```
### Create the backing services
When you create a new app, Dokku by default *does not* provide any datastores such as MySQL or PostgreSQL. You will need to install plugins to handle that, but fortunately [Dokku has official plugins](/docs/community/plugins.md#official-plugins-beta) for common datastores. Our sample app requires a PostgreSQL service:
Dokku by default **does not** provide datastores (e.g. MySQL, PostgreSQL) on a newly created app. You can add datastore support by installing plugins, and the Dokku project [provides official plugins](/docs/community/plugins.md#official-plugins-beta) for common datastores.
The Getting Started app requires a PostgreSQL service, so install the plugin and create the related service as follows:
```shell
# on the Dokku host
@@ -32,43 +33,45 @@ When you create a new app, Dokku by default *does not* provide any datastores su
# plugin installation requires root, hence the user change
sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git
# create a postgres service with the name rails-database
dokku postgres:create rails-database
# create a postgres service with the name railsdatabase
dokku postgres:create railsdatabase
```
> Each service may take a few moments to create.
Each service may take a few moments to create.
### Linking backing services to applications
Once the service creation is complete, set the `DATABASE_URL` environment variable by linking the service.
Once the services have been created, you then set the `DATABASE_URL` environment variable by linking the service, as follows:
```shell
# on the Dokku host
# each official datastore offers a `link` method to link a service to any application
dokku postgres:link rails-database ruby-rails-sample
dokku postgres:link railsdatabase ruby-getting-started
```
> You can link a single service to multiple applications or use one service per application.
Dokku supports linking a single service to multiple applications as well as linking only one service per application.
### Deploy the app
Now you can deploy the `ruby-rails-sample` app to your Dokku server. All you have to do is add a remote to name the app. Applications are created on-the-fly on the Dokku server.
> Warning: Your app should respect the `PORT` environment variable, otherwise it may not respond to web requests. You can find more information in the [port management documentation](/docs/networking/port-management.md).**
Now you can deploy the `ruby-getting-started` app to your Dokku server. All you have to do is add a remote to name the app. Applications are created on-the-fly on the Dokku server.
```shell
# from your local machine
# the remote username *must* be dokku or pushes will fail
cd ruby-rails-sample
git remote add dokku dokku@dokku.me:ruby-rails-sample
cd ruby-getting-started
git remote add dokku dokku@dokku.me:ruby-getting-started
git push dokku master
```
> Note: Some tools may not support the short-upstream syntax referenced above, and you may need to prefix
> the upstream with the scheme `ssh://` like so: `ssh://dokku@dokku.me:ruby-rails-sample`
> the upstream with the scheme `ssh://` like so: `ssh://dokku@dokku.me:ruby-getting-started`
> Please see the [Git](https://git-scm.com/docs/git-clone#_git_urls_a_id_urls_a) documentation for more details.
> Note: Your private key should be registered with ssh-agent in local development. If you get a
> permission denied error when pushing you can register your private key by running
> `ssh-add -k ~/<your private key>`.
> Note: Your private key should be registered with `ssh-agent` in your local development environment. If you get a `permission denied` error when pushing, you can register your private key as follows: `ssh-add -k ~/<your private key>`.
After running `git push dokku master`, you should have output similar to this in your terminal:
```
Counting objects: 231, done.
@@ -77,7 +80,7 @@ Compressing objects: 100% (162/162), done.
Writing objects: 100% (231/231), 36.96 KiB | 0 bytes/s, done.
Total 231 (delta 93), reused 147 (delta 53)
-----> Cleaning up...
-----> Building ruby-rails-sample from herokuish...
-----> Building ruby-getting-started from herokuish...
-----> Adding BUILD_ENV to build environment...
-----> Ruby app detected
-----> Compiling Ruby/Rails
@@ -92,12 +95,12 @@ Total 231 (delta 93), reused 147 (delta 53)
...
=====> Application deployed:
http://ruby-rails-sample.dokku.me
http://ruby-getting-started.dokku.me
```
When the deploy finishes, the application's URL will be shown as seen above.
Once the deploy is complete, the application's web URL will be generated as above.
Dokku supports deploying applications via [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) with [Herokuish](https://github.com/gliderlabs/herokuish#buildpacks) or using a project's [dockerfile](https://docs.docker.com/reference/builder/).
Dokku supports deploying applications via [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) with [Herokuish](https://github.com/gliderlabs/herokuish#buildpacks), as well as by using a project's [Dockerfile](https://docs.docker.com/reference/builder/).
### Skipping deployment
@@ -106,23 +109,23 @@ If you only want to rebuild and tag a container, you can skip the deployment pha
``` shell
# on the Dokku host
dokku config:set ruby-rails-sample DOKKU_SKIP_DEPLOY=true
dokku config:set ruby-getting-started DOKKU_SKIP_DEPLOY=true
```
### Re-Deploying / restarting
### Redeploying or restarting
If you need to re-deploy (or restart) your app:
If you need to redeploy or restart your app:
```shell
# on the Dokku host
dokku ps:rebuild ruby-rails-sample
dokku ps:rebuild ruby-getting-started
```
See the [process scaling documentation](/docs/deployment/process-management.md) for more information.
### Deploying with private git submodules
### Deploying with private Git submodules
Dokku uses git locally (i.e. not a docker image) to build its own copy of your app repo, including submodules. This is done as the `dokku` user. Therefore, in order to deploy private git submodules, you'll need to drop your deploy key in `/home/dokku/.ssh/` and potentially add github.com (or your VCS host key) into `/home/dokku/.ssh/known_hosts`. The following test should help confirm you've done it correctly.
Dokku uses Git locally (i.e. not a Docker image) to build its own copy of your app repo, including submodules, as the `dokku` user. This means that in order to deploy private Git submodules, you need to put your deploy key in `/home/dokku/.ssh/` and potentially add `github.com` (or your VCS host key) into `/home/dokku/.ssh/known_hosts`. You can use the following test to confirm your setup is correct:
```shell
# on the Dokku host
@@ -131,25 +134,25 @@ ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
ssh -T git@github.com
```
Note that if the buildpack or dockerfile build process require ssh key access for other reasons, the above may not always apply.
> Warning: if the buildpack or Dockerfile build process require SSH key access for other reasons, the above may not always apply.
## Deploying to subdomains
The name of remote repository is used as the name of application to be deployed, as for example above:
If you do not enter a fully qualified domain name when pushing your app, Dokku deploys the app to `<remotename>.yourdomain.tld` as follows:
```shell
# from your local machine
# the remote username *must* be dokku or pushes will fail
git remote add dokku dokku@dokku.me:ruby-rails-sample
git remote add dokku dokku@dokku.me:ruby-getting-started
git push dokku master
```
```
remote: -----> Application deployed:
remote: http://ruby-rails-sample.dokku.me
remote: http://ruby-getting-started.dokku.me
```
You can also specify fully qualified names, say `app.dokku.me`, as
You can also specify the fully qualified name as follows:
```shell
# from your local machine
@@ -163,7 +166,7 @@ remote: -----> Application deployed:
remote: http://app.dokku.me
```
This is in particular useful, then you want to deploy to root domain, as
This is useful when you want to deploy to the root domain:
```shell
# from your local machine
@@ -177,11 +180,11 @@ git push dokku master
remote: -----> Application deployed:
remote: http://dokku.me
## Dokku/Docker Container Management Compatibility
## Dokku/Docker container management compatibility
Dokku is, at its core, a docker container manager. Thus, it does not necessarily play well with other out-of-band processes interacting with the docker daemon. One thing to note as in [issue #1220](https://github.com/dokku/dokku/issues/1220), dokku executes a cleanup function prior to every deployment.
Dokku is, at its core, a Docker container manager. Thus, it does not necessarily play well with other out-of-band processes interacting with the Docker daemon.
As of 0.5.x, this function removes all containers with the label `dokku` where the status is either `dead` or `exited`, as well as all `dangling` images. Previous versions would remove `dead` or `exited` containers, regardless of their label.
Prior to every deployment, Dokku will execute a cleanup function. As of 0.5.x, the cleanup removes all containers with the `dokku` label where the status is either `dead` or `exited` (previous versions would remove _all_ `dead` or `exited` containers). The cleanup function also removes all images with `dangling` status.
## Adding deploy users
@@ -193,11 +196,11 @@ See the [nginx documentation](/docs/configuration/nginx.md#default-site).
## Deploying non-master branch
See the [git documentation](/docs/deployment/methods/git.md#changing-the-deploy-branch).
See the [Git documentation](/docs/deployment/methods/git.md#changing-the-deploy-branch).
## Dockerfile deployment
See the [dockerfile documentation](/docs/deployment/methods/dockerfiles.md).
See the [Dockerfile documentation](/docs/deployment/methods/dockerfiles.md).
## Image tagging

View File

@@ -17,7 +17,7 @@ apps:unlock <app> # Unlocks an app for deployment
## Usage
### Listing Applications
### Listing applications
> New as of 0.8.1. Use the `apps` command for older versions.
@@ -33,7 +33,7 @@ node-js-app
python-app
```
Note that you can easily hide extra output from Dokku commands by using the `--quiet` flag, which makes it easier to parse on the command-line.
Note that you can easily hide extra output from Dokku commands by using the `--quiet` flag, which makes it easier to parse on the command line.
```shell
dokku --quiet apps:list
@@ -72,9 +72,9 @@ Creating node-js-app... done
Once created, you can configure the application as normal, and deploy the application whenever ready. This is useful for cases where you may wish to do any of the following kinds of tasks:
- configure domain names and ssl certificates
- create and link datastores
- set environment variables
- Configure domain names and SSL certificates.
- Create and link datastores.
- Set environment variables.
### Removing a deployed app
@@ -103,7 +103,6 @@ dokku --force apps:destroy node-js-app
Destroying node-js-app (including all add-ons)
```
Destroying an application will unlink all linked services and destroy any config related to the application. Note that linked services will retain their data for later use (or removal).
### Renaming a deployed app
@@ -149,9 +148,14 @@ dokku apps:clone node-js-app io-js-app
Cloning node-js-app to io-js-app... done
```
This will copy all of your app's contents into a new app directory with the name of your choice and then rebuild the new version of the app and deploy it. All of your config variables, including database urls, will be preserved. Custom domains and SSL certificates will not be copied to the new app.
This will copy all of your app's contents into a new app directory with the name of your choice and then rebuild the new version of the app and deploy it with the following caveats:
> Warning: If you have exposed specific ports via docker-options, or performed anything that cannot be done against multiple applications, `apps:clone` may result in errors.
- All of your environment variables, including database urls, will be preserved.
- Custom domains are not applied to the new app.
- SSL certificates will not be copied to the new app.
- Port mappings with the scheme `https` and host-port `443` will be skipped.
> Warning: If you have exposed specific ports via `docker-options` plugin, or performed anything that cannot be done against multiple applications, `apps:clone` may result in errors.
By default, Dokku will deploy this new application, though you can skip the deploy by using the `--skip-deploy` flag:
@@ -159,7 +163,7 @@ By default, Dokku will deploy this new application, though you can skip the depl
dokku apps:clone --skip-deploy node-js-app io-js-app
```
Finally, if the application already exists, you may wish to ignore errors resulting from attempting to clone over it. To do so, you can use the `--ignore-existing` flag. A warning will be emitted, but the command will return 0.
Finally, if the application already exists, you may wish to ignore errors resulting from attempting to clone over it. To do so, you can use the `--ignore-existing` flag. A warning will be emitted, but the command will return `0`.
```shell
dokku apps:clone --ignore-existing node-js-app io-js-app
@@ -186,7 +190,7 @@ dokku apps:lock node-js-app
In some cases, it may be necessary to remove an existing deploy lock. This can be performed via the `apps:unlock` command.
> Warning: Removing the deploy lock _will not_ stop in progress deploys. At this time, in progress deploys will need to be manually terminated by someone with server access.
> Warning: Removing the deploy lock *will not* stop in progress deploys. At this time, in progress deploys will need to be manually terminated by someone with server access.
```shell
dokku apps:unlock node-js-app
@@ -213,7 +217,7 @@ dokku apps:locked node-js-app
Deploy lock does not exist
```
### Displaying reports about an app
### Displaying reports for an app
> New as of 0.8.1

View File

@@ -7,7 +7,7 @@ logs:failed [<app>] # Shows the last failed deploy
## Usage
### App Logs
### Application logs
You can easily get logs of an app using the `logs` command:
@@ -31,9 +31,10 @@ You can use these modifiers as follows:
```shell
dokku logs node-js-app -t -p web
```
will show logs continually from the web process.
### Failed Deploy Logs
### Failed deploy logs
> Warning: The default `docker-local` scheduler will "store" these until the next deploy or until the old containers are garbage collected - whichever runs first. If you require the logs beyond this point in time, please ship the logs to a centralized log server.

View File

@@ -1,13 +1,165 @@
# Buildpack Deployment
Dokku normally defaults to using [heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) for deployment, though this may be overridden by committing a valid `Dockerfile` to the root of your repository and pushing the repository to your Dokku installation. To avoid this automatic `Dockerfile` deployment detection, you may do one of the following:
> Subcommands new as of 0.15.0
- Use `dokku config:set` to set the `BUILDPACK_URL` environment variable.
- Add `BUILDPACK_URL` to a committed `.env` file in the root of your repository.
- See the [environment variable documentation](/docs/configuration/environment-variables.md) for more details.
```
buildpacks:add [--index 1] <app> <buildpack> # Add new app buildpack while inserting into list of buildpacks if necessary
buildpacks:clear <app> # Clear all buildpacks set on the app
buildpacks:list <app> # List all buildpacks for an app
buildpacks:remove <app> <buildpack> # Remove a buildpack set on the app
buildpacks:report [<app>] [<flag>] # Displays a buildpack report for one or more apps
buildpacks:set [--index 1] <app> <buildpack> # Set new app buildpack at a given position defaulting to the first buildpack if no index is specified
```
> Warning: If using the `buildpacks` plugin, be sure to unset any `BUILDPACK_URL` and remove any such entries from a committed `.env` file. A specified `BUILDPACK_URL` will always override a `.buildpacks` file or the buildpacks plugin.
Dokku normally defaults to using [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) for deployment, though this may be overridden by committing a valid `Dockerfile` to the root of your repository and pushing the repository to your Dokku installation. To avoid this automatic `Dockerfile` deployment detection, you may do one of the following:
- Set a `BUILDPACK_URL` environment variable
- This can be done via `dokku config:set` or via a committed `.env` file in the root of the repository. See the [environment variable documentation](/docs/configuration/environment-variables.md) for more details.
- Create a `.buildpacks` file in the root of your repository.
- This can be via a committed `.buildpacks` file or managed via the `buildpacks` plugin commands.
## Switching from Dockerfile deployments
This page will cover usage of the `buildpacks` plugin.
## Usage
### Listing Buildpacks in Use
The `buildpacks:list` command can be used to show buildpacks that have been set for an app. This will omit any auto-detected buildpacks.
```shell
# running for an app with no buildpacks specified
dokku buildpacks:list node-js-app
```
```
-----> test buildpack urls
```
```shell
# running for an app with two buildpacks specified
dokku buildpacks:list node-js-app
```
```
-----> test buildpack urls
https://github.com/heroku/heroku-buildpack-python.git
https://github.com/heroku/heroku-buildpack-nodejs.git
```
### Adding custom buildpacks
> Please check the documentation for your particular buildpack as you may need to include configuration files (such as a Procfile) in your project root.
To add a custom buildpack, use the `buildpacks:add` command:
```shell
dokku buildpacks:add node-js-app https://github.com/heroku/heroku-buildpack-nodejs.git
```
When no buildpacks are currently specified, the specified buildpack will be the only one executed for detection and compilation.
Multiple buildpacks may be specified by using the `buildpacks:add` command multiple times.
```shell
dokku buildpacks:add node-js-app https://github.com/heroku/heroku-buildpack-ruby.git
dokku buildpacks:add node-js-app https://github.com/heroku/heroku-buildpack-nodejs.git
```
Buildpacks are executed in order, may be inserted at a specified index via the `--index` flag. This flag is specified starting at a 1-index value.
```shell
# will add the golang buildpack at the second position, bumping all proceeding ones by 1 position
dokku buildpacks:add --index 2 node-js-app https://github.com/heroku/heroku-buildpack-golang.git
```
### Overwriting a buildpack position
In some cases, it may be necessary to swap out a given buildpack. Rather than needing to re-specify each buildpack, the `buildpacks:set` command can be used to overwrite a buildpack at a given position.
```shell
dokku buildpacks:set node-js-app https://github.com/heroku/heroku-buildpack-ruby.git
```
By default, this will overwrite the _first_ buildpack specified. To specify an index, the `--index` flag may be used. This flag is specified starting at a 1-index value, and defaults to `1`.
```shell
# the following are equivalent commands
dokku buildpacks:set node-js-app https://github.com/heroku/heroku-buildpack-ruby.git
dokku buildpacks:set --index 1 node-js-app https://github.com/heroku/heroku-buildpack-ruby.git
```
If the index specified is larger than the number of buildpacks currently configured, the buildpack will be appended to the end of the list.
```shell
dokku buildpacks:set --index 99 node-js-app https://github.com/heroku/heroku-buildpack-ruby.git
```
### Removing a buildpack
> At least one of a buildpack or index must be specified
A single buildpack can be removed by name via the `buildpacks:remove` command.
```shell
dokku buildpacks:remove node-js-app https://github.com/heroku/heroku-buildpack-ruby.git
```
Buildpacks can also be removed by index via the `--index` flag. This flag is specified starting at a 1-index value.
```shell
dokku buildpacks:remove node-js-app --index 1
```
### Clearing all buildpacks
> This does not affect automatically detected buildpacks, nor does it impact any specified `BUILDPACK_URL` environment variable.
The `buildpacks:clear` command can be used to clear all configured buildpacks for a specified app.
```shell
dokku buildpacks:clear node-js-app
```
### Displaying buildpack reports for an app
You can get a report about the app's buildpacks status using the `buildpacks:report` command:
```shell
dokku buildpacks:report
```
```
=====> node-js-app buildpacks information
Buildpacks list: https://github.com/heroku/heroku-buildpack-nodejs.git
=====> python-sample buildpacks information
Buildpacks list: https://github.com/heroku/heroku-buildpack-nodejs.git,https://github.com/heroku/heroku-buildpack-python.git
=====> ruby-sample buildpacks information
Buildpacks list:
```
You can run the command for a specific app also.
```shell
dokku buildpacks:report node-js-app
```
```
=====> node-js-app buildpacks information
Buildpacks list: https://github.com/heroku/heroku-buildpack-nodejs.git
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku buildpacks:report node-js-app --buildpacks-list
```
## Errata
### Switching from Dockerfile deployments
If an application was previously deployed via Dockerfile, the following commands should be run before a buildpack deploy will succeed:
@@ -15,54 +167,25 @@ If an application was previously deployed via Dockerfile, the following commands
dokku config:unset --no-restart node-js-app DOKKU_DOCKERFILE_CMD DOKKU_DOCKERFILE_ENTRYPOINT DOKKU_PROXY_PORT_MAP
```
## Specifying a custom buildpack
In certain cases you may want to specify a custom buildpack. While Dokku uses herokuish to support all the [official heroku buildpacks](https://github.com/gliderlabs/herokuish#buildpacks), it is possible that the buildpack detection does not work well for your application. As well, you may wish to use a custom buildpack to handle specific application logic.
To use a specific buildpack, you can run the following Dokku command:
```shell
# replace REPOSITORY_URL with your buildpack's url
dokku config:set node-js-app BUILDPACK_URL=REPOSITORY_URL
# example: using a specific ruby buildpack version
dokku config:set node-js-app BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-ruby.git#v142
```
Please check the documentation for your particular buildpack as you may need to include configuration files (such as a Procfile) in your project root.
## Using multiple buildpacks
You can only set a single buildpack using the `BUILDPACK_URL`, though there may be times when you wish to use multiple buildpacks. To do so, simply create a `.buildpacks` file in the base of your repository. This file should list all the buildpacks, one-per-line. For instance, if you wish to use both the `nodejs` and `ruby` buildpacks, your `.buildpacks` file should contain the following:
```shell
https://github.com/heroku/heroku-buildpack-nodejs.git#v87
https://github.com/heroku/heroku-buildpack-ruby.git#v142
```
### Using a specific buildpack version
> Always remember to pin your buildpack versions when using the multi-buildpacks method, or you may find deploys changing your deployed environment.
You may also choose to set just a single buildpack in this file, though that is up to you.
Please check the documentation for your particular buildpack(s) as you may need to include configuration files (such as a Procfile) in your project root.
## Using a specific buildpack version
As Dokku pins all buildpacks via herokuish releases, there may be occasions where a local buildpack version is out of date. If you wish to use a more recent version of the buildpack, you may use any of the above methods to specify a buildpack **without** the git sha attached like so:
By default, Dokku uses the [gliderlabs/herokuish](https://github.com/gliderlabs/herokuish/) project, which pins all of it's vendored buildpacks. There may be occasions where the pinned version results in a broken deploy, or does not have a particular feature that is required to build your project. To use a more recent version of a given buildpack, the buildpack may be specified *without* a Git commit SHA like so:
```shell
# using the latest nodejs buildpack
dokku config:set node-js-app BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs
dokku buildpacks:set node-js-app https://github.com/heroku/heroku-buildpack-nodejs
```
You may also wish to use a **specific** version of a buildpack, which is also simple
This will use the latest commit on the `master` branch of the specified buildpack. To pin to a newer version of a buildpack, a sha may also be specified by using the form `REPOSITORY_URL#COMMIT_SHA`, where `COMMIT_SHA` is any tree-ish git object - usually a git tag.
```shell
# using v87 of the nodejs buildpack
dokku config:set node-js-app BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs#v87
dokku buildpacks:set node-js-app https://github.com/heroku/heroku-buildpack-nodejs#v87
```
## Specifying commands via Procfile
### Specifying commands via Procfile
While many buildpacks have a default command that is run when a detected repository is pushed, it is possible to override this command via a Procfile. A Procfile can also be used to specify multiple commands, each of which is subject to process scaling. See the [process scaling documentation](/docs/deployment/process-management.md) for more details around scaling individual processes.
@@ -87,17 +210,18 @@ importantworker: env QUEUE=important bundle exec rake resque:work
The `web` process type holds some significance in that it is the only process type that is automatically scaled to `1` on the initial application deploy. See the [process scaling documentation](/docs/deployment/process-management.md) for more details around scaling individual processes.
## Curl Build Timeouts
Certain buildpacks may time out in retrieving dependencies via curl. This can happen when your network connection is poor or if there is significant network congestion. You may see a message similar to `gzip: stdin: unexpected end of file` after a curl command.
### `curl` build timeouts
If you see output similar this when deploying , you may need to override the curl timeouts to increase the length of time allotted to those tasks. You can do so via the `config` plugin:
Certain buildpacks may time out in retrieving dependencies via `curl`. This can happen when your network connection is poor or if there is significant network congestion. You may see a message similar to `gzip: stdin: unexpected end of file` after a `curl` command.
If you see output similar this when deploying , you may need to override the `curl` timeouts to increase the length of time allotted to those tasks. You can do so via the `config` plugin:
```shell
dokku config:set --global CURL_TIMEOUT=1200
dokku config:set --global CURL_CONNECT_TIMEOUT=180
```
## Clearing buildpack cache
### Clearing buildpack cache
See the [repository management documentation](/docs/advanced-usage/repository-management.md#clearing-app-cache).

View File

@@ -2,26 +2,26 @@
> New as of 0.3.15
While Dokku normally defaults to using [heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) for deployment, you can also use docker's native `Dockerfile` system to define a container.
While Dokku normally defaults to using [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) for deployment, you can also use Docker's native `Dockerfile` system to define a container.
> Dockerfile support is considered a **Power User** feature. By using Dockerfile-based deployment, you agree that you will not have the same comfort as that enjoyed by Buildpack users, and Dokku features may work differently. Differences between the two systems will be documented here.
> Dockerfile support is considered a *power user* feature. By using Dockerfile-based deployment, you agree that you will not have the same comfort as that enjoyed by buildpack users, and Dokku features may work differently. Differences between the two systems will be documented here.
To use a dockerfile for deployment, commit a valid `Dockerfile` to the root of your repository and push the repository to your Dokku installation. If this file is detected, Dokku will default to using it to construct containers **except** in the following two cases:
To use a Dockerfile for deployment, commit a valid `Dockerfile` to the root of your repository and push the repository to your Dokku installation. If this file is detected, Dokku will default to using it to construct containers *except* in the following two cases:
- The application has a `BUILDPACK_URL` environment variable set via the `dokku config:set` command or in a committed `.env` file. In this case, Dokku will use your specified buildpack.
- The application has a `.buildpacks` file in the root of the repository. In this case, Dokku will use your specified buildpack(s).
## Switching from Buildpack deployments
## Switching from buildpack deployments
If an application was previously deployed via Buildpacks, the following commands should be run before a Dockerfile deploy will succeed:
If an application was previously deployed via buildpacks, the following commands should be run before a Dockerfile deploy will succeed:
```shell
dokku config:unset --no-restart node-js-app DOKKU_PROXY_PORT_MAP
```
## Build-time Configuration Variables
## Build-time configuration variables
For security reasons - and as per [docker recommendations](https://github.com/docker/docker/issues/13490) - Dockerfile-based deploys have variables available only during runtime.
For security reasons - and as per [Docker recommendations](https://github.com/docker/docker/issues/13490) - Dockerfile-based deploys have variables available only during runtime.
For users that require customization in the `build` phase, you may use build arguments via the [docker-options plugin](docs/advanced-usage/docker-options.md):
@@ -29,6 +29,12 @@ For users that require customization in the `build` phase, you may use build arg
dokku docker-options:add node-js-app build '--build-arg NODE_ENV=production'
```
The location of the `Dockerfile` may also be specified. If the location is changed, the repository **must also** have a `Dockerfile` in the root directory in order to trigger a dockerfile-based deploy.
```shell
dokku docker-options:add node-js-app build '--file Dockerfile.dokku'
```
Once set, the Dockerfile usage would be as follows:
```Dockerfile
@@ -61,7 +67,7 @@ RUN echo $NODE_ENV
## Customizing the run command
By default no arguments are passed to `docker run` when deploying the container and the `CMD` or `ENTRYPOINT` defined in the `Dockerfile` are executed. You can take advantage of docker ability of overriding the `CMD` or passing parameters to your `ENTRYPOINT` setting `$DOKKU_DOCKERFILE_START_CMD`. Let's say for example you are deploying a base nodejs image, with the following `ENTRYPOINT`:
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 Node.js image, with the following `ENTRYPOINT`:
```Dockerfile
ENTRYPOINT ["node"]
@@ -73,18 +79,17 @@ You can do:
dokku config:set node-js-app DOKKU_DOCKERFILE_START_CMD="--harmony server.js"
```
To tell docker what to run.
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`.
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`.
### Procfiles and Multiple Processes
### Procfiles and multiple processes
> New as of 0.5.0
You can also customize the run command using a `Procfile`, much like you would on Heroku or
with a buildpack deployed app. The `Procfile` should contain one or more lines defining [process
types and associated commands](https://devcenter.heroku.com/articles/procfile#declaring-process-types).
When you deploy your app a Docker image will be built, the `Procfile` will be extracted from the image
with a buildpack deployed app. The `Procfile` should contain one or more lines defining [process types and associated commands](https://devcenter.heroku.com/articles/procfile#declaring-process-types).
When you deploy your app, a Docker image will be built. The `Procfile` will be extracted from the image
(it must be in the folder defined in your `Dockerfile` as `WORKDIR` or `/app`) and the commands
in it will be passed to `docker run` to start your process(es). Here's an example `Procfile`:

View File

@@ -1,4 +1,4 @@
# GIT Deployment
# Git Deployment
> Subcommands new as of 0.12.0
@@ -8,11 +8,11 @@ git:report [<app>] [<flag>] # Displays a git report for one or more
git:set <app> <key> (<value>) # Set or clear a git property for an app
```
GIT-based deployment has been the traditional method of deploying applications in Dokku. As of v0.12.0, Dokku introduces a few ways to customize the experience of deploying via `git push`. A GIT-based deployment currently supports building applications via both [Buildpack](/docs/deployment/methods/buildpacks.md) and [Dockerfile](/docs/deployment/methods/dockerfiles.md).
Git-based deployment has been the traditional method of deploying applications in Dokku. As of v0.12.0, Dokku introduces a few ways to customize the experience of deploying via `git push`. A Git-based deployment currently supports building applications via both [Buildpack](/docs/deployment/methods/buildpacks.md) and [Dockerfile](/docs/deployment/methods/dockerfiles.md).
## Usage
### Initializing an Application
### Initializing an application
When an application is created via `git push`, Dokku will create the proper `pre-receive` hook in order to execute the build pipeline. In certain cases - such as when fronting deploys with the [`git-http-backend`](https://git-scm.com/docs/git-http-backend) - this may not be correctly created. As an alternative, the `git:initialize` command can be used to trigger this creation:
@@ -23,13 +23,13 @@ When an application is created via `git push`, Dokku will create the proper `pre
dokku git:initialize node-js-app
```
In order for the above command to succeed, the application _must_ already exist.
In order for the above command to succeed, the application *must* already exist.
> Warning: If the pre-receive hook was customized in any way, this will overwrite that hook with the current defaults for Dokku.
> Warning: If the `pre-receive` hook was customized in any way, this will overwrite that hook with the current defaults for Dokku.
### Changing the Deploy Branch
### Changing the deploy branch
By default, Dokku will deploy code pushed to the `master` branch. In order to quickly deploy a different local branch, the following GIT command can be used:
By default, Dokku will deploy code pushed to the `master` branch. In order to quickly deploy a different local branch, the following Git command can be used:
```shell
# on the local machine
@@ -53,11 +53,11 @@ dokku git:set node-js-app deploy-branch SOME_BRANCH_NAME
Pushing multiple branches can also be supported by creating a [receive-branch](/docs/development/plugin-triggers.md#receive-branch) plugin trigger in a custom plugin.
### Configuring the GIT_REV Environment Variable
### Configuring the `GIT_REV` environment variable
> New as of 0.12.0
Application deployments will include a special `GIT_REV` environment variable containing the current deployment sha being deployed. For rebuilds, this sha will remain the same.
Application deployments will include a special `GIT_REV` environment variable containing the current deployment sha being deployed. For rebuilds, this SHA will remain the same.
To configure the name of the `GIT_REV` environment variable, run the `git:set` command as follows:

View File

@@ -9,14 +9,14 @@ tags:deploy <app> <tag> # Deploy tagged app image
tags:destroy <app> <tag> # Remove app image tag
```
The Dokku tags plugin allows you to add docker image tags to the currently deployed app image for versioning and subsequent deployment.
The Dokku tags plugin allows you to add Docker image tags to the currently deployed app image for versioning and subsequent deployment.
> When triggering `dokku ps:rebuild APP` on an application deployed via the `tags` plugin, the following may occur:
>
> - Applications previously deployed via another method (`git`/`tar`): The application may revert to a state before the latest custom image tag was deployed.
> - Applications that were only ever deployed via the `tags` plugin: No action will be taken against your application.
>
> Please use the `tags:deploy` command when redeploying an application deployed via docker image.
> Please use the `tags:deploy` command when redeploying an application deployed via Docker image.
## Usage
@@ -40,7 +40,7 @@ dokku/node-js-app latest 936a42f25901 About a minute ago
### Creating a tag
You can also create new tags for that app using the `tags:create` function. Tags should conform to the docker tagging specification for your docker version. As of 1.10, that specification is available [here](https://github.com/docker/docker/blob/master/image/spec/v1.1.md), while users of older versions can check the documentation [here](https://github.com/docker/docker/blob/master/image/spec/v1.md).
You can also create new tags for that app using the `tags:create` function. Tags should conform to the Docker tagging specification for your Docker version. As of 1.10, that specification is available [here](https://github.com/docker/docker/blob/master/image/spec/v1.1.md), while users of older versions can check the documentation [here](https://github.com/docker/docker/blob/master/image/spec/v1.md).
```shell
dokku tags:create node-js-app v1
@@ -67,7 +67,7 @@ dokku/node-js-app v1 936a42f25901 About a minute ago
Finally, you can also deploy a local image using the `tags:deploy` command. When specifying a tag that is not `latest`, the released image will be retagged as the `latest` image tag for the app.
> Warning: For images based on herokuish, using the `tags:deploy` command will reset environment variables written into the image, causing a retag to occur. This will - on average - add two extra layers to your deployed image. Note that this does not affect dockerfile-based images, which are the majority of images deployed via the `tags` command.
> Warning: For images based on Herokuish, using the `tags:deploy` command will reset environment variables written into the image, causing a retag to occur. This will - on average - add two extra layers to your deployed image. Note that this does not affect Dockerfile-based images, which are the majority of images deployed via the `tags` command.
```shell
dokku tags:deploy node-js-app v1
@@ -100,31 +100,31 @@ dokku tags:deploy node-js-app v1
http://node-js-app.dokku.me
```
## Image Workflows
## Image workflows
### Deploying from a Docker Registry
### Deploying from a Docker registry
You can alternatively add image pulled from a docker Registry and deploy app from it by using tagging feature. In this example, we are deploying from Docker Hub.
You can alternatively add image pulled from a Docker registry and deploy from it by using tagging feature. In this example, we are deploying from Docker Hub.
1. Create Dokku app as usual
1. Create Dokku app as usual.
```shell
dokku apps:create test-app
```
2. Pull image from Docker Hub
2. Pull image from Docker Hub.
```shell
docker pull demo-repo/some-image:v12
```
3. Retag the image to match the created app
3. Retag the image to match the created app.
```shell
docker tag demo-repo/some-image:v12 dokku/test-app:v12
```
4. Deploy tag
4. Deploy tag.
```shell
dokku tags:deploy test-app v12
@@ -137,22 +137,22 @@ artifacts in your repository. For some projects however, building artifacts duri
to Dokku may affect the performance of running applications.
One solution is to build a finished Docker image on a CI service (or even locally) and deploy
it directly to the host running dokku.
it directly to the host running Dokku.
1. Build image on CI (or locally)
1. Build image on CI (or locally).
```shell
docker build -t dokku/test-app:v12 .
# Note: The image must be tagged `dokku/<app-name>:<version>`
```
2. Deploy image to Dokku host
2. Deploy image to Dokku host.
```shell
docker save dokku/test-app:v12 | ssh my.dokku.host "docker load | dokku tags:deploy test-app v12"
```
> Note: You can also use a Docker Registry to push and pull
> Note: You can also use a Docker registry to push and pull
> the image rather than uploading it directly.
Here's a more complete example using the above method:
@@ -167,6 +167,6 @@ ssh my.dokku.host "dokku tags:create test-app previous; dokku tags:deploy test-a
```
## Related articles
- [Setting up Persistent Storage](/docs/advanced-usage/persistent-storage.md)
- [Defining Environment Variables](/docs/configuration/environment-variables.md)
- [Setting up the Ports](/docs/advanced-usage/proxy-management.md)
- [Setting up persistent storage](/docs/advanced-usage/persistent-storage.md)
- [Defining environment variables](/docs/configuration/environment-variables.md)
- [Setting up the ports](/docs/advanced-usage/proxy-management.md)

View File

@@ -18,7 +18,7 @@ tar:in <app> # Reads an tarball containing the
### Deploying from a tarball
In some cases, it may be useful to deploy an application from a tarball. For instance, if you implemented a non-git based deployment plugin, tarring the generated artifact may be an easier route to interface with the existing Dokku infrastructure.
In some cases, it may be useful to deploy an application from a tarball. For instance, if you implemented a non-Git based deployment plugin, tarring the generated artifact may be an easier route to interface with the existing Dokku infrastructure.
You can place the tarball on an external webserver and deploy via the `tar:from` command.

View File

@@ -5,7 +5,7 @@ Sometimes you need to either inspect running containers or run a one-off command
## Run a command in an app environment
```
run <app> <cmd> # Run a command in a new container using the current application image
run [ --env KEY=VALUE | -e KEY=VALUE ] <app> <cmd> # Run a command in a new container using the current application image
```
The `run` command can be used to run a one-off process for a specific command. This will start a new container and run the desired command within that container. Note that this container will be stay around even after command completes. The container will be the same container as was used to start the currently deployed application.
@@ -13,6 +13,9 @@ The `run` command can be used to run a one-off process for a specific command. T
```shell
# runs `ls -lah` in the `/app` directory of the application `node-js-app`
dokku run node-js-app ls -lah
# optionally, run can be passed custom environment variables
dokku run --env "NODE_ENV=development" --env "PATH=/custom/path" node-js-app npm run mytask
```
The `run` command can also be used to run a command defined in your Procfile:
@@ -61,7 +64,7 @@ dokku --rm run node-js-app some-command
dokku --rm-container run node-js-app some-command
```
For tasks that should not be interrupted, run is the **preferred** method of handling cron tasks, as the container will continue running even during a deploy or scaling event. The trade-off is that there will be an increase in memory usage if there are multiple concurrent tasks running.
For tasks that should not be interrupted, run is the *preferred* method of handling cron tasks, as the container will continue running even during a deploy or scaling event. The trade-off is that there will be an increase in memory usage if there are multiple concurrent tasks running.
## Entering existing containers
@@ -79,7 +82,7 @@ dokku enter node-js-app web.1
dokku enter node-js-app --container-id ID
```
Additionally, you can run `enter` with no container-type. If only a single container-type is defined in your app, you will be dropped into the only running container. This behavior is not supported when specifying a custom command; as described below.
Additionally, you can run `enter` with no `<container-type>`. If only a single `<container-type>` is defined in your app, you will be dropped into the only running container. This behavior is not supported when specifying a custom command; as described below.
By default, it runs a `/bin/bash`, but can also be used to run a custom command:
@@ -93,7 +96,7 @@ dokku enter node-js-app web python script/background-worker.py
### Using `enter` for cron tasks
Your procfile can have the following entry:
Your Procfile can have the following entry:
```Procfile
cron: sleep infinity
@@ -113,28 +116,28 @@ dokku enter node-js-app cron some-command
Note that you can also run multiple commands at the same time to reduce memory usage, though that may result in polluting the container environment.
For tasks that will properly resume, you **should** use the above method, as running tasks will be interrupted during deploys and scaling events, and subsequent commands will always run with the latest container. Note that if you scale the cron container down, this may interrupt proper running of the task.
For tasks that will properly resume, you *should* use the above method, as running tasks will be interrupted during deploys and scaling events, and subsequent commands will always run with the latest container. Note that if you scale the cron container down, this may interrupt proper running of the task.
## General Cron Recommendations
## General cron recommendations
Regularly scheduled tasks can be a bit of a pain with dokku. The following are general recommendations to follow to help ensure successful task runs.
Regularly scheduled tasks can be a bit of a pain with Dokku. The following are general recommendations to follow to help ensure successful task runs.
- Use the `dokku` user's crontab
- If you do not, the `dokku` binary will attempt to execute with `sudo` dokku, and your cron run with fail with `sudo: no tty present and no askpass program specified`
- Use the `dokku` user's crontab.
- If you do not, the `dokku` binary will attempt to execute with `sudo`, and your cron run with fail with `sudo: no tty present and no askpass program specified`.
- Add a `MAILTO` environment variable to ship cron emails to yourself.
- Add a `PATH` environment variable or specify the full path to binaries on the host.
- Add a `SHELL` environment variable to specify bash when running commands.
- Add a `SHELL` environment variable to specify Bash when running commands.
- Keep your cron tasks in time-sorted order.
- Keep your server time in UTC so you don't need to translate daylight saving's time when reading the cronfile.
- Keep your server time in UTC so you don't need to translate daylight savings time when reading the cronfile.
- Run tasks at the lowest traffic times if possible.
- Use cron to **trigger** jobs, not run them. Use a real queuing system such as rabbitmq to actually process jobs.
- Use cron to *trigger* jobs, not run them. Use a real queuing system such as rabbitmq to actually process jobs.
- Try to keep tasks quiet so that mails only send on errors.
- Do not silence standard error or standard out. If you silence the former, you will miss failures. Silencing the latter means you should actually make application changes to handle log levels.
- Use a service such as [Dead Man's Snitch](https://deadmanssnitch.com) to verify that cron tasks completed successfully.
- Add lots of comments to your cronfile, including what a task is doing, so that you don't spend time deciphering the file later.
- Place your cronfiles in a pattern such as `/etc/cron.d/APP`.
- Do not use non-ascii characters in your cronfile names. Cron is finicky.
- Remember to have trailing newlines in your cronfile! Cron is finicky.
- Do not use non-ASCII characters in your cronfile names. cron is finicky.
- Remember to have trailing newlines in your cronfile! cron is finicky.
The following is a sample cronfile that you can use for your applications:

View File

@@ -21,7 +21,7 @@ ps:stopall # Stop all app container(s)
By default, Dokku will only start a single `web` process - if defined - though process scaling can be managed by the `ps` plugin or [via a custom `DOKKU_SCALE` file](/docs/deployment/process-management.md#manually-managing-process-scaling).
> The `web` proctype is the only proctype that will invoke custom checks as defined by a CHECKS file. It is also the only process type that will be launched in a container that is either proxied via nginx or bound to an external port.
> The `web` proctype is the only proctype that will invoke custom checks as defined by a `CHECKS` file. It is also the only process type that will be launched in a container that is either proxied via nginx or bound to an external port.
## Usage
@@ -47,7 +47,7 @@ This command will gather all the running container IDs for your application and
### Rebuilding applications
There are some Dokku commands which will not automatically rebuild an application's environment, or which can be told to skip a rebuild. For instance, you may wish to run multiple `config:set` commands without a restart so as to speed up configuration. In these cases, you can ultimately trigger an application rebuild using `ps:rebuild`
There are some Dokku commands which will not automatically rebuild an application's environment, or which can be told to skip a rebuild. For instance, you may wish to run multiple `config:set` commands without a restart so as to speed up configuration. In these cases, you can ultimately trigger an application rebuild using `ps:rebuild`
```shell
dokku ps:rebuild node-js-app
@@ -60,13 +60,13 @@ dokku ps:rebuildall
```
> The `ps:rebuild` and `ps:rebuildall` commands only work for applications for which there is a source, and thus
> will only always work deterministically for git-deployed application. Please see
> will only always work deterministically for Git-deployed application. Please see
> the [images documentation](/docs/deployment/methods/images.md) and [tar documentation](/docs/deployment/methods/tar.md)
> in for more information concerning rebuilding those applications.
### Restarting applications
Applications can be restarted, which is functionally identical to calling the `release_and_deploy` function on an application. Please not that any linked containers *must* be started before the application in order to have a successful boot.
Applications can be restarted, which is functionally identical to calling the `release_and_deploy` function on an application. Please note that any linked containers *must* be started before the application in order to have a successful boot.
```shell
dokku ps:restart node-js-app
@@ -108,7 +108,7 @@ dokku ps:scale node-js-app
### Stopping applications
Deployed applications can be stopped using the `ps:stop` command. This turns off all running containers for an application, and will result in a `502 Bad Gateway` response for the default nginx proxy implementation.
Deployed applications can be stopped using the `ps:stop` command. This turns off all running containers for an application, and will result in a **502 Bad Gateway** response for the default nginx proxy implementation.
```shell
dokku ps:stop node-js-app
@@ -130,7 +130,7 @@ dokku ps:start node-js-app
### Starting all applications
In some cases, it may be necessary to start all applications from scratch - eg. if all Docker containers have been manually stopped. This can be executed via the `ps:startall` command, which supports parallelism in the same manner `ps:rebuildall`, `ps:restartall`, and `ps:stopall` do.
In some cases, it may be necessary to start all applications from scratch - e.g. if all Docker containers have been manually stopped. This can be executed via the `ps:startall` command, which supports parallelism in the same manner `ps:rebuildall`, `ps:restartall`, and `ps:stopall` do.
Be aware that no action will be taken if the application containers are running.
@@ -138,7 +138,7 @@ Be aware that no action will be taken if the application containers are running.
dokku ps:startall
```
## Restart Policies
## Restart policies
> New as of 0.7.0
@@ -210,7 +210,7 @@ Restart policies have no bearing on server reboot, and Dokku will always attempt
## Manually managing process scaling
You can optionally _commit_ a `DOKKU_SCALE` file to the root of your repository - *not* to the /home/dokku/APP directory. Dokku expects this file to contain one line for every process defined in your Procfile.
You can optionally *commit* a `DOKKU_SCALE` file to the root of your repository - *not* to the `/home/dokku/APP` directory. Dokku expects this file to contain one line for every process defined in your Procfile.
Example:
@@ -221,4 +221,4 @@ worker=2
If it is not committed to the repository, the `DOKKU_SCALE` file will otherwise be automatically generated based on your `ps:scale` settings.
> *NOTE*: Dokku will always use the DOKKU_SCALE file that ships with the repo to override any local settings.
> *NOTE*: Dokku will always use the `DOKKU_SCALE` file that ships with the repo to override any local settings.

View File

@@ -1,6 +1,6 @@
# Remote Commands
Dokku commands can be run over ssh. Anywhere you would run `dokku <command>`, just run `ssh -t dokku@dokku.me <command>`
Dokku commands can be run over SSH. Anywhere you would run `dokku <command>`, just run `ssh -t dokku@dokku.me <command>`
The `-t` is used to request a pty. It is highly recommended to do so.
To avoid the need to type the `-t` option each time, simply create/modify a section in the `.ssh/config` on the client side, as follows:
@@ -11,8 +11,8 @@ Host dokku.me
## Behavioral modifiers
Dokku also supports certain command-line arguments that augment it's behavior. If using these over ssh, you must use the form `ssh -t dokku@dokku.me -- <command>`
in order to avoid ssh interpretting Dokku arguments for itself.
Dokku also supports certain command line arguments that augment its behavior. If using these over SSH, you must use the form `ssh -t dokku@dokku.me -- <command>`
in order to avoid SSH interpretting Dokku arguments for itself.
```
--quiet suppress output headers

View File

@@ -8,17 +8,17 @@ ssh-keys:list # List of all authorized Dokku pu
ssh-keys:remove <name> # Remove SSH public key by name
```
When pushing to Dokku, ssh key based authorization is the preferred authentication method, for ease of use and increased security.
When pushing to Dokku, SSH key-based authorization is the preferred authentication method, for ease of use and increased security.
Users in Dokku are managed via the `~/dokku/.ssh/authorized_keys` file. It is **highly** recommended that you follow the steps below to manage users on a Dokku server.
Users in Dokku are managed via the `~/dokku/.ssh/authorized_keys` file. It is *highly* recommended that you follow the steps below to manage users on a Dokku server.
> Users of older versions of Dokku may use the `sshcommand` binary to manage keys instead of the `ssh-keys` plugin. Please refer to the Dokku documentation for your version for more details.
## Usage
### Listing SSH Keys
### Listing SSH keys
You can use the `ssh-keys:list` command to show all configured ssh keys. Any key added via the `dokku-installer` will be associated with the `admin` key name.
You can use the `ssh-keys:list` command to show all configured SSH keys. Any key added via the `dokku-installer` will be associated with the `admin` key name.
```shell
dokku ssh-keys:list
@@ -32,11 +32,11 @@ The output contains the following information:
- SSH Key Fingerprint.
- The `KEY_NAME`.
- A comma separated list of ssh options under the `SSHCOMMAND_ALLOWED_KEYS` name.
- A comma separated list of SSH options under the `SSHCOMMAND_ALLOWED_KEYS` name.
### Adding SSH Keys
### Adding SSH keys
You can add your public key to Dokku with the `ssh-keys:add` command. The output will be the fingerprint of the ssh key:
You can add your public key to Dokku with the `ssh-keys:add` command. The output will be the fingerprint of the SSH key:
```shell
dokku ssh-keys:add KEY_NAME path/to/id_rsa.pub
@@ -48,7 +48,7 @@ b7:76:27:4f:30:90:21:ae:d4:1e:70:20:35:3f:06:d6
`KEY_NAME` is the name you want to use to refer to this particular key. Including the word `admin` in the name will grant the user privileges to add additional keys remotely.
> `KEY_NAME` is a unique name which is used to identify public keys. Attempting to re-use a key name will result in an error. The ssh (git) user is *always* `dokku`, as this is the system user that the `dokku` binary uses to perform all it's actions.
> `KEY_NAME` is a unique name which is used to identify public keys. Attempting to re-use a key name will result in an error. The SSH (Git) user is *always* `dokku`, as this is the system user that the `dokku` binary uses to perform all its actions.
Admin users and root can add keys remotely by specifying the `dokku` bin on their `ssh` command:
@@ -56,15 +56,15 @@ Admin users and root can add keys remotely by specifying the `dokku` bin on thei
cat ~/.ssh/id_rsa.pub | ssh root@dokku.me dokku ssh-keys:add KEY_NAME
```
If you are using the vagrant installation, you can also use the `make vagrant-acl-add` target to add your public key to Dokku (it will use your host username as the `USER`):
If you are using the Vagrant installation, you can also use the `make vagrant-acl-add` target to add your public key to Dokku (it will use your host username as the `USER`):
```shell
cat ~/.ssh/id_rsa.pub | make vagrant-acl-add
```
### Removing SSH Keys
### Removing SSH keys
As key names are unique, they can be used to remove a public ssh key.
As key names are unique, they can be used to remove a public SSH key.
```SHELL
dokku ssh-keys:remove KEY_NAME
@@ -76,7 +76,7 @@ Keys are given unique names, which can be used in conjunction with the [user-aut
## Granting other Unix user accounts Dokku access
Any Unix user account which belongs to the 'sudo' Unix group can run Dokku. However, you may want to give them Dokku access but not full sudo privileges.
Any Unix user account which belongs to the `sudo` Unix group can run Dokku. However, you may want to give them Dokku access but not full sudo privileges.
To allow other Unix user accounts to be able to run Dokku commands, without giving them full sudo access, modify your sudoers configuration.

View File

@@ -11,7 +11,7 @@ checks:run <app> [process-type(s)] Runs zero-downtime checks for all proce
checks:skip <app> [process-type(s)] Skip zero-downtime checks for all processes (or comma-separated process-type list)
```
By default, Dokku will wait `10` seconds after starting each container before assuming it is up and proceeding with the deploy. Once this has occurred for all containers started by for an application, traffic will be switched to point to your new containers. Dokku will also wait a further `60` seconds _after_ the deploy is complete before terminating old containers in order to give time for long running connections to terminate. In either case, you may have more than one container running for a given application.
By default, Dokku will wait `10` seconds after starting each container before assuming it is up and proceeding with the deploy. Once this has occurred for all containers started by for an application, traffic will be switched to point to your new containers. Dokku will also wait a further `60` seconds *after* the deploy is complete before terminating old containers in order to give time for long running connections to terminate. In either case, you may have more than one container running for a given application.
You may both create user-defined checks for web processes using a `CHECKS` file, as well as customize any and all parts of this experience using the checks plugin.
@@ -19,17 +19,17 @@ You may both create user-defined checks for web processes using a `CHECKS` file,
> as the Django framework - checks for specific hostnames or header values, these
> checks will fail. To avoid this:
>
> - Remove such checks from your code: Modify your application to remove the hostname check completely
> - Allow checks from all hostnames: Modify your application to accept a dynamically provided hostname
> - Specify the domain within the check: See below for further documentation
> - Remove such checks from your code: Modify your application to remove the hostname check completely.
> - Allow checks from all hostnames: Modify your application to accept a dynamically provided hostname.
> - Specify the domain within the check: See below for further documentation.
## Configuring Check Settings using the `config` plugin
## Configuring check settings using the `config` plugin
There are certain settings that can be configured via environment variables:
- `DOKKU_DEFAULT_CHECKS_WAIT`: (default: `10`) If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running.
- `DOKKU_DOCKER_STOP_TIMEOUT`: (default: `10`) Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands _also_ respect this value. If not specified, the docker defaults for the [docker stop command](https://docs.docker.com/engine/reference/commandline/stop/) will be used.
- `DOKKU_WAIT_TO_RETIRE`: (default: `60`) After a successful deploy, the grace period given to old containers before they are stopped/terminated. This is useful for ensuring completion of long-running http connections.
- `DOKKU_DOCKER_STOP_TIMEOUT`: (default: `10`) Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands *also* respect this value. If not specified, the Docker defaults for the [`docker stop` command](https://docs.docker.com/engine/reference/commandline/stop/) will be used.
- `DOKKU_WAIT_TO_RETIRE`: (default: `60`) After a successful deploy, the grace period given to old containers before they are stopped/terminated. This is useful for ensuring completion of long-running HTTP connections.
The following settings may also be specified in the `CHECKS` file, though are available as environment variables in order to ease application reuse.
@@ -56,7 +56,7 @@ dokku checks:skip node-js-app worker,web
DOKKU_CHECKS_SKIPPED: worker,web
```
Zero-downtime checks can also be disabled completely. This will stop old containers **before** new ones start, which may result in broken connections and downtime if your application fails to boot properly.
Zero downtime checks can also be disabled completely. This will stop old containers *before* new ones start, which may result in broken connections and downtime if your application fails to boot properly.
```shell
dokku checks:disable node-js-app worker
@@ -70,7 +70,7 @@ dokku checks:disable node-js-app worker
DOKKU_CHECKS_SKIPPED: web
```
### Displaying checks reports about an app
### Displaying checks reports for an app
> New as of 0.8.1
@@ -81,13 +81,13 @@ dokku checks:report
```
```
=====> search checks information
=====> node-js-app checks information
Checks disabled list: none
Checks skipped list: none
=====> python-sample checks information
=====> python-app checks information
Checks disabled list: none
Checks skipped list: none
=====> ruby-sample checks information
=====> ruby-app checks information
Checks disabled list: _all_
Checks skipped list: none
```
@@ -95,11 +95,11 @@ dokku checks:report
You can run the command for a specific app also.
```shell
dokku checks:report node-js-sample
dokku checks:report node-js-app
```
```
=====> node-js-sample checks information
=====> node-js-app checks information
Checks disabled list: none
Checks skipped list: none
```
@@ -107,25 +107,25 @@ dokku checks:report node-js-sample
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku checks:report node-js-sample --checks-disabled-list
dokku checks:report node-js-app --checks-disabled-list
```
## Customizing Checks
## Customizing checks
If your application needs a longer period to boot up - perhaps to load data into memory, or because of slow boot time - you may also use dokku's `checks` functionality to more precisely check whether an application can serve traffic or not.
If your application needs a longer period to boot up - perhaps to load data into memory, or because of slow boot time - you may also use Dokku's `checks` functionality to more precisely check whether an application can serve traffic or not.
Checks are run against the detected `web` process from your application's `Procfile`. For non-web processes, Dokku will fallback to the aforementioned process uptime check.
To specify checks, add a `CHECKS` file to the root of your project directory. The `CHECKS` file should be plain text and may contain:
- Check instructions
- Settings (NAME=VALUE)
- Comments (lines starting with #)
- Empty lines
- check instructions
- settings (NAME=VALUE)
- comments (lines starting with #)
- empty lines
> For dockerfile-based deploys, the file *must* be in `/app/CHECKS` within the container. `/app` is used by default as the root container directory for buildpack-based deploys.
> For Dockerfile-based deploys, the file *must* be in `/app/CHECKS` within the container. `/app` is used by default as the root container directory for buildpack-based deploys.
### Check Instructions
### Check instructions
The format of a check instruction is a path or relative URL, optionally followed by the expected content:
@@ -156,9 +156,9 @@ https://admin.dokku.me Admin Dashboard
https://static.dokku.me/logo.png
```
While a full url may be used in order to invoke checks, if you are using relative urls, the port *must* be omitted.
While a full URL may be used in order to invoke checks, if you are using relative URLs, the port *must* be omitted.
### Check Settings
### Check settings
The default behavior is to wait for `5` seconds before running the checks, to timeout the checks after `30` seconds, and to attempt the checks `5` times. If the checks fail `5` times, the deployment is considered failed and the old container will continue serving traffic.
@@ -172,7 +172,7 @@ ATTEMPTS=10 # Attempt checks 10 times
/ My Amazing App
```
## Manually Invoking Checks
## Manually invoking checks
Checks can also be manually invoked via the `checks:run` command. This can be used to check the status of an application via cron to provide integration with external healthchecking software.
@@ -220,7 +220,7 @@ dokku checks:run node-js-app worker
-----> Default container check successful!
```
An app process id may also be specified:
An app process ID may also be specified:
```shell
dokku checks:run node-js-app web.2
@@ -247,7 +247,7 @@ dokku checks:run node-js-app non-existent
Invalid process type specified (APP.non-existent)
```
Non-existent process ids will *also* result in an error
Non-existent process IDs will *also* result in an error
```shell
dokku checks:run node-js-app web.3
@@ -258,11 +258,11 @@ dokku checks:run node-js-app web.3
Invalid container id specified (APP.web.3)
```
## Example: Successful Rails Deployment
## Example: Successful Rails deployment
In this example, a Rails application is successfully deployed to dokku. The initial round of checks fails while the server is starting, but once it starts they succeed and the deployment is successful. `WAIT` is set to `10` because our application takes a while to boot up. `ATTEMPTS` is set to `6`, but the third attempt succeeds.
In this example, a Rails application is successfully deployed to Dokku. The initial round of checks fails while the server is starting, but once it starts they succeed and the deployment is successful. `WAIT` is set to `10` because our application takes a while to boot up. `ATTEMPTS` is set to `6`, but the third attempt succeeds.
### CHECKS file
### `CHECKS` file
```
WAIT=10
@@ -276,9 +276,9 @@ For this check to work, we've added a line to `config/routes.rb` that simply ret
get '/check.txt', to: proc {[200, {}, ['simple_check']]}
```
### Deploy Output
### Deploy output
> Note: The output has been trimmed for brevity
> Note: The output has been trimmed for brevity.
```shell
git push dokku master
@@ -334,13 +334,13 @@ curl: (7) Failed to connect to 172.17.0.155 port 5000: Connection refused
http://myapp.dokku.me
```
## Example: Failing Rails Deployment
## Example: Failing Rails deployment
In this example, a Rails application fails to deploy. The reason for the failure is that the postgres database connection fails. The initial checks will fail while we wait for the server to start up, just like in the above example. However, once the server does start accepting connections, we will see an error 500 due to the postgres database connection failure.
In this example, a Rails application fails to deploy. The reason for the failure is that the PostgreSQL database connection fails. The initial checks will fail while we wait for the server to start up, just like in the above example. However, once the server does start accepting connections, we will see an error 500 due to the PostgreSQL database connection failure.
Once the attempts have been exceeded, the deployment fails and we see the container output, which shows the Postgres connection errors.
Once the attempts have been exceeded, the deployment fails and we see the container output, which shows the PostgreSQL connection errors.
### CHECKS file
### `CHECKS` file
```
WAIT=10
@@ -348,11 +348,11 @@ ATTEMPTS=6
/
```
> The check to the root url '/' would normally access the database.
> The check to the root url `/` would normally access the database.
### Deploy Output
### Deploy output
> Note: The output has been trimmed for brevity
> Note: The output has been trimmed for brevity.
```shell
git push dokku master

View File

@@ -1,57 +1,251 @@
# Plugin Creation
# Plugin creation
Plugins can simply be implementations of [triggers](/docs/development/plugin-triggers.md) or they may implement a command structure of their own. Dokku has no restrictions on the language in which a plugin is implemented, it only cares that the plugin implements the appropriate [commands](/docs/development/plugin-creation.md#command-api) or [triggers](/docs/development/plugin-triggers.md) API. NOTE: all files that implement the triggers or commands API must be executable.
A plugin can be a simple implementation of [triggers](/docs/development/plugin-triggers.md) or can implement a command structure of its own. Dokku has no restrictions on the language in which a plugin is implemented; it only cares that the plugin implements the appropriate [commands](/docs/development/plugin-creation.md#command-api) or [triggers](/docs/development/plugin-triggers.md) for the API. **NOTE:** any file that implements triggers or uses the command API must be executable.
If you create your own plugin:
When creating custom plugins:
1. Take a look at the plugins shipped with Dokku and hack away!
2. Check out the [list of triggers](/docs/development/plugin-triggers.md) 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](/docs/community/plugins.md) and add a link to it.
1. Take a look at [the plugins shipped with Dokku](/docs/community/plugins.md) and hack away!
2. Check out the [list of triggers](/docs/development/plugin-triggers.md) the plugin can implement
3. Upload the plugin to GitHub with a repository name following the `dokku-<name>` convention (e.g. `dokku-mariadb`)
4. Edit [this page](/docs/community/plugins.md) and add a link to the plugin
5. Subscribe to the [dokku development blog](http://progrium.com) to be notified about API changes and releases
## Compilable plugins (Golang, Java(?), C, etc.)
### Compilable Plugins (i.e. golang, java(?), c, etc.)
The plugin developer is required to implement the `install` trigger such that it will output your built executable(s) in the correct directory structure to implement the plugin's desired command and/or trigger API. See [smoke-test-plugin](https://github.com/dokku/smoke-test-plugin) for an example.
When developing a plugin, the `install` trigger must be implemented such that it outputs the built executable(s) using a directory structure that implements the plugin's desired command and/or triggers the API. See the [smoke-test-plugin](https://github.com/dokku/smoke-test-plugin) for an example.
## Command API
### Command API
There are 3 main implementation points: `commands`, `subcommands/default`, and `subcommands/<command-name>`
There are 3 main integration points: `commands`, `subcommands/default`, and `subcommands/<command-name>`.
#### commands
Primarily used to supply the plugin's usage/help output. (i.e. [plugin help](https://github.com/dokku/dokku/tree/master/plugins/plugin/commands))
### `commands`
#### subcommands/default
Implements the plugin's default command behavior. (i.e. [`dokku plugin`](https://github.com/dokku/dokku/tree/master/plugins/plugin/subcommands/default))
Primarily used to supply the plugin's usage/help output. (i.e. [plugin help](https://github.com/dokku/dokku/tree/master/plugins/plugin/commands)).
#### subcommands/<command-name>
Implements the additional command interface and will translate to `dokku plugin:cmd` on the command line. (i.e. [`dokku plugin:install`](https://github.com/dokku/dokku/tree/master/plugins/plugin/subcommands/install))
### `subcommands/default`
Implements the plugin's default command behavior. (i.e. [`dokku plugin`](https://github.com/dokku/dokku/tree/master/plugins/plugin/subcommands/default)).
### Sample plugin
The below plugin is a dummy `dokku hello` plugin.
### `subcommands/<command-name>`
hello/subcommands/default
Implements the additional command interface and will translate to `dokku plugin:cmd` on the command line. (i.e. [`dokku plugin:install`](https://github.com/dokku/dokku/tree/master/plugins/plugin/subcommands/install)).
# Plugin Building Tips
## Always create a `plugin.toml`
The `plugin.toml` file is used to describe the plugin in help output, and helps users understand the purpose of the plugin. This _must_ have a description and a version. The version _should_ be bumped at every plugin release.
```toml
[plugin]
description = "dokku example plugin"
version = "0.1.0"
[plugin.config]
```
## Files should be executable
Commands, subcommands, triggers and source shell scripts should all be executable. On a Unix-like machine, the following command can be used to make them executable:
```shell
chmod +x path/to/file
```
Non-executable commands, subcommands, and triggers will be ignored.
## Use the `pipefail` bash option
Consider whether to include the `set -eo pipefail` option. Look at the following example:
```shell
IMAGE=$(docker images | grep "user/repo" | awk '{print $3}')
if [[ -z $IMAGE ]]; then
dokku_log_fail "user/repo image not found... Did you run 'dokku plugin:install'?"
fi
```
If `user/repo` doesn't exist, Dokku exits just before the `awk` command and the `dokku_log_fail` message will never go to `STDOUT`. printed with echo. The `set -e` option should be used in this case.
Here is the `help` entry for `set`:
```
help set
Options:
-e Exit immediately if a command exits with a non-zero status.
-o option-name
pipefail the return value of a pipeline is the status of
the last command to exit with a non-zero status,
or zero if no command exited with a non-zero status
```
## Support trace mode
Trace mode is useful for getting debugging output from plugins when the `--trace` flag is specified or `dokku trace:on` is triggered. This should be done at the top of each shell script:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
```
In the above example, the third line enables bash's debug mode, which prints command traces before executing command.
## Verify the existence of dependencies
If a plugin depends on a specific command-line tool, check whether that tool exists before utilizing it. Either `command -v` or `which` may be used to do so:
```shell
# `command -v` example
if ! command -v "nginx" &>/dev/null; then
log-fail "Missing nginx, install it"
fi
# `which` example
if ! which nginx >/dev/null 2>&1; then
log-fail "Missing nginx, install it"
fi
```
In cases where a dependency should be installed before the plugin can be used at all, use the `dependencies` plugin trigger to install the dependency.
## Implement a help command
For plugins which expose commands, implement a `help` command. This may be empty, but should contain a listing of all available commands.
Commas - `,` - are used in the help output for columnizing output. Verify that the plugin conforms to the spec by running `dokku help --all` and manually verifying the output.
See the sample plugin below for an example.
## Namespace commands
All commands *should* be namespaced. In cases where a core plugin is overriden, the plugin _may_ utilize the a namespace in use by the core, but generally this should be avoided to reduce confusion as to where the command is implemented.
## Implement a proper catch-all command
As of 0.3.3, a catch-all should be implemented that exits with a `DOKKU_NOT_IMPLEMENTED_EXIT` code. This allows Dokku to output a `command not found` message.
See the sample plugin below for an example.
## Set app config without restarting
In the case that a plugin needs to set app configuration settings and a restart should be avoided (default Heroku-style behavior) these "internal" commands provide this functionality:
```shell
config_set --no-restart node-js-app KEY1=VALUE1 [KEY2=VALUE2 ...]
config_unset --no-restart node-js-app KEY1 [KEY2 ...]
```
## Expose functionality in a `functions` file
To allow other plugins access to (some of) a plugin's functionality, functions can expose by including a `functions` file in the plugin for others to source. All functions in that file should be considered publicly accessible by other plugins.
Any functions that must be kept private should reside in the plugin's `trigger/` or `commands/` directories. Other files may also be used to hide private functions; the official convention for hiding private functions is to place them an `internal-functions` file.
## Use helper functions to fetch app images
> New as of 0.4.0
Dokku allows image tagging and deployment of tagged images. This means hard-coding the `$IMAGE` as `dokku/$APP` is no longer sufficient.
Plugins should use `get_running_image_tag()` and `get_app_image_name()` as sourced from `common/functions`. See the [plugin triggers](/docs/development/plugin-triggers.md) doc for examples.
> **Note:** This is only for plugins that are not `pre/post-build-*` plugins
## Use `$DOCKER_BIN` instead of `docker` directly
> New as of 0.17.5
Certain systems may require a wrapper function around the `docker` binary for proper execution. Utilizing the `$DOCKER_BIN` environment variable when calling docker for those functions is preferred.
```shell
# good
"$DOCKER_BIN" run -d $IMAGE /bin/bash -e -c "$COMMAND"
# bad
docker run -d $IMAGE /bin/bash -e -c "$COMMAND"
```
## Include labels for all temporary containers and images
> New as of 0.5.0
As of 0.5.0, labels are used to help cleanup intermediate containers with `dokku cleanup`. Plugins that create containers and images should add the correct labels to the `build`, `commit`, and `run` docker commands.
Note that where possible, a label `com.dokku.app-name=$APP` - where `$APP` is the name of the app - should also be included. This enables `dokku cleanup APP` to cleanup the specific containers for a given app.
```shell
# `docker build` example
"$DOCKER_BIN" build "--label=com.dokku.app-name=${APP}" $DOKKU_GLOBAL_BUILD_ARGS ...
# `docker commit` example
# Note that the arguments must be set as a local array
# as arrays cannot be exported in shell
local DOKKU_COMMIT_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL $DOKKU_CONTAINER_LABEL=")
"$DOCKER_BIN" commit --change "LABEL com.dokku.app-name=$APP" "${DOKKU_COMMIT_ARGS[@]}" ...
# `docker run` example
"$DOCKER_BIN" run "--label=com.dokku.app-name=${APP}" $DOKKU_GLOBAL_RUN_ARGS ...
```
## Copy files from the built image using `copy_from_image`
Avoid copying files from running containers as these files may change over time. Instead copy files from the image built during the deploy process. This can be done via the `copy_from_image` helper function. This will correctly handle various corner cases in copying files from an image.
```shell
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
local TMP_FILE=$(mktemp "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
trap "rm -rf '$TMP_FILE' >/dev/null" RETURN INT TERM
local IMAGE_TAG="$(get_running_image_tag "$APP")"
local IMAGE=$(get_deploying_app_image_name "$APP" "$IMAGE_TAG")
copy_from_image "$IMAGE" "file-being-copied" "$TMP_FILE" 2>/dev/null
```
Files are copied from the `/app` directory - for images built via buildpacks - or `WORKDIR` - for images built via Dockerfile.
## Avoid calling the `dokku` binary directly
> New as of 0.6.0
Plugins should **not** call the `dokku` binary directly from within plugins because clients using the `--app` argument are potentially broken when doing so.
Plugins should instead source the `functions` file for a given plugin when attempting to call Dokku internal functions.
# Sample plugin
The below plugin is a dummy `dokku hello` plugin.
Each plugin requires a `plugin.toml` descriptor file with the following required fields:
```toml
[plugin]
description = "dokku hello plugin"
version = "0.1.0"
[plugin.config]
```
`hello/subcommands/default`
```shell
#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
hello_main_cmd() {
declare desc="prints Hello \$APP"
local cmd="hello"
declare cmd="hello" argv=("$@")
[[ ${argv[0]} == "$cmd" ]] && shift 1
# Support --app/$DOKKU_APP_NAME flag
# Use the following lines to reorder args into "$cmd $DOKKU_APP_NAME $@""
local argv=("$@")
[[ ${argv[0]} == "$cmd" ]] && shift 1
[[ ! -z $DOKKU_APP_NAME ]] && set -- $DOKKU_APP_NAME $@
[[ -n $DOKKU_APP_NAME ]] && set -- $DOKKU_APP_NAME $@
set -- $cmd $@
##
#
declare APP="$1"
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
verify_app_name "$2"
local APP="$2";
[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
verify_app_name "$APP"
echo "Hello $APP"
}
@@ -59,27 +253,18 @@ hello_main_cmd() {
hello_main_cmd "$@"
```
hello/subcommands/world
`hello/subcommands/world`
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
hello_world_cmd() {
declare desc="prints Hello World"
local cmd="hello:world"
# Support --app/$DOKKU_APP_NAME flag
# Use the following lines to reorder args into "$cmd $DOKKU_APP_NAME $@""
local argv=("$@")
declare desc="prints Hello world"
declare cmd="hello:world" argv=("$@")
[[ ${argv[0]} == "$cmd" ]] && shift 1
[[ ! -z $DOKKU_APP_NAME ]] && set -- $DOKKU_APP_NAME $@
set -- $cmd $@
##
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
verify_app_name "$2"
local APP="$2";
echo "Hello world"
}
@@ -87,11 +272,12 @@ hello_world_cmd() {
hello_world_cmd "$@"
```
hello/commands
`hello/commands`
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
case "$1" in
help | hello:help)
@@ -126,53 +312,3 @@ help_content
esac
```
Each plugin requires a `plugin.toml` descriptor file with the following required fields:
```toml
[plugin]
description = "dokku hello plugin"
version = "0.1.0"
[plugin.config]
```
A few notes:
- Don't forget to `chmod +x` your executable files.
- 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. 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 :
```shell
IMAGE=$(docker images | grep "user/repo" | awk '{print $3}')
if [[ -z $IMAGE ]]; then
dokku_log_fail "user/repo image not found... Did you run 'dokku plugin:install'?"
fi
```
In the case where the "user/repo" is not installed, Dokku exits just before the awk command,
you will never see the message printed with echo. You just want "set -e" in this case.
Here is the documentation of the 'set -eo pipefail' option:
```
help set
Options:
-e Exit immediately if a command exits with a non-zero status.
-o option-name
pipefail the return value of a pipeline is the status of
the last command to exit with a non-zero status,
or zero if no command exited with a non-zero status
```
- As some plugins require access to set app config settings and do not want/require the default Heroku-style behavior of a restart, we have the following "internal" commands that provide this functionality :
```shell
dokku config:set --no-restart node-js-app KEY1=VALUE1 [KEY2=VALUE2 ...]
dokku config:unset --no-restart node-js-app KEY1 [KEY2 ...]
```
- From time to time you may want to allow other plugins access to (some of) your plugin's functionality. You can expose this by including a `functions` file in your plugin for others to source. Consider all functions in that file to be publicly accessible by other plugins. Any functions not wished to be made "public" should reside within your plugin trigger or commands files.
- As of 0.4.0, we allow image tagging and deployment of said tagged images. Therefore, hard-coding of `$IMAGE` as `dokku/$APP` is no longer sufficient. Instead, for non `pre/post-build-*` plugins, use `get_running_image_tag()` & `get_app_image_name()` as sourced from common/functions. See the [plugin triggers](/docs/development/plugin-triggers.md) doc for examples.
- As of 0.5.0, we use container labels to help cleanup intermediate containers with `dokku cleanup`. If manually calling `docker run`, include `$DOKKU_GLOBAL_RUN_ARGS`. This will ensure you intermediate containers labeled correctly.
- As of 0.6.0, we advise you to *not* call the `dokku` binary directly from within plugins. Clients using the `--app` argument are potentially broken, amongst other issues, when doing so. Instead, please source the `functions` file for a given plugin when attempting to call Dokku internal functions

View File

@@ -29,6 +29,21 @@ The following plugin triggers describe those available to a Dokku installation.
> The example plugin trigger code is not guaranteed to be implemented as in within dokku, and are merely simplified examples. Please look at the Dokku source for larger, more in-depth examples.
### `app-restart`
- Description: Triggers an app restart
- Invoked by: `dokku config:clear`, `dokku config:set`, `dokku config:unset`
- Arguments: `$APP`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `app-urls`
- Description: Allows you to change the urls Dokku reports for an application. Will override any auto-detected urls.
@@ -53,6 +68,66 @@ case "$URL_TYPE" in
esac
```
### `builder-build`
- Description: Triggers the artifact build process
- Invoked by: `dokku deploy`
- Arguments: `$BUILDER_TYPE` `$APP` `$SOURCECODE_WORK_DIR`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `builder-create-dokku-image`
- Description: Allows modification of the configured dokku-image
- Invoked by: `dokku deploy`
- Arguments: `$BUILDER_TYPE` `$APP` `$SOURCECODE_WORK_DIR` `$DOKKU_IMAGE`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `builder-dokku-image`
- Description: Allows modification of the used dokku-image.
- Invoked by: `dokku deploy`
- Arguments: `$BUILDER_TYPE` `$APP` `$SOURCECODE_WORK_DIR` `$DOKKU_IMAGE`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `builder-release`
- Description: Triggers the artifact release process
- Invoked by: `dokku deploy`
- Arguments: `$BUILDER_TYPE` `$APP` `$IMAGE_TAG`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `check-deploy`
- Description: Allows you to run checks on a deploy before Dokku allows the container to handle requests.
@@ -248,6 +323,8 @@ echo 'derp.dkr.ecr.us-east-1.amazonaws.com'
### `docker-args-build`
> Warning: Deprecated, please use `docker-args-process-build` instead
- Description:
- Invoked by: `internal function dokku_build() (build phase)`
- Arguments: `$APP $IMAGE_SOURCE_TYPE`
@@ -271,6 +348,8 @@ echo -n "$STDIN$output"
### `docker-args-deploy`
> Warning: Deprecated, please use `docker-args-process-deploy` instead
- Description:
- Invoked by: `dokku deploy`
- Arguments: `$APP $IMAGE_TAG [$PROC_TYPE $CONTAINER_INDEX]`
@@ -287,8 +366,64 @@ verify_app_name "$APP"
# TODO
```
### `docker-args-process-build`
- Description: `$PROC_TYPE` may be set to magic `_all_` process type to signify global docker deploy options.
- Invoked by: `dokku ps:rebuild`
- Arguments: `$APP $IMAGE_TAG $IMAGE_SOURCE_TYPE`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
verify_app_name "$APP"
# TODO
```
### `docker-args-process-deploy`
- Description: `$PROC_TYPE` may be set to magic `_all_` process type to signify global docker deploy options.
- Invoked by: `dokku deploy`
- Arguments: `$APP $IMAGE_TAG $IMAGE_SOURCE_TYPE [$PROC_TYPE $CONTAINER_INDEX]`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
verify_app_name "$APP"
# TODO
```
### `docker-args-process-run`
- Description: `$PROC_TYPE` may be set to magic `_all_` process type to signify global docker run options.
- Invoked by: `dokku run`
- Arguments: `$APP $IMAGE_TAG $IMAGE_SOURCE_TYPE`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
verify_app_name "$APP"
# TODO
```
### `docker-args-run`
> Warning: Deprecated, please use `docker-args-process-run` instead
- Description:
- Invoked by: `dokku run`
- Arguments: `$APP $IMAGE_TAG`
@@ -339,6 +474,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
since it does not get called for commands that use `git-upload-archive` such
as `git archive`. Instead, use the [`user-auth`](#user-auth) trigger.
### `git-revision`
- Description: Allows you to fetch the current git revision for a given application
- Invoked by:
- Arguments: `$APP`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `install`
- Description: Used to setup any files/configuration for a plugin.
@@ -529,6 +679,8 @@ echo "$NEW_SUBDOMAIN.$VHOST"
### `nginx-pre-reload`
> Warning: The arguments INTERNAL_PORT and INTERNAL_IP_ADDRESS are no longer sufficient to retrieve all app listeners. Please run `plugn trigger network-get-listeners APP` within any implementation of `nginx-pre-reload` in order to retrieve all application listeners.
- Description: Run before nginx reloads hosts
- Invoked by: `dokku nginx:build-config`
- Arguments: `$APP $INTERNAL_PORT $INTERNAL_IP_ADDRESS`
@@ -593,7 +745,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
- Description: Allows you to run commands after the build image is create for a given app. Only applies to apps using buildpacks.
- Invoked by: `internal function dokku_build() (build phase)`
- Arguments: `$APP`
- Arguments: `$APP` `$SOURCECODE_WORK_DIR`
- Example:
```shell
@@ -760,9 +912,10 @@ APP="$1"; verify_app_name "$APP"
TMP_WORK_DIR="$2"
REV="$3" # optional, may not be sent for tar-based builds
pushd "$TMP_WORK_DIR" > /dev/null
pushd "$TMP_WORK_DIR" >/dev/null
touch Procfile
echo "clock: some-command" >> Procfile
popd >/dev/null
```
### `post-proxy-ports-update`
@@ -804,12 +957,13 @@ verify_app_name "$APP"
dokku_log_info1 "Installing $CONTAINER_PACKAGE..."
CMD="cat > gm && \
dpkg -s CONTAINER_PACKAGE > /dev/null 2>&1 || \
dpkg -s CONTAINER_PACKAGE >/dev/null 2>&1 || \
(apt-get update && apt-get install -y CONTAINER_PACKAGE && apt-get clean)"
ID=$(docker run $DOKKU_GLOBAL_RUN_ARGS -i -a stdin $IMAGE /bin/bash -c "$CMD")
test $(docker wait $ID) -eq 0
docker commit $ID $IMAGE > /dev/null
CID=$(docker run $DOKKU_GLOBAL_RUN_ARGS -i -a stdin $IMAGE /bin/bash -c "$CMD")
test $(docker wait $CID) -eq 0
DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP")
docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null
```
### `post-release-dockerfile`
@@ -852,7 +1006,7 @@ dokku config:set --no-restart $APP MANUALLY_STOPPED=1
- Description: Allows you to run commands before the build image is created for a given app. For instance, this can be useful to add env vars to your container. Only applies to apps using buildpacks.
- Invoked by: `internal function dokku_build() (build phase)`
- Arguments: `$APP`
- Arguments: `$APP` `$SOURCECODE_WORK_DIR`
- Example:
```shell
@@ -896,7 +1050,7 @@ APP="$1"; GULP_CACHE_DIR="$DOKKU_ROOT/$APP/gulp"; IMAGE=$(get_app_image_name $AP
verify_app_name "$APP"
if [[ -d $GULP_CACHE_DIR ]]; then
docker run $DOKKU_GLOBAL_RUN_ARGS --rm -v "$GULP_CACHE_DIR:/gulp" "$IMAGE" find /gulp -depth -mindepth 1 -maxdepth 1 -exec rm -Rf {} \; || true
docker run "${DOCKER_COMMIT_LABEL_ARGS[@]}" --rm -v "$GULP_CACHE_DIR:/gulp" "$IMAGE" find /gulp -depth -mindepth 1 -maxdepth 1 -exec rm -Rf {} \; || true
fi
```
@@ -917,10 +1071,10 @@ APP="$1"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
verify_app_name "$APP"
dokku_log_info1 "Running gulp"
id=$(docker run $DOKKU_GLOBAL_RUN_ARGS -d $IMAGE /bin/bash -c "cd /app && gulp default")
test $(docker wait $id) -eq 0
docker commit $id $IMAGE > /dev/null
dokku_log_info1 "Building UI Complete"
CID=$(docker run "${DOCKER_COMMIT_LABEL_ARGS[@]}" -d $IMAGE /bin/bash -c "cd /app && gulp default")
test $(docker wait $CID) -eq 0
DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP")
docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null
```
### `pre-disable-vhost`
@@ -995,12 +1149,13 @@ verify_app_name "$APP"
dokku_log_info1 "Installing GraphicsMagick..."
CMD="cat > gm && \
dpkg -s graphicsmagick > /dev/null 2>&1 || \
dpkg -s graphicsmagick >/dev/null 2>&1 || \
(apt-get update && apt-get install -y graphicsmagick && apt-get clean)"
ID=$(docker run $DOKKU_GLOBAL_RUN_ARGS -i -a stdin $IMAGE /bin/bash -c "$CMD")
test $(docker wait $ID) -eq 0
docker commit $ID $IMAGE > /dev/null
CID=$(docker run "${DOCKER_COMMIT_LABEL_ARGS[@]}" -i -a stdin $IMAGE /bin/bash -c "$CMD")
DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP")
test $(docker wait $CID) -eq 0
docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null
```
### `pre-release-dockerfile`
@@ -1085,9 +1240,9 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `proxy-enable`
### `proxy-disable`
- Description: Enables the configured proxy implementation for an app
- Description: Disables the configured proxy implementation for an app
- Invoked by: `internally triggered by ps:restore`
- Arguments: `$APP`
- Example:
@@ -1100,9 +1255,9 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `proxy-disable`
### `proxy-enable`
- Description: Disables the configured proxy implementation for an app
- Description: Enables the configured proxy implementation for an app
- Invoked by: `internally triggered by ps:restore`
- Arguments: `$APP`
- Example:
@@ -1152,11 +1307,43 @@ 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
git clone --bare --shared --reference "$REFERENCE_REPO" "$REFERENCE_REPO" "$DOKKU_ROOT/$APP" >/dev/null
fi
plugn trigger receive-app $APP $newrev
```
### `report`
- Description: Allows you to report on any custom configuration in use by your application
- Invoked by: `dokku report`
- Arguments: `$APP`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
APP="$1";
# TODO
```
### `resource-get-property`
- Description: Fetches a given resource property value
- Invoked by:
- Arguments: `$APP` `$PROC_TYPE` `$RESOURCE_TYPE` `$PROPERTY`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
APP="$1"; PROC_TYPE="$2" RESOURCE_TYPE="$3" PROPERTY="$4"
# TODO
```
### `retire-container-failed`
- Description: Allows you to run commands if/when retiring old containers has failed
@@ -1174,18 +1361,21 @@ APP="$1"; HOSTNAME=$(hostname -s)
mail -s "$APP containers on $HOSTNAME failed to retire" ops@dokku.me
```
### `report`
### `scheduler-app-status`
- Description: Allows you to report on any custom configuration in use by your application
- Invoked by: `dokku report`
- Arguments: `$APP`
> Warning: The scheduler plugin trigger apis are under development and may change
> between minor releases until the 1.0 release.
- Description: Fetch the status of an app
- Invoked by: `dokku ps:report`
- Arguments: `$DOKKU_SCHEDULER $APP`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
APP="$1";
DOKKU_SCHEDULER="$1"; APP="$2";
# TODO
```
@@ -1247,6 +1437,43 @@ DOKKU_SCHEDULER="$1"; APP="$2";
# TODO
```
### `scheduler-is-deployed`
> Warning: The scheduler plugin trigger apis are under development and may change
> between minor releases until the 1.0 release.
- Description: Allows you to check if an app has been deployed
- Invoked by: `dokku ps:rebuild`
- Arguments: `$DOKKU_SCHEDULER $APP`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
DOKKU_SCHEDULER="$1"; APP="$2";
# TODO
```
### `scheduler-logs`
> Warning: The scheduler plugin trigger apis are under development and may change
> between minor releases until the 1.0 release.
- Description: Allows you to run scheduler commands when retrieving container logs
- Invoked by: `dokku logs:failed`
- Arguments: `$DOKKU_SCHEDULER $APP $PROCESS_TYPE $TAIL $PRETTY_PRINT $NUM`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
DOKKU_SCHEDULER="$1"; APP="$2"; PROCESS_TYPE="$3"; TAIL="$4"; PRETTY_PRINT="$5"; NUM="$6"
# TODO
```
### `scheduler-logs-failed`
> Warning: The scheduler plugin trigger apis are under development and may change
@@ -1261,7 +1488,45 @@ DOKKU_SCHEDULER="$1"; APP="$2";
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
DOKKU_SCHEDULER="$1"; APP="$2"; ARGS="${@:3}";
DOKKU_SCHEDULER="$1"; APP="$2";
# TODO
```
### `scheduler-post-delete`
> Warning: The scheduler plugin trigger apis are under development and may change
> between minor releases until the 1.0 release.
- Description: Allows you to run scheduler commands when an app is deleted
- Invoked by: `dokku apps:destroy`
- Arguments: `$DOKKU_SCHEDULER $APP $IMAGE_TAG`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
DOKKU_SCHEDULER="$1"; APP="$2"; IMAGE_TAG="$3";
# TODO
```
### `scheduler-retire`
> Warning: The scheduler plugin trigger apis are under development and may change
> between minor releases until the 1.0 release.
- Description: Allows you to run scheduler commands when containers should be force retired from the system
- Invoked by: `dokku run`
- Arguments: `$DOKKU_SCHEDULER`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
DOKKU_SCHEDULER="$1";
# TODO
```

View File

@@ -7,7 +7,7 @@ To propose a release, the following tasks need to be performed:
```shell
export PACKAGECLOUD_TOKEN=SOME_TOKEN
# supports major/minor/patch/betafish
contrib/release
contrib/release-dokku
```
> If you are a maintainer and need the PACKAGECLOUD_TOKEN in order to make a release, please contact @josegonzalez to get this information.
@@ -29,7 +29,7 @@ The workflow looks like this:
```shell
# having dokku-arch in ../dokku-arch
vagrant up build-arch
# wait for "==> build-arch: ==> Finished making: dokku 0.14.2-2 (Mon Feb 22 23:20:37 CET 2016)"
# wait for "==> build-arch: ==> Finished making: dokku 0.18.3-2 (Mon Feb 22 23:20:37 CET 2016)"
cd ../dokku-arch
git add PKGBUILD .SRCINFO
git commit -m 'Update to dokku 0.9.9'

View File

@@ -1,6 +1,6 @@
# Dokku test suite
# Running Tests
Dokku has a full test suite to assist in quick iterating development. These tests include a linter using [shellcheck](https://github.com/koalaman/shellcheck), functional unit tests using the [bats testing framework](https://github.com/sstephenson/bats), and a deployment suite of example apps that use the most popular languages and frameworks.
Dokku has a full test suite to assist in quick iterating development. These tests include a linter using [shellcheck](https://github.com/koalaman/shellcheck), functional unit tests using the [Bats testing framework](https://github.com/bats-core/bats-core), and a deployment suite of example apps that use the most popular languages and frameworks.
We maintain the Dokku test harness within the `tests` directory:
@@ -11,13 +11,13 @@ We maintain the Dokku test harness within the `tests` directory:
All pull requests have tests run against them on [CircleCI](https://circleci.com/), a continuous integration platform that provides Docker support for Ubuntu Trusty 14.04.
If you wish to skip tests for a particular commit - e.g. Documentation changes - you may add the `[ci skip]` designator to your commit message. Commits that *should* be tested but have the above designator will not be merged.
If you wish to skip tests for a particular commit, e.g. documentation changes, you may add the `[ci skip]` designator to your commit message. Commits that _should_ be tested but have the above designator will not be merged.
While we do provide official packages for a variety of platforms, as our test suite currently runs on Ubuntu Trusty 14.04, we only provide official installation support for that platform.
## Local Test Execution
- Setup Dokku in a [vagrant vm](/docs/getting-started/install/vagrant.md)
- Setup Dokku in a [Vagrant VM](/docs/getting-started/install/vagrant.md).
- Run the following to setup tests and execute them:
```shell
@@ -29,8 +29,8 @@ While we do provide official packages for a variety of platforms, as our test su
# execute the entire test suite (linter, bats tests, and app deployment tests)
make test
# run linter & update vagrant Dokku install from local git clone
make lint copyfiles
# run linter
make lint
# execute all bats tests
make unit-tests
@@ -39,6 +39,16 @@ While we do provide official packages for a variety of platforms, as our test su
make deploy-tests
```
After making changes to your local Dokku clone, don't forget to update the Vagrant Dokku install.
```shell
# update vagrant dokku install from local git clone
make copyfiles
# build a specific plugin
make go-build-plugin copyplugin PLUGIN_NAME=apps
```
Additionally you may run a specific app deployment tests with a target similar to:
```shell
@@ -63,7 +73,7 @@ bats tests/unit/10_apps.bats tests/unit/10_certs.bats
## Executing a single test
In order to increase testing velocity, a wrapper script around bats is available that can be used to run a single testcase within a suite.
In order to increase testing velocity, a wrapper script around Bats is available that can be used to run a single test case within a suite.
Tests within a suite may be listed by specifying the suite as a parameter to the `tests/bats-exec-test-single` script.
@@ -77,7 +87,7 @@ A single test can be specified as a second parameter. The test is selected by fu
tests/bats-exec-test-single tests/unit/10_apps.bats clone
```
Some special characters are translated in the test listing - specifically the characters `( ) :` - while others are not. The fuzzy matching happens on the test names listed when no second character is invoked, so executing a test with a more specific name will work as expected.
Some special characters are translated in the test listing, specifically the characters `( ) :`, while others are not. The fuzzy matching happens on test names as listed by this script, so executing a test with a more specific name will work as expected.
```shell
tests/bats-exec-test-single tests/unit/10_apps.bats clone_-2d-2dskip-2ddeploy

View File

@@ -1,6 +1,6 @@
# Advanced installation
You can always install Dokku straight from the latest - potentially unstable - master release via the following bash command:
You can always install Dokku straight from the latest - potentially unstable - `master` branch via the following Bash command:
```shell
# using a branch results in installing from source
@@ -10,7 +10,7 @@ sudo DOKKU_BRANCH=master bash bootstrap.sh
## Development
If you plan on developing dokku, the easiest way to install from your own repository is cloning the repository and calling the install script. Example:
If you plan on developing Dokku, the easiest way to install from your own repository is cloning the repository and calling the install script. Example:
```shell
git clone https://github.com/yourusername/dokku.git
@@ -34,9 +34,9 @@ chmod +x bootstrap.sh
sudo DOKKU_REPO=https://github.com/yourusername/dokku.git DOKKU_BRANCH=master ./bootstrap.sh
```
## Custom herokuish build
## Custom Herokuish build
Dokku ships with a pre-built version of version of the [herokuish](https://github.com/gliderlabs/herokuish) component by default. If you want to build your own version you can specify that with an env variable.
Dokku ships with a pre-built version of version of the [Herokuish](https://github.com/gliderlabs/herokuish) component by default. If you want to build your own version you can specify that with an environment variable.
```shell
git clone https://github.com/dokku/dokku.git
@@ -44,29 +44,29 @@ cd dokku
sudo BUILD_STACK=true STACK_URL=https://github.com/gliderlabs/herokuish.git make install
```
## Skipping herokuish installation
## Skipping Herokuish installation
The `herokuish` package is recommended but not required if not using Heroku Buildpacks for deployment. Debian-based OS users can run the bootstrap installer via `sudo DOKKU_NO_INSTALL_RECOMMENDS=true bash bootstrap.sh` to skip the dependency. Please note that this will _also_ skip installation of other recommended dependencies.
The Herokuish package is recommended but not required if not using Heroku buildpacks for deployment. Debian-based OS users can run the bootstrap installer via `sudo DOKKU_NO_INSTALL_RECOMMENDS=" --no-install-recommends " bash bootstrap.sh` to skip the dependency. Please note that this will _also_ skip installation of other recommended dependencies.
## Configuring an unattended installation
Once Dokku is installed, if you are not using the web-installer, you'll want to configure a the virtualhost setup as well as the push user. If you do not, your installation will be considered incomplete and you will not be able to deploy applications.
Once Dokku is installed, if you are not using the web-installer, you'll want to configure the virtualhost setup as well as the push user. If you do not, your installation will be considered incomplete and you will not be able to deploy applications.
For Debian, unattended installation is described [Debian installation guide](/docs/getting-started/install/debian.md).
*You should also stop and disable the `dokku-installer` service to remove public access to adding SSH keys.*
Set up a domain using your preferred vendor and a wildcard domain pointing to the host running dokku. You can manage this global domain using the [domains plugin](/docs/configuration/domains.md).
Set up a domain using your preferred vendor and a wildcard domain pointing to the host running Dokku. You can manage this global domain using the [domains plugin](/docs/configuration/domains.md).
Follow the [user management documentation](/docs/deployment/user-management.md) in order to add ssh keys for users to Dokku, or to give other Unix accounts access to Dokku.
Follow the [user management documentation](/docs/deployment/user-management.md) in order to add SSH keys for users to Dokku, or to give other Unix accounts access to Dokku.
## VMs with less than 1GB of memory
## VMs with less than 1 GB of memory
Having less than 1GB of system memory available for Dokku and its containers may 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).
Having less than 1 GB of system memory available for Dokku and its containers may 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 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:
To resize the swap file of a 512 MB machine to 1 GB, follow these steps while in SSH within your machine:
```shell
cd /var

View File

@@ -1,11 +1,11 @@
# Microsoft Azure
# Microsoft Azure Installation Notes
- If you don't already have one [generate an SSH key pair](https://help.github.com/articles/generating-ssh-keys/).
1. If you don't already have one [generate an SSH key pair](https://help.github.com/articles/generating-ssh-keys/).
- Go to the [Dokku on Azure deployment page](https://github.com/azure/azure-quickstart-templates/tree/master/dokku-vm) and click **Deploy to Azure**.
2. Go to the [Dokku on Azure deployment page](https://github.com/azure/azure-quickstart-templates/tree/master/dokku-vm) and click **Deploy to Azure**.
- You'll be prompted to enter a few parameters, including a unique storage account name and a unique name for the sub-domain used for your public IP address. For the `sshKeyData` parameter, copy and paste the contents of the *public* key file you just created. After a few minutes the Dokku instance will be deployed.
3. You'll be prompted to enter a few parameters, including a unique storage account name and a unique name for the subdomain used for your public IP address. For the `sshKeyData` parameter, copy and paste the contents of the *public* key file you just created. After a few minutes the Dokku instance will be deployed.
- In your browser of choice, navigate to `http://[dnsNameForPublicIP].[location].cloudapp.azure.com`. Where `[dnsNameForPublicIP]` and `[location]` are template parameters you used to deploy the template.
4. In your browser of choice, navigate to `http://[dnsNameForPublicIP].[location].cloudapp.azure.com`. Where `[dnsNameForPublicIP]` and `[location]` are template parameters you used to deploy the template.
- Finish your Dokku setup like you normally would by creating a *new* public/private key pair for your deployments using `ssh-keygen` (don't use the same one as you created in the first step). You should select **Use Virtual Host Naming** and set the **Hostname** to a *public DNS name* that you own such as one you would purchase from [Namecheap](http://namecheap.com). Alternatively thanks to [xip.io](http://xip.io/) you can just use `[yourAzurePublicIP].xip.io` for free. For example, if your public IP is `44.44.44.44` then you would set it to `44.44.44.44.xip.io`.
5. Finish your Dokku setup like you normally would by creating a *new* public/private key pair for your deployments using `ssh-keygen` (don't use the same one as you created in the first step). You should select **Use Virtual Host Naming** and set the **Hostname** to a *public DNS name* that you own such as one you would purchase from [Namecheap](http://namecheap.com). Alternatively thanks to [xip.io](http://xip.io/) you can just use `[yourAzurePublicIP].xip.io` for free. For example, if your public IP is `44.44.44.44` then you would set it to `44.44.44.44.xip.io`.

View File

@@ -4,7 +4,7 @@ As of 0.3.18, Dokku defaults to being installed via Debian package. While certai
```shell
# install prerequisites
sudo apt-get update -qq > /dev/null
sudo apt-get update -qq >/dev/null
sudo apt-get install -qq -y apt-transport-https
# install docker
@@ -12,10 +12,10 @@ wget -nv -O - https://get.docker.com/ | sh
# install dokku
wget -nv -O - https://packagecloud.io/dokku/dokku/gpgkey | apt-key add -
OS_ID="$(lsb_release -cs 2> /dev/null || echo "trusty")"
OS_ID="$(lsb_release -cs 2>/dev/null || echo "trusty")"
echo "trusty utopic vivid wily xenial yakkety zesty artful bionic" | grep -q "$OS_ID" || OS_ID="trusty"
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ ${OS_ID} main" | sudo tee /etc/apt/sources.list.d/dokku.list
sudo apt-get update -qq > /dev/null
sudo apt-get update -qq >/dev/null
sudo apt-get install -qq -y dokku
sudo dokku plugin:install-dependencies --core
```

View File

@@ -1,14 +1,14 @@
# Digital Ocean Droplet
# DigitalOcean Droplet Installation Notes
[Digital Ocean](https://www.digitalocean.com/products/compute/) offers a pre-installed Dokku image. You can run this image on any sized Droplet, although larger Droplets will allow you to run larger applications.
[DigitalOcean](https://www.digitalocean.com/products/compute/) offers a pre-installed Dokku image. You can run this image on any sized Droplet, although larger Droplets will allow you to run larger applications.
> **Please disable IPv6**. There are known issues with IPv6 on Digital Ocean and Docker. If you would like to run Dokku on an IPv6 Digital Ocean Droplet, please consult [this guide](https://jeffloughridge.wordpress.com/2015/01/17/native-ipv6-functionality-in-docker/).
> **Please disable IPv6**. There are known issues with IPv6 on DigitalOcean and Docker. If you would like to run Dokku on an IPv6 DigitalOcean Droplet, please consult [this guide](https://jeffloughridge.wordpress.com/2015/01/17/native-ipv6-functionality-in-docker/).
1. Login to your [Digital Ocean](https://m.do.co/c/fe06b043a083) account.
1. Login to your [DigitalOcean](https://m.do.co/c/fe06b043a083) account.
2. Click **Create a Droplet**.
3. Under **Choose an image > One-click apps** and choose the latest **Dokku** release for 16.04 _(version numbers may vary)_.
4. Under **Choose a size** and select your a machine spec. We recommend a machine with _at least_ 1GB of memory.
5. Under **Choose a datacenter region** select your region.
3. Under **Choose an image > One-click apps**, choose the latest **Dokku** release for 16.04 _(version numbers may vary)_.
4. Under **Choose a size**, select your machine spec.
5. Under **Choose a datacenter region**, select your region.
6. Add an SSH Key.
* New Keys
1. Under **Add your SSH keys** click **New SSH Key** _(this opens a dialog)_.

View File

@@ -0,0 +1,54 @@
# Docker Installation Notes
Pull the dokku/dokku image:
```shell
docker pull dokku/dokku:0.18.3
```
Next, run the image.
```shell
docker run \
--env DOKKU_HOSTNAME=dokku.me \
--name dokku \
--publish 3022:22 \
--publish 8080:80 \
--publish 8443:443 \
--volume /var/lib/dokku:/mnt/dokku \
--volume /var/run/docker.sock:/var/run/docker.sock \
dokku/dokku:0.18.3
```
Dokku is run with the following options:
- The global hostname is set to `dokku.me` on boot.
- The container name is dokku.
- Container SSH port 22 is exposed on the host as 3022.
- Container HTTP port 80 is exposed on the host as 8080.
- Container HTTPS port 443 is exposed on the host as 8443.
- Data within the container is stored on the host within the `/var/lib/dokku` directory.
- The docker socket is mounted into container
Application repositories, plugin config, and plugin data is persisted to disk within the specified host directory for `/var/lib/dokku`.
To install custom plugins, create a `plugin-list` file in the host's `/var/lib/dokku` directory. The plugins listed herein will be automatically installed by Dokku on container boot. This file should be the following format:
```yaml
plugin_name: repository_url
```
An example for installing the postgres and redis plugins follows:
```yaml
postgres: https://github.com/dokku/dokku-postgres.git
redis: https://github.com/dokku/dokku-redis.git
```
To initialize ssh-keys within the container, use `docker exec` to enter the container and run the appropriate ssh-keys commands.
```shell
docker exec -it dokku bash
```
Please see the [user management documentation](/docs/deployment/user-management.md) for more information.

View File

@@ -1,4 +1,4 @@
# Install Dokku on DreamHost Cloud Server with cloud-init
# DreamHost Cloud Server Installation Notes
Cloud-init script can be used to automate installation of Dokku on
Dreamhost (or any other OpenStack-compatible cloud with minimal
@@ -19,7 +19,7 @@ source openrc.sh # Set the environment variables for DreamHost Cloud
This allows OpenStack client to connect to DreamHost API endpoints.
The command below creates a new server instance named `my-dokku-instance`
based on Ubuntu 14.04, with 2GB RAM and 1CPU (the flavor called
based on Ubuntu 14.04, with 2 GB RAM and 1 CPU (the flavor called
`supersonic`), opening network port access to HTTP and SSH (the
`default` security group), and the name of the chosen SSH key. This
key will be automatically added to the new server in the
@@ -185,13 +185,11 @@ packages:
```
Shortly after running the create command you will get a confirmation that the
instance has been created, and after about a minute it should be ready to login.
Check the IP of the instance through the web UI or by running:
instance has been created, and after about a minute it should be ready to login. Check the IP of the instance through the web UI or by running:
```sh
nova list
```
SSH with the `ubuntu` username and the public key previously added.
Keep in mind that if you logged in quick enough dokku might still be installing
in the background, and not be ready. The installation takes a few minutes.
Keep in mind that if you logged in quick enough Dokku might still be installing in the background, and not be ready. The installation takes a few minutes.

View File

@@ -1,14 +1,16 @@
# Install Dokku using Vagrant
# Vagrant Installation Notes
- Download and install [VirtualBox](https://www.virtualbox.org/wiki/Downloads)
- Download and install [Vagrant](http://www.vagrantup.com/downloads.html)
- Clone Dokku
1. Download and install [VirtualBox](https://www.virtualbox.org/wiki/Downloads).
2. Download and install [Vagrant](http://www.vagrantup.com/downloads.html).
3. Clone Dokku.
```shell
git clone https://github.com/dokku/dokku.git
```
- Create VM
4. Create VM.
```shell
# Optional ENV arguments:
@@ -27,7 +29,7 @@
vagrant up dokku-windows
```
- Setup SSH Config in `~/.ssh/config`.
5. Setup SSH Config in `~/.ssh/config`.
```ini
Host dokku.me
@@ -36,8 +38,8 @@
> For users that have customized the IP address of their VM - either in a custom `Vagrantfile` or via the `DOKKU_IP` environment variable - and are not using `10.0.0.2` for the Vagrant IP, you'll need to instead use the output of `vagrant ssh-config dokku` for your `~/.ssh/config` entry.
- Copy your SSH key via `cat ~/.ssh/id_rsa.pub | pbcopy` and paste it into the dokku-installer at http://dokku.me . Change the `Hostname` field on the Dokku Setup screen to your domain and then check the box that says **Use virtualhost naming**. Then click **Finish Setup** to install your key. You'll be directed to application deployment instructions from here.
6. Copy your SSH key via `cat ~/.ssh/id_rsa.pub | pbcopy` and paste it into the dokku-installer at http://dokku.me . Change the `Hostname` field on the Dokku Setup screen to your domain and then check the box that says **Use virtualhost naming**. Then click **Finish Setup** to install your key. You'll be directed to application deployment instructions from here.
Please note, the `dokku.me` domain is setup to point to `10.0.0.2` along with all subdomains (i.e. `yourapp.dokku.me`). If you change the `DOKKU_IP` in your Vagrant setup you'll need to update your `/etc/hosts` file to point your reconfigured ip address.
Please note, the `dokku.me` domain is setup to point to `10.0.0.2` along with all subdomains (i.e. `yourapp.dokku.me`). If you change the `DOKKU_IP` in your Vagrant setup you'll need to update your `/etc/hosts` file to point your reconfigured IP address.
You are now ready to deploy an app or install plugins.

View File

@@ -6,8 +6,8 @@ Dokku is an extensible, open source Platform as a Service that runs on a single
To start using Dokku, you'll need a system that meets the following minimum requirements:
- A fresh installation of [Ubuntu 16.04 x64](https://www.ubuntu.com/download), [Ubuntu 14.04 x64](https://www.ubuntu.com/download), [Debian 8.2 x64](https://www.debian.org/distrib/) or [CentOS 7 x64](https://www.centos.org/download/) *(experimental)* with the FQDN set <sup>[1]</sup>
- At least `1GB` of system memory <sup>[2]</sup>
- A fresh installation of [Ubuntu x64 - Any currently supported release](https://www.ubuntu.com/download), [Debian 8.2 x64](https://www.debian.org/distrib/) or [CentOS 7 x64](https://www.centos.org/download/) *(experimental)* with the FQDN set <sup>[1]</sup>
- At least 1 GB of system memory <sup>[2]</sup>
You can *optionally* have a domain name pointed at the host's IP, though this is not necessary.
@@ -15,19 +15,19 @@ Dokku is designed for usage on a fresh VM installation, and should install all n
### Installing the latest stable version
#### 1. Install dokku
#### 1. Install Dokku
To install the latest stable version of Dokku, you can run the following shell commands:
```shell
# for debian systems, installs Dokku via apt-get
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.2/bootstrap.sh;
sudo DOKKU_TAG=v0.14.2 bash bootstrap.sh
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.3/bootstrap.sh;
sudo DOKKU_TAG=v0.18.3 bash bootstrap.sh
```
The installation process takes about 5-10 minutes, depending upon internet connection speed.
If you're using Debian 8 or Ubuntu 14.04, make sure your package manager is configured to install a sufficiently recent version of nginx<sup>[3]</sup>, otherwise, the installation may fail due to "unmet dependencies" relating nginx.
If you're using Debian 8 or Ubuntu 14.04, make sure your package manager is configured to install a sufficiently recent version of nginx<sup>[3]</sup>, otherwise, the installation may fail due to `unmet dependencies` relating nginx.
#### 2. Setup SSH key and Virtualhost Settings
@@ -47,13 +47,14 @@ Once you save your settings, the web admin will self-terminate and you should be
For various reasons, certain hosting providers may have other steps that should be preferred to the above. If hosted on any of the following popular hosts, please follow the linked to instructions:
- [Digital Ocean Installation Notes](/docs/getting-started/install/digitalocean.md)
- [DigitalOcean Installation Notes](/docs/getting-started/install/digitalocean.md)
- [DreamHost Cloud Installation Notes](/docs/getting-started/install/dreamhost.md)
- [Microsoft Azure Installation Notes](/docs/getting-started/install/azure.md)
As well, you may wish to customize your installation in some other fashion. or experiment with vagrant. The guides below should get you started:
As well, you may wish to customize your installation in some other fashion. or experiment with Vagrant. The guides below should get you started:
- [Debian Package Installation Notes](/docs/getting-started/install/debian.md)
- [Docker-based Installation Notes](/docs/getting-started/install/docker.md)
- [RPM Package Installation Notes](/docs/getting-started/install/rpm.md)
- [Vagrant Installation Notes](/docs/getting-started/install/vagrant.md)
- [Advanced Install Customization](/docs/getting-started/advanced-installation.md)

View File

@@ -1,6 +1,39 @@
# Troubleshooting
__Symptom:__ I deployed my app but I am getting the default nginx page
> New as of 0.17.0
```
trace:on # Enables trace mode
trace:off # Disables trace mode
```
## Trace Mode
By default, Dokku will constrain the amount of output displayed for any given command run. The verbosity of output can be increased by enabling trace mode. Trace mode will turn on the `set -x` flag for bash plugins, while other plugins are free to respect the environment variable `DOKKU_TRACE` and log differently as approprate. Trace mode can be useful to see _where_ plugins are running commands that would otherwise be unexpected.
To enable trace mode, run `trace:on`
```shell
dokku trace:on
```
```
-----> Enabling trace mode
```
Trace mode can be disabled with `trace:off`
```shell
dokku trace:off
```
```
-----> Disabling trace mode
```
## Common Problems
__Symptom:__ I deployed my app but I am getting the default nginx page.
__Solution:__
@@ -11,7 +44,7 @@ nginx -t
## nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
```
If you get a similar error just edit __/etc/nginx/nginx.conf__ and add the following line to your http section:
If you get a similar error just edit `/etc/nginx/nginx.conf` and add the following line to your `http` section:
```nginx
http {
@@ -35,45 +68,30 @@ Save the file and try stopping nginx and starting it again:
***
__Symptom:__ I want to deploy my app, but while pushing I get the following error
__Symptom:__ I want to deploy my app, but while pushing I get the following error.
! [remote rejected] master -> master (pre-receive hook declined)
__Solution:__
The `remote rejected` error does not give enough information. Anything could have failed.
To enable Dokku tracing, simply run the following command:
```shell
# since 0.3.9
dokku trace on
```
In versions older than 0.3.9, you can create a `/home/dokku/dokkurc` file containing the following :
```shell
export DOKKU_TRACE=1
```
This will trace all of dokku's activity. If this does not help you, create a [gist](https://gist.github.com) containing the full log, and create an issue.
The `remote rejected` error does not give enough information. Anything could have failed. Enable trace mode and begin debugging. If this does not help you, create a [gist](https://gist.github.com) containing the full log, and create an issue.
***
__Symptom:__ I get the aforementioned error in the build phase (after turning on Dokku tracing)
__Symptom:__ I get the aforementioned error in the build phase (after turning on Dokku tracing).
Most errors that happen in this phase are due to transient network issues (either locally or remotely) buildpack bugs.
Most errors that happen in this phase are due to transient network issues (either locally or remotely) buildpack bugs.
__Solution (Less solution, more helpful troubleshooting steps):__
Find the failed phase's container image (*077581956a92* in this example)
Find the failed phase's container image (`077581956a92` in this example).
```shell
docker ps -a | grep build
## 94d9515e6d93 077581956a92 "/build" 29 minutes ago Exited (0) 25 minutes ago cocky_bell
```
Start a new container with the failed image and poke around (i.e. ensure you can access the internet from within the container or attempt the failed command, if known)
Start a new container with the failed image and poke around (i.e. ensure you can access the internet from within the container or attempt the failed command, if known).
```shell
docker run -ti 077581956a92 /bin/bash
@@ -84,38 +102,37 @@ tar tzf node-v0.10.30-linux-x64.tar.gz
## ...
```
Sometimes (especially on DO) deploying again seems to get past these seemingly transient issues
Additionally we've seen issues if changing networks that have different DNS resolvers. In this case, you can run the following to update your resolv.conf
Sometimes (especially on DigitalOcean) deploying again seems to get past these seemingly transient issues. Additionally we've seen issues if changing networks that have different DNS resolvers. In this case, you can run the following to update your `resolv.conf`.
```shell
resolvconf -u
```
Please see https://github.com/dokku/dokku/issues/841 and https://github.com/dokku/dokku/issues/649
Please see https://github.com/dokku/dokku/issues/841 and https://github.com/dokku/dokku/issues/649.
***
__Symptom:__ I want to deploy my app but I am getting asked for the password of the git user and the error message
__Symptom:__ I want to deploy my app but I am getting asked for the password of the Git user and the error message.
fatal: 'NAME' does not appear to be a git repository
fatal: Could not read from remote repository.
__Solution:__
You get asked for a password because your ssh secret key can't be found. This may happen if the private key corresponding to the public key you added with `sshcommand acl-add` is not located in the default location `~/.ssh/id_rsa`.
You get asked for a password because your SSH secret key can't be found. This may happen if the private key corresponding to the public key you added with `sshcommand acl-add` is not located in the default location `~/.ssh/id_rsa`.
You have to point ssh to the correct secret key for your domain name. Add the following to your `~/.ssh/config`:
You have to point SSH to the correct secret key for your domain name. Add the following to your `~/.ssh/config`:
```ini
Host DOKKU_HOSTNAME
IdentityFile "~/.ssh/KEYNAME"
```
Also see [issue #116](https://github.com/dokku/dokku/issues/116)
Also see [issue #116](https://github.com/dokku/dokku/issues/116).
***
__Symptom:__ I successfully deployed my application with no deployment errors and receiving Bad Gateway when attempting to access the application
__Symptom:__ I successfully deployed my application with no deployment errors and receiving **Bad Gateway** when attempting to access the application.
__Solution:__
@@ -127,11 +144,11 @@ When specifying your port you may want to use something similar to:
var port = process.env.PORT || 3000
```
Please see https://github.com/dokku/dokku/issues/282
Please see https://github.com/dokku/dokku/issues/282.
***
__Symptom:__ Deployment fails because of slow internet connection, messages shows `gzip: stdin: unexpected end of file`
__Symptom:__ Deployment fails because of slow internet connection, messages shows `gzip: stdin: unexpected end of file`.
__Solution:__
@@ -146,16 +163,16 @@ If you see output similar this when deploying:
! tar: Error is not recoverable: exiting now
```
it might that the curl command that is supposed to fetch the buildpack (anything in the low megabyte file size range) takes too long to finish, due to slowish connection. To overwrite the default values (connection timeout: 90 seconds, total maximum time for operation: 600 seconds), set the following environment variables:
it might that the cURL command that is supposed to fetch the buildpack (anything in the low megabyte file size range) takes too long to finish, due to slowish connection. To overwrite the default values (connection timeout: 90 seconds, total maximum time for operation: 600 seconds), set the following environment variables:
```shell
dokku config:set --global CURL_TIMEOUT=1200
dokku config:set --global CURL_CONNECT_TIMEOUT=180
```
Please see https://github.com/dokku/dokku/issues/509
Please see https://github.com/dokku/dokku/issues/509.
Another reason for this error (although it may respond immediately ruling out a timeout issue) may be because you've set the config setting `SSL_CERT_FILE`. Using a config setting with this key interferes with the buildpack's ability to download it's dependencies, so you must rename the config setting to something else, e.g. `MY_APP_SSL_CERT_FILE`.
Another reason for this error (although it may respond immediately ruling out a timeout issue) may be because you've set the config setting `SSL_CERT_FILE`. Using a config setting with this key interferes with the buildpack's ability to download its dependencies, so you must rename the config setting to something else, e.g. `MY_APP_SSL_CERT_FILE`.
***
@@ -163,7 +180,7 @@ __Symptom:__ Build fails with `Killed` message.
__Solution:__
This generally occurs when the server runs out of memory. You can either add more ram to your server or setup swap space. The follow script will create 2gb of swap space.
This generally occurs when the server runs out of memory. You can either add more RAM to your server or setup swap space. The follow script will create 2 GB of swap space.
```shell
sudo install -o root -g root -m 0600 /dev/null /swapfile
@@ -181,13 +198,13 @@ __Symptom:__ I successfully deployed my application with no deployment errors bu
__Solution:__
This can occur if Dokku is running on a system with a firewall like ufw enabled (some OS versions like Ubuntu 16.04 have this enabled by default). You can check if this is your case by running the following script:
This can occur if Dokku is running on a system with a firewall like UFW enabled (some OS versions like Ubuntu 16.04 have this enabled by default). You can check if this is your case by running the following script:
```shell
sudo ufw status
```
If the previous script returned `Status: active` and a list of ports, ufw is enabled and is probably the cause of the symptom described above. To disable it, run:
If the previous script returned `Status: active` and a list of ports, UFW is enabled and is probably the cause of the symptom described above. To disable it, run:
```shell
sudo ufw disable
@@ -201,6 +218,6 @@ __Solution:__
This isn't usually an issue with Dokku, but rather an app config problem. This can happen when your application is configured to enforce secure connections/HSTS, but you don't have SSL set up for the app.
In Rails at least, if your `application.rb` or `environmnents/production.rb` include the line `configure.force_ssl = true`, which includes HSTS try commenting that out and redeploying.
In Rails at least, if your `application.rb` or `environmnents/production.rb` include the line `configure.force_ssl = true` which includes HSTS, try commenting that out and redeploying.
If this solves the issue temporarily, longer term you should consider [configuring SSL](http://dokku.viewdocs.io/dokku/configuration/ssl/).

View File

@@ -4,7 +4,7 @@ If your version of Dokku is pre 0.3.0 (check with `dokku version`), we recommend
## Security Updates
For any security related updates, please follow our [twitter account](https://twitter.com/dokku). As Dokku does not run any daemons, the security risk introduced by our software is minimal.
For any security related updates, please follow our [Twitter account](https://twitter.com/dokku). As Dokku does not run any daemons, the security risk introduced by our software is minimal.
Your operating system may occasionally provide security updates. We recommend setting unattended upgrades for your operating system. Here are some helpful links:
@@ -101,7 +101,7 @@ sudo make install
dokku ps:rebuildall # rebuilds all applications
```
To upgrade herokuish from source, upgrade with:
To upgrade Herokuish from source, upgrade with:
```shell
cd /tmp

View File

@@ -6,7 +6,7 @@ If you’re stuck, there are a number of places you can get help:
- [http://dokku.viewdocs.io/dokku/](/docs/)
The Official Dokku website is always a great place to visit. It features links to oft-used developer tools, community plugins, and guides on using dokku.
The Official Dokku website is always a great place to visit. It features links to oft-used developer tools, community plugins, and guides on using Dokku.
## The IRC and Slack Channels

View File

@@ -10,30 +10,30 @@
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/favicon.ico">
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/favicon.ico">
<meta name="apple-mobile-web-app-title" content="Dokku">
<meta name="application-name" content="Dokku">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/browserconfig.xml">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/style.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/style.css" rel="stylesheet">
<!-- <link href="/dokku/docs/assets/style.css" rel="stylesheet"> -->
<style>
.sponsors {
@@ -127,12 +127,12 @@
<p class="line">
<span class="path"></span>
<span class="prompt">$</span>
<span class="command">wget https://raw.githubusercontent.com/dokku/dokku/v0.14.2/bootstrap.sh</span>
<span class="command">wget https://raw.githubusercontent.com/dokku/dokku/v0.18.3/bootstrap.sh</span>
</p>
<p class="line">
<span class="path"></span>
<span class="prompt">$</span>
<span class="command">sudo DOKKU_TAG=v0.14.2 bash bootstrap.sh</span>
<span class="command">sudo DOKKU_TAG=v0.18.3 bash bootstrap.sh</span>
</p>
<p class="line">
<span class="output">&nbsp;# go to your server's IP and follow the web installer</span>
@@ -164,7 +164,7 @@
<p class="line">
<span class="path"></span>
<span class="prompt">$</span>
<span class="command">export OS_ID="$(lsb_release -cs 2> /dev/null || echo "trusty")"</span>
<span class="command">export OS_ID="$(lsb_release -cs 2>/dev/null || echo "trusty")"</span>
</p>
<p class="line">
<span class="path"></span>

View File

@@ -85,7 +85,7 @@ CONTAINER ID IMAGE COMMAND CREATED
d6499edb0edb dokku/node-js-app:latest "/bin/bash -c '/star About a minute ago Up About a minute 0.0.0.0:49153->5000/tcp node-js-app.web.1
```
### Displaying network reports about an app
### Displaying network reports for an app
You can get a report about the app's network status using the `network:report` command:

View File

@@ -3,17 +3,19 @@
> New as of 0.5.0, Enhanced in 0.6.0
```
proxy:ports <app> # List proxy port mappings for app
proxy:ports-set <app> <scheme>:<host-port>:<container-port> [<scheme>:<host-port>:<container-port>...] # Set proxy port mappings for app
proxy:ports-add <app> <scheme>:<host-port>:<container-port> [<scheme>:<host-port>:<container-port>...] # Add proxy port mappings for app
proxy:ports-clear <app> # Clear all proxy port mappings for app
proxy:ports-remove <app> <host-port> [<host-port>|<scheme>:<host-port>:<container-port>...] # Unset proxy port mappings for app
proxy:ports <app> # List proxy port mappings for an app
proxy:ports-add <app> <scheme>:<host-port>:<container-port> [<scheme>:<host-port>:<container-port>...] # Add proxy port mappings to an app
proxy:ports-clear <app> # Clear all proxy port mappings for an app
proxy:ports-remove <app> <host-port> [<host-port>|<scheme>:<host-port>:<container-port>...] # Remove specific proxy port mappings from an app
proxy:ports-set <app> <scheme>:<host-port>:<container-port> [<scheme>:<host-port>:<container-port>...] # Set proxy port mappings for an app
```
In Dokku 0.5.0, port proxying was decoupled from the `nginx-vhosts` plugin into the proxy plugin. Dokku 0.6.0 introduced the ability to map host ports to specific container ports. In the future this will allow other proxy software - such as HAProxy or Caddy - to be used in place of nginx.
## Usage
> Warning: Mapping alternative ports may conflict with the active firewall installed on your server or hosting provider. Such software includes - but is not limited to - AWS Security Groups, iptables, and UFW. Please consult the documentation for those softwares as applicable.
### Proxy port mapping
> New as of 0.6.0

View File

@@ -19,7 +19,7 @@ In Dokku 0.5.0, port proxying was decoupled from the `nginx-vhosts` plugin into
From Dokku versions `0.5.0` until `0.11.0`, enabling or disabling an application's proxy would **also** control whether or not the application was bound to all interfaces - e.g. `0.0.0.0`. As of `0.11.0`, this is now controlled by the network plugin. Please see the [network documentation](/docs/networking/network.md#container-network-interface-binding) for more information.
### Displaying proxy reports about an app
### Displaying proxy reports for an app
> New as of 0.8.1

View File

@@ -9,26 +9,26 @@
<meta name="author" content="">
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/favicon.ico">
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/favicon.ico">
<meta name="apple-mobile-web-app-title" content="Dokku">
<meta name="application-name" content="Dokku">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/favicons/browserconfig.xml">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/favicons/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<script>
@@ -42,7 +42,7 @@
</script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.14.2/docs/assets/style.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.18.3/docs/assets/style.css" rel="stylesheet">
<!-- <link href="/dokku/docs/assets/style.css" rel="stylesheet"> -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
<style>
@@ -121,7 +121,7 @@
<a href="/{{NAME}}/deployment/application-management/" class="list-group-item">Application Management</a>
<a href="/{{NAME}}/deployment/logs/" class="list-group-item">Application Logs</a>
<a href="/{{NAME}}/deployment/remote-commands/" class="list-group-item">Remote Commands</a>
<a href="/{{NAME}}/deployment/one-off-processes/" class="list-group-item">One Off Processes/Cron</a>
<a href="/{{NAME}}/deployment/one-off-processes/" class="list-group-item">One-Off Processes/Cron</a>
<a href="/{{NAME}}/deployment/process-management/" class="list-group-item">Process Scaling</a>
<a href="/{{NAME}}/deployment/user-management/" class="list-group-item">User Management</a>
<a href="/{{NAME}}/deployment/zero-downtime-deploys/" class="list-group-item">Zero Downtime Deploy Checks</a>
@@ -157,6 +157,7 @@
<a href="/{{NAME}}/advanced-usage/persistent-storage/" class="list-group-item">Persistent Storage</a>
<a href="/{{NAME}}/advanced-usage/plugin-management/" class="list-group-item">Plugin Management</a>
<a href="/{{NAME}}/advanced-usage/repository-management/" class="list-group-item">Repository Management</a>
<a href="/{{NAME}}/advanced-usage/resource-management/" class="list-group-item">Resource Management</a>
<a href="#" class="list-group-item disabled">Schedulers</a>

29
dokku
View File

@@ -2,6 +2,7 @@
set -eo pipefail
shopt -s nullglob
export DOCKER_BIN=docker
if [[ -r /etc/default/dokku ]]; then
# shellcheck disable=SC1091
source /etc/default/dokku
@@ -36,7 +37,11 @@ DOKKU_DISTRO=$(
echo "$ID"
)
export DOKKU_IMAGE=${DOKKU_IMAGE:="gliderlabs/herokuish"}
# Specify twice so that only host-level
# configuration can ever override the DOCKER_BIN value
export DOCKER_BIN=${DOCKER_BIN:="docker"}
export DOKKU_IMAGE=${DOKKU_IMAGE:="gliderlabs/herokuish:latest"}
export DOKKU_LIB_ROOT=${DOKKU_LIB_PATH:="/var/lib/dokku"}
export PLUGIN_PATH=${PLUGIN_PATH:="$DOKKU_LIB_ROOT/plugins"}
@@ -51,12 +56,14 @@ export DOKKU_SYSTEM_USER=${DOKKU_SYSTEM_USER:="dokku"}
export DOKKU_API_VERSION=1
export DOKKU_NOT_IMPLEMENTED_EXIT=10
export DOKKU_VALID_EXIT=0
export DOKKU_PID="$BASHPID"
export DOKKU_LOGS_DIR=${DOKKU_LOGS_DIR:="/var/log/dokku"}
export DOKKU_EVENTS_LOGFILE=${DOKKU_EVENTS_LOGFILE:="$DOKKU_LOGS_DIR/events.log"}
export DOKKU_CONTAINER_LABEL=dokku
export DOKKU_GLOBAL_RUN_ARGS="--label=$DOKKU_CONTAINER_LABEL"
export DOKKU_GLOBAL_BUILD_ARGS="--label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku --label=$DOKKU_CONTAINER_LABEL"
export DOKKU_GLOBAL_RUN_ARGS="--label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku --label=$DOKKU_CONTAINER_LABEL"
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
@@ -66,6 +73,9 @@ skip_arg=false
if [[ "${args[0]}" =~ ^--.* ]]; then
for arg in "$@"; do
$skip_arg && skip_arg=false && continue
if [[ "$arg" == "--version" ]]; then
continue
fi
if [[ "$arg" == "--app" ]]; then
shift 2 && skip_arg=true
elif [[ "$arg" =~ ^--.* ]]; then
@@ -129,14 +139,14 @@ execute_dokku_cmd() {
deploy | delete | ls | run | cleanup)
local PLUGIN_NAME="00_dokku-standard"
;;
trace | url | urls | report | version)
url | urls | report)
local PLUGIN_NAME="00_dokku-standard"
;;
esac
if [[ "$(readlink -f "$PLUGIN_ENABLED_PATH/${PLUGIN_NAME%%:*}")" == *core-plugins* ]]; then
[[ ${argv[0]} == "$PLUGIN_CMD" ]] && shift 1
if [[ ! -z $DOKKU_APP_NAME ]]; then
if [[ -n $DOKKU_APP_NAME ]]; then
if [[ "$PLUGIN_CMD" == config* ]] && [[ ${argv[1]} == "--no-restart" ]]; then
shift 1
set -- "--no-restart" "$DOKKU_APP_NAME" "$@"
@@ -233,6 +243,17 @@ case "$1" in
fi
;;
version | -v | --version)
if [[ -f "$DOKKU_LIB_ROOT/STABLE_VERSION" ]]; then
DOKKU_VERSION=$(cat "${DOKKU_LIB_ROOT}/STABLE_VERSION")
elif [[ -f "$DOKKU_LIB_ROOT/VERSION" ]]; then
DOKKU_VERSION=$(cat "${DOKKU_LIB_ROOT}/VERSION")
else
dokku_log_fail "Unable to determine dokku's version"
fi
echo "dokku version ${DOKKU_VERSION}"
;;
*)
execute_dokku_cmd "$@"
;;

35
package.mk Normal file
View File

@@ -0,0 +1,35 @@
/tmp/build-dokku/var/lib/dokku/GIT_REV:
mkdir -p /tmp/build-dokku
mkdir -p /tmp/build-dokku/usr/share/bash-completion/completions
mkdir -p /tmp/build-dokku/usr/bin
mkdir -p /tmp/build-dokku/usr/share/doc/dokku
mkdir -p /tmp/build-dokku/usr/share/dokku/contrib
mkdir -p /tmp/build-dokku/usr/share/lintian/overrides
mkdir -p /tmp/build-dokku/usr/share/man/man1
mkdir -p /tmp/build-dokku/var/lib/dokku/core-plugins/available
cp dokku /tmp/build-dokku/usr/bin
cp LICENSE /tmp/build-dokku/usr/share/doc/dokku/copyright
cp contrib/bash-completion /tmp/build-dokku/usr/share/bash-completion/completions/dokku
find . -name ".DS_Store" -depth -exec rm {} \;
$(MAKE) go-build
cp common.mk /tmp/build-dokku/var/lib/dokku/core-plugins/common.mk
cp -r plugins/* /tmp/build-dokku/var/lib/dokku/core-plugins/available
find plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do cd /tmp/build-dokku/var/lib/dokku/core-plugins/available/$$plugin && if [ -e Makefile ]; then $(MAKE) src-clean; fi; done
find plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do touch /tmp/build-dokku/var/lib/dokku/core-plugins/available/$$plugin/.core; done
rm /tmp/build-dokku/var/lib/dokku/core-plugins/common.mk
$(MAKE) help2man
$(MAKE) addman
cp /usr/local/share/man/man1/dokku.1 /tmp/build-dokku/usr/share/man/man1/dokku.1
gzip -9 /tmp/build-dokku/usr/share/man/man1/dokku.1
cp contrib/dokku-installer.py /tmp/build-dokku/usr/share/dokku/contrib
ifeq ($(DOKKU_VERSION),master)
git describe --tags > /tmp/build-dokku/var/lib/dokku/VERSION
else
echo $(DOKKU_VERSION) > /tmp/build-dokku/var/lib/dokku/VERSION
endif
ifdef DOKKU_GIT_REV
echo "$(DOKKU_GIT_REV)" > /tmp/build-dokku/var/lib/dokku/GIT_REV
else
git rev-parse HEAD > /tmp/build-dokku/var/lib/dokku/GIT_REV
endif

View File

@@ -9,8 +9,7 @@ case "$1" in
help_content_func() {
declare desc="return standard plugin help content"
cat <<help_content
run <app> <cmd>, Run a command in a new container using the current application image
trace [on/off], Enable dokku tracing
run [--env KEY=VALUE] <app> <cmd>, Run a command in a new container using the current application image
url <app>, Show the first URL for an application (compatibility)
urls <app>, Show all URLs for an application
version , Print dokku's version

View File

@@ -43,7 +43,7 @@ ExecStart=$dokku_path ps:restore
WantedBy=docker.service
EOF
if command -v systemctl &>/dev/null; then
systemctl reenable dokku-redeploy
systemctl --quiet reenable dokku-redeploy
fi
fi

View File

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

View File

@@ -12,12 +12,12 @@ dokku_report_cmd() {
dokku_log_info1 "memory: "
free -m | sed "s/^/ /"
dokku_log_info1 "docker version: "
docker version | sed "s/^/ /"
"$DOCKER_BIN" version | sed "s/^/ /"
dokku_log_info1 "docker daemon info: "
docker -D info | sed "s/^/ /"
"$DOCKER_BIN" -D info | sed "s/^/ /"
dokku_log_info1 "sigil version: $(sigil -v)"
dokku_log_info1 "herokuish version: "
docker run --rm gliderlabs/herokuish:latest herokuish version | sed "s/^/ /"
"$DOCKER_BIN" run $DOKKU_GLOBAL_RUN_ARGS --rm "$DOKKU_IMAGE" herokuish version | sed "s/^/ /"
dokku_log_info1 "dokku version: $(dokku version)"
dokku_log_info1 "dokku plugins: "
dokku plugin:list | sed "s/^/ /"

View File

@@ -6,12 +6,38 @@ source "$PLUGIN_AVAILABLE_PATH/config/functions"
dokku_run_cmd() {
declare desc="runs command in container based on app image"
declare cmd="run" APP="$2"
declare cmd="run" APP=""
shift
declare -a RUN_ENV
RUN_ENV=()
while [[ $# -gt 0 ]]; do
case $1 in
-e=* | --env=*)
local arg=$(printf "%s" "$1" | sed -E 's/(^-e=)|(^--env=)//g')
RUN_ENV+=("$arg")
shift
;;
-e | --env)
if [[ ! $2 ]]; then
dokku_log_warn "expected $1 to have an argument"
break
fi
RUN_ENV+=("$2")
shift 2
;;
*)
APP="$1"
shift
break
;;
esac
done
verify_app_name "$APP"
shift 2
local DOKKU_SCHEDULER=$(get_app_scheduler "$APP")
plugn trigger scheduler-run "$DOKKU_SCHEDULER" "$APP" "$@"
plugn trigger scheduler-run "$DOKKU_SCHEDULER" "$APP" "${#RUN_ENV[@]}" "${RUN_ENV[@]}" "$@"
}
dokku_run_cmd "$@"

View File

@@ -1,12 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
dokku_version_cmd() {
declare desc="prints dokku version"
local cmd="version"
cat "$DOKKU_ROOT/VERSION" || dokku_log_fail "Unable to determine dokku's version"
}
dokku_version_cmd "$@"

View File

@@ -0,0 +1 @@
hook

1
plugins/20_events/app-urls Symbolic link
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

@@ -38,7 +38,14 @@ fi
if [[ -d "$DOKKU_RSYSLOG_FILTER_DIR" && ! -f "$DOKKU_RSYSLOG_FILTER" ]]; then
cat >"$DOKKU_RSYSLOG_FILTER" <<EOF
:syslogtag, contains, "dokku" $DOKKU_EVENTS_LOGFILE
:syslogtag, contains, "dokku-event" $DOKKU_EVENTS_LOGFILE
EOF
flag_rsyslog_needs_restart=y
fi
if [[ -f "$DOKKU_RSYSLOG_FILTER" ]] && ! grep -q "dokku-event" "$DOKKU_RSYSLOG_FILTER"; then
cat >"$DOKKU_RSYSLOG_FILTER" <<EOF
:syslogtag, contains, "dokku-event" $DOKKU_EVENTS_LOGFILE
EOF
flag_rsyslog_needs_restart=y
fi

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