Compare commits

...

471 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
e435d01258 Release 0.22.7
Some checks failed
bump-formula / bump-formula (push) Has been cancelled
# History

## 0.22.7

Install/update via the bootstrap script:

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

### Bug Fixes

- #4301: @josegonzalez Ensure vector container starts correctly
2021-01-07 03:07:57 -05:00
Jose Diaz-Gonzalez
793e9d377e Merge pull request #4301 from dokku/4299-vector-fixes
Ensure vector container starts correctly
2021-01-07 03:07:40 -05:00
Jose Diaz-Gonzalez
a57680fbbf feat: test vector commands 2021-01-07 01:54:04 -05:00
Jose Diaz-Gonzalez
eda71e3ffe feat: mirror log tailing support for logs:vector-logs command 2021-01-07 01:43:55 -05:00
Jose Diaz-Gonzalez
b186d9d66c docs: fix help output 2021-01-07 01:42:51 -05:00
Jose Diaz-Gonzalez
f16a211b48 feat: add more tests for the logs plugin 2021-01-07 01:34:19 -05:00
Jose Diaz-Gonzalez
d70a9be97e fix: correct issue where all flags were not shown if an invalid flag was specified 2021-01-07 01:34:05 -05:00
Jose Diaz-Gonzalez
666bb9dfee fix: unscope err for report subcommands 2021-01-07 01:12:50 -05:00
Jose Diaz-Gonzalez
081a44755e docs: fix examples to use correct property key 2021-01-07 01:07:20 -05:00
Jose Diaz-Gonzalez
2eae6c25af tests: add test for logs:help 2021-01-07 00:14:43 -05:00
Jose Diaz-Gonzalez
4bbee232d8 fix: handle error cases in starting a new vector container 2021-01-07 00:12:44 -05:00
Jose Diaz-Gonzalez
441f7ab22a fix: pass 1 to --watch-config flag
Apparently this needs a value...
2021-01-07 00:12:23 -05:00
Jose Diaz-Gonzalez
714b27f8a4 chore: quiet output of starting container
We check if the container is running later, so there isn't a need for us to see the containerID here
2021-01-07 00:08:05 -05:00
Jose Diaz-Gonzalez
2d841f47eb fix: handle case where there are no apps 2021-01-06 22:45:47 -05:00
Jose Diaz-Gonzalez
4c98cd922f Release 0.22.6
Some checks failed
bump-formula / bump-formula (push) Has been cancelled
# History

## 0.22.6

Install/update via the bootstrap script:

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

### Bug Fixes

- #4295: @josegonzalez Update ps subcommands and triggers

### New Features

- #4286: @josegonzalez Add support for templated CHECKS files
- #4294: @josegonzalez Enhance ssh client logging output
- #4291: @josegonzalez Add log aggregation support via Vector
- #4288: @josegonzalez Add the pid of the dokku process to event logs
- #4289: @josegonzalez Clean precheck tmp file on exit

### Refactors

- #4287: @josegonzalez Refactor parallelized goroutines to use error groups

### Documentation

- #4292: @thomasfedb Update docs to note support for Ubuntu 20.04
- #4293: @ltalirz Fix path in persistent storage docs

### Other

- #4290: @josegonzalez Add support for debug logging plugin trigger stderr and stdout
2021-01-05 09:50:19 -05:00
Jose Diaz-Gonzalez
1c3c712629 Merge pull request #4295 from dokku/fix-triggers
Update ps subcommands and triggers
2021-01-05 09:45:59 -05:00
Jose Diaz-Gonzalez
84ec74e97f fix: update ps subcommands and triggers
- There were missing trigger symlinks due to the the rewrite omitting them
- There was an extra symlink for a subcommand that was removed
2021-01-05 03:50:52 -05:00
Jose Diaz-Gonzalez
57cc1c7f8e Merge pull request #4286 from dokku/3974-templated-checks
Add support for templated CHECKS files
2021-01-05 03:15:36 -05:00
Jose Diaz-Gonzalez
0e67ffc41e Merge pull request #4294 from dokku/4278-better-client-logging
Enhance ssh client logging output
2021-01-05 02:21:34 -05:00
Jose Diaz-Gonzalez
f4e0d19d43 fix: correct path for templated checks file 2021-01-05 01:02:39 -05:00
Jose Diaz-Gonzalez
07e7988cdf feat: add sigil templating to CHECKS files
This enables general templating capabilities, in addition to environment variable access.

Closes #3974.
2021-01-05 00:16:55 -05:00
Jose Diaz-Gonzalez
d21aca2c59 chore: remove unnecessary extra logic
This is now performed in copy_from_image for all files.
2021-01-05 00:16:55 -05:00
Jose Diaz-Gonzalez
540e066acf fix: return the failed exit code 2021-01-05 00:10:54 -05:00
Jose Diaz-Gonzalez
a49de4e473 docs: make the header more clear
[ci skip]
2021-01-04 23:00:58 -05:00
Jose Diaz-Gonzalez
4c28ae2630 Merge pull request #4291 from dokku/2268-vector-logging
Add log aggregation support via Vector
2021-01-04 22:56:25 -05:00
Jose Diaz-Gonzalez
2d07d89d60 docs: add new as of banner
[ci skip]
2021-01-04 22:56:03 -05:00
Jose Diaz-Gonzalez
83d8c8448b feat: remind users to check their ssh config in cases of ssh error
Closes #4278
2021-01-04 22:41:04 -05:00
Jose Diaz-Gonzalez
8eccd50ecb chore: standardize logging output
- send errors to stderr
- use proper prefixes on errors
- use correct prefixes on stdout
2021-01-04 22:38:28 -05:00
Jose Diaz-Gonzalez
09ed45534d refactor: always write out the vector configuration 2021-01-04 21:48:38 -05:00
Jose Diaz-Gonzalez
711945147b refactor: use --watch-config instead of signaling the container to reload config 2021-01-04 21:48:28 -05:00
Jose Diaz-Gonzalez
0b3a6687f6 feat: actually mount the apps log dir
Also fix it so that the log directory is mountable from a custom path on the host if running dokku within a container.
2021-01-04 21:45:26 -05:00
Jose Diaz-Gonzalez
1aec869f9e fix: do not delete apps log subdir
This is a new directory introduced for vector logging should not be deleted so vector logging still works.
2021-01-04 21:40:51 -05:00
Jose Diaz-Gonzalez
6f9a6eb294 fix: only check for global properties when appName is --global 2021-01-04 12:43:15 -05:00
Jose Diaz-Gonzalez
96ed840d17 Merge pull request #4292 from thomasfedb/patch-1
Update docs to note support for Ubuntu 20.04
2021-01-04 12:19:39 -05:00
Jose Diaz-Gonzalez
5acdf4a43c Merge pull request #4293 from ltalirz/patch-2
Update persistent-storage.md
2021-01-04 12:19:05 -05:00
Leopold Talirz
6b4c545592 Update persistent-storage.md
add directory to complete path
2021-01-04 16:17:54 +01:00
Thomas Drake-Brockman
dd6cbcf242 Update docs to note support for Ubuntu 20.04 2021-01-04 21:50:02 +08:00
Jose Diaz-Gonzalez
d6acf5530e fix: add some comments 2021-01-04 01:14:40 -05:00
Jose Diaz-Gonzalez
94696e81fa fix: ensure the vector container does not exit when no configured sinks are in place 2021-01-04 01:12:25 -05:00
Jose Diaz-Gonzalez
43d6a2ad94 feat: add ability to set a global vector sink 2021-01-04 01:11:49 -05:00
Jose Diaz-Gonzalez
e1425a85e4 feat: add ability to set global properties
Not all properties can be set globally, and the "appName" in the global case is currently defaulted to `--global`. This is okay because domain label names cannot start with hyphens, and all app names must be valid domain label names.
2021-01-04 00:50:14 -05:00
Jose Diaz-Gonzalez
f5fa94cc9c chore: remove dburl usage
dburl adds aliases for everything, which breaks if two schemes are similar enough (anything with `aws_` as a prefix broke scheme registration). It does not appear to add anything, so we'll drop that dependency.

Also remove go-jsonmerge, as this was refactored to use structs instead of byte manipulation...
2021-01-04 00:42:13 -05:00
Jose Diaz-Gonzalez
fd85b1f605 feat: add vector integration
This currently is missing a few features:

- global sinks
- logrotation

But works fairly well otherwise.
2021-01-04 00:30:22 -05:00
Jose Diaz-Gonzalez
b386783ec8 Merge pull request #4287 from dokku/parallelize-refactor
Refactor parallelized goroutines to use error groups
2021-01-02 23:53:11 -05:00
Jose Diaz-Gonzalez
3b76b81edf fix: set correct variable for app image repo 2021-01-02 18:47:48 -05:00
Jose Diaz-Gonzalez
2eb159b0c3 refactor: use error group for fetching the app shell to use for app-json tasks 2021-01-02 18:45:30 -05:00
Jose Diaz-Gonzalez
596e7b6f24 feat: use error group to fetch the deploying app image
This is a fairly slow operation currently done serially, making ps:scale output brutally slow. Using an error group to parallelize the output is also pleasing to the eyes :)
2021-01-02 18:45:30 -05:00
Jose Diaz-Gonzalez
aa0437bb23 refactor: use an error group to simplify parallel retrieval of scheduler
This makes the code a bit simpler to read and more idiomatic
2021-01-02 18:45:30 -05:00
Jose Diaz-Gonzalez
a6c22a292d Merge pull request #4288 from dokku/pid-log
Add the pid of the dokku process to event logs
2021-01-02 18:40:30 -05:00
Jose Diaz-Gonzalez
0635edba17 Merge pull request #4289 from dokku/clean-on-exit
Clean precheck tmp file on exit
2021-01-02 18:40:23 -05:00
Jose Diaz-Gonzalez
a0491a5ef2 Merge pull request #4290 from dokku/debug-output
Add support for debug logging plugin trigger stderr and stdout
2021-01-02 18:40:15 -05:00
Jose Diaz-Gonzalez
38d172c477 refactor: add support for debug logging plugin trigger stderr and stdout
Previously, this could get a bit hazy when running the command within a goroutine. The new method creates pipes for writing stdout/stderr for each call to PluginTriggerOutput, then debug logs if if trace mode is on.

While it is a bit weird to read, it is more correct and should get rid of any parallel processing issues.
2021-01-02 06:13:48 -05:00
Jose Diaz-Gonzalez
5e4c918d40 feat: trim any extra debug log prefixes 2021-01-02 06:11:51 -05:00
Jose Diaz-Gonzalez
e8aaacff5e refactor: simplify code 2021-01-02 06:11:34 -05:00
Jose Diaz-Gonzalez
21d4d640c2 fix: clean precheck tmp file on exit 2021-01-02 05:23:52 -05:00
Jose Diaz-Gonzalez
b927c1b84d feat: add the pid of the dokku process to event logs 2021-01-02 05:23:12 -05:00
Jose Diaz-Gonzalez
d456a96cb5 Release 0.22.5
Some checks failed
bump-formula / bump-formula (push) Has been cancelled
# History

## 0.22.5

Install/update via the bootstrap script:

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

### Bug Fixes

- #4279: @josegonzalez Allow vmware-based vm to work on big sur

### Refactors

- #4282: @josegonzalez Cleanup brew-bump integration
- #4280: @josegonzalez Parallelize report and scheduler retrieval

### Documentation

- #4285: @josegonzalez Reference official gitlab-ci integration
- #4284: @josegonzalez Drop old doc link to gitlab ci docs
- #4283: @josegonzalez Add CI documentation section for Github Actions and Gitlab
- #4281: @josegonzalez Add forum link to documentation
2020-12-31 18:22:18 -05:00
Jose Diaz-Gonzalez
1964fc6b65 Merge pull request #4285 from dokku/4217-gitlab-ci
Reference official gitlab-ci integration
2020-12-30 04:29:15 -05:00
Jose Diaz-Gonzalez
26e270a49f docs: reference official gitlab-ci integration
Closes #4217
2020-12-30 04:28:45 -05:00
Jose Diaz-Gonzalez
3323623289 Merge pull request #4284 from dokku/josegonzalez-patch-1
Drop old doc link to gitlab ci docs
2020-12-30 03:41:35 -05:00
Jose Diaz-Gonzalez
7a43321d1c docs: drop old doc link to gitlab ci docs
[ci skip]
2020-12-30 03:41:18 -05:00
Jose Diaz-Gonzalez
4a5cc71c3e Merge pull request #4283 from dokku/4151-ci-docs
Add CI documentation section for Github Actions and Gitlab
2020-12-30 03:39:32 -05:00
Jose Diaz-Gonzalez
660ccf876e docs: add documentation for generic ci systems 2020-12-30 03:38:47 -05:00
Jose Diaz-Gonzalez
69dd81860f docs: add github actions documentation 2020-12-30 03:34:01 -05:00
Jose Diaz-Gonzalez
b1c2c026aa docs: split out initial ci section of docs 2020-12-30 03:25:22 -05:00
Jose Diaz-Gonzalez
b7fa97bf9e Merge pull request #4282 from dokku/brew-bump-automation
Cleanup brew-bump integration
2020-12-30 03:18:48 -05:00
Jose Diaz-Gonzalez
1bdaab6d72 Merge pull request #4281 from dokku/forum-link
Add forum link to documentation
2020-12-30 03:17:58 -05:00
Jose Diaz-Gonzalez
3edc14fc97 Merge pull request #4280 from dokku/parallelize-internals
Parallelize report and scheduler retrieval
2020-12-30 03:16:27 -05:00
Jose Diaz-Gonzalez
940d258c5e fix: use authentcated clone for tap url 2020-12-30 03:08:13 -05:00
Jose Diaz-Gonzalez
2500ca5106 chore: use https url brew tap clone 2020-12-30 03:06:16 -05:00
Jose Diaz-Gonzalez
c5a7fd6d43 chore: configure git user info 2020-12-30 03:05:54 -05:00
Jose Diaz-Gonzalez
d424af5b1e docs: add github discussions link and clarify what is monitored and what is not. 2020-12-30 02:50:03 -05:00
Jose Diaz-Gonzalez
ca383739ab docs: add github discussions link to header 2020-12-30 02:44:20 -05:00
Jose Diaz-Gonzalez
0176e888af refactor: only add status flags as necessary 2020-12-30 00:38:07 -05:00
Jose Diaz-Gonzalez
0e320d2832 feat: short-circuit report fetching if only retrieving a single value
This speeds up report output when specifying a flag as extra data that isn't used will not be fetched unnecessarily.
2020-12-30 00:37:43 -05:00
Jose Diaz-Gonzalez
38b96c1e27 fix: add comments 2020-12-30 00:28:59 -05:00
Jose Diaz-Gonzalez
5da5a6fe5f refactor: collect process status in parallel
This speeds up ps:report for apps that have more than 1 running container.
2020-12-30 00:21:09 -05:00
Jose Diaz-Gonzalez
28c9f42a25 refactor: parallelize report commands
This will make reports a bit faster to run, and is safe to do as reports should not change app state.
2020-12-29 23:56:10 -05:00
Jose Diaz-Gonzalez
44461e21df refactor: parallelize scheduler retrieval
In many cases, a user may only set a global scheduler, and as such we waste the initial call to get the app scheduler. Parallelizing the fetch increases the speed at which we can check for the scheduler.
2020-12-29 23:55:13 -05:00
Jose Diaz-Gonzalez
164c4eefa7 Merge pull request #4279 from dokku/vagrant-big-sur
Allow vmware-based vm to work on big sur
2020-12-29 16:27:58 -05:00
Jose Diaz-Gonzalez
ee6c034baa fix: allow vmware-based vm to work on big sur
There seems to be an issue in Vmware that causes SSH to fail for new VMs.

https://github.com/hashicorp/vagrant/issues/12045
2020-12-29 16:27:29 -05:00
Jose Diaz-Gonzalez
4b399df541 Release 0.22.4
Some checks failed
bump-formula / bump-formula (push) Has been cancelled
# History

## 0.22.4

Install/update via the bootstrap script:

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

### Bug Fixes

- #4274: @josegonzalez Use correct warning message for deprecated code

### New Features

- #4273: @josegonzalez Upgrade to golang 1.15

### Refactors

- #4275: @josegonzalez Add calls to verify app name in subcommands

### Documentation

- #4272: @josegonzalez Correct help output for ssh-keys command

### Tests

- #4276: @josegonzalez Upgrade version of plugn used in tests
2020-12-29 16:07:18 -05:00
Jose Diaz-Gonzalez
f1c7e1113f Merge pull request #4275 from dokku/verify-app-name
Add calls to verify app name in subcommands
2020-12-29 04:56:15 -05:00
Jose Diaz-Gonzalez
90c68ba02f fix: correct position of app name check for nginx:validate-config 2020-12-29 02:46:18 -05:00
Jose Diaz-Gonzalez
7f2180b47b fix: git config can be set globally 2020-12-27 15:27:46 -05:00
Jose Diaz-Gonzalez
21ff68f624 fix: correct unit test 2020-12-27 15:20:32 -05:00
Jose Diaz-Gonzalez
fd162f8895 feat: add verify_app_name calls to all shell subcommands
Without this, folks could potentially run commands against invalid applications.
2020-12-27 15:14:11 -05:00
Jose Diaz-Gonzalez
03e80a76b6 fix: add missing argument.. 2020-12-27 15:14:11 -05:00
Jose Diaz-Gonzalez
08fdfd1e38 feat: drop internal calls to verify_app_name 2020-12-27 15:14:11 -05:00
Jose Diaz-Gonzalez
2a6c411edf docs: remove extra verify_app_name call in documentation 2020-12-27 15:14:11 -05:00
Jose Diaz-Gonzalez
65d7fd9cce refactor: drop extra internal calls to VerifyAppName
These are duplicative of the checks that happen at the subcommand level.
2020-12-27 15:14:11 -05:00
Jose Diaz-Gonzalez
e0570be562 refactor: use common.VerifyAppName for appExists
The duplicative logic didn't make much sense.
2020-12-27 15:14:11 -05:00
Jose Diaz-Gonzalez
ffa303092f feat: add app name verification to all golang plugins
Moving verification of input to the earliest place is the best way to decrease the need to validate this further downstream.

Additionally, some of the existing checks were.... lacking :)
2020-12-27 15:14:11 -05:00
Jose Diaz-Gonzalez
382dc01b33 Merge pull request #4276 from dokku/josegonzalez-patch-1
Upgrade version of plugn used in tests
2020-12-27 15:13:37 -05:00
Jose Diaz-Gonzalez
7f02155ce1 tests: upgrade version of plugn used in tests 2020-12-25 03:08:08 -05:00
Jose Diaz-Gonzalez
8c17a70dc1 Merge pull request #4274 from dokku/josegonzalez-patch-1
Use correct warning message for deprecated code
2020-12-25 03:05:49 -05:00
Jose Diaz-Gonzalez
b39623ab2b Merge pull request #4273 from dokku/upgrade-golang
Upgrade to golang 1.15
2020-12-25 03:05:19 -05:00
Jose Diaz-Gonzalez
98e57287e3 Merge pull request #4272 from dokku/fix-ssh-keys-help
Correct help output for ssh-keys command
2020-12-25 01:44:39 -05:00
Jose Diaz-Gonzalez
68047866be fix: use correct warning message for deprecated code 2020-12-25 00:01:43 -05:00
Jose Diaz-Gonzalez
bacc5cbcab feat: upgrade to golang 1.15
This is what is used for local development.
2020-12-24 23:46:27 -05:00
Jose Diaz-Gonzalez
549280e2b6 docs: correct help output for ssh-keys command
The recent update did not include the new flags.
2020-12-24 23:32:31 -05:00
Jose Diaz-Gonzalez
61af5971d5 Release 0.22.3
Some checks failed
bump-formula / bump-formula (push) Has been cancelled
# History

## 0.22.3

Install/update via the bootstrap script:

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

### Bug Fixes

- #4268: @josegonzalez Properly parse flags for logs command
- #4264: @josegonzalez Correct argument handling when setting the `--app` flag
- #4252: @magikid Allow symbolic links for certificate and key files

### New Features

- #4270: @josegonzalez Allow renaming old applications to new format
- #4261: @josegonzalez Add remove by fingerprint and json format output to ssh-keys plugin
- #4262: @josegonzalez Improve ps:restore logging
- #4263: @josegonzalez Bump the dokku client formula on release

### Documentation

- #4253: @guettli Highlight the default build method used by Dokku
- #4250: @rlnd1 Update upgrading.md
- #4249: @guettli Fix typo in zero downtime docs
- #4247: @josegonzalez Clarify the domain name setting in the docs

### Tests

- #4269: @josegonzalez Rename duplicate test
- #4266: @josegonzalez Update junit test files when a bats retry is successful
- #4265: @josegonzalez Retry failing and skipped tests once
2020-12-23 02:35:25 -05:00
Jose Diaz-Gonzalez
acc206fca7 Merge pull request #4270 from dokku/4267-fix-app-name-verification
Allow renaming old applications to new format
2020-12-23 02:32:10 -05:00
Jose Diaz-Gonzalez
59a81ad3be fix: cleanup apps and containers before each test
- remove all nginx configurations since they may be faulty
- move cleanup commands to helper functions
- fix a few shellcheck violations
2020-12-22 13:29:32 -05:00
Jose Diaz-Gonzalez
d7b23b84f0 fix: allow renaming old applications to new format
0.22.0 changed allowed values for app names, making it more difficult for users to fix their app names - you need to either downgrade+rename or recreate the app. The `apps:rename`  command can now rename these old applications to the new standard.

Also drop some app name verification from internal commands. Duplicate verification doesn't help much, and though it isn't excessively slow, it does prevent us from running commands against old apps that exist.

Refs #4267
2020-12-22 13:29:32 -05:00
Jose Diaz-Gonzalez
3d77de20cc Merge pull request #4269 from dokku/josegonzalez-patch-1
Rename duplicate test
2020-12-22 13:28:33 -05:00
Jose Diaz-Gonzalez
365356eb5f fix: output is expected twice 2020-12-22 11:52:02 -05:00
Jose Diaz-Gonzalez
044cc4a618 fix: rename duplicate test 2020-12-22 01:30:16 -05:00
Jose Diaz-Gonzalez
09541f8aac Merge pull request #4268 from dokku/4256-fix-logs-arguments
Properly parse flags for logs command
2020-12-21 18:29:04 -05:00
Jose Diaz-Gonzalez
4d0979bbcd fix: properly parse flags for logs command
Closes #4256
2020-12-21 16:50:34 -05:00
Jose Diaz-Gonzalez
dba4bb9c2c Merge pull request #4264 from dokku/4255-client-parsing
Correct argument handling when setting the `--app` flag
2020-12-21 15:55:27 -05:00
Jose Diaz-Gonzalez
2e4c886ab2 fix: correct app arg parsing and new test 2020-12-21 13:36:04 -05:00
Jose Diaz-Gonzalez
dd1962f92d fix: add missing docblock 2020-12-21 01:40:40 -05:00
Jose Diaz-Gonzalez
1439e8b30b hack: parse out the info flags for report subcommands separately
pflag doesn't ignore unspecified arguments, so they must be parsed out separately first.
2020-12-21 01:36:59 -05:00
Jose Diaz-Gonzalez
8240790381 fix: correct argument handling when setting the --app flag
When setting the `--app` flag, there was a special case for the config plugin. This plugin used to take the `--no-restart` flag as the first argument - and still did until this change - resulting in an invalid call to the plugin subcommands. What is worse is that this functionality carried over to all other plugins as they were rewritten in golang, and thus the issue spread without us knowing.

The fix is to support GNU flag parsing rules, which Golang does not do by default (Because Of Reasons™). Switching to `github.com/spf13/pflag` fixes this issue, and also allows positional arguments to be placed wherever, even in the middle of flags.

Closes #4255
2020-12-20 22:06:33 -05:00
Jose Diaz-Gonzalez
0050aa6b92 Merge pull request #4266 from dokku/better-bats-retry
Update junit test files when a bats retry is successful
2020-12-20 22:06:03 -05:00
Jose Diaz-Gonzalez
f53b26f3f0 tests: update junit test files when a bats retry is successful 2020-12-20 17:26:27 -05:00
Jose Diaz-Gonzalez
57a9a11ab3 Merge pull request #4261 from dokku/ssh-keys-commands
Add remove by fingerprint and json format output to ssh-keys plugin
2020-12-20 13:52:11 -05:00
Jose Diaz-Gonzalez
a6a0e033a7 Merge pull request #4262 from dokku/4259-better-restore-logging
Improve ps:restore logging
2020-12-20 13:51:10 -05:00
Jose Diaz-Gonzalez
18492ac83c feat: add json format support to ssh-keys:list 2020-12-20 04:15:53 -05:00
Jose Diaz-Gonzalez
13dd8aa224 feat: add ability to remove an ssh key by fingerprint
- add tests for ssh-keys:remove
- upgrade sshcommand
2020-12-20 04:15:53 -05:00
Jose Diaz-Gonzalez
574304486a chore: make the structs internal
They don't need to be exported as they are only used within this plugin.
2020-12-20 04:15:42 -05:00
Jose Diaz-Gonzalez
90feb8dc96 chore: remove unused file
This was forgotten in the ps plugin rewrite.
2020-12-20 04:15:42 -05:00
Jose Diaz-Gonzalez
7bc241dd48 feat: suppress output for nginx init commands
It's not super useful most of the time.
2020-12-20 04:15:42 -05:00
Jose Diaz-Gonzalez
57b884e7c7 feat: enhance logging for parallel commands
This logging change makes it easier to figure out what is breaking where when running commands in parallel.
2020-12-20 04:15:42 -05:00
Jose Diaz-Gonzalez
3ba775d4b3 feat: add better logging to ps:restore output
Without the logging additions, it's a bit more difficult to figure out why a ps:restore is skipping the restore of an app.
2020-12-20 04:15:42 -05:00
Jose Diaz-Gonzalez
89d6f0eb6e Merge pull request #4265 from dokku/bats-retry
Retry failing and skipped tests once
2020-12-20 04:15:09 -05:00
Jose Diaz-Gonzalez
465e220315 feat: retry failing and skipped tests once
Plugn is fairly brittle since the upgrade to bash 5, so this might help decrease the need to retry the whole circleci job.
2020-12-20 02:42:37 -05:00
Jose Diaz-Gonzalez
1b767e7632 Merge pull request #4263 from dokku/bump-formula
Bump the dokku client formula on release
2020-12-19 19:17:31 -05:00
Jose Diaz-Gonzalez
b3304337ca feat: bump the dokku client formula on release
This ensures we always have an up to date version :)
2020-12-19 19:16:37 -05:00
Jose Diaz-Gonzalez
40e7f6d15b Merge pull request #4252 from magikid/fix-symbolic-link-certs
Allow symbolic links for certificate and key files
2020-12-18 12:13:42 -05:00
Jose Diaz-Gonzalez
c95659d57d Merge pull request #4253 from guettli/patch-2
Highlight the default build method used by Dokku
2020-12-18 12:13:30 -05:00
Jose Diaz-Gonzalez
a1e7b99b26 docs: merge note into list
Makes it a little cleaner (though not by much).

[ci skip]
2020-12-18 12:12:59 -05:00
Thomas Güttler
52f1f2495c If unsure use "Heroku buildpacks via Herokuish".
I guess this is the current sane default. Correct me, if I am wrong.
2020-12-17 21:44:10 +01:00
Chris W Jones
112ee88fe9 Allow symbolic links for certificate and key files
This corrects an issue where if a symbolic link was given to the
`certs:add` command, an error would be thrown even though the file was
valid.

Issue: #4251
2020-12-17 15:35:52 -05:00
Jose Diaz-Gonzalez
2ff06ff4c7 Merge pull request #4250 from rlnd1/patch-1
Update upgrading.md
2020-12-17 11:53:44 -05:00
rlnd1
df289be994 Update upgrading.md
Add command for versions 0.22 and higher
2020-12-17 17:15:15 +01:00
Jose Diaz-Gonzalez
ae76e8784c Merge pull request #4249 from guettli/patch-1
Fix typo in zero downtime docs
2020-12-16 17:09:45 -05:00
Thomas Güttler
d537cb70cd typo "by for" 2020-12-16 23:07:02 +01:00
Jose Diaz-Gonzalez
4a70f0bea2 Merge pull request #4247 from dokku/josegonzalez-patch-1
Clarify the domain name setting in the docs
2020-12-16 16:08:21 -05:00
Jose Diaz-Gonzalez
e51165d915 docs: clarify the domain name setting in the docs
No need to mention the vagrant.

Closes #4246

[ci skip]
2020-12-16 16:07:13 -05:00
Jose Diaz-Gonzalez
d10d4cc55c Release 0.22.2
# History

## 0.22.2

Install/update via the bootstrap script:

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

### Bug Fixes

- #4243: @josegonzalez Do not delete app when the app name is invalid

### New Features

- #4141: @josegonzalez Always initialize git repository

### Other

- #4244: @dependabot-preview[bot] chore(deps): bump monolog/monolog from 1.25.5 to 1.26.0 in /tests/apps/php
2020-12-15 19:14:31 -05:00
Jose Diaz-Gonzalez
2301efa460 Merge pull request #4244 from dokku/dependabot/composer/tests/apps/php/monolog/monolog-1.26.0
chore(deps): bump monolog/monolog from 1.25.5 to 1.26.0 in /tests/apps/php
2020-12-15 14:04:14 -05:00
Jose Diaz-Gonzalez
d00284166f Merge pull request #4141 from dokku/always-initialize-repo
feat: always initialize git repository
2020-12-15 14:01:09 -05:00
Jose Diaz-Gonzalez
f279ce44b2 Merge pull request #4243 from dokku/4129-avoid-deletion
Do not delete app when the app name is invalid
2020-12-15 03:28:52 -05:00
Jose Diaz-Gonzalez
36215828f1 feat: always initialize git repository
This fixes issues where alternative tools that don't trigger the init via sshcommand - such as git-http-backend - are not able to setup applications correctly.

Note that those apps could always manually trigger git:initialize if desired, but if the app already exists, then this should already _just work_ without that extra initialization.
2020-12-15 01:42:10 -05:00
dependabot-preview[bot]
0623af86d6 chore(deps): bump monolog/monolog in /tests/apps/php
Bumps [monolog/monolog](https://github.com/Seldaek/monolog) from 1.25.5 to 1.26.0.
- [Release notes](https://github.com/Seldaek/monolog/releases)
- [Changelog](https://github.com/Seldaek/monolog/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Seldaek/monolog/compare/1.25.5...1.26.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-15 06:30:16 +00:00
Jose Diaz-Gonzalez
c6976499ad fix: do not delete app when the app name is invalid
Let folks call apps:destroy instead.

Refs #4129
2020-12-15 01:14:30 -05:00
Jose Diaz-Gonzalez
01bd69100c Release 0.22.1
# History

## 0.22.1

Install/update via the bootstrap script:

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

### Bug Fixes

- #4238: @josegonzalez Ensure dead files are created for docker object retirement
- #4239: @josegonzalez Ensure all byte output is trimmed of whitespace
- #4228: @Cellane Fix tags:deploy command for images that contain ONBUILD directive
- #4233: @josegonzalez Properly parse releease command when there is an entrypoint
- #4215: @josegonzalez Implement missing cleanup routines
- #4212: @josegonzalez Cleanup docker options during post-delete
- #4211: @ml-milan-vit Make the dokku-update command compatible with Dokku 0.22+

### New Features

- #4242: @josegonzalez Remove reference to 'whitelist'
- #4220: @josegonzalez Update plugn from 0.5.0 to 0.5.1
- #4241: @josegonzalez Properly handle stdout when capturing plugn output
- #4237: @josegonzalez Release dokku-update 0.2.0
- #4225: @znz Accept first pushed branch as deploy-branch

### Documentation

- #4236: @josegonzalez Remove note regarding not having an official client
- #4234: @josegonzalez Switch to bats --filter for running a single test
- #4222: @leopolicastro Fix typo in deployment tasks documentation
- #4221: @srr013 Updating readme for clarity on git push step
- #4214: @josegonzalez Expand backup and restore documentation
- #4213: @josegonzalez Enhance the 'plugin' plugin documentation

### Tests

- #4218: @josegonzalez Enable compilation cache

### Other

- #4230: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 186 to 187 in /tests/apps/php
- #4223: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.35.v20201120 to 11.0.0 in /tests/apps/java
- #4224: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 185 to 186 in /tests/apps/php
2020-12-13 22:04:14 -05:00
Jose Diaz-Gonzalez
541d73ad93 Merge pull request #4238 from dokku/ensure-dead-files
Ensure dead files are created for docker object retirement
2020-12-13 21:59:47 -05:00
Jose Diaz-Gonzalez
6b159c32cf Merge pull request #4239 from dokku/4229-trim-whitespace
Ensure all byte output is trimmed of whitespace
2020-12-13 21:59:23 -05:00
Jose Diaz-Gonzalez
5f2968d1b0 Merge pull request #4242 from dokku/remove-whitelist-word
Remove reference to 'whitelist'
2020-12-13 21:58:37 -05:00
Jose Diaz-Gonzalez
0e768d107a Merge pull request #4218 from dokku/faster-compiles
Enable compilation cache
2020-12-13 15:39:29 -05:00
Jose Diaz-Gonzalez
3557ff16dc Merge pull request #4220 from dokku/update-plugn
Update plugn from 0.5.0 to 0.5.1
2020-12-13 15:23:35 -05:00
Jose Diaz-Gonzalez
30131ef363 Merge pull request #4241 from dokku/quieter-plugn-capture
Properly handle stdout when capturing plugn output
2020-12-13 15:15:48 -05:00
Jose Diaz-Gonzalez
946c424734 Merge pull request #4228 from Cellane/patch-1
Fix tags:deploy command for images that contain ONBUILD directive
2020-12-13 03:14:03 -05:00
Jose Diaz-Gonzalez
f42b293836 feat: remove reference to 'whitelist'
The term doesn't even 'make sense' in this context. 'allowed_prefixes' is a much better variable name.
2020-12-13 02:10:52 -05:00
Jose Diaz-Gonzalez
b691c0affc feat: properly handle stdout when capturing plugn output
The previous output would also include a message like `exit status 1`. This allows us to silence that output and instead only capture that which was return from the subprocess.
2020-12-13 02:08:44 -05:00
Jose Diaz-Gonzalez
48fa04a05b fix: ensure dead files are created for docker object retirement 2020-12-13 02:05:30 -05:00
Jose Diaz-Gonzalez
8c14bb9aeb fix: ensure all byte output is trimmed of whitespace
This otherwise causes issues when interpreting the output as part of a variable, such as when constructing the deploying app image.

Closes #4229
2020-12-13 02:04:35 -05:00
Jose Diaz-Gonzalez
ca2de6a4a3 Merge pull request #4237 from dokku/update-dokku-update
Release dokku-update 0.2.0
2020-12-12 23:11:03 -05:00
Jose Diaz-Gonzalez
755499797e feat: release dokku-update 0.2.0 2020-12-12 23:10:21 -05:00
Jose Diaz-Gonzalez
f2a3cfc0b4 tests: add unit test for label skipping 2020-12-12 16:33:39 -05:00
Milan Vit
a42786a465 Fixes tags:deploy command for images that contain ONBUILD directive
Fixes #4226
2020-12-12 16:07:31 -05:00
Jose Diaz-Gonzalez
de0a467c97 Merge pull request #4233 from dokku/4232-fix-release-command
Properly parse releease command when there is an entrypoint
2020-12-12 15:57:38 -05:00
Jose Diaz-Gonzalez
ab23a4b6f1 Merge pull request #4236 from dokku/josegonzalez-patch-1
Remove note regarding not having an official client
2020-12-12 15:56:11 -05:00
Jose Diaz-Gonzalez
87aed0eadf docs: remove note regarding not having an official client
Closes #4235

[ci skip]
2020-12-12 15:55:38 -05:00
Jose Diaz-Gonzalez
9a86549359 chore: fix mispelling
[ci skip]
2020-12-11 14:19:44 -05:00
Jose Diaz-Gonzalez
2eeb0069d5 Merge pull request #4234 from dokku/use-bats-filter
Switch to bats --filter for running a single test
2020-12-11 14:14:51 -05:00
Jose Diaz-Gonzalez
f536a05e06 fix: switch to bats --filter for running a single test 2020-12-11 11:45:15 -05:00
Jose Diaz-Gonzalez
26b95854d4 fix: properly parse releease command when there is an entrypoint
Closes #4232
2020-12-11 11:44:13 -05:00
Jose Diaz-Gonzalez
775432c73f Merge pull request #4230 from dokku/dependabot/composer/tests/apps/php/heroku/heroku-buildpack-php-187
chore(deps-dev): bump heroku/heroku-buildpack-php from 186 to 187 in /tests/apps/php
2020-12-10 11:00:36 -05:00
dependabot-preview[bot]
84ee5995f4 chore(deps-dev): bump heroku/heroku-buildpack-php in /tests/apps/php
Bumps [heroku/heroku-buildpack-php](https://github.com/heroku/heroku-buildpack-php) from 186 to 187.
- [Release notes](https://github.com/heroku/heroku-buildpack-php/releases)
- [Changelog](https://github.com/heroku/heroku-buildpack-php/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heroku/heroku-buildpack-php/compare/v186...v187)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-10 06:21:51 +00:00
Jose Diaz-Gonzalez
91e9bb9670 Merge pull request #4225 from znz/accept-first-pushed-branch-as-deploy-branch
Accept first pushed branch as deploy-branch
2020-12-08 16:04:05 -05:00
Jose Diaz-Gonzalez
c6a8bd669f Merge pull request #4223 from dokku/dependabot/maven/tests/apps/java/org.eclipse.jetty-jetty-servlet-11.0.0
chore(deps): bump jetty-servlet from 9.4.35.v20201120 to 11.0.0 in /tests/apps/java
2020-12-08 14:08:26 -05:00
Jose Diaz-Gonzalez
d9d0a932b0 Merge pull request #4224 from dokku/dependabot/composer/tests/apps/php/heroku/heroku-buildpack-php-186
chore(deps-dev): bump heroku/heroku-buildpack-php from 185 to 186 in /tests/apps/php
2020-12-08 12:54:04 -05:00
Jose Diaz-Gonzalez
a91d45c397 Merge pull request #4222 from leopolicastro/patch-1
Fix typo
2020-12-08 10:50:54 -05:00
Kazuhiro NISHIYAMA
98c81513aa Accept first pushed branch as deploy-branch
And set to DOKKU_DEPLOY_BRANCH.

Idea from https://github.com/dokku/dokku/pull/4167#issuecomment-717607136
2020-12-08 23:15:11 +09:00
dependabot-preview[bot]
a7e5f2abdc chore(deps-dev): bump heroku/heroku-buildpack-php in /tests/apps/php
Bumps [heroku/heroku-buildpack-php](https://github.com/heroku/heroku-buildpack-php) from 185 to 186.
- [Release notes](https://github.com/heroku/heroku-buildpack-php/releases)
- [Changelog](https://github.com/heroku/heroku-buildpack-php/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heroku/heroku-buildpack-php/compare/v185...v186)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-08 07:14:57 +00:00
dependabot-preview[bot]
0aa0c884d3 chore(deps): bump jetty-servlet in /tests/apps/java
Bumps [jetty-servlet](https://github.com/eclipse/jetty.project) from 9.4.35.v20201120 to 11.0.0.
- [Release notes](https://github.com/eclipse/jetty.project/releases)
- [Commits](https://github.com/eclipse/jetty.project/compare/jetty-9.4.35.v20201120...jetty-11.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-08 05:54:29 +00:00
Leo Policastro
dfa39fc590 Fix typo 2020-12-07 22:03:11 -05:00
Jose Diaz-Gonzalez
cbd442fc2e Merge pull request #4221 from srr013/patch-1
Updating readme for clarity on git push step
2020-12-05 15:07:48 -05:00
Scott Rossignol
ebd2778f5b Updating readme for clarity on git push step
https://www.digitalocean.com/community/questions/refactorin-git-remote-add-dokku-dokku-dokku-me-ruby-rails-sample
2020-12-05 10:17:11 -05:00
Jose Diaz-Gonzalez
5887d4ddfa Update plugn from 0.5.0 to 0.5.1 2020-12-05 02:32:15 -05:00
Jose Diaz-Gonzalez
36e9b4b2ae feat: enable compilation cache
Not sure why it was disabled but lets see if tests fail?
2020-12-04 16:58:45 -05:00
Jose Diaz-Gonzalez
81d31c9934 Merge pull request #4215 from dokku/plugin-cleanup
Implement missing cleanup routines
2020-12-02 14:19:07 -05:00
Jose Diaz-Gonzalez
4aaefb0c4c fix: implement missing cleanup routines
Without these, there was potential for configuration for certain plugins to continue to exist after an app was deleted.
2020-12-02 03:27:06 -05:00
Jose Diaz-Gonzalez
6aac1ea0d1 Merge pull request #4214 from dokku/4180-backup-docs
Expand backup and restore documentation
2020-12-02 02:54:48 -05:00
Jose Diaz-Gonzalez
bd275d9b5d docs: expand backup and restore documentation
This documentation should fill the need for users that wish to backup and restore their installations. While there are certainly other methods to trigger this process - and many caveats - this should give users more confidence as to how to approach the general problem.

Closes #4180
2020-12-02 02:54:07 -05:00
Jose Diaz-Gonzalez
8c0dbc7d6a Merge pull request #4213 from dokku/4192-plugin-docs
Enhance the 'plugin' plugin documentation
2020-12-02 01:30:49 -05:00
Jose Diaz-Gonzalez
07194ca17f docs: add documentation to the plugin plugin
These plugin docs will be good enough to tide end-users over until the 'plugin' plugin can be rewritten in golang.

Closes #4192
2020-12-02 01:30:12 -05:00
Jose Diaz-Gonzalez
325c6d44dd Merge pull request #4212 from dokku/cleanup-options
Cleanup docker options during post-delete
2020-12-02 00:14:02 -05:00
Jose Diaz-Gonzalez
168ed1716c fix: cleanup docker options during post-delete
While the directory removal should be enough, we should also force-clean just to be sure.
2020-12-01 22:38:20 -05:00
Jose Diaz-Gonzalez
3de8c3002a Merge pull request #4211 from ml-milan-vit/patch-1
🐛 Make the dokku-update command compatible with Dokku 0.22+
2020-12-01 18:41:22 -05:00
Milan Vit
1cbbfb195f 🐛 Make the dokku-update command compatible with Dokku 0.22+ 2020-12-02 08:39:21 +09:00
Jose Diaz-Gonzalez
dceaef20ed Release 0.22.0
# History

## 0.22.0

Install/update via the bootstrap script:

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

See the [0.22.0 migration guide](/docs/appendices/0.22.0-migration-guide.md) for more information on migrating to 0.22.0.

### Bug Fixes

- #4204: @josegonzalez Ensure the image is not an empty string
- #4198: @josegonzalez Reference extracted Procfile
- #4194: @josegonzalez Drop appName check in apps:report
- #4183: @josegonzalez Embed pb.UnimplementedGreeterServer to avoid linting issues
- #4182: @josegonzalez Upgrade herokuish to fix nodejs tests
- #4173: @karimsan Add build-essential to Vagrant provision
- #4181: @josegonzalez Conditionally mount the dokku-arch folder if it exists
- #4130: @josegonzalez Clear proxy configs on boot
- #4131: @josegonzalez Bump minimum docker version
- #4123: @fomojola Support for expected CHECKS text with special characters
- #4115: @josegonzalez Add missing labels to built images
- #4116: @Schlepptop Ensure config:clear an be called

### New Features

- #4209: @josegonzalez Add experimental support for Cloud Native Buildpacks (CNB)
- #4210: @josegonzalez Add migration guide link to release notes
- #4203: @josegonzalez Cleanup log output for failure case
- #4208: @ankane Add ability to change the access log format
- #4202: @josegonzalez Schedule related images for cleanup when retiring containers
- #4197: @josegonzalez Retire intermediate containers after use
- #4128: @fomojola Added the container index to the network-compute-ports trigger
- #4191: @josegonzalez Create codeql-analysis.yml
- #4139: @Yihao-G Allow controlling Nginx proxy-buffer-size, proxy-buffering, proxy-buffers, proxy-busy-buffers-size
- #4156: @ltalirz When `cert:add` remove previous cert before copying the new cert
- #4129: @josegonzalez Prohibit non-dns names for apps and process types
- #4125: @josegonzalez Allow customizing the various nginx templates
- #4121: @josegonzalez Add ability to disable custom ninx.conf.sigil extraction

### Refactors

- #4160: @nerg4l Rewrite logs plugin in Go
- #4149: @josegonzalez Rewrite ps plugin in golang
- #4080: @hugopeixoto Stop using VHOST when listing app domains and urls
- #4117: @josegonzalez Rewrite app-json plugin in golang
- #4113: @josegonzalez Drop herokuish release code

### Documentation

- #4196: @josegonzalez Correctly doc apps:report output
- #4195: @luizpicolo Fix whitespace in process-management docs
- #4184: @badsyntax Add note regarding using plugin triggers instead of sourcing functions
- #4188: @fomojola Added the autosync community plugin
- #4187: @nahtnam Add `-p` flag to "Run on External Volume" tutorial
- #4186: @badsyntax Add dokku-discourse to community plugins list
- #4170: @chrisjsimpson Add note on how to enable buildkit usage
- #4168: @josegonzalez Revert "The default branch for ruby-getting-started is 'main', not 'master"
- #4167: @nateww The default branch for ruby-getting-started is 'main', not 'master
- #4135: @znz Fix broken table
- #4140: @swrobel Note Ubuntu 20.04 support in README
- #4136: @hugopeixoto Update push command for sample app in docs
- #4124: @josegonzalez Note that docker options require app rebuilds
- #4098: @carlosgeos Add a note on how nginx handles load balancing
- #4111: @josegonzalez Add large version of dokku image
- #4100: @turicas Fix markdown syntax in nginx docs

### Other

- #4201: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.34.v20201102 to 9.4.35.v20201120 in /tests/apps/java
- #4200: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 183 to 185 in /tests/apps/php
- #4189: @dependabot-preview[bot] chore(deps): bump thin from 1.7.2 to 1.8.0 in /tests/apps/ruby
- #4175: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.33.v20201020 to 9.4.34.v20201102 in /tests/apps/java
- #4172: @dependabot-preview[bot] chore(deps): bump github.com/golang/protobuf from 1.4.2 to 1.4.3 in /tests/apps/gogrpc
- #4185: @dependabot-preview[bot] chore(deps): bump socket.io from 2.3.0 to 3.0.1 in /tests/apps/.websocket.disabled
- #4190: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 182 to 183 in /tests/apps/php
- #4165: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.31.v20200723 to 9.4.33.v20201020 in /tests/apps/java
- #4153: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 181 to 182 in /tests/apps/php
- #4144: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 180 to 181 in /tests/apps/php
- #4137: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 179 to 180 in /tests/apps/php
- #4118: @dependabot[bot] chore(deps): bump django from 3.0.2 to 3.0.7 in /tests/apps/dockerfile-release
- #4103: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 178 to 179 in /tests/apps/php
- #4091: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.30.v20200611 to 9.4.31.v20200723 in /tests/apps/java
2020-12-01 16:23:05 -05:00
Jose Diaz-Gonzalez
ebbbcb99f2 Merge pull request #4209 from dokku/cnb-support
Add experimental support for Cloud Native Buildpacks (CNB)
2020-12-01 16:21:08 -05:00
Jose Diaz-Gonzalez
3e70dbb836 Merge pull request #4210 from dokku/josegonzalez-patch-1
Add migration guide link to release notes
2020-12-01 15:36:12 -05:00
Jose Diaz-Gonzalez
f1c74b08cb feat: add migration guide link to release notes
While they are otherwise available on the upgrading page, they might be missed if perusing the changelog before an upgrade.

[ci skip]
2020-12-01 15:35:55 -05:00
Jose Diaz-Gonzalez
451abcf8f3 feat: add initial support for cloud native buildpacks
This change adds a new builder - builder-cnb - via the 'DOKKU_CNB_EXPERIMENTAL' environment variable. While support for customizing pack builds is not currently implemented and there may be other missing functionality, this initial implementation allows folks to start playing with CNB.

Future releases of Dokku will provide tighter CNB integration and eventually switch to CNB for default building, as well as allow users to better select builders needed for their applications.

All new code for CNB support should be considered experimental and subject to change as the support evolves over time.
2020-12-01 14:50:27 -05:00
Jose Diaz-Gonzalez
98f03c249b Merge pull request #4203 from dokku/minor-logging-changes
Cleanup log output for failure case
2020-12-01 11:21:57 -05:00
Jose Diaz-Gonzalez
4c4248d65b Merge pull request #4208 from ankane/access-log-format
feat: add ability to change the access log format
2020-12-01 11:14:18 -05:00
Jose Diaz-Gonzalez
889c11d84b docs: use correct version
[ci skip]
2020-12-01 11:08:21 -05:00
Andrew Kane
c0581a0e37 feat: add ability to change the access log format 2020-11-30 21:59:36 -08:00
Jose Diaz-Gonzalez
7e45f1173f fix: update tests for new logging output 2020-11-28 19:14:17 -05:00
Jose Diaz-Gonzalez
21a94b6dca Merge pull request #4204 from dokku/missing-image
Ensure the image is not an empty string
2020-11-28 18:48:33 -05:00
Jose Diaz-Gonzalez
6cd50cb372 fix: ensure the image is not an empty string 2020-11-28 18:46:37 -05:00
Jose Diaz-Gonzalez
bde77dbf78 feat: cleanup log output for failure case
Also mark DOKKU_DISABLE_ANSI_PREFIX_REMOVAL as deprecated (it will be removed in 0.23.0 and no prefixes will be removed at that time).
2020-11-28 03:32:11 -05:00
Jose Diaz-Gonzalez
bd261e6847 Merge pull request #4202 from dokku/4104-aggressive-dangling-clean
Schedule related images for cleanup when retiring containers
2020-11-28 02:15:27 -05:00
Jose Diaz-Gonzalez
f7863c8391 fix: handle clone and rename properly 2020-11-28 00:39:28 -05:00
Jose Diaz-Gonzalez
e8a532645f fix: handle case where container does not exist during retire step
This ma happen during app renames, as the old versions of the containers will no longer be running.
2020-11-28 00:38:28 -05:00
Jose Diaz-Gonzalez
af0d2e6f7a Merge pull request #4160 from nerg4l/go-logs-plugin
Rewrite logs plugin in Go
2020-11-26 04:58:51 -05:00
Jose Diaz-Gonzalez
0786954d34 feat: schedule related images for cleanup when retiring containers
If the containers no longer exist and the images are unused, we should remove the images as well.

Note that images may sometimes stick around for a little while, depending on the retire schedule and the wait time specified for the container.

Closes #4104
2020-11-26 03:21:45 -05:00
Jose Diaz-Gonzalez
a662046f95 Merge pull request #4201 from dokku/dependabot/maven/tests/apps/java/org.eclipse.jetty-jetty-servlet-9.4.35.v20201120
chore(deps): bump jetty-servlet from 9.4.34.v20201102 to 9.4.35.v20201120 in /tests/apps/java
2020-11-24 11:25:36 -05:00
dependabot-preview[bot]
77d7f63857 chore(deps): bump jetty-servlet in /tests/apps/java
Bumps [jetty-servlet](https://github.com/eclipse/jetty.project) from 9.4.34.v20201102 to 9.4.35.v20201120.
- [Release notes](https://github.com/eclipse/jetty.project/releases)
- [Commits](https://github.com/eclipse/jetty.project/compare/jetty-9.4.34.v20201102...jetty-9.4.35.v20201120)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-24 05:47:30 +00:00
Jose Diaz-Gonzalez
73814a5b65 Merge pull request #4200 from dokku/dependabot/composer/tests/apps/php/heroku/heroku-buildpack-php-185
chore(deps-dev): bump heroku/heroku-buildpack-php from 183 to 185 in /tests/apps/php
2020-11-23 10:10:50 -05:00
dependabot-preview[bot]
4ba7d4ea10 chore(deps-dev): bump heroku/heroku-buildpack-php in /tests/apps/php
Bumps [heroku/heroku-buildpack-php](https://github.com/heroku/heroku-buildpack-php) from 183 to 185.
- [Release notes](https://github.com/heroku/heroku-buildpack-php/releases)
- [Changelog](https://github.com/heroku/heroku-buildpack-php/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heroku/heroku-buildpack-php/compare/v183...v185)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-23 06:49:27 +00:00
Jose Diaz-Gonzalez
c343316864 Merge pull request #4198 from dokku/4083-fewer-extracts
Reference extracted Procfile
2020-11-23 01:36:53 -05:00
Jose Diaz-Gonzalez
aa6abe0fd3 Merge pull request #4197 from dokku/retire-containers
Retire intermediate containers after use
2020-11-23 00:45:42 -05:00
Jose Diaz-Gonzalez
bf17023639 refactor: simplify ps:scale setup 2020-11-23 00:11:10 -05:00
Jose Diaz-Gonzalez
97513dee91 fix: handle case where deploying app image does not exist
This happens if ps:scale is called before a deploy.

Also refactor GetDeployingAppImageName() to return an error as the second return parameter.
2020-11-23 00:11:00 -05:00
Jose Diaz-Gonzalez
fceb412fb1 fix: reference extracted Procfile
Rather than attempting to always extract the Procfile, reference the one that was extracted by the last deploy. This fixes issues where 'docker container cp' may fail intermittently for lord knows what reason.

Closes #4083
2020-11-22 17:14:18 -05:00
Jose Diaz-Gonzalez
ef490f0a05 feat: retire intermediate containers after use
Rather than waiting for the next deploy, take advantage of the retire system to retire these containers immediately.

Note that since the retire process happens out of band, the containers may stick around for up to 5 minutes, after which point they will be removed.

Customization of the wait time to retire - currently 60 seconds - is up for future debate. The containers ultimately haven't been useful for debugging, so keeping them around for longer won't help in most cases, and folks can disable the dokku-retire service (or cron) if that is desired.
2020-11-22 16:57:39 -05:00
Jose Diaz-Gonzalez
e0127250ae Merge pull request #4196 from dokku/4134-is-deployed
Correctly doc apps:report output
2020-11-22 16:01:35 -05:00
Jose Diaz-Gonzalez
fcebbd67df docs: correctly doc apps:report output
The `not deployed` message was removed in 0.20.0, and that state can be queried via `ps:report` now.

Closes #4134
2020-11-22 16:00:58 -05:00
Jose Diaz-Gonzalez
d97fc1cfb8 fix: drop extra appname verification 2020-11-22 15:01:36 -05:00
Jose Diaz-Gonzalez
9dba48fc19 feat: deprecate logs:failed without an argument or flag 2020-11-22 15:01:36 -05:00
Jose Diaz-Gonzalez
b6db484393 fix: correct stickler-ci issues 2020-11-22 15:01:36 -05:00
Jose Diaz-Gonzalez
7cdc68a007 refactor: use framework for running function against all apps 2020-11-22 15:01:36 -05:00
Jose Diaz-Gonzalez
1d93246af8 chore: formatting 2020-11-22 15:01:36 -05:00
Jose Diaz-Gonzalez
abce952d0f fix: correct help output 2020-11-22 15:01:36 -05:00
Jose Diaz-Gonzalez
0b30bc8034 chore: formatting 2020-11-22 15:01:36 -05:00
Jose Diaz-Gonzalez
9882c94eec fix: add missing help output 2020-11-22 15:01:36 -05:00
László Görög
9a02f3f1dc refactor: transition logs plugin to go 2020-11-22 15:01:36 -05:00
Jose Diaz-Gonzalez
5f1dc46392 Merge pull request #4195 from luizpicolo/correction-of-the-comments-list
Update process-management.md
2020-11-22 15:00:08 -05:00
Luiz Picolo ツ
c4462c4da4 Update process-management.md 2020-11-22 11:05:49 -04:00
Jose Diaz-Gonzalez
f708964c5f Merge pull request #4194 from dokku/4133-fix-apps-report
Drop appName check in apps:report
2020-11-22 02:29:12 -05:00
Jose Diaz-Gonzalez
d514ca0bb5 fix: drop appName check in apps:report
Closes #4133
2020-11-22 00:07:36 -05:00
Jose Diaz-Gonzalez
5b21cabff3 Merge pull request #4128 from mailformfemi/master
Added the container index to the network-compute-ports trigger
2020-11-21 23:08:06 -05:00
Jose Diaz-Gonzalez
6e36f95bab Merge pull request #4149 from dokku/go-ps-plugin
Rewrite ps plugin in golang
2020-11-21 23:03:36 -05:00
Jose Diaz-Gonzalez
ae1b1c7274 chore: move function to internal 2020-11-21 21:07:20 -05:00
Jose Diaz-Gonzalez
53a76b1353 feat: implement ps:retire 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
5fd1772c3a chore: drop implemented function 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
ab0cc6c444 fix: implement ps:restore
Also add all the niceties around parallelism that were introduced for the other commands.
2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
8ae597ad1d fix: correct help output 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
024ff6e489 chore: remove todone :) 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
246a50a592 docs: cleanup process management docs to make usage more clear. 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
6d514e72fa docs: cleanup headings in nginx plugin 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
e6e5ede436 refactor: make parallel commands available to all of Dokku
There are other places in the codebase that currently act on all apps or could benefit from being able to do so. Being able to run `common.RunCommandAgainstAllApps()` and get that for free will be a boon to implementing this functionality elsewhere.
2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
a19efc1cfa chore: drop all references to all commands where possible. 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
28a36c4908 feat: add proper parallel support 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
ef083e6289 tests: add output and status 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
6e0c376b62 fix: correctly handle property and data perms 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
c9a0f88bf1 fix: correct a few stickler errors 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
f558008574 fix: correct a few stickler errors 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
b44bc686a1 docs: update docs for ps commands 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
037b99865d fix: use CamelCase for constants 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
72ed9dbcce fix: only clean things that were built
This otherwise break non-golang plugins.
2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
5d7b2a84f4 fix: set DATABASE_URL so dj-database-url properly configures a database config 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
1b50b4ab0a fix: ensure the scale file has correct processes when it exists 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
bc9a60f696 feat: switch to updateScalefile from generateScalefile
The process is the same.
2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
44ce5c76ae fix: move log message to correct location 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
702e9cf66c fix: zero out entries that don't exist in the scale file 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
be26f45b5a fix: use correct plugin trigger 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
f13ee16ab8 feat: add support for process state in ps:report output 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
36dc98452d feat: add function for listing files within a directory by prefix 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
82f13af166 chore: return early 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
23ad4bb230 refactor: add ability to skip deploys and fix process scaling 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
a8ccc7d2a7 feat: generate the scale file after app creation
The web process always starts off at `1`, so this is relatively benign.
2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
0a533c754f refactor: split ps:scale func into different functions 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
f6efb53491 fix: reference image instead of imageTag 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
cf4a533f2f feat: add common.CatFile() 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
b4552237b6 feat: add ability to specify a plugin build target
This speeds up development as it allows us to compile the exact binary needed as opposed to the entire plugin.
2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
e8d0965a33 feat: implement all of ps:report 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
bb9f764b9f fix: sync code to bash implementation 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
9193b68854 hack: enable debug 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
db435c40e5 fix: do not delete the destination scale file if it was not extracted previously 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
bf84405b43 fix: handle scaling properly when there is no procfile 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
833a64cc0e fix: check if it can scale by checking for an extracted file 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
54fb2b5d75 feat: suppress output when not necessary 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
85fafcf170 tests: update tests for new Procfile path 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
815cd530c8 chore: remove functions 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
ebdf38e136 refactor: use procfile-get-command plugin trigger instead of direct ps function calls 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
a93f504d45 chore: short-circuit procfile command fetching if there is no procfile 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
cae561f7b9 feat: extract procfile when fetching command as necessary 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
f9969a0e61 refactor: drop extra args from procfile-extract
They were not necessary.
2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
06ce3dfadb fix: remove unused variable 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
ab1d15216c refactor: drop the last argument from procfile-get-command
No external plugin should need to know the internals of where processes are.
2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
e8cfbfad36 fix: drop todos 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
70de587f6c feat: upgrade procfile-util to avoid errors in parsing 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
e7ee7a1781 refactor: implement most of ps plugin in golang 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
c72bbf41ea chore: use helper method 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
34343a846d chore: drop alias 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
e0a70411dd fix: create the file if it does not exist 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
947b2d4db6 fix: add missing comment 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
3714a231a9 chore: drop unused code 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
39984980fb fix: correct io tests 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
c7becc6cad refactor: move all subprocess-related code to new file 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
74f27480fc refactor: move all docker-related functions to new file 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
33d3722060 refactor: move common io-related functions into new file 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
696df45306 refactor: extract release_and_deploy calls to a plugin trigger
Better would be to separate the release and deploy aspects into distinct triggers - as well as have it release a specific image - but this is a good first pass.
2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
1b4559c4a4 chore: drop unused ps import 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
bd132ed7c6 feat: implement helper functions for dockeroptions 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
66696d0b46 refactor: export SetPermissions function 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
943e032d12 refactor: use path/filepath instead of path for joining path parts 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
ff7429fd00 feat: upgrade go-procfile-util
We should ensure we are usinng a new version of it to enable better handling of errors in the Procfile.
2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
236a279793 chore: add todos 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
7e206b3ba0 Merge pull request #4191 from dokku/josegonzalez-patch-1
Create codeql-analysis.yml
2020-11-21 02:18:36 -05:00
Jose Diaz-Gonzalez
f612709d7d chore: drop languages
Only go and shell are written in dokku...
2020-11-18 14:35:52 -05:00
Jose Diaz-Gonzalez
76412f6ade Create codeql-analysis.yml 2020-11-18 14:33:28 -05:00
Jose Diaz-Gonzalez
45c7cd6e8b Merge pull request #4189 from dokku/dependabot/bundler/tests/apps/ruby/thin-1.8.0
chore(deps): bump thin from 1.7.2 to 1.8.0 in /tests/apps/ruby
2020-11-17 03:45:48 -05:00
Jose Diaz-Gonzalez
67192cf664 Merge pull request #4139 from Yihao-G/master
Allow controlling Nginx proxy-buffer-size, proxy-buffering, proxy-buffers, proxy-busy-buffers-size
2020-11-17 03:16:09 -05:00
Jose Diaz-Gonzalez
3a77c38a2d Merge pull request #4175 from dokku/dependabot/maven/tests/apps/java/org.eclipse.jetty-jetty-servlet-9.4.34.v20201102
chore(deps): bump jetty-servlet from 9.4.33.v20201020 to 9.4.34.v20201102 in /tests/apps/java
2020-11-17 03:14:34 -05:00
Jose Diaz-Gonzalez
810892bf40 Merge pull request #4184 from badsyntax/patch-1
Add note regarding using plugin triggers instead of sourcing functions
2020-11-16 13:04:07 -05:00
Jose Diaz-Gonzalez
4b7384fc98 Merge pull request #4188 from fomojola/patch-2
Added the autosync community plugin
2020-11-16 12:44:10 -05:00
dependabot-preview[bot]
1bdcdc397e chore(deps): bump jetty-servlet in /tests/apps/java
Bumps [jetty-servlet](https://github.com/eclipse/jetty.project) from 9.4.33.v20201020 to 9.4.34.v20201102.
- [Release notes](https://github.com/eclipse/jetty.project/releases)
- [Commits](https://github.com/eclipse/jetty.project/compare/jetty-9.4.33.v20201020...jetty-9.4.34.v20201102)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-16 17:32:13 +00:00
Jose Diaz-Gonzalez
61855fd14b Merge pull request #4172 from dokku/dependabot/go_modules/tests/apps/gogrpc/github.com/golang/protobuf-1.4.3
chore(deps): bump github.com/golang/protobuf from 1.4.2 to 1.4.3 in /tests/apps/gogrpc
2020-11-16 12:30:26 -05:00
Jose Diaz-Gonzalez
4a9ac117e0 Merge pull request #4185 from dokku/dependabot/npm_and_yarn/tests/apps/dot-websocket.disabled/socket.io-3.0.1
chore(deps): bump socket.io from 2.3.0 to 3.0.1 in /tests/apps/.websocket.disabled
2020-11-16 12:29:24 -05:00
Jose Diaz-Gonzalez
0d06903b89 Merge pull request #4190 from dokku/dependabot/composer/tests/apps/php/heroku/heroku-buildpack-php-183
chore(deps-dev): bump heroku/heroku-buildpack-php from 182 to 183 in /tests/apps/php
2020-11-16 11:27:27 -05:00
dependabot-preview[bot]
a70217b791 chore(deps-dev): bump heroku/heroku-buildpack-php in /tests/apps/php
Bumps [heroku/heroku-buildpack-php](https://github.com/heroku/heroku-buildpack-php) from 182 to 183.
- [Release notes](https://github.com/heroku/heroku-buildpack-php/releases)
- [Changelog](https://github.com/heroku/heroku-buildpack-php/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heroku/heroku-buildpack-php/compare/v182...v183)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-16 06:35:26 +00:00
dependabot-preview[bot]
71c698f6b1 chore(deps): bump thin from 1.7.2 to 1.8.0 in /tests/apps/ruby
Bumps [thin](https://github.com/macournoyer/thin) from 1.7.2 to 1.8.0.
- [Release notes](https://github.com/macournoyer/thin/releases)
- [Changelog](https://github.com/macournoyer/thin/blob/master/CHANGELOG)
- [Commits](https://github.com/macournoyer/thin/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-16 05:57:44 +00:00
Jose Diaz-Gonzalez
eec0e5df01 Merge pull request #4183 from dokku/fix-greeter
Embed pb.UnimplementedGreeterServer to avoid linting issues
2020-11-13 11:50:29 -05:00
fomojola
f5020659f3 Added the autosync plugin 2020-11-11 23:41:15 -05:00
Jose Diaz-Gonzalez
e26c5a7970 Merge pull request #4187 from nahtnam/master
Add `-p` flag to "Run on External Volume" tutorial
2020-11-11 22:08:18 -05:00
Manthan Mallikarjun
8b697920e2 Add -p flag to "Run on External Volume" tutorial 2020-11-11 19:03:44 -08:00
Jose Diaz-Gonzalez
415b38bd64 Merge pull request #4186 from badsyntax/patch-2
Add dokku-discourse to community plugins list
2020-11-10 15:32:32 -05:00
Richard Willis
5eb69d33d1 Update plugins.md 2020-11-10 20:06:51 +00:00
Richard Willis
7c44fb8d50 Add dokku-discourse to community plugins list 2020-11-10 20:04:14 +00:00
dependabot-preview[bot]
9a9aec31b7 chore(deps): bump socket.io in /tests/apps/.websocket.disabled
Bumps [socket.io](https://github.com/socketio/socket.io) from 2.3.0 to 3.0.1.
- [Release notes](https://github.com/socketio/socket.io/releases)
- [Changelog](https://github.com/socketio/socket.io/blob/master/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io/compare/2.3.0...3.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-10 06:27:04 +00:00
Richard Willis
26e77a693a Update plugin-creation.md
Add info on using plugin triggers instead of sourcing plugin functions
2020-11-09 08:42:59 +00:00
dependabot-preview[bot]
29ff230084 chore(deps): bump github.com/golang/protobuf in /tests/apps/gogrpc
Bumps [github.com/golang/protobuf](https://github.com/golang/protobuf) from 1.4.2 to 1.4.3.
- [Release notes](https://github.com/golang/protobuf/releases)
- [Commits](https://github.com/golang/protobuf/compare/v1.4.2...v1.4.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-09 02:14:40 +00:00
Jose Diaz-Gonzalez
21ed81d39e fix: embed pb.UnimplementedGreeterServer to avoid linting issues 2020-11-08 21:11:01 -05:00
Jose Diaz-Gonzalez
77d53b1009 Merge pull request #4182 from dokku/upgrade-herokuish
Upgrade herokuish to fix nodejs tests
2020-11-08 21:07:33 -05:00
Jose Diaz-Gonzalez
664683c6e4 Merge pull request #4173 from karimsan/vagrant-build-essential
Add build-essential to Vagrant provision
2020-11-08 18:45:05 -05:00
Jose Diaz-Gonzalez
361ee01ab0 feat: Upgrade herokuish to fix nodejs tests 2020-11-08 18:40:31 -05:00
Jose Diaz-Gonzalez
6889e65077 Merge pull request #4181 from dokku/4158-conditional-mount
Conditionally mount the dokku-arch folder if it exists
2020-11-08 18:17:21 -05:00
Jose Diaz-Gonzalez
bd9d9fb5b9 fix: conditionally mount the dokku-arch folder if it exists
Closes #4158
2020-11-08 18:16:55 -05:00
Karim Sakhibgareev
231435001c Add build-essential to Vagrant provision 2020-11-02 11:14:37 +00:00
Jose Diaz-Gonzalez
05bf72e0d8 Merge pull request #4156 from ltalirz/fix_dokku_global_cert_4
When `cert:add` remove previous cert before copying the new cert
2020-10-31 22:15:26 -04:00
Jose Diaz-Gonzalez
4b70aaa038 Merge pull request #4165 from dokku/dependabot/maven/tests/apps/java/org.eclipse.jetty-jetty-servlet-9.4.33.v20201020
chore(deps): bump jetty-servlet from 9.4.31.v20200723 to 9.4.33.v20201020 in /tests/apps/java
2020-10-31 20:47:05 -04:00
Jose Diaz-Gonzalez
d52f676a84 Merge pull request #4153 from dokku/dependabot/composer/tests/apps/php/heroku/heroku-buildpack-php-182
chore(deps-dev): bump heroku/heroku-buildpack-php from 181 to 182 in /tests/apps/php
2020-10-31 15:50:07 -04:00
Jose Diaz-Gonzalez
4a1717e837 Merge pull request #4170 from chrisjsimpson/patch-1
Add note on how to enable buildkit usage
2020-10-31 15:30:17 -04:00
chrisjsimpson
5aaa88f41e dockerfiles.md how to enable docker buildkit 2020-10-28 18:05:54 +00:00
Jose Diaz-Gonzalez
8300f433e9 Merge pull request #4168 from dokku/revert-4167-patch-1
Revert "The default branch for ruby-getting-started is 'main', not 'master"
2020-10-27 19:17:19 -04:00
Jose Diaz-Gonzalez
bd2867b846 Revert "The default branch for ruby-getting-started is 'main', not 'master" 2020-10-27 19:17:08 -04:00
Jose Diaz-Gonzalez
da1a47b57d Merge pull request #4167 from nateww/patch-1
The default branch for ruby-getting-started is 'main', not 'master
2020-10-27 19:16:12 -04:00
Nate
75bb83bdec The default branch for ruby-getting-started is 'main', not 'master
- Ensure the user is using the master branch to match later instructions to do a git push master.
2020-10-27 17:11:28 -06:00
dependabot-preview[bot]
5bca600894 chore(deps): bump jetty-servlet in /tests/apps/java
Bumps [jetty-servlet](https://github.com/eclipse/jetty.project) from 9.4.31.v20200723 to 9.4.33.v20201020.
- [Release notes](https://github.com/eclipse/jetty.project/releases)
- [Commits](https://github.com/eclipse/jetty.project/compare/jetty-9.4.31.v20200723...jetty-9.4.33.v20201020)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-23 05:47:49 +00:00
Aubrey Hewes
607b11ab6b fixed: when adding a cert remove previous cert before copying the new one
This fixes when a user (or plugin) has replaced the cert with a symlink; else the symlinked file would be overwritten.

This mainly is in the case of a global-cert (plugin) wildcard cert
2020-10-15 13:32:56 +02:00
dependabot-preview[bot]
6543647b3c chore(deps-dev): bump heroku/heroku-buildpack-php in /tests/apps/php
Bumps [heroku/heroku-buildpack-php](https://github.com/heroku/heroku-buildpack-php) from 181 to 182.
- [Release notes](https://github.com/heroku/heroku-buildpack-php/releases)
- [Changelog](https://github.com/heroku/heroku-buildpack-php/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heroku/heroku-buildpack-php/compare/v181...v182)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-14 00:20:21 +00:00
Jose Diaz-Gonzalez
57b317b0a4 Merge pull request #4144 from dokku/dependabot/composer/tests/apps/php/heroku/heroku-buildpack-php-181 2020-10-10 20:44:47 -04:00
dependabot-preview[bot]
d5cc136df2 chore(deps-dev): bump heroku/heroku-buildpack-php in /tests/apps/php
Bumps [heroku/heroku-buildpack-php](https://github.com/heroku/heroku-buildpack-php) from 180 to 181.
- [Release notes](https://github.com/heroku/heroku-buildpack-php/releases)
- [Changelog](https://github.com/heroku/heroku-buildpack-php/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heroku/heroku-buildpack-php/compare/v180...v181)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-02 04:50:32 +00:00
Jose Diaz-Gonzalez
0731616ebf Merge pull request #4135 from znz/fix-broken-table
Fix broken table
2020-09-23 00:47:02 -04:00
Jose Diaz-Gonzalez
6957a33ec7 Merge pull request #4137 from dokku/dependabot/composer/tests/apps/php/heroku/heroku-buildpack-php-180
chore(deps-dev): bump heroku/heroku-buildpack-php from 179 to 180 in /tests/apps/php
2020-09-23 00:46:47 -04:00
Jose Diaz-Gonzalez
46c274dcf2 Merge pull request #4140 from swrobel/patch-2
Note Ubuntu 20.04 support in README
2020-09-23 00:46:10 -04:00
Stefan Wrobel
ae21056401 Note Ubuntu 20.04 support in README 2020-09-21 17:57:32 -07:00
Yihao
30414cbd0c feat: Allow controlling nginx proxy-buffer-size, proxy-buffering, proxy-buffers, proxy-busy-buffers-size 2020-09-19 09:51:55 +09:30
dependabot-preview[bot]
87574f7d76 chore(deps-dev): bump heroku/heroku-buildpack-php in /tests/apps/php
Bumps [heroku/heroku-buildpack-php](https://github.com/heroku/heroku-buildpack-php) from 179 to 180.
- [Release notes](https://github.com/heroku/heroku-buildpack-php/releases)
- [Changelog](https://github.com/heroku/heroku-buildpack-php/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heroku/heroku-buildpack-php/compare/v179...v180)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-16 00:54:01 +00:00
Jose Diaz-Gonzalez
30d8ebffb9 Merge pull request #4136 from hugopeixoto/docs/ruby-getting-started-uses-main-instead-of-master
Use git push main:master in docs
2020-09-14 16:23:00 -04:00
Hugo Peixoto
71876756a4 Use git push main:master in docs
Heroku's ruby project changed its default branch from master to main.
This broke the examples in the documentation. This change explicitly
names main and master.
2020-09-14 20:23:35 +01:00
Kazuhiro NISHIYAMA
b1b85b4106 Fix broken table
[ci skip]
2020-09-13 12:46:46 +09:00
Jose Diaz-Gonzalez
196b5d08eb Merge pull request #4130 from dokku/3932-clear-proxy-on-boot
Clear proxy configs on boot
2020-09-10 12:24:27 -04:00
Jose Diaz-Gonzalez
2026a2731d Merge pull request #4131 from dokku/4088-bump-docker
Bump minimum docker version
2020-09-10 10:56:21 -04:00
Jose Diaz-Gonzalez
c8d932f768 fix: bump minimum docker version
This is necessary in order to properly support image filtering during 'dokku cleanup' calls.

Closes #4088
2020-09-10 02:00:57 -04:00
Jose Diaz-Gonzalez
752a0cacd9 fix: clear proxy configs on boot
Unfortunately, Docker does not persist container IPs on boot, so containers may come up with the wrong IP, resulting in proxying to the incorrect app after a server restart. Instead, we should delete the configs and let ps:restore rebuild the proxy config correctly.

Closes #3932
2020-09-10 01:58:45 -04:00
Jose Diaz-Gonzalez
ecc6c9e01d Merge pull request #4129 from dokku/4102-prohibit-non-dns-names
Prohibit non-dns names for apps and process types
2020-09-09 23:39:27 -04:00
Jose Diaz-Gonzalez
7e9f98b513 Merge pull request #4080 from hugopeixoto/fix/app-vhost-usage 2020-09-09 21:23:15 -04:00
Jose Diaz-Gonzalez
0f514f300e feat: prohibit non-dns names for apps and process types
This is necessary for ensuring ssl certificates can be auto-retrieved for apps, and also easing integration into schedulers that use names and process types as part of DNS records.

As well, this fixes an issue where we may potentially have invalid DNS entries when adding apps to custom networks.

Closes #4102
Closes #4114
2020-09-09 20:07:50 -04:00
Jose Diaz-Gonzalez
017cfef6a2 Merge pull request #4125 from dokku/4086-custom-nginx-app-conf-location
Allow customizing the various nginx templates
2020-09-09 19:51:33 -04:00
Femi Omojola
81512504a7 Added the container index to the network-compute-ports trigger: useful for alternative proxy implementations. Updated the documentation for the network-compute-ports trigger to clarify the arguments 2020-09-08 09:26:35 -04:00
Jose Diaz-Gonzalez
becf7c1f86 feat: allow customizing the various nginx templates
This will let custom distributions of Dokku to override the internal templates without needing to repackage Dokku or overwrite core files.
2020-09-06 13:57:35 -04:00
Jose Diaz-Gonzalez
9e6c89428e Merge pull request #4124 from dokku/4101-docker-options-docs 2020-09-06 13:21:30 -04:00
Jose Diaz-Gonzalez
8d96be73b7 docs: note that docker options require app rebuilds
Closes #4101
2020-09-06 13:20:34 -04:00
Jose Diaz-Gonzalez
21c8639397 docs: drop advanced usage
Dokku internals shouldn't be exposed in docs. Additionally, the internals here are likely to change in the future as this moves to the upcoming prop binary, so having incorrect docs will hinder that move.
2020-09-06 13:18:34 -04:00
Jose Diaz-Gonzalez
1699c6f3a3 Merge pull request #4118 from dokku/dependabot/pip/tests/apps/dockerfile-release/django-3.0.7
chore(deps): bump django from 3.0.2 to 3.0.7 in /tests/apps/dockerfile-release
2020-09-06 12:56:59 -04:00
Jose Diaz-Gonzalez
70c947289f Merge pull request #4121 from dokku/4087-nginx-extract-disable
Add ability to disable custom ninx.conf.sigil extraction
2020-09-05 11:48:57 -04:00
Jose Diaz-Gonzalez
a4e54b6d00 Merge pull request #4123 from fomojola/patch-1
Support for expected CHECKS text with special characters
2020-09-04 19:12:16 -04:00
fomojola
ab9780d971 Support for expected text with special characters
Added a quote around the "$EXPECTED" to deal with text with restricted characters. While deploying a Spring Boot application, the content of the built-in health check is {"status":"UP"}. Unfortunately all my checks failed, because for some reason the comparison didn't like this content.

remote:  !     http://localhost/actuator/health: expected to but did not find: "{"status":"UP"}"
remote:  !     Check attempt 7/10 failed.

After making this change, it works: I'm assuming the difference is that the presence of the quote characters in the content.
2020-09-04 16:49:47 -04:00
Jose Diaz-Gonzalez
f5ba843cf3 feat: add ability to disable custom ninx.conf.sigil extraction
Closes #4087
2020-09-04 11:29:23 -04:00
Jose Diaz-Gonzalez
052f2a5868 Merge pull request #4115 from dokku/4099-image-cleanup
Add missing labels to built images
2020-08-31 21:25:55 -04:00
dependabot[bot]
893df14c3e chore(deps): bump django in /tests/apps/dockerfile-release
Bumps [django](https://github.com/django/django) from 3.0.2 to 3.0.7.
- [Release notes](https://github.com/django/django/releases)
- [Commits](https://github.com/django/django/compare/3.0.2...3.0.7)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-01 01:23:13 +00:00
Jose Diaz-Gonzalez
43c521c193 Merge pull request #4117 from dokku/go-app-json 2020-08-31 21:22:21 -04:00
Jose Diaz-Gonzalez
2a1d3877f1 fix: add docblock 2020-08-31 21:03:16 -04:00
Jose Diaz-Gonzalez
4d735b4d88 fix: do not output error on checking for process type existence 2020-08-31 18:55:39 -04:00
Jose Diaz-Gonzalez
b8b6d64f75 fix: correct stickler-ci errors and remove unused code 2020-08-31 18:44:00 -04:00
Jose Diaz-Gonzalez
2b65def123 fix: pass command directly to entrypoint
Closes #3706
2020-08-31 18:36:07 -04:00
Jose Diaz-Gonzalez
7fe69fa269 fix: add missing hook 2020-08-31 18:26:36 -04:00
Jose Diaz-Gonzalez
84367e1c16 fix: correctly handle injecting environment variables to deployment tasks
Also test that release tasks are invoked the correct environment.

Closes #3817
2020-08-31 15:01:14 -04:00
Jose Diaz-Gonzalez
0faf305f28 Merge pull request #4116 from Schlepptop/config-clear-fix 2020-08-31 14:04:27 -04:00
Michael Chen
e64f7b34ff Add unit test for config:clear 2020-08-31 18:48:36 +02:00
Michael Chen
5ea4c9a73d 🐛 Whitelist config:clear command in Makefile 2020-08-31 18:28:59 +02:00
Jose Diaz-Gonzalez
7e7931f1ce fix: add run prefix to deploy_app calls 2020-08-31 04:52:44 -04:00
Jose Diaz-Gonzalez
428beb3413 fix: pass in correct image variable 2020-08-31 04:23:10 -04:00
Jose Diaz-Gonzalez
9aab7dce7d feat: create ps directory on app create 2020-08-31 04:22:40 -04:00
Jose Diaz-Gonzalez
2478556df1 fix: ensure the base directory exists before extracting the file 2020-08-31 04:22:27 -04:00
Jose Diaz-Gonzalez
a2d4ba4689 fix: set correct args for fn-procfile-extract 2020-08-31 04:21:59 -04:00
Jose Diaz-Gonzalez
4ab9632526 fix: handle case where there is no app.json
Somehow, an empty file may get copied over...
2020-08-31 02:56:50 -04:00
Jose Diaz-Gonzalez
baa819c2a5 fix: add missing labels to built images
This fixes an issue where disk space is not recouped after deploys unless 'dokku cleanup' without arguments is called.

Also injects the label-schema labels as necessary.

Refs #4099
2020-08-31 02:37:04 -04:00
Jose Diaz-Gonzalez
aaf8bc811a chore: drop now unused internal-functions file 2020-08-31 02:33:07 -04:00
Jose Diaz-Gonzalez
53dabf7fd0 refactor: fix handling of string andd array CMD and ENTRYPOINT values
Previous versions extracted the values as strings, prefixing the values with `/bin/sh -c '$CMD'` unnecessarily. This caused issues where we would incorrectly overrride these values when an app had a predeploy script.

Closes #3143
2020-08-31 02:31:36 -04:00
Jose Diaz-Gonzalez
7ca4cba8ec chore: drop extra quotes 2020-08-31 02:06:24 -04:00
Jose Diaz-Gonzalez
5965b70b39 fix: do not log empty messages 2020-08-31 02:05:21 -04:00
Jose Diaz-Gonzalez
23db07ed4e chore: remove extra LogDebug call 2020-08-31 02:05:03 -04:00
Jose Diaz-Gonzalez
53e75e7898 chore: rewrite log message
This change makes it more clear as to what is being executed.
2020-08-31 02:04:51 -04:00
Jose Diaz-Gonzalez
16d15ae9bf Merge pull request #4113 from dokku/remove-herokuish-release
Drop herokuish release code
2020-08-30 17:01:40 -04:00
Jose Diaz-Gonzalez
3def0ae036 Merge pull request #4103 from dokku/dependabot/composer/tests/apps/php/heroku/heroku-buildpack-php-179
chore(deps-dev): bump heroku/heroku-buildpack-php from 178 to 179 in /tests/apps/php
2020-08-30 17:01:29 -04:00
Jose Diaz-Gonzalez
31ab2f97f6 fix: split arguments to ensure they get parsed properly 2020-08-30 16:05:10 -04:00
Jose Diaz-Gonzalez
8126c63d6e fix: properly handle return from PluginTriggerOutput 2020-08-30 14:51:25 -04:00
Jose Diaz-Gonzalez
beb42b53b2 tests: ensure the deploy succeeeds 2020-08-30 14:51:02 -04:00
Jose Diaz-Gonzalez
6df38a56d1 fix: properly set property... 2020-08-30 14:22:55 -04:00
Jose Diaz-Gonzalez
68debb44f7 refactor: use plugin trigger to delete procfile 2020-08-30 14:22:47 -04:00
Jose Diaz-Gonzalez
f27096f235 refactor: implement appjson in golang 2020-08-30 13:41:15 -04:00
Jose Diaz-Gonzalez
f2a623fde0 fix: trim whitespace to ensure container ID is valid 2020-08-30 13:41:15 -04:00
Jose Diaz-Gonzalez
7ee26d41f7 fix: correct doc 2020-08-30 13:41:15 -04:00
Jose Diaz-Gonzalez
55c77773ab fix: read input correct as string 2020-08-30 13:41:15 -04:00
Jose Diaz-Gonzalez
147abc5c6b feat: add LogDebug 2020-08-30 13:41:15 -04:00
Jose Diaz-Gonzalez
e6f2ee6499 fix: handle edge cases during procfile removal 2020-08-30 13:41:15 -04:00
Jose Diaz-Gonzalez
8f671b43ae feat: add helper functions for getting global config 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
617ca885f1 fix: run release during predeploy 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
1813317e86 fix: execute correct script 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
9bf7ddc258 fix: correct module name 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
77f211c372 feat: add command for logging container output 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
939cb67daa fix: remove container after use 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
1ea60a16e5 refactor: move external procfile manipulation into triggers
This also cleans up the internal APIs a bit.
2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
98bc513336 feat: implement getPhaseScript and scaffold out plugin triggers 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
b6d5d291b0 feat: template out app.json plugin
Note: this won't compile as the triggers themselves aren't implemented just yet.
2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
6f6fa709ec feat: implement common.CopyFromImage 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
82a6dbf887 fix: correct variable declaration 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
dee879538c feat; add common.LogExclaim() 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
0351bf73b0 fix: update deprecated function name 2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
5d08964699 feat: add AppHostRoot() function
This makes it a bit easier to fetch files from the host path
2020-08-30 13:41:14 -04:00
Jose Diaz-Gonzalez
96b4ffbf5b chore: drop herokuish release code
This is now done upstream in the herokuish project.
2020-08-29 15:54:49 -04:00
dependabot-preview[bot]
7ad723f23d chore(deps-dev): bump heroku/heroku-buildpack-php in /tests/apps/php
Bumps [heroku/heroku-buildpack-php](https://github.com/heroku/heroku-buildpack-php) from 178 to 179.
- [Release notes](https://github.com/heroku/heroku-buildpack-php/releases)
- [Changelog](https://github.com/heroku/heroku-buildpack-php/blob/master/CHANGELOG.md)
- [Commits](https://github.com/heroku/heroku-buildpack-php/compare/v178...v179)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-28 06:10:42 +00:00
Jose Diaz-Gonzalez
a97f1d02cf Merge pull request #4091 from dokku/dependabot/maven/tests/apps/java/org.eclipse.jetty-jetty-servlet-9.4.31.v20200723
chore(deps): bump jetty-servlet from 9.4.30.v20200611 to 9.4.31.v20200723 in /tests/apps/java
2020-08-28 01:22:02 -04:00
Jose Diaz-Gonzalez
fe8e97b7cb Merge pull request #4098 from carlosgeos/master
Add a note on how nginx handles load balancing
2020-08-28 01:21:42 -04:00
Jose Diaz-Gonzalez
b13de85477 Merge pull request #4111 from dokku/josegonzalez-patch-2 2020-08-27 22:54:43 -04:00
Jose Diaz-Gonzalez
ced920eb74 docs: add large version of dokku image
No license is explicitly stated.

[ci skip]
2020-08-27 22:54:05 -04:00
Jose Diaz-Gonzalez
eded6cffe0 Merge pull request #4100 from turicas/fix/docs
Fix markdown syntax in nginx docs
2020-08-03 18:53:54 -04:00
Álvaro Justen (@turicas)
9d7a67ae7f Fix markdown syntax in docs 2020-08-03 19:52:12 -03:00
Carlos Requena López
638807685a docs: add a note on how nginx handles load balancing
[ci skip] when the web proctype is scaled
2020-08-02 19:50:54 +02:00
Jose Diaz-Gonzalez
529289f364 Release 0.21.4
# History

## 0.21.4

Install/update via the bootstrap script:

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

### Bug Fixes

- #4092: @Yihao-G Fix nginx proxy-read-timeout not set for HTTPS
- #4095: @GennadySpb Fix application removal during uninstallation

### New Features

- #4097: @josegonzalez Update herokuish

### Documentation

- #4096: @josegonzalez Clarify that special config variables are not exposed to applications
- #4007: @turicas Clarify nginx.conf.sigil path in image when deploying non-buildpack apps
- #4078: @gurpreetatwal Add more details to `nginx-dokku-template-source` trigger
- #4090: @ankane Official plugins no longer in beta
- #4085: @josegonzalez Set warning on resource type as an actual warning

### Other

- #4082: @dependabot-preview[bot] chore(deps): bump monolog/monolog from 1.25.4 to 1.25.5 in /tests/apps/php
2020-08-01 23:53:44 -04:00
Jose Diaz-Gonzalez
2fdd261961 Merge pull request #4097 from dokku/update-herokuish
Update herokuish
2020-08-01 21:43:01 -04:00
Jose Diaz-Gonzalez
0bce73d690 feat: update herokuish 2020-08-01 21:42:33 -04:00
Jose Diaz-Gonzalez
0107909a85 Merge pull request #4096 from dokku/josegonzalez-patch-2
Clarify that special config variables are not exposed to applications
2020-08-01 20:43:56 -04:00
Jose Diaz-Gonzalez
d41a53d9db docs: clarify that special config variables are not exposed to applications
Closes #4093

[ci skip]
2020-08-01 20:43:36 -04:00
Jose Diaz-Gonzalez
af0fb558f6 Merge pull request #4007 from turicas/fix/docs-custom-nginx-conf 2020-08-01 20:39:15 -04:00
Jose Diaz-Gonzalez
1452e88248 docs: further clarify how we handle image copies
[ci skip]
2020-08-01 20:38:37 -04:00
Jose Diaz-Gonzalez
d1b848e3eb Merge pull request #4078 from gurpreetatwal/docs-nginx-dokku-template-source 2020-08-01 20:31:48 -04:00
Jose Diaz-Gonzalez
d6273b4751 Merge pull request #4092 from Yihao-G/master
Fix nginx proxy-read-timeout not set for HTTPS
2020-08-01 20:30:47 -04:00
Jose Diaz-Gonzalez
5bd5e6249b Merge pull request #4095 from GennadySpb/fix-deb-prerm
Fix application removal during uninstallation
2020-08-01 20:30:22 -04:00
Gennady Lipenkov
4033266664 Fix application list command 2020-08-02 02:40:11 +03:00
Yihao
9cbe771123 Fix proxy-read-timeout is not set for HTTPS 2020-07-30 18:39:23 +09:30
dependabot-preview[bot]
a545585ea1 chore(deps): bump jetty-servlet in /tests/apps/java
Bumps [jetty-servlet](https://github.com/eclipse/jetty.project) from 9.4.30.v20200611 to 9.4.31.v20200723.
- [Release notes](https://github.com/eclipse/jetty.project/releases)
- [Commits](https://github.com/eclipse/jetty.project/compare/jetty-9.4.30.v20200611...jetty-9.4.31.v20200723)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-30 06:48:16 +00:00
Jose Diaz-Gonzalez
2efa8483e2 Merge pull request #4090 from ankane/plugins
Official plugins no longer in beta starting with 0.21.2 release
2020-07-30 01:56:47 -04:00
Andrew Kane
a3961e40ee Official plugins no longer in beta starting with 0.21.2 release 2020-07-29 22:54:06 -07:00
Jose Diaz-Gonzalez
f9b1a74edf docs: expand docs around herokuish upgrades
Refs https://github.com/dokku/dokku/pull/4063#discussion_r460257032

[ci skip]
2020-07-28 15:12:51 -04:00
Jose Diaz-Gonzalez
e1753bbac4 Merge pull request #4085 from dokku/josegonzalez-patch-2
Set warning on resource type as an actual warning
2020-07-25 19:17:11 -04:00
Jose Diaz-Gonzalez
13392dcf5b docs: set warning on resource type as an actual warning
[ci skip]
2020-07-25 19:15:35 -04:00
Jose Diaz-Gonzalez
879d47b30d Merge pull request #4082 from dokku/dependabot/composer/tests/apps/php/monolog/monolog-1.25.5
chore(deps): bump monolog/monolog from 1.25.4 to 1.25.5 in /tests/apps/php
2020-07-24 11:23:44 -04:00
dependabot-preview[bot]
bb61aaa85c chore(deps): bump monolog/monolog in /tests/apps/php
Bumps [monolog/monolog](https://github.com/Seldaek/monolog) from 1.25.4 to 1.25.5.
- [Release notes](https://github.com/Seldaek/monolog/releases)
- [Changelog](https://github.com/Seldaek/monolog/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Seldaek/monolog/compare/1.25.4...1.25.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-24 09:28:07 +00:00
Hugo Peixoto
d5b2d0d98e Stop using VHOST when listing app domains and urls 2020-07-19 16:29:35 +01:00
Hugo Peixoto
1b7761ce8d Refactor domain add functions 2020-07-19 16:29:11 +01:00
Gurpreet Atwal
8ab1342110 docs: add more details to nginx-dokku-template-source trigger
[ci skip]
2020-07-18 13:26:17 -07:00
Jose Diaz-Gonzalez
7c0eb20de8 Release 0.21.3
# History

## 0.21.3

Install/update via the bootstrap script:

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

### Bug Fixes

- #4077: @Schlepptop Fix config_all bug introduced in 0.21.2
- #4074: @josegonzalez Force set all plugin permissions on plugin:install/update

### Documentation

- #4073: @josegonzalez Document the official shell client
2020-07-18 13:34:29 -04:00
Jose Diaz-Gonzalez
c26258bd2b Merge pull request #4077 from Schlepptop/master
Fix config_all bug introduced in 0.21.2
2020-07-18 13:32:00 -04:00
schlepptop
d04c04ac17 Fix deprecation warning in config_all but actually don't break the thing in the process 2020-07-18 16:20:00 +02:00
Jose Diaz-Gonzalez
c5b53afd8b Merge pull request #4074 from dokku/4027-plugin-force-permissions
Force set all plugin permissions on plugin:install/update
2020-07-17 17:08:21 -04:00
Jose Diaz-Gonzalez
9ac7b00718 fix: force set all plugin permissions on plugin:install/update
Closes #4027
2020-07-17 15:55:50 -04:00
Jose Diaz-Gonzalez
59f815962d Merge pull request #4073 from dokku/3963-document-shell-client
Document the official shell client
2020-07-17 14:07:29 -04:00
Jose Diaz-Gonzalez
bb33a2fe27 docs: document the official shell client
Closes #3963

[ci skip]
2020-07-17 14:07:00 -04:00
Álvaro Justen (@turicas)
914f695eab Fix doc about custom nginx config for Dockerfile 2020-05-27 16:29:33 -03:00
360 changed files with 8098 additions and 3237 deletions

View File

@@ -84,7 +84,9 @@ jobs:
- run:
name: run bats tests
command: |
sudo -E make -e test-ci
if ! sudo -E make -e test-ci; then
sudo -E make tests-ci-retry-failed
fi
no_output_timeout: 60m
shell: /bin/bash
- run:

23
.github/workflows/bump-formula.yml vendored Normal file
View File

@@ -0,0 +1,23 @@
name: bump-formula
on:
push:
tags:
- '*'
jobs:
bump-formula:
runs-on: macos-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Get version
id: get_version
run: echo ::set-output name=version::${GITHUB_REF/refs\/tags\//}
- name: Bump Brew
env:
HOMEBREW_GITHUB_USERNAME: ${{ secrets.HOMEBREW_GITHUB_USERNAME }}
HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
run: |
git config --global user.name 'Dokku Bot'
git config --global user.email no-reply@dokku.com
brew tap dokku/repo "https://$HOMEBREW_GITHUB_USERNAME:$HOMEBREW_GITHUB_API_TOKEN@github.com/dokku/homebrew-repo.git"
brew bump-formula-pr -f --no-browse --no-audit --no-fork --url "https://github.com/dokku/dokku/archive/${{ steps.get_version.outputs.version }}.tar.gz" dokku/repo/dokku

68
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@@ -0,0 +1,68 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
# ******** NOTE ********
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '18 22 * * 2'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'go' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

View File

@@ -53,4 +53,4 @@ RUN \
&& rm -f /etc/nginx/sites-enabled/default /usr/share/nginx/html/index.html /etc/my_init.d/10_syslog-ng.init \
&& rm -f /usr/local/openresty/nginx/conf/sites-enabled/default /usr/share/openresty/html/index.html \
&& sed -i '/imklog/d' /etc/rsyslog.conf \
&& rm -f /var/log/btmp /var/log/wtmp /var/log/*log /var/log/apt/* /var/log/dokku/* /var/log/nginx/* /var/log/openresty/*
&& rm -f /var/log/btmp /var/log/wtmp /var/log/*log /var/log/apt/* /var/log/dokku/*.log /var/log/nginx/* /var/log/openresty/*

View File

@@ -1,5 +1,342 @@
# History
## 0.22.7
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.7/bootstrap.sh
sudo DOKKU_TAG=v0.22.7 bash bootstrap.sh
```
### Bug Fixes
- #4301: @josegonzalez Ensure vector container starts correctly
## 0.22.6
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.6/bootstrap.sh
sudo DOKKU_TAG=v0.22.6 bash bootstrap.sh
```
### Bug Fixes
- #4295: @josegonzalez Update ps subcommands and triggers
### New Features
- #4286: @josegonzalez Add support for templated CHECKS files
- #4294: @josegonzalez Enhance ssh client logging output
- #4291: @josegonzalez Add log aggregation support via Vector
- #4288: @josegonzalez Add the pid of the dokku process to event logs
- #4289: @josegonzalez Clean precheck tmp file on exit
### Refactors
- #4287: @josegonzalez Refactor parallelized goroutines to use error groups
### Documentation
- #4292: @thomasfedb Update docs to note support for Ubuntu 20.04
- #4293: @ltalirz Fix path in persistent storage docs
### Other
- #4290: @josegonzalez Add support for debug logging plugin trigger stderr and stdout
## 0.22.5
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.5/bootstrap.sh
sudo DOKKU_TAG=v0.22.5 bash bootstrap.sh
```
### Bug Fixes
- #4279: @josegonzalez Allow vmware-based vm to work on big sur
### Refactors
- #4282: @josegonzalez Cleanup brew-bump integration
- #4280: @josegonzalez Parallelize report and scheduler retrieval
### Documentation
- #4285: @josegonzalez Reference official gitlab-ci integration
- #4284: @josegonzalez Drop old doc link to gitlab ci docs
- #4283: @josegonzalez Add CI documentation section for Github Actions and Gitlab
- #4281: @josegonzalez Add forum link to documentation
## 0.22.4
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.4/bootstrap.sh
sudo DOKKU_TAG=v0.22.4 bash bootstrap.sh
```
### Bug Fixes
- #4274: @josegonzalez Use correct warning message for deprecated code
### New Features
- #4273: @josegonzalez Upgrade to golang 1.15
### Refactors
- #4275: @josegonzalez Add calls to verify app name in subcommands
### Documentation
- #4272: @josegonzalez Correct help output for ssh-keys command
### Tests
- #4276: @josegonzalez Upgrade version of plugn used in tests
## 0.22.3
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.3/bootstrap.sh
sudo DOKKU_TAG=v0.22.3 bash bootstrap.sh
```
### Bug Fixes
- #4268: @josegonzalez Properly parse flags for logs command
- #4264: @josegonzalez Correct argument handling when setting the `--app` flag
- #4252: @magikid Allow symbolic links for certificate and key files
### New Features
- #4270: @josegonzalez Allow renaming old applications to new format
- #4261: @josegonzalez Add remove by fingerprint and json format output to ssh-keys plugin
- #4262: @josegonzalez Improve ps:restore logging
- #4263: @josegonzalez Bump the dokku client formula on release
### Documentation
- #4253: @guettli Highlight the default build method used by Dokku
- #4250: @rlnd1 Update upgrading.md
- #4249: @guettli Fix typo in zero downtime docs
- #4247: @josegonzalez Clarify the domain name setting in the docs
### Tests
- #4269: @josegonzalez Rename duplicate test
- #4266: @josegonzalez Update junit test files when a bats retry is successful
- #4265: @josegonzalez Retry failing and skipped tests once
## 0.22.2
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.2/bootstrap.sh
sudo DOKKU_TAG=v0.22.2 bash bootstrap.sh
```
### Bug Fixes
- #4243: @josegonzalez Do not delete app when the app name is invalid
### New Features
- #4141: @josegonzalez Always initialize git repository
### Other
- #4244: @dependabot-preview[bot] chore(deps): bump monolog/monolog from 1.25.5 to 1.26.0 in /tests/apps/php
## 0.22.1
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.1/bootstrap.sh
sudo DOKKU_TAG=v0.22.1 bash bootstrap.sh
```
### Bug Fixes
- #4238: @josegonzalez Ensure dead files are created for docker object retirement
- #4239: @josegonzalez Ensure all byte output is trimmed of whitespace
- #4228: @Cellane Fix tags:deploy command for images that contain ONBUILD directive
- #4233: @josegonzalez Properly parse releease command when there is an entrypoint
- #4215: @josegonzalez Implement missing cleanup routines
- #4212: @josegonzalez Cleanup docker options during post-delete
- #4211: @ml-milan-vit Make the dokku-update command compatible with Dokku 0.22+
### New Features
- #4242: @josegonzalez Remove reference to 'whitelist'
- #4220: @josegonzalez Update plugn from 0.5.0 to 0.5.1
- #4241: @josegonzalez Properly handle stdout when capturing plugn output
- #4237: @josegonzalez Release dokku-update 0.2.0
- #4225: @znz Accept first pushed branch as deploy-branch
### Documentation
- #4236: @josegonzalez Remove note regarding not having an official client
- #4234: @josegonzalez Switch to bats --filter for running a single test
- #4222: @leopolicastro Fix typo in deployment tasks documentation
- #4221: @srr013 Updating readme for clarity on git push step
- #4214: @josegonzalez Expand backup and restore documentation
- #4213: @josegonzalez Enhance the 'plugin' plugin documentation
### Tests
- #4218: @josegonzalez Enable compilation cache
### Other
- #4230: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 186 to 187 in /tests/apps/php
- #4223: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.35.v20201120 to 11.0.0 in /tests/apps/java
- #4224: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 185 to 186 in /tests/apps/php
## 0.22.0
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.0/bootstrap.sh
sudo DOKKU_TAG=v0.22.0 bash bootstrap.sh
```
See the [0.22.0 migration guide](/docs/appendices/0.22.0-migration-guide.md) for more information on migrating to 0.22.0.
### Bug Fixes
- #4204: @josegonzalez Ensure the image is not an empty string
- #4198: @josegonzalez Reference extracted Procfile
- #4194: @josegonzalez Drop appName check in apps:report
- #4183: @josegonzalez Embed pb.UnimplementedGreeterServer to avoid linting issues
- #4182: @josegonzalez Upgrade herokuish to fix nodejs tests
- #4173: @karimsan Add build-essential to Vagrant provision
- #4181: @josegonzalez Conditionally mount the dokku-arch folder if it exists
- #4130: @josegonzalez Clear proxy configs on boot
- #4131: @josegonzalez Bump minimum docker version
- #4123: @fomojola Support for expected CHECKS text with special characters
- #4115: @josegonzalez Add missing labels to built images
- #4116: @Schlepptop Ensure config:clear an be called
### New Features
- #4209: @josegonzalez Add experimental support for Cloud Native Buildpacks (CNB)
- #4210: @josegonzalez Add migration guide link to release notes
- #4203: @josegonzalez Cleanup log output for failure case
- #4208: @ankane Add ability to change the access log format
- #4202: @josegonzalez Schedule related images for cleanup when retiring containers
- #4197: @josegonzalez Retire intermediate containers after use
- #4128: @fomojola Added the container index to the network-compute-ports trigger
- #4191: @josegonzalez Create codeql-analysis.yml
- #4139: @Yihao-G Allow controlling Nginx proxy-buffer-size, proxy-buffering, proxy-buffers, proxy-busy-buffers-size
- #4156: @ltalirz When `cert:add` remove previous cert before copying the new cert
- #4129: @josegonzalez Prohibit non-dns names for apps and process types
- #4125: @josegonzalez Allow customizing the various nginx templates
- #4121: @josegonzalez Add ability to disable custom ninx.conf.sigil extraction
### Refactors
- #4160: @nerg4l Rewrite logs plugin in Go
- #4149: @josegonzalez Rewrite ps plugin in golang
- #4080: @hugopeixoto Stop using VHOST when listing app domains and urls
- #4117: @josegonzalez Rewrite app-json plugin in golang
- #4113: @josegonzalez Drop herokuish release code
### Documentation
- #4196: @josegonzalez Correctly doc apps:report output
- #4195: @luizpicolo Fix whitespace in process-management docs
- #4184: @badsyntax Add note regarding using plugin triggers instead of sourcing functions
- #4188: @fomojola Added the autosync community plugin
- #4187: @nahtnam Add `-p` flag to "Run on External Volume" tutorial
- #4186: @badsyntax Add dokku-discourse to community plugins list
- #4170: @chrisjsimpson Add note on how to enable buildkit usage
- #4168: @josegonzalez Revert "The default branch for ruby-getting-started is 'main', not 'master"
- #4167: @nateww The default branch for ruby-getting-started is 'main', not 'master
- #4135: @znz Fix broken table
- #4140: @swrobel Note Ubuntu 20.04 support in README
- #4136: @hugopeixoto Update push command for sample app in docs
- #4124: @josegonzalez Note that docker options require app rebuilds
- #4098: @carlosgeos Add a note on how nginx handles load balancing
- #4111: @josegonzalez Add large version of dokku image
- #4100: @turicas Fix markdown syntax in nginx docs
### Other
- #4201: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.34.v20201102 to 9.4.35.v20201120 in /tests/apps/java
- #4200: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 183 to 185 in /tests/apps/php
- #4189: @dependabot-preview[bot] chore(deps): bump thin from 1.7.2 to 1.8.0 in /tests/apps/ruby
- #4175: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.33.v20201020 to 9.4.34.v20201102 in /tests/apps/java
- #4172: @dependabot-preview[bot] chore(deps): bump github.com/golang/protobuf from 1.4.2 to 1.4.3 in /tests/apps/gogrpc
- #4185: @dependabot-preview[bot] chore(deps): bump socket.io from 2.3.0 to 3.0.1 in /tests/apps/.websocket.disabled
- #4190: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 182 to 183 in /tests/apps/php
- #4165: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.31.v20200723 to 9.4.33.v20201020 in /tests/apps/java
- #4153: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 181 to 182 in /tests/apps/php
- #4144: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 180 to 181 in /tests/apps/php
- #4137: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 179 to 180 in /tests/apps/php
- #4118: @dependabot[bot] chore(deps): bump django from 3.0.2 to 3.0.7 in /tests/apps/dockerfile-release
- #4103: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 178 to 179 in /tests/apps/php
- #4091: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.30.v20200611 to 9.4.31.v20200723 in /tests/apps/java
## 0.21.4
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.21.4/bootstrap.sh
sudo DOKKU_TAG=v0.21.4 bash bootstrap.sh
```
### Bug Fixes
- #4092: @Yihao-G Fix nginx proxy-read-timeout not set for HTTPS
- #4095: @GennadySpb Fix application removal during uninstallation
### New Features
- #4097: @josegonzalez Update herokuish
### Documentation
- #4096: @josegonzalez Clarify that special config variables are not exposed to applications
- #4007: @turicas Clarify nginx.conf.sigil path in image when deploying non-buildpack apps
- #4078: @gurpreetatwal Add more details to `nginx-dokku-template-source` trigger
- #4090: @ankane Official plugins no longer in beta
- #4085: @josegonzalez Set warning on resource type as an actual warning
### Other
- #4082: @dependabot-preview[bot] chore(deps): bump monolog/monolog from 1.25.4 to 1.25.5 in /tests/apps/php
## 0.21.3
Install/update via the bootstrap script:
```shell
wget https://raw.githubusercontent.com/dokku/dokku/v0.21.3/bootstrap.sh
sudo DOKKU_TAG=v0.21.3 bash bootstrap.sh
```
### Bug Fixes
- #4077: @Schlepptop Fix config_all bug introduced in 0.21.2
- #4074: @josegonzalez Force set all plugin permissions on plugin:install/update
### Documentation
- #4073: @josegonzalez Document the official shell client
## 0.21.2
Install/update via the bootstrap script:

View File

@@ -1,9 +1,10 @@
DOKKU_VERSION ?= master
PROCFILE_VERSION ?= 0.8.2
PLUGN_VERSION ?= 0.5.0
HEROKUISH_VERSION ?= 0.5.19
PROCFILE_VERSION ?= 0.11.0
PLUGN_VERSION ?= 0.6.0
SIGIL_VERSION ?= 0.6.0
SSHCOMMAND_VERSION ?= 0.11.0
SSHCOMMAND_VERSION ?= 0.12.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/v${PLUGN_VERSION}/plugn_${PLUGN_VERSION}_linux_x86_64.tgz

View File

@@ -86,7 +86,7 @@ Support us with a monthly donation and help us continue our activities. [[Become
A fresh VM running any of the following operating systems:
- Ubuntu 16.04/18.04 x64 - Any currently supported release
- Ubuntu 16.04/18.04/20.04 x64 - Any currently supported release
- Debian 9+ x64
- CentOS 7 x64 *(experimental)*
- Arch Linux x64 *(experimental)*
@@ -99,8 +99,8 @@ Otherwise, you will need to import the keypair manually after installation using
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.21.2/bootstrap.sh
sudo DOKKU_TAG=v0.21.2 bash bootstrap.sh
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.7/bootstrap.sh
sudo DOKKU_TAG=v0.22.7 bash bootstrap.sh
```
You can then proceed to the ip address or domain name associated with your server to complete the web-based installation.

8
Vagrantfile vendored
View File

@@ -31,10 +31,12 @@ Vagrant::configure("2") do |config|
config.vm.provider :vmware_fusion do |v, override|
v.vmx["memsize"] = BOX_MEMORY
v.ssh_info_public = true
end
config.vm.provider :vmware_desktop do |v, override|
v.vmx["memsize"] = BOX_MEMORY
v.ssh_info_public = true
end
config.vm.define "empty", autostart: false
@@ -53,7 +55,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 build-essential >/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
@@ -103,7 +105,9 @@ Vagrant::configure("2") do |config|
config.vm.define "build-arch", autostart: false do |vm|
vm.vm.box = "bugyt/archlinux"
vm.vm.synced_folder File.dirname(__FILE__), "/dokku"
vm.vm.synced_folder "#{File.dirname(__FILE__)}/../dokku-arch", "/dokku-arch"
if Pathname.new("#{File.dirname(__FILE__)}/../dokku-arch").exist?
vm.vm.synced_folder "#{File.dirname(__FILE__)}/../dokku-arch", "/dokku-arch"
end
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
vm.vm.hostname = "#{DOKKU_DOMAIN}"
vm.vm.network :private_network, ip: DOKKU_IP

View File

@@ -1,6 +1,7 @@
GO_ARGS ?= -a
GO_ARGS ?=
GO_PLUGIN_MAKE_TARGET ?= build
GO_REPO_ROOT := /go/src/github.com/dokku/dokku
BUILD_IMAGE := golang:1.14.4
BUILD_IMAGE := golang:1.15.6
.PHONY: build-in-docker build clean src-clean
@@ -15,10 +16,10 @@ build-in-docker: clean
-e GO111MODULE=on \
-w $(GO_REPO_ROOT)/plugins/$(PLUGIN_NAME) \
$(BUILD_IMAGE) \
bash -c "GO_ARGS='$(GO_ARGS)' make -j4 build" || exit $$?
bash -c "GO_ARGS='$(GO_ARGS)' make -j4 $(GO_PLUGIN_MAKE_TARGET)" || exit $$?
clean:
rm -rf commands subcommands triggers prop
rm -rf $(BUILD)
find . -xtype l -delete
commands: **/**/commands.go

View File

@@ -1,16 +0,0 @@
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
ARG WORKDIR=/go/src/github.com/dokku/dokku
WORKDIR ${WORKDIR}
COPY . ${WORKDIR}
RUN make deb-herokuish rpm-herokuish
RUN ls -lha /tmp/

View File

@@ -15,7 +15,7 @@ import subprocess
import sys
import threading
VERSION = 'v0.21.2'
VERSION = 'v0.22.7'
def bytes_to_string(b):
if type(b) == bytes:

View File

@@ -101,7 +101,7 @@ main() {
# rebuild all applications
dokku-log-info "Rebuilding all applications"
dokku ps:rebuildall
dokku ps:rebuild --all
dokku-log-info "Waiting for old containers to stop"
sleep 120

View File

@@ -32,8 +32,8 @@ fn-random-name() {
}
fn-client-help-msg() {
echo "==> Configure the DOKKU_HOST environment variable or run $0 from a repository with a git remote named dokku" 1>&2
echo "--> i.e. git remote add dokku dokku@<dokku-host>:<app-name>" 1>&2
echo "=====> Configure the DOKKU_HOST environment variable or run $0 from a repository with a git remote named dokku"
echo " i.e. git remote add dokku dokku@<dokku-host>:<app-name>"
exit 20 # exit with specific status. only used in units tests for now
}
@@ -72,6 +72,9 @@ main() {
skip=false
continue
fi
is_flag=false
[[ "$arg" =~ ^--.* ]] && is_flag=true
if [[ "$arg" == "--app" ]]; then
APP=${args[$next_index]}
@@ -82,10 +85,10 @@ main() {
skip=true
shift 2
elif [[ "$arg" =~ ^--.* ]]; then
[[ "$cmd_set" == "true" ]] && APP_ARG="$arg" && break
[[ "$cmd_set" == "true" ]] && [[ "$is_flag" == "false" ]] && APP_ARG="$arg" && break
[[ "$arg" == "--trace" ]] && export DOKKU_TRACE=1 && set -x
else
if [[ "$cmd_set" == "true" ]]; then
if [[ "$cmd_set" == "true" ]] && [[ "$is_flag" == "false" ]]; then
APP_ARG="$arg"
break
else
@@ -104,18 +107,18 @@ main() {
APP=$(git remote -v 2>/dev/null | grep -Ei "dokku@$DOKKU_REMOTE_HOST" | head -n 1 | cut -f2 -d'@' | cut -f1 -d' ' | cut -f2 -d':' 2>/dev/null)
set -e
else
echo "This is not a git repository"
echo " ! This is not a git repository" 1>&2
fi
fi
case "$CMD" in
apps:create)
if [[ -z "$APP_ARG" ]]; then
if [[ -z "$APP" ]] && [[ -z "$APP_ARG" ]]; then
APP=$(fn-random-name)
counter=0
while ssh -p "$DOKKU_PORT" "dokku@$DOKKU_REMOTE_HOST" apps 2>/dev/null | grep -q "$APP"; do
if [[ $counter -ge 100 ]]; then
echo "Error: could not reasonably generate a new app name. try cleaning up some apps..."
echo " ! Could not reasonably generate a new app name. Try cleaning up some apps..." 1>&2
ssh -p "$DOKKU_PORT" "dokku@$DOKKU_REMOTE_HOST" apps
exit 1
else
@@ -123,14 +126,14 @@ main() {
counter=$((counter + 1))
fi
done
else
elif [[ -z "$APP" ]]; then
APP="$APP_ARG"
fi
if git remote add "$DOKKU_GIT_REMOTE" "dokku@$DOKKU_REMOTE_HOST:$APP"; then
echo "-----> Dokku remote added at ${DOKKU_REMOTE_HOST} called ${DOKKU_GIT_REMOTE}"
echo "-----> Application name is ${APP}"
else
echo "! Dokku remote not added! Do you already have a dokku remote?"
echo " ! Dokku remote not added! Do you already have a dokku remote?" 1>&2
return
fi
;;
@@ -140,13 +143,18 @@ main() {
esac
[[ " apps certs help ls nginx shell storage trace version " == *" $CMD "* ]] && unset APP
[[ " certs:chain domains:add-global domains:remove-global domains:set-global ps:rebuildall ps:restartall ps:restore ps:startall ps:stopall " == *" $CMD "* ]] && unset APP
[[ " certs:chain domains:add-global domains:remove-global domains:set-global ps:restore " == *" $CMD "* ]] && unset APP
[[ "$CMD" =~ events*|plugin*|ssh-keys* ]] && unset APP
[[ -n "$APP_ARG" ]] && [[ "$APP_ARG" == "--global" ]] && unset APP
[[ -n "$@" ]] && [[ -n "$APP" ]] && app_arg="--app $APP"
# echo "ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_REMOTE_HOST -- $app_arg $@"
# shellcheck disable=SC2068,SC2086
ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_REMOTE_HOST -- $app_arg $@
ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_REMOTE_HOST -- $app_arg $@ || {
ssh_exit_code="$?"
echo " ! Failed to execute dokku command over ssh: exit code $?" 1>&2
echo " ! If there was no output from Dokku, ensure your configured SSH Key can connect to the remote server" 1>&2
return $ssh_exit_code
}
}
if [[ "$0" == "dokku" ]] || [[ "$0" == *dokku_client.sh ]] || [[ "$0" == $(which dokku) ]]; then

View File

@@ -281,6 +281,10 @@ fn-repo-update-history-and-commit() {
HISTORY="${HISTORY}"$'\n'"sudo DOKKU_TAG=v${NEXT_VERSION} bash bootstrap.sh"
HISTORY="${HISTORY}"$'\n'"\`\`\`"
if [[ -f "docs/appendices/${NEXT_VERSION}-migration-guide.md" ]]; then
HISTORY="${HISTORY}"$'\n\n'"See the [${NEXT_VERSION} migration guide](/docs/appendices/${NEXT_VERSION}-migration-guide.md) for more information on migrating to ${NEXT_VERSION}."
fi
if [[ "$HISTORY_BC_BREAK" ]]; then
HISTORY="${HISTORY}"$'\n\n'"### Backwards Compatibility Breaks"
HISTORY="${HISTORY}"$'\n'"$HISTORY_BC_BREAK"

View File

@@ -1,160 +0,0 @@
#!/usr/bin/env bash
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.XXXXXX")"
readonly DOKKU_GIT_REV="$(git rev-parse HEAD)"
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
log-info() {
# shellcheck disable=SC2034
declare desc="Log info formatter"
echo "$*"
}
log-error() {
# shellcheck disable=SC2034
declare desc="Log error formatter"
echo "! $*" 1>&2
}
log-fail() {
# shellcheck disable=SC2034
declare desc="Log fail formatter"
log-error "$*"
exit 1
}
fn-build-dokku() {
declare desc="Builds dokku packages within a docker container"
pushd "$ROOT_DIR" >/dev/null
docker build \
-f "contrib/build-herokuish.Dockerfile" \
-t herokuish:build .
return "$?"
}
fn-extract-package() {
declare desc="Extract packages from a docker container to the root directory"
declare PACKAGE_NAME="$1"
if [[ -z "$PACKAGE_NAME" ]]; then
log-error "Invalid deb file specified"
return 1
fi
log-info "(extract-package) writing ${PACKAGE_NAME} to correct path"
docker run --rm --entrypoint cat herokuish:build "/tmp/${PACKAGE_NAME}" >"${ROOT_DIR}/build/${PACKAGE_NAME}"
return "$?"
}
fn-publish-package() {
declare desc="Publishes a package to packagecloud"
declare IS_RELEASE="$1" RELEASE_TYPE="$2" PACKAGE_NAME="$3"
local REPOSITORY=dokku/dokku-betafish DIST=ubuntu
local OS_ID ex EXIT_CODE=0
[[ "$IS_RELEASE" == "true" ]] && REPOSITORY=dokku/dokku
[[ "$RELEASE_TYPE" == "rpm" ]] && DIST=el/7
if [[ "$DIST" == "ubuntu" ]]; then
OS_IDS=("xenial" "bionic" "focal")
for OS_ID in "${OS_IDS[@]}"; do
log-info "(release-herokuish) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
ex="$?"
if [[ "$ex" -ne "0" ]]; then
EXIT_CODE="$ex"
fi
done
DIST=debian
OS_IDS=("stretch" "buster")
for OS_ID in "${OS_IDS[@]}"; do
log-info "(release-herokuish) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
ex="$?"
if [[ "$ex" -ne "0" ]]; then
EXIT_CODE="$ex"
fi
done
else
log-info "(release-herokuish) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
package_cloud push "${REPOSITORY}/${DIST}" "$PACKAGE_NAME"
EXIT_CODE="$?"
fi
return "$EXIT_CODE"
}
fn-in-array() {
declare desc="return true if value ($1) is in list (all other arguments)"
local e
for e in "${@:2}"; do
[[ "$e" == "$1" ]] && return 0
done
return 1
}
fn-is-release() {
declare desc="Checks if a given run is a release run"
declare RELEASE="$1"
local IS_RELEASE=false
if [[ "$RELEASE" == "major" ]] || [[ "$RELEASE" == "minor" ]] || [[ "$RELEASE" == "patch" ]]; then
IS_RELEASE=true
fi
echo "$IS_RELEASE"
}
fn-require-bin() {
declare desc="Checks that a binary exists"
declare BINARY="$1"
if ! command -v "$BINARY" &>/dev/null; then
log-fail "Missing ${BINARY}, please install it"
fi
}
main() {
declare RELEASE="$1"
local NEXT_VERSION
local VALID_RELEASE_LEVELS=("major" "minor" "patch" "betafish" "build")
if [[ "$RELEASE" == '--trace' ]]; then
shift 1
RELEASE="$1"
TRACE=1 && set -x
fi
if [[ -z "$RELEASE" ]]; then
log-fail "Argument 1 must be one of [major, minor, patch, betafish, build], none given"
fi
if ! fn-in-array "$RELEASE" "${VALID_RELEASE_LEVELS[@]}"; then
log-fail "Argument 1 must be one of [major, minor, patch, betafish, build], '${RELEASE}' given"
fi
mkdir -p "build"
fn-require-bin "docker"
if [[ "$RELEASE" != "build" ]]; then
fn-require-bin "package_cloud"
[[ -n "$PACKAGECLOUD_TOKEN" ]] || log-fail "Missing PACKAGECLOUD_TOKEN environment variable"
fi
NEXT_VERSION="$(grep HEROKUISH_VERSION deb.mk | head -n1 | cut -d'=' -f2 | xargs)"
IS_RELEASE="$(fn-is-release "$RELEASE")"
fn-build-dokku || log-fail "Error building package"
fn-extract-package "herokuish_${NEXT_VERSION}_amd64.deb" || log-fail "Error extracting deb package"
fn-extract-package "herokuish-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error extracting rpm package"
if [[ "$RELEASE" != "build" ]]; then
fn-publish-package "$IS_RELEASE" "deb" "build/herokuish_${NEXT_VERSION}_amd64.deb" || log-fail "Error publishing deb package"
fn-publish-package "$IS_RELEASE" "rpm" "build/herokuish-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error publishing rpm package"
fi
}
main "$@"

38
deb.mk
View File

@@ -1,18 +1,12 @@
BUILD_DIRECTORY ?= /tmp
HEROKUISH_DESCRIPTION = 'Herokuish uses Docker and Buildpacks to build applications like Heroku'
HEROKUISH_REPO_NAME ?= gliderlabs/herokuish
HEROKUISH_VERSION ?= 0.5.14
HEROKUISH_ARCHITECTURE = amd64
HEROKUISH_PACKAGE_NAME = herokuish_$(HEROKUISH_VERSION)_$(HEROKUISH_ARCHITECTURE).deb
DOKKU_DESCRIPTION = 'Docker powered PaaS that helps you build and manage the lifecycle of applications'
DOKKU_REPO_NAME ?= dokku/dokku
DOKKU_ARCHITECTURE = amd64
DOKKU_UPDATE_DESCRIPTION = 'Binary that handles updating Dokku and related systems'
DOKKU_UPDATE_REPO_NAME ?= dokku/dokku
DOKKU_UPDATE_VERSION ?= 0.1.0
DOKKU_UPDATE_VERSION ?= 0.2.0
DOKKU_UPDATE_ARCHITECTURE = amd64
DOKKU_UPDATE_PACKAGE_NAME = dokku-update_$(DOKKU_UPDATE_VERSION)_$(DOKKU_UPDATE_ARCHITECTURE).deb
@@ -35,7 +29,7 @@ endif
export SIGIL_DESCRIPTION
.PHONY: install-from-deb deb-all deb-herokuish deb-dokku deb-dokku-update deb-setup deb-sigil
.PHONY: install-from-deb deb-all deb-dokku deb-dokku-update deb-setup deb-sigil
install-from-deb:
@echo "--> Initial apt-get update"
@@ -51,7 +45,7 @@ install-from-deb:
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-sigil deb-dokku-update
deb-all: deb-setup deb-dokku deb-sigil deb-dokku-update
mv $(BUILD_DIRECTORY)/*.deb .
@echo "Done"
@@ -62,32 +56,6 @@ deb-setup:
@command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
@ssh -o StrictHostKeyChecking=no git@github.com || true
deb-herokuish:
rm -rf /tmp/tmp /tmp/build $(HEROKUISH_PACKAGE_NAME)
mkdir -p /tmp/tmp /tmp/build
@echo "-> Creating deb files"
@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 [[ -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)"
sudo fpm -t deb -s dir -C /tmp/build -n herokuish \
--version $(HEROKUISH_VERSION) \
--architecture $(HEROKUISH_ARCHITECTURE) \
--package $(BUILD_DIRECTORY)/$(HEROKUISH_PACKAGE_NAME) \
--deb-pre-depends 'docker-engine-cs (>= 1.13.0) | docker-engine (>= 1.13.0) | docker-io (>= 1.13.0) | docker.io (>= 1.13.0) | docker-ce (>= 1.13.0) | docker-ee (>= 1.13.0) | moby-engine' \
--deb-pre-depends sudo \
--after-install /tmp/tmp/post-install \
--url "https://github.com/$(HEROKUISH_REPO_NAME)" \
--description $(HEROKUISH_DESCRIPTION) \
--license 'MIT License' \
.
deb-dokku: /tmp/build-dokku/var/lib/dokku/GIT_REV
rm -f $(BUILD_DIRECTORY)/dokku_*_$(DOKKU_ARCHITECTURE).deb

4
debian/control vendored
View File

@@ -1,9 +1,9 @@
Package: dokku
Version: 0.21.2
Version: 0.22.7
Section: web
Priority: optional
Architecture: amd64
Depends: locales, git, cpio, curl, man-db, netcat, sshcommand (>= 0.10.0), docker-engine-cs (>= 1.13.0) | docker-engine (>= 1.13.0) | docker-io (>= 1.13.0) | docker.io (>= 1.13.0) | docker-ce (>= 1.13.0) | docker-ee (>= 1.13.0) | moby-engine, net-tools, software-properties-common, procfile-util, python-software-properties | python3-software-properties, rsyslog, dos2unix, jq
Depends: locales, git, cpio, curl, man-db, netcat, sshcommand (>= 0.12.0), docker-engine-cs (>= 17.05.0) | docker-engine (>= 17.05.0) | docker-io (>= 17.05.0) | docker.io (>= 17.05.0) | docker-ce (>= 17.05.0) | docker-ee (>= 17.05.0) | moby-engine, net-tools, software-properties-common, procfile-util (>= 0.11.0), python-software-properties | python3-software-properties, rsyslog, dos2unix, jq
Recommends: herokuish (>= 0.3.4), parallel, dokku-update, dokku-event-listener
Pre-Depends: gliderlabs-sigil, nginx (>= 1.8.0) | openresty, dnsutils, cgroupfs-mount | cgroup-lite, plugn (>= 0.3.0), sudo, python3, debconf
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>

2
debian/prerm vendored
View File

@@ -33,7 +33,7 @@ main() {
echo "Processing purge"
echo "Destroying deployed applications"
for app in $(DOKKU_QUIET_OUTPUT=1 dokku apps); do
for app in $(DOKKU_QUIET_OUTPUT=1 dokku apps:list); do
dokku --force apps:destroy $app
done

View File

@@ -2,7 +2,51 @@
> The backup plugin was deprecated in 0.4.x, below are backup recommendations for 0.5.x and later.
## Backup and Migration Tutorial
The best plan for disaster recovery is to always keep multiple (remote) copies of your local repo, static assets and periodic database dumps. Backups should be regularly tested for data integrity and completeness.
## TLDR
> Warning: This method has many caveats. Please read this entire document before assuming these backups work as expected, and test your backups on a regular basis.
### Creating a backup
To create a backup, run the following command at a time when not executing any Dokku commands or app deployments:
```shell
export BACKUP_TIME=$(date +%Y-%m-%d-%H-%M)
sudo mkdir -p /var/lib/dokku/services
sudo chown dokku:dokku /var/lib/dokku/services
mkdir -p /tmp/dokku-backups/
sudo tar -czvf "/tmp/dokku-backups/${BACKUP_TIME}.tar.gz" /home/dokku /var/lib/dokku/config /var/lib/dokku/data /var/lib/dokku/services /var/lib/dokku/plugins
```
This will create a point-in-time backup of your entire Dokku installation in the `/tmp/dokku-backups` directory. This backup may be moved offsite to another location via rsync, sftp, or some other protocol.
It is recommended that backups are regularly cleaned from the originating server and tested as necessary.
### Restoring a backup
To extract the backup onto another server, copy the backup to the server and extract it using the following command.
```shell
sudo tar -xzvf path/to/dokku/backup.tar.gz -C /
```
At this point, all datastores should be individually started and checked for data integrity. Once this is complete, individual applications can be rebuilt. Please consult the [process management documentation](/docs/deployment/process-management.md#rebuilding-apps) for more information on how to rebuild applications.
## Caveats
### App config
Application config is largely held in a small number of places:
- `/var/lib/dokku/config`: Properties set and managed by plugins
- `/var/lib/dokku/data`: Files generated or extracted by various plugins
- `/home/dokku`: Certain parts of Dokku core store data in this location
Compressing these directories when no Dokku commands are running is enough to ensure a complete backup of the system.
### Code Repositories
Because Dokku is git based, rebuilding a deployed app is as easy as pushing from git. You can push to a new server by updating the `dokku` remote in you local app's repo.
@@ -11,7 +55,14 @@ git remote rm dokku
git remote add dokku dokku@[dokku.me:dokku.me]
git push dokku [master]
```
## Databases
### Docker Image and Tar-based Apps
These applications may fail to rebuild via the normal `ps:rebuild` method. Redeploy these apps by running the original commands used to deploy them
### Datastores
> Please note that point-in-time backups of the `/var/lib/dokku/services` directory may contain partially written data due to how various datastores work. Consult the official datastore documentation for the best documentation surrounding proper backup and restore procedures.
Some plugins, like the official [dokku-postgres](https://github.com/dokku/dokku-postgres) plugin, have built-in commands that allow non-volatile data be exported and imported.
@@ -22,15 +73,26 @@ dokku postgres:export [db_name] > [db_name].dump
dokku postgres:import [db_name] < [db_name].dump
```
## Volumes and Static Assets
Additionally, data for official datastores is located in the `/var/lib/dokku/services` directory. If the directory is restored and the plugin is available, a `dokku $SERVICE:start` may be enough to restart the service with the underlying data, so long as the datastore version does not change and the underlying data is not corrupt. If this is the case, it may be necessary to re-import all the data onto a fresh version of the datastore service.
### Plugins
The plugin directory is contained at the `/var/lib/dokku/plugins` directory. Core plugins will automatically be included in new installs, but custom plugins may not. The aforementioned `tar` creation command will back all plugins up, and the `tar` extract command will restore the plugins.
Note that restoring a plugin will not trigger any `install` or `dependencies` triggers. You will need to run these manually. See the [plugin management documentation](/docs/advanced-usage/plugin-management.md#installing-a-plugin) for more information on how to trigger these two hooks.
### Volumes and Static Assets
Dokku doesn't enforce a [300mb](https://devcenter.heroku.com/articles/slug-compiler#slug-size) limit on apps, but it's best practice to keep binary assets outside of git. Since containers are considered volatile in Dokku, external stores like s3 or storage mounts should be used for non-volatile items like user uploads. The Dokku storage core plugin can be used to mount local directories / volumes inside the docker container.
System administrators are highly encouraged to store persistent data in app-specific subdirectories of the path `/var/lib/dokku/data/storage`. This will help ensure restores of the aforementioned primary Dokku directories will restore service to all apps.
See the [persistent storage documentation](/docs/advanced-usage/persistent-storage.md) for more information on how to attach persistent storage to your application.
## Disaster Recovery
## Recovering app code
The best plan for disaster recovery is to always keep multiple (remote) copies of your local repo, static assets and periodic database dumps. In case of an emergency when your git repo and backups are completely lost, you can recover the last pushed copy from your remote Dokku server (assuming you still have the ssh key).
In case of an emergency when your git repo and backups are completely lost, you can recover the last pushed copy from your remote Dokku server (assuming you still have the ssh key).
```shell
mkdir [app-name] ; cd !$

View File

@@ -2,7 +2,7 @@
> New as of 0.5.0
Sometimes you need to run a command on at deployment time, but before an app is completely deployed. Common use cases include:
Sometimes you need to run a command on deployment time, but before an app is completely deployed. Common use cases include:
* Checking a database is initialized
* Running database migrations
@@ -32,6 +32,8 @@ Each "phase" has different expectations and limitations:
- Priming or invalidating cache stores
- Running database migrations
Additionally, if using a Dockerfile with an `ENTRYPOINT`, the deployment task is passed to that entrypoint as is.
Please keep the above in mind when utilizing deployment tasks.
> To execute commands on the host during a release phase, see the [plugin creation documentation](/docs/development/plugin-creation.md) docs for more information on building your own custom plugin.

View File

@@ -25,6 +25,10 @@ Dokku deploys your application in multiple "phases" and the `docker-options` plu
- `deploy`: the container that executes your running/deployed application
- `run`: the container that executes any arbitrary command via `dokku run`
Manipulation of docker options will not restart running containers. This enables multiple options to be set/unset before final application. As such, changing an app's docker options must be followed by a `dokku ps:rebuild` in order to take effect.
More information on supported Docker options can be found here: https://docs.docker.com/engine/reference/commandline/run/.
## Examples
### Add Docker options
@@ -119,25 +123,3 @@ You can pass flags which will output only the value of the specific information
```shell
dokku docker-options:report node-js-app --docker-options-build
```
## Advanced usage
In your applications folder `/home/dokku/app_name` create a file called `DOCKER_OPTIONS_RUN` (or `DOCKER_OPTIONS_BUILD` or `DOCKER_OPTIONS_DEPLOY`).
Inside this file list one Docker option per line. For example:
```shell
--link container_name:alias
-v /host/path:/container/path
-v /another/container/path
```
The above example will result in the following options being passed to Docker during `dokku run`:
```shell
--link container_name:alias -v /host/path:/container/path -v /another/container/path
```
You may also include comments (lines beginning with a #) and blank lines in the DOCKER_OPTIONS file.
More information on Docker options can be found here: https://docs.docker.com/engine/reference/commandline/run/.

View File

@@ -37,7 +37,7 @@ This example demonstrates how to mount the recommended directory to `/storage` i
dokku storage:mount node-js-app /var/lib/dokku/data/storage/node-js-app:/storage
```
Dokku will then mount the shared contents of `/var/lib/dokku/data/storage` to `/storage` inside the container.
Dokku will then mount the shared contents of `/var/lib/dokku/data/storage/node-js-app` to `/storage` inside the container.
Once you have mounted persistent storage, you will also need to restart the application. See the
[process scaling documentation](/docs/deployment/process-management.md) for more information.

View File

@@ -25,7 +25,9 @@ dokku plugins-install
## Usage
You can list all installed plugins using the `plugin:list` command:
### Listing Plugins
Installed plugins can be listed via the `plugin:list` command:
```shell
dokku plugin:list
@@ -33,45 +35,60 @@ dokku plugin:list
```
plugn: dev
00_dokku-standard 0.21.2 enabled dokku core standard plugin
20_events 0.21.2 enabled dokku core events logging plugin
app-json 0.21.2 enabled dokku core app-json plugin
apps 0.21.2 enabled dokku core apps plugin
build-env 0.21.2 enabled dokku core build-env plugin
buildpacks 0.21.2 enabled dokku core buildpacks plugin
certs 0.21.2 enabled dokku core certificate management plugin
checks 0.21.2 enabled dokku core checks plugin
common 0.21.2 enabled dokku core common plugin
config 0.21.2 enabled dokku core config plugin
docker-options 0.21.2 enabled dokku core docker-options plugin
domains 0.21.2 enabled dokku core domains plugin
enter 0.21.2 enabled dokku core enter plugin
git 0.21.2 enabled dokku core git plugin
logs 0.21.2 enabled dokku core logs plugin
network 0.21.2 enabled dokku core network plugin
nginx-vhosts 0.21.2 enabled dokku core nginx-vhosts plugin
plugin 0.21.2 enabled dokku core plugin plugin
proxy 0.21.2 enabled dokku core proxy plugin
ps 0.21.2 enabled dokku core ps plugin
repo 0.21.2 enabled dokku core repo plugin
resource 0.21.2 enabled dokku core resource plugin
scheduler-docker-local 0.21.2 enabled dokku core scheduler-docker-local plugin
shell 0.21.2 enabled dokku core shell plugin
ssh-keys 0.21.2 enabled dokku core ssh-keys plugin
storage 0.21.2 enabled dokku core storage plugin
tags 0.21.2 enabled dokku core tags plugin
tar 0.21.2 enabled dokku core tar plugin
trace 0.21.2 enabled dokku core trace plugin
00_dokku-standard 0.22.7 enabled dokku core standard plugin
20_events 0.22.7 enabled dokku core events logging plugin
app-json 0.22.7 enabled dokku core app-json plugin
apps 0.22.7 enabled dokku core apps plugin
build-env 0.22.7 enabled dokku core build-env plugin
buildpacks 0.22.7 enabled dokku core buildpacks plugin
certs 0.22.7 enabled dokku core certificate management plugin
checks 0.22.7 enabled dokku core checks plugin
common 0.22.7 enabled dokku core common plugin
config 0.22.7 enabled dokku core config plugin
docker-options 0.22.7 enabled dokku core docker-options plugin
domains 0.22.7 enabled dokku core domains plugin
enter 0.22.7 enabled dokku core enter plugin
git 0.22.7 enabled dokku core git plugin
logs 0.22.7 enabled dokku core logs plugin
network 0.22.7 enabled dokku core network plugin
nginx-vhosts 0.22.7 enabled dokku core nginx-vhosts plugin
plugin 0.22.7 enabled dokku core plugin plugin
proxy 0.22.7 enabled dokku core proxy plugin
ps 0.22.7 enabled dokku core ps plugin
repo 0.22.7 enabled dokku core repo plugin
resource 0.22.7 enabled dokku core resource plugin
scheduler-docker-local 0.22.7 enabled dokku core scheduler-docker-local plugin
shell 0.22.7 enabled dokku core shell plugin
ssh-keys 0.22.7 enabled dokku core ssh-keys plugin
storage 0.22.7 enabled dokku core storage plugin
tags 0.22.7 enabled dokku core tags plugin
tar 0.22.7 enabled dokku core tar plugin
trace 0.22.7 enabled dokku core trace plugin
```
> Warning: All plugin commands other than `plugin:list` and `plugin:help` require sudo access and must be run directly from the Dokku server.
### Checking if a plugin is installed
You can check if a plugin has been installed via the `plugin:installed` command:
```shell
dokku plugin:installed postgres
```
### Installing a 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.
The most common usage is to install a plugin from a url. This url may be any of the following:
- `git`: For git+ssh based plugin repository clones.
- `ssh`: For git+ssh based plugin repository clones.
- `file`: For copying plugins from a path on disk.
- `https`: For http based plugin repository clones.
Additionally, any urls with the extensions `.tar.gz` or `.tgz` are treated as Gzipped Tarballs for installation purposes and will be downloaded and extracted into place.
```shell
dokku plugin:install https://github.com/dokku/dokku-postgres.git
```
@@ -87,7 +104,68 @@ Checking connectivity... done.
-----> Plugin postgres enabled
```
You can also uninstall a third-party plugin using the `plugin:uninstall` command:
For git-based plugin installation, a commit SHA-like object may be specified (tag/branch/commit sha) via the `--committish` argument and Dokku will attempt to install the specified commit object.
```shell
# where 2.0.0 is a potential git tag
dokku plugin:install https://github.com/dokku/dokku-postgres.git --committish 2.0.0
```
Plugin names are interpolated based on the repository name minus the `dokku-` prefix. If the plugin being installed has a name other than what matches the repository name - or another name is desired - the `--name` flag can be used to override this interpolation.
```shell
dokku plugin:install https://github.com/dokku/smoke-test-plugin.git --name smoke-test-plugin
```
The `--core` flag may also be indicated as the sole argument, though it is only for installation of core plugins, and thus not useful for end-user installations.
```shell
dokku plugin:install --core
```
Finally, all flags may be omitted to trigger the `install` procedures for both core and third-party plugins:
```shell
dokku plugin:install
```
### Installing plugin dependencies
In some cases, plugins will have system-level dependencies. These are not automatically installed via `plugin:install`, and must be separately via the `plugin:install-dependencies` command. This will run through all the `dependencies` trigger for all plugins.
```shell
dokku plugin:install-dependencies
```
This command may also target _just_ core plugins via the `--core` flag. This is usually only useful for source-based installs of Dokku.
```shell
dokku plugin:install-dependencies --core
```
### Updating a plugin
An installed, third-party plugin can be updated can updated via the `plugin:update` command. This should be done after any upgrades of Dokku as there may be changes in the internal api that require an update of how the plugin interfaces with Dokku.
Please note that this command is only valid for plugin installs that were backed by a git-repository.
```shell
dokku plugin:update postgres
```
```
Plugin (postgres) updated
```
An optional commit SHA-like object may be specified.
```shell
dokku plugin:update postgres 2.0.0
```
### Uninstalling a plugin
Third party plugins can be uninstalled using the `plugin:uninstall` command:
```shell
dokku plugin:uninstall postgres
@@ -97,7 +175,9 @@ dokku plugin:uninstall postgres
-----> Plugin postgres uninstalled
```
Enabling or disabling a plugin can also be useful in cases where you are debugging whether a third-party plugin is causing issues in your Dokku installation:
### Disabling a plugin
Disabling a plugin can also be useful for debugging whether a third-party plugin is causing issues in a Dokku installation. Another common use case is for disabling core functionality for replacement with a third-party plugin.
```shell
dokku plugin:disable postgres
@@ -107,6 +187,10 @@ dokku plugin:disable postgres
-----> Plugin postgres disabled
```
### Enabling a plugin
Disabled plugins can be re-enabled via the `plugin:enable` command.
```shell
dokku plugin:enable postgres
```
@@ -115,12 +199,10 @@ dokku plugin:enable postgres
-----> Plugin postgres enabled
```
Finally, you can update an installed third-party plugin. This should be done after any upgrades of Dokku as there may be changes in the internal api that require an update of how the plugin interfaces with Dokku.
### Triggering a plugin trigger
The `plugin:trigger` can be used to call any internal plugin trigger. This may have unintended consequences, and thus should only be called for development or debugging purposes.
```shell
dokku plugin:update postgres
```
```
Plugin (postgres) updated
dokku plugin:trigger some-internal-trigger args-go-here
```

View File

@@ -16,7 +16,7 @@ The resource plugin is meant to allow users to limit or reserve resources for a
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.
> Warning: The meaning of a values and it's units are specific to the scheduler in use for a given app. If a value is incorrect for a scheduler, this may result in containers failing to start correctly. 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:

View File

@@ -54,6 +54,10 @@ Dokku will no longer distribute packages for Debian versions that are not `stabl
The `--git-sha` flag was moved from the `apps:report` command to the `git:report` command.
## App report output
When an app is not deployed, the `apps:report` command no longer shows the message `not deployed`. Please use the `--deployed` flag on `ps:report` instead to see if the app has been deployed.
## Changes
### App report flags

View File

@@ -0,0 +1,27 @@
# 0.22.0 Migration Guide
## Deprecations
- Calling `logs:failed` without either a `<name>` or the `--all` flag is deprecated.
## Changes
- Underscores are no longer valid characters in app names. Please rename applications before upgrading.
- Process type names specified in Procfile may no longer use characters not valid in DNS Label Names ([RFC 1123](https://tools.ietf.org/html/rfc1123)).
- The minimum Docker version is now 17.05.0.
- The `common.GetDeployingAppImageName()` function now returns an `error` as the second return argument instead of calling `common.LogFail()` internally.
- Setting `DOKKU_DISABLE_ANSI_PREFIX_REMOVAL` is deprecated; Dokku 0.23.0 will avoid removing the `remote:` ansi prefix entirely. No warning will be added in this release.
## Removals
The `ps` command has had a few removals as a result of a rewrite to Golang:
- The `ps:set-restart-policy` command has been removed in favor the `ps:set` command.
- The `ps:restart-policy` command has been removed in favor of the `ps:report` command.
- The `ps:rebuildall` command has been removed in favor of calling the `ps:rebuild` with the `--all` flag instead of an app name.
- The `ps:restartall` command has been removed in favor of calling the `ps:restart` with the `--all` flag instead of an app name.
- The `ps:stopall` command has been removed in favor of calling the `ps:stop` with the `--all` flag instead of an app name.
- The `ps:startall` command has been removed in favor of calling the `ps:start` with the `--all` flag instead of an app name.
- The `DOKKU_PROCFILE` file is no longer located in the git directory for a given app on the server. It's location is currently not exposed.
- The `procfile-get-command` plugin trigger no longer takes a `procfile path` as the final argument.
- All `ps` functions have been removed. Please us a trigger as appropriate or file a PR to have a new trigger/wrapper function added.

BIN
docs/assets/dokku-large.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

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

View File

@@ -2,37 +2,37 @@
"name": "Dokku",
"icons": [
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.21.2\/docs\/assets\/favicons\/android-chrome-36x36.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.7\/docs\/assets\/favicons\/android-chrome-36x36.png",
"sizes": "36x36",
"type": "image\/png",
"density": "0.75"
},
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.21.2\/docs\/assets\/favicons\/android-chrome-48x48.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.7\/docs\/assets\/favicons\/android-chrome-48x48.png",
"sizes": "48x48",
"type": "image\/png",
"density": "1.0"
},
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.21.2\/docs\/assets\/favicons\/android-chrome-72x72.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.7\/docs\/assets\/favicons\/android-chrome-72x72.png",
"sizes": "72x72",
"type": "image\/png",
"density": "1.5"
},
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.21.2\/docs\/assets\/favicons\/android-chrome-96x96.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.7\/docs\/assets\/favicons\/android-chrome-96x96.png",
"sizes": "96x96",
"type": "image\/png",
"density": "2.0"
},
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.21.2\/docs\/assets\/favicons\/android-chrome-144x144.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.7\/docs\/assets\/favicons\/android-chrome-144x144.png",
"sizes": "144x144",
"type": "image\/png",
"density": "3.0"
},
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.21.2\/docs\/assets\/favicons\/android-chrome-192x192.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.7\/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.21.2/docs/assets/dokku.png);
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/dokku.png);
text-indent: 40px;
}
.blurb {
color: #424242;
background-color: #ededed;
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/gplaypattern.png);
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/gplaypattern.png);
padding: 45px 0;
text-align: center;
}

View File

@@ -18,6 +18,7 @@
"0.18.5",
"0.19.13",
"0.20.4",
"0.21.2"
"0.21.4",
"0.22.7"
]
}

View File

@@ -2,56 +2,11 @@
Given the constraints, running Dokku commands remotely via SSH is fine. For certain configurations, the extra complication of manually invoking ssh can be a burden.
While Dokku does not yet have an official client, there are a multitude of ways in which you can interact with your Dokku installation. The easiest is to use the **bash** client, though you may wish to use another.
The easiest way to interact with Dokku remotely is by using the official client. Documented below are the various clients that you may wish to use.
## (bash, zsh, etc.) `dokku_client.sh`
## Official Client
Of all methods, this is the *most* official method of interacting with your Dokku installation. It is a bash script that interacts with a remote Dokku installation via `ssh`. It is available in `contrib/dokku_client.sh` in the root of the Dokku repository.
It can be installed either via the [Homebrew](https://brew.sh) package manager (macOS only), or manually.
### Installation via Homebrew
To install, simply run the following command:
```shell
brew install dokku/repo/dokku
```
### Manual installation
To install manually, simply clone the Dokku repository down and add the `dokku` alias pointing at the script:
```shell
git clone git@github.com:dokku/dokku.git ~/.dokku
# optional: make sure that the dokku_client.sh version matches your Dokku version
cd ~/.dokku
git checkout <tag/branch>
# add the following to either your
# .bashrc, .bash_profile, or .profile file
alias dokku='$HOME/.dokku/contrib/dokku_client.sh'
```
Alternatively, if using another shell such as **zsh**, create an alias command which invokes the script using **bash**:
```shell
# zsh: add the following to either .zshenv or .zshrc
alias dokku='bash $HOME/.dokku/contrib/dokku_client.sh'
# fish: add the following to ~/.config/fish/config.fish
alias dokku 'bash $HOME/.dokku/contrib/dokku_client.sh'
# csh: add the following to .cshrc
alias dokku 'bash $HOME/.dokku/contrib/dokku_client.sh'
```
### Usage
Configure the `DOKKU_HOST` environment variable or run `dokku` from a repository with a git remote named `dokku` pointed at your Dokku host in order to use the script as normal.
You can also configure a `DOKKU_PORT` environment variable if you are running ssh on a non-standard port. This defaults to `22`.
See the [remote commands documentation](/docs/deployment/remote-commands.md) for more information on how to install and use the official client.
## (nodejs) dokku-toolbelt

View File

@@ -24,23 +24,23 @@ The following plugins are available and provided by Dokku maintainers. Please f
| Plugin | Author | Compatibility |
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
| [CouchDB (beta)](https://github.com/dokku/dokku-couchdb) | [dokku][] | 0.4.0+ |
| [Elasticsearch (beta)](https://github.com/dokku/dokku-elasticsearch-plugin) | [dokku][] | 0.4.0+ |
| [Grafana/Graphite/Statsd (beta)](https://github.com/dokku/dokku-graphite-grafana) | [dokku][] | 0.4.0+ |
| [MariaDB (beta)](https://github.com/dokku/dokku-mariadb-plugin) | [dokku][] | 0.4.0+ |
| [Memcached (beta)](https://github.com/dokku/dokku-memcached-plugin) | [dokku][] | 0.4.0+ |
| [Mongo (beta)](https://github.com/dokku/dokku-mongo-plugin) | [dokku][] | 0.4.0+ |
| [MySQL (beta)](https://github.com/dokku/dokku-mysql-plugin) | [dokku][] | 0.4.0+ |
| [Nats (beta)](https://github.com/dokku/dokku-nats) | [dokku][] | 0.4.0+ |
| [Postgres (beta)](https://github.com/dokku/dokku-postgres-plugin) | [dokku][] | 0.4.0+ |
| [RabbitMQ (beta)](https://github.com/dokku/dokku-rabbitmq-plugin) | [dokku][] | 0.4.0+ |
| [Redis (beta)](https://github.com/dokku/dokku-redis-plugin) | [dokku][] | 0.4.0+ |
| [RethinkDB (beta)](https://github.com/dokku/dokku-rethinkdb-plugin) | [dokku][] | 0.4.0+ |
| [CouchDB](https://github.com/dokku/dokku-couchdb) | [dokku][] | 0.4.0+ |
| [Elasticsearch](https://github.com/dokku/dokku-elasticsearch-plugin) | [dokku][] | 0.4.0+ |
| [Grafana/Graphite/Statsd](https://github.com/dokku/dokku-graphite-grafana) | [dokku][] | 0.4.0+ |
| [MariaDB](https://github.com/dokku/dokku-mariadb-plugin) | [dokku][] | 0.4.0+ |
| [Memcached](https://github.com/dokku/dokku-memcached-plugin) | [dokku][] | 0.4.0+ |
| [Mongo](https://github.com/dokku/dokku-mongo-plugin) | [dokku][] | 0.4.0+ |
| [MySQL](https://github.com/dokku/dokku-mysql-plugin) | [dokku][] | 0.4.0+ |
| [Nats](https://github.com/dokku/dokku-nats) | [dokku][] | 0.4.0+ |
| [Postgres](https://github.com/dokku/dokku-postgres-plugin) | [dokku][] | 0.4.0+ |
| [RabbitMQ](https://github.com/dokku/dokku-rabbitmq-plugin) | [dokku][] | 0.4.0+ |
| [Redis](https://github.com/dokku/dokku-redis-plugin) | [dokku][] | 0.4.0+ |
| [RethinkDB](https://github.com/dokku/dokku-rethinkdb-plugin) | [dokku][] | 0.4.0+ |
| [Copy Files to Image](https://github.com/dokku/dokku-copyfiles-to-image) | [dokku][] | 0.4.0+ |
| [HTTP Auth (beta)](https://github.com/dokku/dokku-http-auth) | [dokku][] | 0.4.0+ |
| [Let's Encrypt (beta)](https://github.com/dokku/dokku-letsencrypt) | [dokku][] | 0.4.0+ |
| [Maintenance mode (beta)](https://github.com/dokku/dokku-maintenance) | [dokku][] | 0.4.0+ |
| [Redirect (beta)](https://github.com/dokku/dokku-redirect) | [dokku][] | 0.4.0+ |
| [HTTP Auth](https://github.com/dokku/dokku-http-auth) | [dokku][] | 0.4.0+ |
| [Let's Encrypt](https://github.com/dokku/dokku-letsencrypt) | [dokku][] | 0.4.0+ |
| [Maintenance mode](https://github.com/dokku/dokku-maintenance) | [dokku][] | 0.4.0+ |
| [Redirect](https://github.com/dokku/dokku-redirect) | [dokku][] | 0.4.0+ |
| [Registry](https://github.com/dokku/dokku-registry) | [dokku][] | 0.12.0+
## Community plugins
@@ -59,6 +59,7 @@ The following plugins are available and provided by Dokku maintainers. Please f
[Aomitayo]: https://github.com/Aomitayo
[apmorton]: https://github.com/apmorton
[artofrawr]: https://github.com/artofrawr
[badsyntax]: https://github.com/badsyntax
[basgys]: https://github.com/basgys
[Benjamin-Dobell]: https://github.com/Benjamin-Dobell
[blag]: https://github.com/blag
@@ -76,6 +77,7 @@ The following plugins are available and provided by Dokku maintainers. Please f
[fermuch]: https://github.com/fermuch
[fgrehm]: https://github.com/fgrehm
[Flink]: https://github.com/Flink
[fomojola]: https://github.com/fomojola
[gdi2290]: https://github.com/gdi2290
[hughfletcher]: https://github.com/hughfletcher
[iamale]: https://github.com/iamale
@@ -199,6 +201,7 @@ The following plugins are available and provided by Dokku maintainers. Please f
| [SSH Hostkeys](https://github.com/cedricziel/dokku-hostkeys-plugin)<sup>3</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+ |
| [Auto Sync](https://github.com/IdeaSynthesis/dokku-autosync)<sup>4</sup> | [fomojola][] | 0.8.1+ |
[217d00a]: https://github.com/dokku/dokku/commit/217d00a1bc47a7e24d8847617bb08a1633025fc7
@@ -208,6 +211,8 @@ The following plugins are available and provided by Dokku maintainers. Please f
<sup>3</sup> Adds the ability to add custom hosts to the containers known_hosts file to be able to ssh them easily (useful with deployment keys)
<sup>4</sup> Adds the ability to sync an application repo with a remote Github repo (useful for automated rebuilds without needing a git push from an external system).
### Other Plugins
| Plugin | Author | Compatibility |
@@ -242,6 +247,7 @@ The following plugins are available and provided by Dokku maintainers. Please f
| [Access](https://github.com/mainto/dokku-access) | [mainto](https://github.com/mainto) | 0.4.0+ |
| [Dokku Nginx Trust Proxy](https://github.com/kingsquare/dokku-nginx-vhost-trustproxy) | [kingsquare](https://github.com/kingsquare) | 0.4.0+ |
| [Fonts](https://github.com/ollej/dokku-fonts) | [ollej] | 0.19.11+ |
| [Discourse](https://github.com/badsyntax/dokku-discourse) | [badsyntax][] | 0.21.4+ |
### Deprecated Plugins
@@ -298,9 +304,7 @@ The following plugins are no longer maintained by their developers.
| [CouchDB (multi containers)](https://github.com/Flink/dokku-couchdb-multi-containers) | [Flink][] | 0.4.0+ |
| [CouchDB](https://github.com/racehub/dokku-couchdb-plugin) | [RaceHub][] | Compatible with 0.2.0 |
| [Dokku Copy App Config Files](https://github.com/alexkruegger/dokku-app-configfiles) | [alexkruegger][] | Compatible with 0.3.17+ |
|
| [Dokku Registry](https://github.com/agco-adm/dokku-registry) | [agco-adm][] | 0.4.0+
|
| [Dokku Registry](https://github.com/agco-adm/dokku-registry) | [agco-adm][] | 0.4.0+
| [Elasticsearch](https://github.com/robv/dokku-elasticsearch) | [robv][] | Not compatible with >= 0.3.0 (still uses /home/git) |
| [Elasticsearch](https://github.com/blag/dokku-elasticsearch-plugin)<sup>1</sup> | [blag][] | Compatible with 0.2.0 |
| [Graphite/statsd](https://github.com/jlachowski/dokku-graphite-plugin) | [jlachowski][] | < 0.4.0 |

View File

@@ -1,108 +0,0 @@
# Deploying with Gitlab CI
Gitlab-CI can be used to automatically deploy a Dokku application using the [ilyasemenov/gitlab-ci-git-push image](https://github.com/IlyaSemenov/gitlab-ci-git-push) docker image.
## Prerequisites
Make sure you have a Gitlab account and a Dokku project hosted on Gitlab. This method works whether if you are using buildpacks or Dockerfile.
Make sure you have set up an app on the remote machine following [these instructions](http://dokku.viewdocs.io/dokku/deployment/application-deployment/) and can successfully deploy to it from the local machine.
## Deploy automatically to production
### Add a secret variable
Browse to the repository in question and visit the following path: `the Gitlab project > Settings > CI/CD.`
Click on `Secret variables > Expand` and fill in the blanks.
- Key: `SSH_PRIVATE_KEY`
- Value: paste in an SSH private key registered in Dokku:
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
- Environment scope: `production` (This make sure that `SSH_PRIVATE_KEY` is not available on merge requests or tests)
- Protected: Do not check this checkbox unless you know what you are doing
### Add CI script
Create a file named `.gitlab-ci.yml` at the root directory of the repository with the following contents:
```yaml
stages:
- deploy
variables:
APP_NAME: node-js-app
deploy:
image: ilyasemenov/gitlab-ci-git-push
stage: deploy
environment:
name: production
url: https://$APP_NAME.dokku.me/
only:
- master
script:
- git-push ssh://dokku@dokku.me:22/$APP_NAME
```
You will need to modify the `APP_NAME` variable to the correct value for your application name.
Running `git push origin master` will now trigger a gitlab-ci pipeline that will automatically deploy your application to your Dokku server. Go to your project on Gitlab and visit "Project > Pipelines" to see the deployment log.
## Review Applications
One useful feature of gitlab is to be able to create review applications for non-production branches. This allows teams to review changes _before_ they are pushed to production. First, recreate the `SSH_PRIVATE_KEY` secret - do not delete the existing secret - but scoped to the `review/*` environment. This will allow non-production gitlab environments access to the secret.
Next, we'll need to create the `review_app` gitlab job in our `.gitlab-ci.yaml`.
```yaml
review_app:
image: ilyasemenov/gitlab-ci-git-push
stage: deploy
environment:
name: review/$CI_COMMIT_REF_NAME
url: https://$CI_ENVIRONMENT_SLUG.dokku.me/
on_stop: stop_review_app
only:
- branches
except:
- master
script:
- mkdir -p ~/.ssh && echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H 22 "dokku.me" >> ~/.ssh/known_hosts
- ssh -t dokku@dokku.me -- apps:clone --ignore-existing --skip-deploy "$APP_NAME" "$CI_ENVIRONMENT_SLUG"
- git-push ssh://dokku@dokku.me:22/$CI_ENVIRONMENT_SLUG
```
The first two lines ensure that Gitlab can talk to the Dokku server. Next, we take advantage of the `apps:clone` command, and clone the existing application and all of it's configuration to a new location. If the new application already exists, the third line of the `script` step will be ignored. We also ignore the first deploy script to speed up the cloning process. Finally, the fourth line of the `script` step will deploy the code as normal.
The above only runs for non-master branches, and will _also_ trigger an `on_stop` job called `stop_review_app`. When the branch is deleted or the code is merged, the `stop_review_app` job will be triggered.
```yaml
stop_review_app:
image: ilyasemenov/gitlab-ci-git-push
stage: deploy
variables:
GIT_STRATEGY: none
environment:
name: review/$CI_COMMIT_REF_NAME
action: stop
when: manual
script:
- mkdir -p ~/.ssh && echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H 22 "dokku.me" >> ~/.ssh/known_hosts
- ssh -t dokku@dokku.me -- --force apps:destroy "$CI_ENVIRONMENT_SLUG"
```
The `stop_review_app` step will delete the temporary application, cleaning up now unused server resources.
Going further, the following modifications can be done:
- Notify via chat whenever a review application is created/destroyed.
- Push to a separate, staging server as opposed to a production server.
- Clone a "staging" application so that review applications do not affect production datasets.

View File

@@ -36,7 +36,7 @@ Move the data on the volume
```shell
mkdir /mnt/volume/home/
mkdir /mnt/volume/var/lib/
mkdir -p /mnt/volume/var/lib/
mv /home/dokku.OLD /mnt/volume/home/dokku
mv /var/lib/dokku.OLD /mnt/volume/var/lib/dokku
mv /var/lib/docker.OLD /mnt/volume/var/lib/docker

View File

@@ -71,7 +71,7 @@ dokku config:export --format shell node-js-app
## Special Config Variables
The following config variables have special meanings and can be set in a variety of ways.
The following config variables have special meanings and can be set in a variety of ways. Unless specified via global app config, the values may not be passed into applications. Usage of these values within applications should be considered unsafe, as they are an internal configuration values that may be moved to the internal properties system in the future.
> Warning: This list is not exhaustive, and may vary from version to version.
@@ -87,6 +87,7 @@ The following config variables have special meanings and can be set in a variety
| `PLUGIN_CORE_AVAILABLE_PATH` | `$PLUGIN_CORE_PATH/available"` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | The directory that stores all available core plugins. |
| `PLUGIN_CORE_ENABLED_PATH` | `$PLUGIN_CORE_PATH/enabled"` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | The directory that stores all enabled core plugins. |
| `DOKKU_LOGS_DIR` | `/var/log/dokku` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | Where dokku logs should be written to. |
| `DOKKU_LOGS_HOST_DIR` | `$DOKKU_LOGS_DIR` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | A path on the host that will be mounted into the vector logging container. |
| `DOKKU_EVENTS_LOGFILE` | `$DOKKU_LOGS_DIR/events.log` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | Where the events log file is written to. |
| `DOKKU_APP_NAME` | none | `--app APP` flag | Name of application to work on. Respected by core plugins. |
| `DOKKU_APPS_FORCE_DELETE` | none | `--force` flag | Whether to force delete an application. Also used by other plugins for destructive actions. |
@@ -110,9 +111,7 @@ The following config variables have special meanings and can be set in a variety
| `DOKKU_DISABLE_ANSI_PREFIX_REMOVAL` | none | `dokku config:set` <br /> `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | Disables removal of the ANSI prefix during deploys. Can be used in cases where the client deployer does not understand ansi escape codes. |
| `DOKKU_DISABLE_APP_AUTOCREATION` | none | `dokku config:set` | Disables automatic creation of a non-existent app on deploy. |
| `DOKKU_DOCKER_STOP_TIMEOUT` | `10` | `dokku config:set` | 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_DOCKERFILE_CMD` | dockerfile cmd | `dokku config:set` | |
| `DOKKU_DOCKERFILE_CACHE_BUILD` | none | `dokku config:set` | |
| `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 |

View File

@@ -11,7 +11,15 @@ nginx:show-config <app> # Display app nginx config
nginx:validate-config [<app>] [--clean] # Validates and optionally cleans up invalid nginx configurations
```
## Binding to specific addresses
## Usage
### Request Proxying
By default, the `web` process is the only process proxied by the nginx proxy implementation. Proxying to other process types may be handled by a custom `nginx.conf.sigil` file, as generally described [below](/docs/configuration/nginx.md#customizing-the-nginx-configuration)
Nginx will proxy the requests in a [round-robin balancing fashion](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream) to the different deployed (scaled) containers running the `web` proctype. This way, the host's resources can be fully leveraged for single-threaded applications (e.g. `dokku ps:scale node-js-app web=4` on a 4-core machine)
### Binding to specific addresses
> New as of 0.19.2
@@ -33,7 +41,7 @@ dokku nginx:set node-js-app bind-address-ipv6
Users with apps that contain a custom `nginx.conf.sigil` file will need to modify the files to respect the new `NGINX_BIND_ADDRESS_IPV4` and `NGINX_BIND_ADDRESS_IPV6` variables.
## HSTS Header
### HSTS Header
> New as of 0.20.0
@@ -53,7 +61,7 @@ The following options are also available via the `nginx:set` command:
Beware that if you enable the header and a subsequent deploy of your application results in an HTTP deploy (for whatever reason), the way the header works means that a browser will not attempt to request the HTTP version of your site if the HTTPS version fails until the max-age is reached.
## Checking access logs
### Checking access logs
You may check nginx access logs via the `nginx:access-logs` command. This assumes that app access logs are being stored in `/var/log/nginx/$APP-access.log`, as is the default in the generated `nginx.conf`.
@@ -67,7 +75,7 @@ You may also follow the logs by specifying the `-t` flag.
dokku nginx:access-logs node-js-app -t
```
## Checking error logs
### Checking error logs
You may check nginx error logs via the `nginx:access-logs` command. This assumes that app error logs are being stored in `/var/log/nginx/$APP-error.log`, as is the default in the generated `nginx.conf`.
@@ -81,7 +89,7 @@ You may also follow the logs by specifying the `-t` flag.
dokku nginx:error-logs node-js-app -t
```
## Changing log path
### Changing log path
> New as of 0.20.1
@@ -106,7 +114,17 @@ dokku nginx:set node-js-app error-log-path
In all cases, the nginx config must be regenerated after setting the above values.
## Specifying a read timeout
### Changing log format
> New as of 0.22.0
The format of the access log can be changed by calling the `nginx:set` command as follows:
```shell
dokku nginx:set node-js-app access-log-format custom
```
### Specifying a read timeout
> New as of 0.21.0
@@ -126,7 +144,7 @@ dokku nginx:set node-js-app proxy-read-timeout
In all cases, the nginx config must be regenerated after setting the above value.
## Showing the nginx config
### Showing the nginx config
For debugging purposes, it may be useful to show the nginx config. This can be achieved via the `nginx:show-config` command.
@@ -134,7 +152,7 @@ For debugging purposes, it may be useful to show the nginx config. This can be a
dokku nginx:show-config node-js-app
```
## Validating nginx configs
### Validating nginx configs
It may be desired to validate an nginx config outside of the deployment process. To do so, run the `nginx:validate-config` command. With no arguments, this will validate all app nginx configs, one at a time. A minimal wrapper nginx config is generated for each app's nginx config, upon which `nginx -t` will be run.
@@ -158,7 +176,7 @@ The `--clean` flag may also be specified for a given app:
dokku nginx:validate-config node-js-app --clean
```
## Customizing the nginx configuration
### Customizing the nginx configuration
> New as of 0.5.0
@@ -166,14 +184,28 @@ Dokku uses a templating library by the name of [sigil](https://github.com/glider
- Copy the following example template to a file named `nginx.conf.sigil` and either:
- If using a buildpack application, you __must__ check it into the root of your app repo.
- `ADD` it to your dockerfile `WORKDIR`
- if your dockerfile has no `WORKDIR`, `ADD` it to the `/app` folder
- If using a dockerfile or docker image for deploys, either:
- If `WORKDIR` is specified, add the file to the `WORKDIR` specified in the last Dockerfile stage (example: `WORKDIR /app` and `ADD nginx.conf.sigil /app`).
- If no `WORKDIR` is specified, add the file to the root (`/`) of the docker image (example: `ADD nginx.conf.sigil /`).
> When using a custom `nginx.conf.sigil` file, depending upon your application configuration, you *may* be exposing the file externally. As this file is extracted before the container is run, you can, safely delete it in a custom `entrypoint.sh` configured in a Dockerfile `ENTRYPOINT`.
> The default template is available [here](https://github.com/dokku/dokku/blob/master/plugins/nginx-vhosts/templates/nginx.conf.sigil), and can be used as a guide for your own, custom `nginx.conf.sigil` file. Please refer to the appropriate template file version for your Dokku version.
### Available template variables
While enabled by default, using a custom nginx config can be disabled via `nginx:set`. This may be useful in cases where you do not want to allow users to override any higher-level customization of app nginx config.
```shell
# enable fetching custom config (default)
dokku nginx:set node-js-app disable-custom-config false
# disable fetching custom config
dokku nginx:set node-js-app disable-custom-config true
```
Unsetting this value is the same as enabling custom nginx config usage.
#### Available template variables
```
{{ .APP }} Application name
@@ -193,7 +225,7 @@ Finally, each process type has it's network listeners - a list of IP:PORT pairs
> Note: Application config variables are available for use in custom templates. To do so, use the form of `{{ var "FOO" }}` to access a variable named `FOO`.
### Customizing via configuration files included by the default templates
#### Customizing via configuration files included by the default templates
The default nginx.conf template will include everything from your apps `nginx.conf.d/` subdirectory in the main `server {}` block (see above):
@@ -215,7 +247,7 @@ The example above uses additional configuration files directly on the Dokku host
For PHP Buildpack users, you will also need to provide a `Procfile` and an accompanying `nginx.conf` file to customize the nginx config *within* the container. The following are example contents for your `Procfile`
web: vendor/bin/heroku-php-nginx -C nginx.conf -i php.ini php/
Your `nginx.conf` file - not to be confused with Dokku's `nginx.conf.sigil` - would also need to be configured as shown in this example:
client_max_body_size 50m;
@@ -226,7 +258,7 @@ Your `nginx.conf` file - not to be confused with Dokku's `nginx.conf.sigil` - wo
Please adjust the `Procfile` and `nginx.conf` file as appropriate.
## Custom Error Pages
### Custom Error Pages
By default, Dokku provides custom error pages for the following three categories of errors:
@@ -236,7 +268,7 @@ By default, Dokku provides custom error pages for the following three categories
These are provided as an alternative to the generic Nginx error page, are shared for _all_ applications, and their contents are located on disk at `/var/lib/dokku/data/nginx-vhosts/dokku-errors`. To customize them for a specific app, create a custom `nginx.conf.sigil` as described above and change the paths to point elsewhere.
## Default site
### Default site
By default, Dokku will route any received request with an unknown HOST header value to the lexicographically first site in the nginx config stack. If this is not the desired behavior, you may want to add the following configuration to the global nginx configuration.
@@ -280,34 +312,36 @@ The configuration file must be loaded before `/etc/nginx/conf.d/dokku.conf`, so
Alternatively, you may push an app to your Dokku host with a name like "00-default". As long as it lists first in `ls /home/dokku/*/nginx.conf | head`, it will be used as the default nginx vhost.
## Domains plugin
## Other
### Domains plugin
See the [domain configuration documentation](/docs/configuration/domains.md) for more information on how to configure domains for your app.
## Customizing hostnames
### Customizing hostnames
See the [customizing hostnames documentation](/docs/configuration/domains.md#customizing-hostnames) for more information on how to configure domains for your app.
## Disabling VHOSTS
### Disabling VHOSTS
See the [disabling vhosts documentation](/docs/configuration/domains.md#disabling-vhosts) for more information on how to disable domain usage for your app.
## Running behind a load balancer
### Running behind a load balancer
See the [load balancer documentation](/docs/configuration/ssl.md#running-behind-a-load-balancer) for more information on how to configure your nginx config for running behind a network load balancer.
## SSL Configuration
### SSL Configuration
See the [ssl documentation](/docs/configuration/ssl.md) for more information on how to configure SSL certificates for your application.
## Disabling Nginx
### Disabling Nginx
See the [proxy documentation](/docs/advanced-usage/proxy-management.md) for more information on how to disable nginx as the proxy implementation for your app.
## Managing Proxy Port mappings
### Managing Proxy Port mappings
See the [proxy documentation](/docs/advanced-usage/proxy-management.md#proxy-port-mapping) for more information on how to manage ports proxied for your app.
## Regenerating nginx config
### Regenerating nginx config
See the [proxy documentation](/docs/advanced-usage/proxy-management.md#regenerating-proxy-config) for more information on how to rebuild the nginx proxy configuration for your app.

View File

@@ -1,6 +1,6 @@
# Deploying to Dokku
> 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.
> Note: This walkthrough uses the hostname `dokku.me` in commands. When deploying to your own server, you should substitute the domain `dokku.me` for the domain name or IP address associated with your server. Users of the Vagrant VM included with Dokku can use `dokku.me` which points to the IP of the VM.
## Deploy tutorial
@@ -62,7 +62,7 @@ Now you can deploy the `ruby-getting-started` app to your Dokku server. All you
# the remote username *must* be dokku or pushes will fail
cd ruby-getting-started
git remote add dokku dokku@dokku.me:ruby-getting-started
git push dokku master
git push dokku main:master
```
> Note: Some tools may not support the short-upstream syntax referenced above, and you may need to prefix
@@ -71,7 +71,7 @@ git push dokku master
> 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:
After running `git push dokku main:master`, you should have output similar to this in your terminal:
```
Counting objects: 231, done.
@@ -102,7 +102,8 @@ Once the deploy is complete, the application's web URL will be generated as abov
Dokku supports deploying applications in a few ways:
- [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) via [Herokuish](https://github.com/gliderlabs/herokuish#buildpacks): See the [buildpacks documentation](/docs/deployment/methods/buildpacks.md) to learn about the different ways to specify a buildpack.
- [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) via [Herokuish](https://github.com/gliderlabs/herokuish#buildpacks): See the [herokuish buildpacks documentation](/docs/deployment/methods/herokuish-buildpacks.md) to learn about the different ways to specify a buildpack.
- This is the default method used by Dokku.
- [Dockerfile](https://docs.docker.com/reference/builder/): See the [dockerfile documentation](/docs/deployment/methods/dockerfiles.md) to learn about the different ways to configure Dockerfile-based deploys.
- [Docker Image](https://docs.docker.com/get-started/overview/#docker-objects): See the [docker image documentation](/docs/deployment/methods/images.md) to learn about how to deploy a Docker Image.
@@ -146,8 +147,9 @@ If you do not enter a fully qualified domain name when pushing your app, Dokku d
```shell
# from your local machine
# the remote username *must* be dokku or pushes will fail
# the below example assumes your app server domain or IP is dokku.me. Push in the form of: dokku@{serveripordomain}:{dokkuappname}
git remote add dokku dokku@dokku.me:ruby-getting-started
git push dokku master
git push dokku main:master
```
```
@@ -161,7 +163,7 @@ You can also specify the fully qualified name as follows:
# from your local machine
# the remote username *must* be dokku or pushes will fail
git remote add dokku dokku@dokku.me:app.dokku.me
git push dokku master
git push dokku main:master
```
```
@@ -175,7 +177,7 @@ This is useful when you want to deploy to the root domain:
# from your local machine
# the remote username *must* be dokku or pushes will fail
git remote add dokku dokku@dokku.me:dokku.me
git push dokku master
git push dokku main:master
```
... deployment ...
@@ -211,7 +213,7 @@ See the [image tagging documentation](/docs/deployment/methods/images.md) for mo
## Specifying a custom buildpack
See the [buildpack documentation](/docs/deployment/methods/buildpacks.md) for more information on how to specify a set of custom buildpacks for your application.
See the [herokuish buildpack documentation](/docs/deployment/methods/herokuish-buildpacks.md) for more information on how to specify a set of custom buildpacks for your application.
## Removing a deployed app

View File

@@ -244,13 +244,15 @@ dokku apps:report
```
```
=====> node-js-app
=====> node-js-app app information
App dir: /home/dokku/node-js-app
App deploy source: git
App locked: false
=====> python-sample
not deployed
=====> ruby-sample
=====> python-sample app information
App dir: /home/dokku/python-sample
App deploy source:
App locked: false
=====> ruby-sample app information
App dir: /home/dokku/ruby-sample
App deploy source: git
App locked: false
@@ -263,7 +265,7 @@ dokku apps:report node-js-app
```
```
=====> node-js-app
=====> node-js-app app information
App dir: /home/dokku/node-js-app
App deploy source: git
App locked: false

View File

@@ -0,0 +1,25 @@
# Generic CI/CD Integration
In cases where there is no direct or documented integration available, the Dokku project provides an [Official Docker Image](https://github.com/dokku/ci-docker-image) for use in Continuous Integration/Continuous Deployment (CI/CD) systems.
Assuming a Docker image can be run as a CI task with environment variables injected, the following CI systems will have their variables automatically detected:
- [circleci](https://circleci.com/)
- [cloudbees](https://www.cloudbees.com/)
- [drone](https://www.drone.io/)
- [github actions](https://github.com/features/actions)
- [gitlab-ci](https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/)
- [semaphoreci](https://semaphoreci.com/)
- [travisci](https://travis-ci.com/)
## Simple Usage
The simplest usage of the image is as follows.
```shell
# where the `.env` file contains `GIT_REMOTE_URL` and `SSH_PRIVATE_KEY`
docker run --rm -v="$PWD:/app" --env-file=.env dokku/ci-docker-image dokku-deploy
```
For more configuration examples and further documentation, see the [ci-docker-image](https://github.com/dokku/ci-docker-image) readme.

View File

@@ -0,0 +1,31 @@
# Github Actions
The Dokku project has an official Githb Action available on the [Github Marketplace](https://github.com/marketplace/actions/dokku). The simplest usage example is as follows:
```yaml
---
name: 'deploy'
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Cloning repo
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Push to dokku
uses: dokku/github-action@v1
with:
git_remote_url: 'ssh://dokku@dokku.me:22/appname'
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}
```
For further usage documentation and other advanced examples, see the entry on the [Github Marketplace](https://github.com/marketplace/actions/dokku).

View File

@@ -0,0 +1,25 @@
# Gitlab CI
Gitlab-CI can be used to automatically deploy a Dokku application via the official the [dokku/ci-docker-image](https://github.com/dokku/ci-docker-image). The simplest example is as follows:
```
---
image: dokku/ci-docker-image
stages:
- deploy
variables:
GIT_DEPTH: 0
deploy:
stage: deploy
only:
- master
variables:
GIT_REMOTE_URL: ssh://dokku@dokku.me:22/appname
script: dokku-deploy
after_script: dokku-unlock
```
For further usage documentation and other advanced examples, see Dokku's [gitlab-ci](https://github.com/dokku/gitlab-ci) repository.

View File

@@ -2,7 +2,12 @@
```
logs <app> [-h] [-t] [-n num] [-q] [-p process] # Display recent log output
logs:failed [<app>] # Shows the last failed deploy logs
logs:failed [--all|<app>] # Shows the last failed deploy logs
logs:report [<app>] [<flag>] # Displays a logs report for one or more apps
logs:set [--global|<app>] <key> <value> # Set or clear a logs property for an app
logs:vector-logs [--num num] [--tail] # Display vector log output
logs:vector-start # Start the vector logging container
logs:vector-stop # Stop the vector logging container
```
## Usage
@@ -40,14 +45,105 @@ will show logs continually from the web process.
In some cases, it may be useful to retrieve the logs from a previously failed deploy.
You can retrieve these logs by using the `logs:failed` command
You can retrieve these logs by using the `logs:failed` command.
```shell
dokku logs:failed node-js-app
```
You can also retrieve the failed logs for each app:
You may also fetch all failed app logs by using the `--all` flag.
```shell
dokku logs:failed node-js-app
dokku logs:failed --all
```
### Vector Logging Shipping
> New as of 0.22.6
Vector is an open-source, lightweight and ultra-fast tool for building observability pipelines. Dokku integrates with it for shipping container logs for the `docker-local` scheduler. Users may configure log-shipping on a per-app or global basis, neither of which interfere with the `dokku logs` commands.
#### Starting the Vector container
> Warning: While the default vector image may be updated over time, this will not impact running vector containers. Users are encouraged to view any Dokku and Vector changelogs to ensure their system will continue running as expected.
Vector may be started via the `logs:vector-start` command.
```shell
dokku logs:vector-start
```
This will start a new container named `vector` with Dokku's vector config mounted and ready for use. If a running container already exists, this command will do nothing. Additionally, if a container exists but is not running, this command will attempt to start the container.
While the default vector image is hardcoded, users may specify an alternative via the `--vector-image` flag:
```shell
dokku logs:vector-start --vector-image timberio/vector:latest-debian
```
The `vector` container will be started with the following volume mounts:
- `/var/lib/dokku/data/logs/vector.json:/etc/vector/vector.json`
- `/var/run/docker.sock:/var/run/docker.sock`
- `/var/log/dokku/apps:/var/log/dokku/apps`
The final volume mount - `/var/log/dokku/apps` - may be used for users that wish to ship logs to a file on disk that may be later logrotated. This directory is owned by the `dokku` user and group, with permissions set to `0755`. At this time, log-rotation is not configured for this directory.
#### Stopping the Vector container
Vector may be stopped via the `logs:vector-stop` command.
```shell
dokku logs:vector-stop
```
The `vector` container will be stopped and removed from the system. If the container is not running, this command will do nothing.
#### Configuring a log sink
Vector uses the concept of log "sinks" to send logs to a given endpoint. Log sinks may be configured globally or on a per-app basis by specifying a `vector-sink` in DSN form with the `logs:set` command. Specifying a sink value will reload any running vector container.
```shell
# setting the sink value in quotes is encouraged to avoid
# issues with ampersand encoding in shell commands
dokku logs:set node-js-app sink "console://?encoding[codec]=json"
```
A sink may be removed by setting an empty value, which will also reload the running vector container.
```shell
dokku logs:set node-js-app vector-sink
```
Only one sink may be specified on a per-app basis at a given time.
Log sinks can also be specified globally by specifying the `--global` flag to `logs:set` with no app name specified:
```shell
dokku logs:set --global vector-sink "console://?encoding[codec]=json"
```
As with app-specific sink settings, the global value may also be cleared by setting no value.
```shell
dokku logs:set --global vector-sink
```
##### Log Sink DSN Format
The DSN form of a sink is as follows:
```
SINK_TYPE://?SINK_OPTIONS
```
Valid values for `SINK_TYPE` include all log vector log sinks, while `SINK_OPTIONS` is a query-string form for the sink's options. The following is a short description on how to set various values:
- `bool`: form: `key=bool`
- `string`: form: `key=string`
- `int`: form: `key=int`
- `[string]`: form: `key[]=string`
- `[int]`: form: `key[]=int`
- `table`: form: `option[key]=value
Please read the [sink documentation](https://vector.dev/docs/reference/sinks/) for your sink of choice to configure the sink as desired.

View File

@@ -0,0 +1,35 @@
# Cloud Native Buildpacks (Experimental)
> New as of 0.22.0
Cloud Native Buildpacks are an evolution over the Buildpacks technology provided by the Herokuish builder. See the [herokuish buildpacks documentation](/docs/deployment/methods/herokuish.md) for more information on how to clear buildpack build cache for an application.
> Warning: This functionality uses the `pack` cli from the [Cloud Native Buildpacks](https://buildpacks.io) project to build apps. As the integration is experimental in Dokku, it is likely to change over time.
## Usage
To use this builder instead of either `Dockerfile` or `herokuish`, you must set the `DOKKU_CNB_EXPERIMENTAL` environment variable for your app to `1`.
```shell
dokku config:set --no-restart node-js-app DOKKU_CNB_EXPERIMENTAL=1
```
The `pack` cli tool is not included by default with Dokku or as a dependency. It must also be installed as shown on [this page](https://buildpacks.io/docs/tools/pack/).
Builds will proceed with the `pack` cli for the app from then on.
## Caveats
As this functionality is highly experimental, there are a number of caveats. Please note that not all issuesare listed below.
- The `heroku/buildpacks:latest` CNB builder is currently enforced. Specifying specific builders is not currently possible.
- A future release will allow modifying the chosen builder.
- Specifying specific buildpacks is not currently possible.
- A future release will add support for the `buildpacks` plugin.
- There is currently no way to specify extra arguments for `pack` cli invocations.
- A future release will add support for injecting extra arguments during the build process.
- The default process type is `web`.
- Build cache is stored in Docker volumes instead of on disk. As such, `repo:purge-cache` currently has no effect.
- A future version will add integration with the `repo` plugin.
- `pack` is not currently included with Dokku, nor is it added as a package dependency.
- A future version will include it as a package dependency.

View File

@@ -65,6 +65,10 @@ ENV NODE_ENV ${NODE_ENV}
RUN echo $NODE_ENV
```
## Building images with Docker Buildkit
If your Dockerfile is using Docker engine's [buildkit](https://docs.docker.com/develop/develop-images/build_enhancements/) (not to be confused with buildpacks), then the `DOCKER_BUILDKIT=1` environment variable needs to be set. One way to do this is to edit `/etc/environment` on your dokku host and reboot your instance. Note, for complete build log output, you should also set `BUILDKIT_PROGRESS=plain` in the same file.
## 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 Node.js image, with the following `ENTRYPOINT`:

View File

@@ -8,7 +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:
- [Cloud Native Buildpacks](/docs/deployment/methods/cloud-native-buildpacks.md)
- [Herokuish Buildpack](/docs/deployment/methods/herokuish-buildpacks.md)
- [Dockerfiles](/docs/deployment/methods/dockerfiles.md)
## Usage

View File

@@ -1,4 +1,4 @@
# Buildpack Deployment
# Herokuish Buildpack Deployment
> Subcommands new as of 0.15.0
@@ -164,7 +164,7 @@ dokku buildpacks:report node-js-app --buildpacks-list
If an application was previously deployed via Dockerfile, the following commands should be run before a buildpack deploy will succeed:
```shell
dokku config:unset --no-restart node-js-app DOKKU_DOCKERFILE_CMD DOKKU_DOCKERFILE_ENTRYPOINT DOKKU_PROXY_PORT_MAP
dokku config:unset --no-restart node-js-app DOKKU_PROXY_PORT_MAP
```
### Using a specific buildpack version

View File

@@ -3,73 +3,110 @@
> New as of 0.3.14, Enhanced in 0.7.0
```
ps:inspect <app> # Displays a sanitized version of docker inspect for an app
ps:rebuild <app> # Rebuild an app from source
ps:rebuildall # Rebuild all apps from source
ps:report [<app>] [<flag>] # Displays a process report for one or more apps
ps:restart <app> # Restart app container(s)
ps:restart-policy <app> # Shows the restart-policy for an app
ps:restartall # Restart all deployed app containers
ps:scale <app> <proc>=<count> [<proc>=<count>] # Get/Set how many instances of a given process to run
ps:set-restart-policy <app> <policy> # Sets app restart-policy
ps:start <app> # Start app container(s)
ps:startall # Start all deployed app containers
ps:stop <app> # Stop app container(s)
ps:stopall # Stop all app container(s)
ps:inspect <app> # Displays a sanitized version of docker inspect for an app
ps:rebuild [--parallel count] [--all|<app>] # Rebuilds an app from source
ps:report [<app>] [<flag>] # Displays a process report for one or more apps
ps:restart [--parallel count] [--all|<app>] # Restart an app
ps:restore [<app>] # Start previously running apps e.g. after reboot
ps:scale [--skip-deploy] <app> <proc>=<count> [<proc>=<count>...] # Get/Set how many instances of a given process to run
ps:set <app> <key> <value> # Set or clear a ps property for an app
ps:start [--parallel count] [--all|<app>] # Start an app
ps:stop [--parallel count] [--all|<app>] # Stop an app
```
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.
## Usage
### Inspecting app containers
> New as of 0.13.0
A common administrative task to perform is calling `docker inspect` on the containers that are running for an application. This can be an error-prone task to perform, and may also reveal sensitive environment variables if not done correctly. Dokku provides a wrapper around this command via the `ps:inspect` command:
A common administrative task to perform is calling `docker inspect` on the containers that are running for an app. This can be an error-prone task to perform, and may also reveal sensitive environment variables if not done correctly. Dokku provides a wrapper around this command via the `ps:inspect` command:
```shell
dokku ps:inspect node-js-app
```
This command will gather all the running container IDs for your application and call `docker inspect`, sanitizing the output data so it can be copy-pasted elsewhere safely.
This command will gather all the running container IDs for your app and call `docker inspect`, sanitizing the output data so it can be copy-pasted elsewhere safely.
### Rebuilding applications
### Rebuilding apps
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`
> Warning: This section applies only to git-based deploys, and only works deterministically for these apps. 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 apps.
It may be useful to rebuild an app at will, such as for commands that do not rebuild an app or when skipping a rebuild after setting multiple config values. For these use cases, the `ps:rebuild` function can be used.
```shell
dokku ps:rebuild node-js-app
```
You may also rebuild all applications at once, which is useful when enabling/disabling a plugin that modifies all applications:
All apps may be rebuilt by using the `--all` flag.
```shell
dokku ps:rebuildall
dokku ps:rebuild --all
```
> 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
> the [images documentation](/docs/deployment/methods/images.md) and [tar documentation](/docs/deployment/methods/tar.md)
> in for more information concerning rebuilding those applications.
By default, rebuilding all apps happens serially. The parallelism may be controlled by the `--parallel` flag.
### Restarting applications
```shell
dokku ps:rebuild --all --parallel 2
```
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.
Finally, the number of parallel workers may be automatically set to the number of CPUs available by setting the `--parallel` flag to `-1`
```shell
dokku ps:rebuild --all --parallel -1
```
A missing linked container will result in failure to boot apps. Services should all be started for apps being rebuilt.
### Restarting apps
An app may be restarted using the `ps:restart` command.
```shell
dokku ps:restart node-js-app
```
You may also trigger a restart on all applications at one time:
All apps may be restarted by using the `--all` flag.
```shell
dokku ps:restartall
dokku ps:restart --all
```
### `ps:scale` command
By default, restarting all apps happens serially. The parallelism may be controlled by the `--parallel` flag.
```shell
dokku ps:restart --all --parallel 2
```
Finally, the number of parallel workers may be automatically set to the number of CPUs available by setting the `--parallel` flag to `-1`
```shell
dokku ps:restart --all --parallel -1
```
A missing linked container will result in failure to boot apps. Services should all be started for apps being rebuilt.
### Displaying existing scale properties
Issuing the `ps:scale` command with no arguments will output the current scaling properties for an app.
```shell
dokku ps:scale node-js-app
```
```
-----> Scaling for python
proctype: qty
--------: ---
web: 1
```
### Scaling apps
#### Via CLI
> This functionality is disabled if the formation is managed via a file such as `DOKKU_SCALE`.
Dokku can also manage scaling itself via the `ps:scale` command. This command can be used to scale multiple process types at the same time.
@@ -83,133 +120,178 @@ Multiple process types can be scaled at once:
dokku ps:scale node-js-app web=1 worker=1
```
Issuing the `ps:scale` command with no process type argument will output the current scaling settings for an application:
If desired, the corresponding deploy will be skipped by using the `--skip-deploy` flag:
```shell
dokku ps:scale node-js-app
dokku ps:scale --skip-deploy node-js-app web=1
```
```
-----> Scaling for node-js-app
-----> proctype qty
-----> -------- ---
-----> web 1
-----> worker 1
```
#### Manually managing process scaling
### Stopping applications
> Using a `DOKKU_SCALE` formation file disables the ability to use `ps:scale` for scaling.
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.
A `DOKKU_SCALE` file can be committed to the root of the pushed app repository, and must be within the built image artifact in the image's working directory as shown below.
```shell
dokku ps:stop node-js-app
```
- Buildpacks: `/app/DOKKU_SCALE`
- Dockerfile: `WORKDIR/DOKKU_SCALE` or `/DOKKU_SCALE`
- Docker Image: `WORKDIR/DOKKU_SCALE` or `/DOKKU_SCALE`
You may also stop all applications at once:
```shell
dokku ps:stopall
```
### Starting applications
All stopped containers can be started using the `ps:start` command. This is similar to running `ps:restart`, except no action will be taken if the application containers are running.
```shell
dokku ps:start node-js-app
```
### Starting all applications
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.
```shell
dokku ps:startall
```
## Restart policies
> New as of 0.7.0
By default, Dokku will automatically restart containers that exit with a non-zero status up to 10 times via the [on-failure Docker restart policy](https://docs.docker.com/engine/reference/run/#restart-policies-restart).
### Showing the current restart policy
The `ps:restart-policy` command will show the currently configured restart policy for an application. The default policy is `on-failure:10`
```shell
dokku ps:restart-policy node-js-app
```
```
=====> node-js-app restart-policy:
on-failure:10
```
### Setting the restart policy
You can configure this via the `ps:set-restart-policy` command:
```shell
# always restart an exited container
dokku ps:set-restart-policy node-js-app always
```
```
-----> Setting restart policy: always
```
```shell
# never restart an exited container
dokku ps:set-restart-policy node-js-app no
```
```
-----> Setting restart policy: no
```
```shell
# only restart it on Docker restart if it was not manually stopped
dokku ps:set-restart-policy node-js-app unless-stopped
```
```
-----> Setting restart policy: unless-stopped
```
```shell
# restart only on non-zero exit status
dokku ps:set-restart-policy node-js-app on-failure
```
```
-----> Setting restart policy: on-failure
```
```shell
# restart only on non-zero exit status up to 20 times
dokku ps:set-restart-policy node-js-app on-failure:20
```
```
-----> Setting restart policy: on-failure:20
```
Restart policies have no bearing on server reboot, and Dokku will always attempt to restart your applications at that point unless they were manually stopped.
## 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.
Example:
The `DOKKU_SCALE` file format is as follows:
```Procfile
web=1
worker=2
```
If it is not committed to the repository, the `DOKKU_SCALE` file will otherwise be automatically generated based on your `ps:scale` settings.
Removing the file will result in Dokku respecting the `ps:scale` command for setting scale values.
> *NOTE*: Dokku will always use the `DOKKU_SCALE` file that ships with the repo to override any local settings.
#### The `web` process
For initial app deploys, Dokku will default to starting a single `web` process for each app. This process may be defined within the `Procfile` or as the `CMD` (for Dockerfile or Docker image deploys). Scaling of the `web` process - and others - may be managed via `ps:scale` or a `DOKKU_SCALE` formation file either before or after the initial deploy.
There are also a few other exceptions for the `web` process.
- Custom checks defined by a `CHECKS` file only apply to the `web` process type.
- By default, the built-in nginx proxy implementation only proxies the `web` process (others may be handled via a custom `nginx.conf.sigil`).
- See the [nginx request proxying documentation](/docs/configuration/nginx.md#request-proxying) for more information on how nginx handles proxied requests.
- Only the `web` process may be bound to an external port.
### Stopping apps
Deployed apps can be stopped using the `ps:stop` command. This turns off all running containers for an app, and will result in a **502 Bad Gateway** response for the default nginx proxy implementation.
```shell
dokku ps:stop node-js-app
```
All apps may be stopped by using the `--all` flag.
```shell
dokku ps:stop --all
```
By default, stopping all apps happens serially. The parallelism may be controlled by the `--parallel` flag.
```shell
dokku ps:stop --all --parallel 2
```
Finally, the number of parallel workers may be automatically set to the number of CPUs available by setting the `--parallel` flag to `-1`
```shell
dokku ps:stop --all --parallel -1
```
### Starting apps
All stopped containers can be started using the `ps:start` command. This is similar to running `ps:restart`, except no action will be taken if the app containers are running.
```shell
dokku ps:start node-js-app
```
All apps may be started by using the `--all` flag.
```shell
dokku ps:start --all
```
By default, starting all apps happens serially. The parallelism may be controlled by the `--parallel` flag.
```shell
dokku ps:start --all --parallel 2
```
Finally, the number of parallel workers may be automatically set to the number of CPUs available by setting the `--parallel` flag to `-1`
```shell
dokku ps:start --all --parallel -1
```
### Restart policies
> New as of 0.7.0, Command Changed in 0.22.0
By default, Dokku will automatically restart containers that exit with a non-zero status up to 10 times via the [on-failure Docker restart policy](https://docs.docker.com/engine/reference/run/#restart-policies---restart).
#### Setting the restart policy
> A change in the restart policy must be followed by a `ps:rebuild` call.
You can configure this via the `ps:set` command:
```shell
# always restart an exited container
dokku ps:set node-js-app restart-policy always
# never restart an exited container
dokku ps:set node-js-app restart-policy no
# only restart it on Docker restart if it was not manually stopped
dokku ps:set node-js-app restart-policy unless-stopped
# restart only on non-zero exit status
dokku ps:set node-js-app restart-policy on-failure
# restart only on non-zero exit status up to 20 times
dokku ps:set node-js-app restart-policy on-failure:20
```
Restart policies have no bearing on server reboot, and Dokku will always attempt to restart your apps at that point unless they were manually stopped.
### Displaying reports for an app
> New as of 0.12.0
You can get a report about the deployed apps using the `ps:report` command:
```shell
dokku ps:report
```
```
=====> node-js-app ps information
Deployed: false
Processes: 0
Ps can scale: true
Ps restart policy: on-failure:10
Restore: true
Running: false
=====> python-sample ps information
Deployed: false
Processes: 0
Ps can scale: true
Ps restart policy: on-failure:10
Restore: true
Running: false
=====> ruby-sample ps information
Deployed: false
Processes: 0
Ps can scale: true
Ps restart policy: on-failure:10
Restore: true
Running: false
```
You can run the command for a specific app also.
```shell
dokku ps:report node-js-app
```
```
=====> node-js-app ps information
Deployed: false
Processes: 0
Ps can scale: true
Ps restart policy: on-failure:10
Restore: true
Running: false
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku ps:report node-js-app --deployed
```

View File

@@ -21,8 +21,75 @@ in order to avoid SSH interpretting Dokku arguments for itself.
--force force flag. currently used in apps:destroy and other ":destroy" commands
```
## Clients
## Official Client
You may optionally use a client to connect to your Dokku server. Most clients use the configured `git remote` to locate the Dokku server, though some allow for overriding this via an environment variable or flag.
You may optionally use the official client when connecting to the Dokku server.
Please refer to the [clients](/docs/community/clients.md) list for more details.
Of all methods, this is the *most* official method of interacting with your Dokku installation. It is a bash script that interacts with a remote Dokku installation via `ssh`. It is available in `contrib/dokku_client.sh` in the root of the Dokku repository.
It can be installed either via the [Homebrew](https://brew.sh) package manager (macOS only), or manually.
### Installation via Homebrew
To install, simply run the following command:
```shell
brew install dokku/repo/dokku
```
### Manual installation
To install manually, simply clone the Dokku repository down and add the `dokku` alias pointing at the script:
```shell
git clone git@github.com:dokku/dokku.git ~/.dokku
# optional: make sure that the dokku_client.sh version matches your Dokku version
cd ~/.dokku
git checkout <tag/branch>
# add the following to either your
# .bashrc, .bash_profile, or .profile file
alias dokku='$HOME/.dokku/contrib/dokku_client.sh'
```
Alternatively, if using another shell such as **zsh**, create an alias command which invokes the script using **bash**:
```shell
# zsh: add the following to either .zshenv or .zshrc
alias dokku='bash $HOME/.dokku/contrib/dokku_client.sh'
# fish: add the following to ~/.config/fish/config.fish
alias dokku 'bash $HOME/.dokku/contrib/dokku_client.sh'
# csh: add the following to .cshrc
alias dokku 'bash $HOME/.dokku/contrib/dokku_client.sh'
```
### Usage
All commands have the application name automatically set via the `--app` flag on the remote server, and thus the app name does not need to be specified manually for core plugins.
The client supports several environment variables:
- `DOKKU_HOST` (default: `dokku` git remote): Used to interact with a specific remote server. Can be overriden via `--remote` flag.
- `DOKKU_PORT` (default: `22`): Used to specify a port to connect to the Dokku server on.
It also supports several flags (all flags unspecified here are passed as is to the server):
- `--app`: Override the remote app in use.
- `--trace`: Enable trace mode.
- `--remote`: Override the remote server.
- `--global`: Unsets the "app" value. May not be supported for the specified command.
In addition, the following commands have special local side-effects:
- `apps:create`:
- If no local `--app` flag is specified or detected from a `dokku` git remote, a random name is generated and used for the app.
- The `dokku` git remote is set if not already set.
- `apps:destroy`:
- Removes the local `dokku` git remote if set.
## Unofficial Clients
Please refer to the [community clients](/docs/community/clients.md) list for more details.

View File

@@ -3,9 +3,9 @@
> New as of 0.7.0
```
ssh-keys:add <name> [/path/to/key] # Add a new public key by pipe or path
ssh-keys:list [<name>] # List of all authorized Dokku public ssh keys
ssh-keys:remove <name> # Remove SSH public key by name
ssh-keys:add <name> [/path/to/key] # Add a new public key by pipe or path
ssh-keys:list [--format text|json] [<name>] # List of all authorized Dokku public ssh keys
ssh-keys:remove [--fingerprint fingerprint|<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.
@@ -42,6 +42,20 @@ The keys for a specific user may be listed by specifying a second argument to th
dokku ssh-keys:list admin
```
> 0.22.3
The output format may be specified via the `--format` flag. Supported values include `json` and `text`.
```shell
dokku ssh-keys:list --format json
```
This can additionally be used to filter to keys for a particular user:
```shell
dokku ssh-keys:list --format json admin
```
### 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:
@@ -74,10 +88,16 @@ cat ~/.ssh/id_rsa.pub | make vagrant-acl-add
As key names are unique, they can be used to remove a public SSH key.
```SHELL
```shell
dokku ssh-keys:remove KEY_NAME
```
An SSH Key can also be removed by fingerprint.
```shell
dokku ssh-keys:remove --fingerprint FINGERPRINT
```
## Scoping commands to specific users
Support for scoping commands to specific users can be added through plugins that take advantage of the [user-auth](/docs/development/plugin-triggers.md#user-auth) plugin trigger to handle command authorization.

View File

@@ -10,7 +10,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 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.
@@ -157,6 +157,38 @@ 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.
> Changed as of 0.22.5
Please note that dollar sign bracket characters (`{` and `}`) must be escaped when used within a `CHECKS` file. Escaping follows golang template rules. The proper way to do this is via one of the following methods:
```
# escaping the `{` character
# using double-quotes
{{"{"}}
# using raw string constants
{{`{`}}
# escaping the `}` character
# using double-quotes
{{"}"}}
# using raw string constants
{{`}`}}
```
### Templating Checks Files
> New as of 0.22.5
An app's `CHECKS` file is sent through a single pass of the [`sigil`](https://github.com/gliderlabs/sigil/) templating tool. This enables usage of Golang templating within application `CHECKS` files. In addition to general templating access, access to app environment variables is also allowed via the `var` function:
```
{{ var "SOME_ENV_VAR" }}
```
This may be useful if certain zero-downtime checks require access to an app-specific value, such as a domain name.
### 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.

View File

@@ -97,12 +97,12 @@ If a plugin depends on a specific command-line tool, check whether that tool exi
```shell
# `command -v` example
if ! command -v "nginx" &>/dev/null; then
log-fail "Missing nginx, install it"
dokku_log_fail "Missing nginx, install it"
fi
# `which` example
if ! which nginx >/dev/null 2>&1; then
log-fail "Missing nginx, install it"
dokku_log_fail "Missing nginx, install it"
fi
```
@@ -210,7 +210,7 @@ Files are copied from the `/app` directory - for images built via buildpacks - o
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.
Plugins should instead source the `functions` file for a given plugin when attempting to call Dokku internal functions. In cases where plugin functions cannot be sourced (eg if a plugin is implemented in Golang), then call the relevant [plugin triggers](/docs/development/plugin-triggers.md) instead.
# Sample plugin

View File

@@ -451,7 +451,6 @@ echo -n "$STDIN$output"
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
```
@@ -470,7 +469,6 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; IMAGE_SOURCE_TYPE="$2"
verify_app_name "$APP"
# TODO
```
@@ -488,7 +486,6 @@ verify_app_name "$APP"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; $IMAGE_SOURCE_TYPE="$2" IMAGE_TAG="$3"; PROC_TYPE="$4"; CONTAINER_INDEX="$5"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
verify_app_name "$APP"
# TODO
```
@@ -506,7 +503,6 @@ verify_app_name "$APP"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; IMAGE_SOURCE_TYPE="$3"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
verify_app_name "$APP"
# TODO
```
@@ -526,7 +522,6 @@ verify_app_name "$APP"
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
```
@@ -738,7 +733,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
- Description: Computes the ports for a given app container
- Invoked by: `internally triggered by proxy-build-config within proxy implementations`
- Arguments: `$APP`
- Arguments: `$APP $PROC_TYPE $IS_HEROKUISH_CONTAINER $CONTAINER_INDEX`
- Example:
```shell
@@ -854,11 +849,41 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `nginx-app-template-source`
- Description: Return the path to a `sigil` template that should be used to generate a given nginx configuration file.
- Invoked by: `nginx-vhosts#build-config`
- Arguments: `$APP $TEMPLATE_TYPE`
- The `TEMPLATE_TYPE` argument can be one of: `[app-config, hsts-config, validate-config]`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"
TEMPLATE_TYPE="$2"
case "$TEMPLATE_TYPE" in
app-config)
echo "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/app.conf.sigil";;
hsts-config)
echo "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/hsts.conf.sigil";;
validate-config)
echo "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/validate.conf.sigil";;
*)
dokku_log_fail "Invalid template type: ${TEMPLATE_TYPE}"
esac
```
The default templates are viewable here: [plugins/nginx-vhosts/templates/](https://github.com/dokku/dokku/tree/master/plugins/nginx-vhosts/templates)
### `nginx-dokku-template-source`
- Description: Customize the source location of the `dokku.conf` nginx configuration file
- Description: Return the path to a `sigil` template that should be used to generate the `dokku.conf` nginx configuration file.
- Invoked by: `nginx-vhosts#install`
- Arguments:
- Arguments: None, however the `sigil` template can make use of the following variables: `$.DOKKU_ROOT $.NGINX_ROOT`
- Example:
```shell
@@ -866,9 +891,11 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
echo "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/dokku.conf.sigil"
```
The default template is viewable here: [plugins/nginx-vhosts/templates/dokku.conf.sigil](https://github.com/dokku/dokku/blob/master/plugins/nginx-vhosts/templates/dokku.conf.sigil)
### `nginx-hostname`
- Description: Allows you to customize the hostname for a given app
@@ -983,6 +1010,24 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `post-build-cnb`
> Warning: The cnb plugin trigger apis are under development and may change
> between minor releases until the 1.0 release.
- Description: Allows you to run commands after the build image is create for a given app. Only applies to apps using cnb.
- Invoked by: `internal function dokku_build() (build phase)`
- Arguments: `$APP` `$SOURCECODE_WORK_DIR`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `post-build-dockerfile`
- Description: Allows you to run commands after the build image is create for a given app. Only applies to apps using a dockerfile.
@@ -1010,7 +1055,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; verify_app_name "$APP"
APP="$1"
# TODO
```
@@ -1027,7 +1072,7 @@ APP="$1"; verify_app_name "$APP"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; verify_app_name "$APP"
APP="$1"
# TODO
```
@@ -1149,7 +1194,7 @@ sudo service haproxy reload
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; verify_app_name "$APP"
APP="$1"
TMP_WORK_DIR="$2"
REV="$3" # optional, may not be sent for tar-based builds
@@ -1174,7 +1219,7 @@ popd >/dev/null
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/haproxy/functions"
APP="$1"; verify_app_name "$APP"
APP="$1"
haproxy-build-config "$APP"
```
@@ -1194,7 +1239,28 @@ haproxy-build-config "$APP"
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
```
### `post-release-cnb`
> Warning: The cnb plugin trigger apis are under development and may change
> between minor releases until the 1.0 release.
> Warning: Image mutation in this trigger may result in an invalid run state, and is heavily discouraged.
- Description: Allows you to run commands after environment variables are set for the release step of the deploy. Only applies to apps using cnb.
- Invoked by: `internal function dokku_release() (release phase)`
- Arguments: `$APP $IMAGE_TAG`
- 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)
# TODO
```
@@ -1214,7 +1280,6 @@ verify_app_name "$APP"
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
```
@@ -1222,7 +1287,7 @@ verify_app_name "$APP"
### `post-stop`
- Description: Can be used to run commands after an app is manually stopped
- Invoked by: `dokku ps:stop` and `dokku ps:stopall`
- Invoked by: `dokku ps:stop`
- Arguments: `$APP`
- Example:
@@ -1252,6 +1317,24 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `pre-build-cnb`
> Warning: The cnb plugin trigger apis are under development and may change
> between minor releases until the 1.0 release.
- 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 cnb.
- Invoked by: `internal function dokku_build() (build phase)`
- Arguments: `$APP` `$SOURCECODE_WORK_DIR`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `pre-build-dockerfile`
- 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 a dockerfile.
@@ -1282,7 +1365,6 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; GULP_CACHE_DIR="$DOKKU_ROOT/$APP/gulp"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
verify_app_name "$APP"
if [[ -d $GULP_CACHE_DIR ]]; then
docker run "${DOCKER_COMMIT_LABEL_ARGS[@]}" --rm -v "$GULP_CACHE_DIR:/gulp" "$IMAGE" find /gulp -depth -mindepth 1 -maxdepth 1 -exec rm -Rf {} \; || true
@@ -1303,7 +1385,6 @@ fi
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"
dokku_log_info1 "Running gulp"
CID=$(docker run "${DOCKER_COMMIT_LABEL_ARGS[@]}" -d $IMAGE /bin/bash -c "cd /app && gulp default")
@@ -1324,7 +1405,7 @@ docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; verify_app_name "$APP"
APP="$1"
# TODO
```
@@ -1341,7 +1422,7 @@ APP="$1"; verify_app_name "$APP"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
APP="$1"; verify_app_name "$APP"
APP="$1"
# TODO
```
@@ -1379,7 +1460,6 @@ echo "$APP" > "$TMP_WORK_DIR/dokku-is-awesome"
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"
dokku_log_info1 "Installing GraphicsMagick..."
@@ -1393,6 +1473,27 @@ DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0"
docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null
```
### `pre-release-cnb`
> Warning: The cnb plugin trigger apis are under development and may change
> between minor releases until the 1.0 release.
- Description: Allows you to run commands before environment variables are set for the release step of the deploy. Only applies to apps using cnb.
- Invoked by: `internal function dokku_release() (release phase)`
- Arguments: `$APP $IMAGE_TAG`
- 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";
# TODO
```
### `pre-release-dockerfile`
- Description: Allows you to run commands before environment variables are set for the release step of the deploy. Only applies to apps using a dockerfile.
@@ -1406,7 +1507,6 @@ docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null
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
```
@@ -1445,6 +1545,51 @@ APP="$1";
curl "https://dokku.me/starting/${APP}" || true
```
### `procfile-extract`
- Description: Extracts a Procfile from a given image to a path
- Invoked by: `internally`
- Arguments: `$APP $IMAGE`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `procfile-get-command`
- Description: Fetches the command for a specific process type
- Invoked by: `internally`
- Arguments: `$APP $PROCESS_TYPE $PORT`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `procfile-remove`
- Description: Removes the extracted Procfile
- Invoked by: `internally`
- Arguments: `$APP`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `proxy-build-config`
- Description: Builds the proxy implementation configuration for a given app
@@ -1577,6 +1722,22 @@ fi
plugn trigger receive-app $APP $newrev
```
### `release-and-deploy`
- Description: Triggers a release of the image tag and a subsequent deploy
- Invoked by:
- Arguments: `$APP $IMAGE_TAG`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
APP="$1";
# TODO
```
### `report`
- Description: Allows you to report on any custom configuration in use by your application
@@ -1816,6 +1977,26 @@ DOKKU_SCHEDULER="$1"; APP="$2"; CONTAINER_ID="$3";
# TODO
```
### `scheduler-register-retired`
> Warning: The scheduler plugin trigger apis are under development and may change
> between minor releases until the 1.0 release.
- Description: Allows scheduling retiring a local container and any related images
- Invoked by: `internally`
- Arguments: `$APP $CONTAINER_ID`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
APP="$1";
CONTAINER_ID="$2";
# TODO
```
### `scheduler-retire`
> Warning: The scheduler plugin trigger apis are under development and may change

View File

@@ -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.21.2-2 (Mon Feb 22 23:20:37 CET 2016)"
# wait for "==> build-arch: ==> Finished making: dokku 0.22.7-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

@@ -75,20 +75,14 @@ bats tests/unit/10_apps.bats tests/unit/10_certs.bats
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.
Tests within a suite may be listed by specifying the suite as a parameter to `bats`.
```shell
tests/bats-exec-test-single tests/unit/10_apps.bats
bats tests/unit/10_apps.bats
```
A single test can be specified as a second parameter. The test is selected by fuzzy-match, and only the first match is executed.
A single test can be specified via the `--filter` argument. The tests are selected via regex match, and all matches are executed.
```shell
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 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
bats --filter clone tests/unit/10_apps.bats
```

View File

@@ -3,7 +3,7 @@
Pull the dokku/dokku image:
```shell
docker pull dokku/dokku:0.21.2
docker pull dokku/dokku:0.22.7
```
Next, run the image.
@@ -17,7 +17,7 @@ docker run \
--publish 8443:443 \
--volume /var/lib/dokku:/mnt/dokku \
--volume /var/run/docker.sock:/var/run/docker.sock \
dokku/dokku:0.21.2
dokku/dokku:0.22.7
```
Dokku is run in the following configuration:

View File

@@ -6,7 +6,7 @@ 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/18.04 x64](https://www.ubuntu.com/download), [Debian 9+ x64](https://www.debian.org/distrib/) or [CentOS 7 x64](https://www.centos.org/download/) *(experimental)* with the FQDN set <sup>[1]</sup>
- A fresh installation of [Ubuntu 16.04/18.04/20.04 x64](https://www.ubuntu.com/download), [Debian 9+ 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.
@@ -21,8 +21,8 @@ To install the latest stable version of Dokku, you can run the following shell c
```shell
# for debian systems, installs Dokku via apt-get
wget https://raw.githubusercontent.com/dokku/dokku/v0.21.2/bootstrap.sh;
sudo DOKKU_TAG=v0.21.2 bash bootstrap.sh
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.7/bootstrap.sh;
sudo DOKKU_TAG=v0.22.7 bash bootstrap.sh
```
The installation process takes about 5-10 minutes, depending upon internet connection speed.

View File

@@ -36,7 +36,7 @@ All applications should be stopped, and all docker containers and images deleted
```shell
# stop all applications
dokku ps:stopall
dokku ps:stop --all
# cleanup containers and images
dokku cleanup

View File

@@ -19,6 +19,7 @@ Docker releases updates periodically to their engine. We recommend reading their
Before upgrading, check the migration guides to get comfortable with new features and prepare your deployment to be upgraded.
- [Upgrading to 0.22](/docs/appendices/0.22.0-migration-guide.md)
- [Upgrading to 0.21](/docs/appendices/0.21.0-migration-guide.md)
- [Upgrading to 0.20](/docs/appendices/0.20.0-migration-guide.md)
- [Upgrading to 0.10](/docs/appendices/0.10.0-migration-guide.md)
@@ -39,10 +40,15 @@ Why do we recommend stopping all apps?
- `docker`: Containers may be randomly reset during the upgrade process, resulting in
requests being sent to the wrong containers. Acknowledging and scheduling downtime
thus becomes much more important.
- `herokuish`: While not required, it may be useful to take advantage of the
- `herokuish`: While not required, it may be useful to take advantage of the latest
base image. Herokuish changes do not cause issues unless the base OS changes, which
may happen in minor or major releases.
```shell
# for 0.11.4 and newer versions, use:
# for 0.22.0 and newer versions, use
dokku ps:stop --all
# for versions between 0.11.4 and 0.21.4, use
dokku ps:stopall
# for versions between 0.8.1 and 0.11.3, use
@@ -58,10 +64,10 @@ After upgrading, you should rebuild the applications to take advantage of any
new buildpacks that were released:
```shell
dokku ps:rebuildall
dokku ps:rebuild --all
```
> If you have any applications deployed via the `tags` or `tar` commands, do not run the `ps:rebuildall` command,
> If you have any applications deployed via the `tags` or `tar` commands, do not run the `ps:rebuild --all` command,
> and instead trigger `ps:rebuild` manually for each `git`-deployed application:
>
> ```

View File

@@ -8,15 +8,34 @@ If you’re stuck, there are a number of places you can get help:
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
## Monitored Locations
The [Code Of Conduct](https://github.com/dokku/.github/blob/master/CODE_OF_CONDUCT.md) applies to all actively monitored Dokku discussion areas. Please be mindful of your neighbors on the internet.
### Forums
- [Github Discussions](https://github.com/dokku/dokku/discussions)
GitHub Discussions is a new way for the Dokku community to interact with each other! This is a place to ask questions to the community or discuss potential feature requests before filing issues.
### The Slack Channel
- [irc.freenode.net/#dokku](https://webchat.freenode.net/?channels=dokku)
- [Gliderlabs Slack](https://glider-slackin.herokuapp.com/) (Join the `#dokku` channel)
If you’re stumped, give us a holler in the Dokku IRC or Slack channels. Someone from the development team is usually there, especially during the daylight hours for North and South America users. We’d love to hear from you, whether you need some help, want to find users in your area, or would like to donate your brand new sports car.
If you’re stumped, give us a holler in the Dokku Slack channel. Someone from the development team is usually there, especially during the daylight hours for North and South American users. We’d love to hear from you, whether you need some help, want to find users in your area, or would like to donate your brand new sports car.
## Stack Overflow
## Unmonitored Locations
- [https://stackoverflow.com/questions/tagged/dokku](https://stackoverflow.com/questions/tagged/dokku)
You may find help on these locations, but they are not actively monitored by the development team. The [Code of Conduct](https://github.com/dokku/.github/blob/master/CODE_OF_CONDUCT.md) still applies.
### Stack Overflow
- [The Dokku tag on Stack Overflow](https://stackoverflow.com/questions/tagged/dokku)
Tag your questions with `dokku` to enable existing users of Stack Overflow to find your questions.
### IRC (on freenode)
- [irc.freenode.net/#dokku](https://webchat.freenode.net/?channels=dokku)
This location isn't as well monitored as Slack, and loses history.

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.21.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.21.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.21.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.21.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.21.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.21.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.21.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.21.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.21.2/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.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.21.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/favicons/favicon.ico">
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/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.21.2/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/favicons/browserconfig.xml">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/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.21.2/docs/assets/style.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/style.css" rel="stylesheet">
<!-- <link href="/dokku/docs/assets/style.css" rel="stylesheet"> -->
<style>
.sponsors {
@@ -91,6 +91,9 @@
<li class="nav-item">
<a class="nav-link" href="https://glider-slackin.herokuapp.com/">Slack</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://github.com/dokku/dokku/discussions">Forums</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://gliderlabs.us10.list-manage.com/subscribe?u=49c4b06ffd30bcf49ec53c277&amp;id=f526006fd5">Newsletter</a>
</li>
@@ -127,12 +130,12 @@
<p class="line">
<span class="path"></span>
<span class="prompt">$</span>
<span class="command">wget https://raw.githubusercontent.com/dokku/dokku/v0.21.2/bootstrap.sh</span>
<span class="command">wget https://raw.githubusercontent.com/dokku/dokku/v0.22.7/bootstrap.sh</span>
</p>
<p class="line">
<span class="path"></span>
<span class="prompt">$</span>
<span class="command">sudo DOKKU_TAG=v0.21.2 bash bootstrap.sh</span>
<span class="command">sudo DOKKU_TAG=v0.22.7 bash bootstrap.sh</span>
</p>
<p class="line">
<span class="output">&nbsp;# go to your server's IP and follow the web installer</span>

View File

@@ -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.21.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.21.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.21.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.21.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.21.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.21.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.21.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.21.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.21.2/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.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.21.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/favicons/favicon.ico">
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/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.21.2/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.2/docs/assets/favicons/browserconfig.xml">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/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.21.2/docs/assets/style.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.7/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>
@@ -84,6 +84,9 @@
<li class="nav-item">
<a class="nav-link" href="https://glider-slackin.herokuapp.com/">Slack</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://github.com/dokku/dokku/discussions">Forums</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://gliderlabs.us10.list-manage.com/subscribe?u=49c4b06ffd30bcf49ec53c277&amp;id=f526006fd5">Newsletter</a>
</li>
@@ -128,7 +131,8 @@
<a href="#" class="list-group-item disabled">Deployment Methods</a>
<a href="/{{NAME}}/deployment/methods/buildpacks/" class="list-group-item">Buildpack Deployment</a>
<a href="/{{NAME}}/deployment/methods/cloud-native-buildpacks/" class="list-group-item">Cloud Native Buildpacks</a>
<a href="/{{NAME}}/deployment/methods/herokuish-buildpacks/" class="list-group-item">Herokuish Buildpacks</a>
<a href="/{{NAME}}/deployment/methods/dockerfiles/" class="list-group-item">Dockerfile Deployment</a>
<a href="/{{NAME}}/deployment/methods/images/" class="list-group-item">Docker Image Deployment</a>
<a href="/{{NAME}}/deployment/methods/git/" class="list-group-item">Git Deployment</a>
@@ -171,12 +175,16 @@
<a href="/{{NAME}}/development/testing/" class="list-group-item">Running Tests</a>
<a href="/{{NAME}}/development/release-process/" class="list-group-item">Release Process</a>
<a href="#" class="list-group-item disabled">Continuous Integration</a>
<a href="/{{NAME}}/deployment/continuous-integration/github-actions/" class="list-group-item">Github Actions</a>
<a href="/{{NAME}}/deployment/continuous-integration/gitlab-ci/" class="list-group-item">Gitlab CI</a>
<a href="/{{NAME}}/deployment/continuous-integration/generic/" class="list-group-item">Generic</a>
<a href="#" class="list-group-item disabled">Community Contributions</a>
<a href="/{{NAME}}/community/clients/" class="list-group-item">Clients</a>
<a href="/{{NAME}}/community/plugins/" class="list-group-item">Plugins</a>
<a href="#" class="list-group-item disabled">Community Tutorials</a>
<a href="/{{NAME}}/community/tutorials/deploying-with-gitlab-ci/" class="list-group-item">Deploying with Gitlab CI</a>
<a href="/{{NAME}}/community/tutorials/run-on-external-volume/" class="list-group-item">Run on External Volume</a>
</div>
</div>

View File

@@ -10,7 +10,8 @@
"process-management": "deployment/process-management/",
"remote-commands": "deployment/remote-commands/",
"deployment/buildpacks": "deployment/methods/buildpacks/",
"deployment/buildpacks": "deployment/methods/herokuish-buildpacks/",
"deployment/methods/buildpacks": "deployment/methods/herokuish-buildpacks/",
"deployment/dockerfiles": "deployment/methods/dockerfiles/",
"deployment/images": "deployment/methods/images/",
"configuration-management": "configuration/environment-variables/",
@@ -29,6 +30,8 @@
"dokku-events-logs": "advanced-usage/event-logs/",
"dokku-storage": "advanced-usage/persistent-storage/",
"community/tutorials/deploying-with-gitlab-ci": "deployment/continuous-integration/gitlab-ci/",
"plugins": "community/plugins/"
}
}

8
dokku
View File

@@ -59,6 +59,7 @@ export DOKKU_VALID_EXIT=0
export DOKKU_PID="$BASHPID"
export DOKKU_LOGS_DIR=${DOKKU_LOGS_DIR:="/var/log/dokku"}
export DOKKU_LOGS_HOST_DIR=${DOKKU_LOGS_HOST_DIR:=$DOKKU_LOGS_DIR}
export DOKKU_EVENTS_LOGFILE=${DOKKU_EVENTS_LOGFILE:="$DOKKU_LOGS_DIR/events.log"}
export DOKKU_CONTAINER_LABEL=dokku
@@ -144,12 +145,7 @@ execute_dokku_cmd() {
if [[ "$(readlink -f "$PLUGIN_ENABLED_PATH/${PLUGIN_NAME%%:*}")" == *core-plugins* ]]; then
[[ ${argv[0]} == "$PLUGIN_CMD" ]] && shift 1
if [[ -n $DOKKU_APP_NAME ]]; then
if [[ "$PLUGIN_CMD" == config* ]] && [[ ${argv[1]} == "--no-restart" ]]; then
shift 1
set -- "--no-restart" "$DOKKU_APP_NAME" "$@"
else
set -- "$DOKKU_APP_NAME" "$@"
fi
set -- "$DOKKU_APP_NAME" "$@"
fi
set -- "$PLUGIN_CMD" "$@"
fi

View File

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

View File

@@ -8,8 +8,7 @@ cmd-urls() {
declare cmd="url"
declare APP="$2"
[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
verify_app_name "$APP"
get_app_urls "$@"
}

View File

@@ -0,0 +1 @@
hook

View File

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

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

View File

@@ -0,0 +1 @@
hook

4
plugins/app-json/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
/triggers/*
/triggers
/pre-*
/post-*

View File

@@ -0,0 +1,5 @@
TRIGGERS = triggers/post-deploy triggers/pre-deploy
BUILD = triggers
PLUGIN_NAME = app-json
include ../../common.mk

406
plugins/app-json/appjson.go Normal file
View File

@@ -0,0 +1,406 @@
package appjson
import (
"bytes"
"context"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"os"
"strings"
"github.com/dokku/dokku/plugins/common"
shellquote "github.com/kballard/go-shellquote"
"golang.org/x/sync/errgroup"
)
// AppJSON is a struct that represents an app.json file as understood by Dokku
type AppJSON struct {
Scripts struct {
Dokku struct {
Predeploy string `json:"predeploy"`
Postdeploy string `json:"postdeploy"`
} `json:"dokku"`
} `json:"scripts"`
}
func constructScript(command string, shell string, isHerokuishImage bool, hasEntrypoint bool) []string {
if hasEntrypoint {
words, err := shellquote.Split(strings.TrimSpace(command))
if err != nil {
common.LogWarn(fmt.Sprintf("Skipping command construction for app with ENTRYPOINT: %v", err.Error()))
return nil
}
return words
}
script := []string{"set -eo pipefail;"}
if os.Getenv("DOKKU_TRACE") == "1" {
script = append(script, "set -x;")
}
if isHerokuishImage {
script = append(script, []string{
"if [[ -d '/app' ]]; then",
" export HOME=/app;",
" cd $HOME;",
"fi;",
"if [[ -d '/app/.profile.d' ]]; then",
" for file in /app/.profile.d/*; do source $file; done;",
"fi;",
"if [[ -d '/cache' ]]; then",
" rm -rf /tmp/cache ;",
" ln -sf /cache /tmp/cache;",
"fi;",
}...)
}
if strings.HasPrefix(command, "/") {
commandBin := strings.Split(command, " ")[0]
script = append(script, []string{
fmt.Sprintf("if [[ ! -x \"%s\" ]]; then", commandBin),
" echo specified binary is not executable;",
" exit 1;",
"fi;",
}...)
}
script = append(script, fmt.Sprintf("%s || exit 1;", command))
if isHerokuishImage {
script = append(script, []string{
"if [[ -d '/cache' ]]; then",
" rm -f /tmp/cache;",
"fi;",
}...)
}
return []string{shell, "-c", strings.Join(script, " ")}
}
// getPhaseScript extracts app.json from app image and returns the appropriate json key/value
func getPhaseScript(appName string, image string, phase string) (string, error) {
appJSONFile, err := ioutil.TempFile(os.TempDir(), fmt.Sprintf("dokku-%s-%s", common.MustGetEnv("DOKKU_PID"), "getPhaseScript"))
if err != nil {
return "", fmt.Errorf("Cannot create temporary file: %v", err)
}
defer os.Remove(appJSONFile.Name())
common.CopyFromImage(appName, image, "app.json", appJSONFile.Name())
if !common.FileExists(appJSONFile.Name()) {
return "", nil
}
b, err := ioutil.ReadFile(appJSONFile.Name())
if err != nil {
return "", fmt.Errorf("Cannot read app.json file: %v", err)
}
if strings.TrimSpace(string(b)) == "" {
return "", nil
}
var appJSON AppJSON
if err = json.Unmarshal(b, &appJSON); err != nil {
return "", fmt.Errorf("Cannot parse app.json: %v", err)
}
if phase == "predeploy" {
return appJSON.Scripts.Dokku.Predeploy, nil
}
return appJSON.Scripts.Dokku.Postdeploy, nil
}
// getReleaseCommand extracts the release command from a given app's procfile
func getReleaseCommand(appName string, image string) string {
err := common.SuppressOutput(func() error {
return common.PlugnTrigger("procfile-extract", []string{appName, image}...)
})
if err != nil {
return ""
}
processType := "release"
port := "5000"
b, _ := common.PlugnTriggerOutput("procfile-get-command", []string{appName, processType, port}...)
return strings.TrimSpace(string(b[:]))
}
func getDokkuAppShell(appName string) string {
shell := "/bin/bash"
globalShell := ""
appShell := ""
ctx := context.Background()
errs, ctx := errgroup.WithContext(ctx)
errs.Go(func() error {
b, _ := common.PlugnTriggerOutput("config-get-global", []string{"DOKKU_APP_SHELL"}...)
globalShell = strings.TrimSpace(string(b[:]))
return nil
})
errs.Go(func() error {
b, _ := common.PlugnTriggerOutput("config-global", []string{"DOKKU_APP_SHELL"}...)
appShell = strings.TrimSpace(string(b[:]))
return nil
})
errs.Wait()
if appShell != "" {
shell = appShell
} else if globalShell != "" {
shell = globalShell
}
return shell
}
func executeScript(appName string, imageTag string, phase string) error {
common.LogInfo1(fmt.Sprintf("Checking for %s task", phase))
image, err := common.GetDeployingAppImageName(appName, imageTag, "")
if err != nil {
common.LogFail(err.Error())
}
command := ""
phaseSource := ""
if phase == "release" {
command = getReleaseCommand(appName, image)
phaseSource = "Procfile"
} else {
var err error
phaseSource = "app.json"
if command, err = getPhaseScript(appName, image, phase); err != nil {
common.LogExclaim(err.Error())
}
}
if command == "" {
common.LogVerbose(fmt.Sprintf("No %s task found, skipping", phase))
return nil
}
common.LogInfo1(fmt.Sprintf("Executing %s task from %s: %s", phase, phaseSource, command))
isHerokuishImage := common.IsImageHerokuishBased(image, appName)
dockerfileEntrypoint := ""
dockerfileCommand := ""
if !isHerokuishImage {
dockerfileEntrypoint, _ = getEntrypointFromImage(image)
dockerfileCommand, _ = getCommandFromImage(image)
}
hasEntrypoint := dockerfileEntrypoint != ""
dokkuAppShell := getDokkuAppShell(appName)
script := constructScript(command, dokkuAppShell, isHerokuishImage, hasEntrypoint)
imageSourceType := "dockerfile"
if isHerokuishImage {
imageSourceType = "herokuish"
}
cacheDir := fmt.Sprintf("%s/cache", common.AppRoot(appName))
cacheHostDir := fmt.Sprintf("%s/cache", common.AppHostRoot(appName))
if !common.DirectoryExists(cacheDir) {
os.MkdirAll(cacheDir, 0755)
}
var dockerArgs []string
if b, err := common.PlugnTriggerSetup("docker-args-deploy", []string{appName, imageTag}...).SetInput("").Output(); err == nil {
words, err := shellquote.Split(strings.TrimSpace(string(b[:])))
if err != nil {
return err
}
dockerArgs = append(dockerArgs, words...)
}
if b, err := common.PlugnTriggerSetup("docker-args-process-deploy", []string{appName, imageSourceType, imageTag}...).SetInput("").Output(); err == nil {
words, err := shellquote.Split(strings.TrimSpace(string(b[:])))
if err != nil {
return err
}
dockerArgs = append(dockerArgs, words...)
}
filteredArgs := []string{"restart", "cpus", "memory", "memory-swap", "memory-reservation", "gpus"}
for _, filteredArg := range filteredArgs {
// re := regexp.MustCompile("--" + filteredArg + "=[0-9A-Za-z!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~]+ ")
var filteredDockerArgs []string
for _, dockerArg := range dockerArgs {
if !strings.HasPrefix(dockerArg, "--"+filteredArg+"=") {
filteredDockerArgs = append(filteredDockerArgs, dockerArg)
}
}
dockerArgs = filteredDockerArgs
}
dockerArgs = append(dockerArgs, "--label=dokku_phase_script="+phase)
dockerArgs = append(dockerArgs, "-v", cacheHostDir+":/cache")
if os.Getenv("DOKKU_TRACE") != "" {
dockerArgs = append(dockerArgs, "--env", "DOKKU_TRACE="+os.Getenv("DOKKU_TRACE"))
}
containerID, err := createdContainerID(appName, dockerArgs, image, script, phase)
if err != nil {
common.LogFail(fmt.Sprintf("Failed to create %s execution container: %s", phase, err.Error()))
}
if !waitForExecution(containerID) {
common.LogInfo2Quiet(fmt.Sprintf("Start of %s %s task (%s) output", appName, phase, containerID[0:9]))
common.LogVerboseQuietContainerLogs(containerID)
common.LogInfo2Quiet(fmt.Sprintf("End of %s %s task (%s) output", appName, phase, containerID[0:9]))
common.LogFail(fmt.Sprintf("Execution of %s task failed: %s", phase, command))
}
common.LogInfo2Quiet(fmt.Sprintf("Start of %s %s task (%s) output", appName, phase, containerID[0:9]))
common.LogVerboseQuietContainerLogs(containerID)
common.LogInfo2Quiet(fmt.Sprintf("End of %s %s task (%s) output", appName, phase, containerID[0:9]))
if phase != "predeploy" {
return nil
}
commitArgs := []string{"container", "commit"}
if !isHerokuishImage {
if dockerfileEntrypoint != "" {
commitArgs = append(commitArgs, "--change", dockerfileEntrypoint)
}
if dockerfileCommand != "" {
commitArgs = append(commitArgs, "--change", dockerfileCommand)
}
}
commitArgs = append(commitArgs, []string{
"--change",
"LABEL org.label-schema.schema-version=1.0",
"--change",
"LABEL org.label-schema.vendor=dokku",
"--change",
fmt.Sprintf("LABEL com.dokku.app-name=%s", appName),
"--change",
fmt.Sprintf("LABEL com.dokku.%s-phase=true", phase),
}...)
commitArgs = append(commitArgs, containerID, image)
containerCommitCmd := common.NewShellCmdWithArgs(
common.DockerBin(),
commitArgs...,
)
containerCommitCmd.ShowOutput = false
containerCommitCmd.Command.Stderr = os.Stderr
if !containerCommitCmd.Execute() {
common.LogFail(fmt.Sprintf("Commiting of '%s' to image failed: %s", phase, command))
}
return common.PlugnTrigger("scheduler-register-retired", []string{appName, containerID}...)
}
func getEntrypointFromImage(image string) (string, error) {
output, err := common.DockerInspect(image, "{{json .Config.Entrypoint}}")
if err != nil {
return "", err
}
if output == "null" {
return "", err
}
var entrypoint []string
if err = json.Unmarshal([]byte(output), &entrypoint); err != nil {
return "", err
}
if len(entrypoint) == 3 && entrypoint[0] == "/bin/sh" && entrypoint[1] == "-c" {
return fmt.Sprintf("ENTRYPOINT %s", entrypoint[2]), nil
}
serializedEntrypoint, err := json.Marshal(entrypoint)
return fmt.Sprintf("ENTRYPOINT %s", string(serializedEntrypoint)), err
}
func getCommandFromImage(image string) (string, error) {
output, err := common.DockerInspect(image, "{{json .Config.Cmd}}")
if err != nil {
return "", err
}
if output == "null" {
return "", err
}
var command []string
if err = json.Unmarshal([]byte(output), &command); err != nil {
return "", err
}
if len(command) == 3 && command[0] == "/bin/sh" && command[1] == "-c" {
return fmt.Sprintf("CMD %s", command[2]), nil
}
serializedEntrypoint, err := json.Marshal(command)
return fmt.Sprintf("CMD %s", string(serializedEntrypoint)), err
}
func waitForExecution(containerID string) bool {
containerStartCmd := common.NewShellCmdWithArgs(
common.DockerBin(),
"container",
"start",
containerID,
)
containerStartCmd.ShowOutput = false
containerStartCmd.Command.Stderr = os.Stderr
if !containerStartCmd.Execute() {
return false
}
containerWaitCmd := common.NewShellCmdWithArgs(
common.DockerBin(),
"container",
"wait",
containerID,
)
containerWaitCmd.ShowOutput = false
containerWaitCmd.Command.Stderr = os.Stderr
b, err := containerWaitCmd.Output()
if err != nil {
return false
}
containerExitCode := strings.TrimSpace(string(b[:]))
return containerExitCode == "0"
}
func createdContainerID(appName string, dockerArgs []string, image string, command []string, phase string) (string, error) {
runLabelArgs := fmt.Sprintf("--label=com.dokku.app-name=%s", appName)
arguments := strings.Split(common.MustGetEnv("DOKKU_GLOBAL_RUN_ARGS"), " ")
arguments = append(arguments, runLabelArgs)
arguments = append(arguments, dockerArgs...)
arguments = append([]string{"container", "create"}, arguments...)
arguments = append(arguments, image)
arguments = append(arguments, command...)
containerCreateCmd := common.NewShellCmdWithArgs(
common.DockerBin(),
arguments...,
)
var stderr bytes.Buffer
containerCreateCmd.ShowOutput = false
containerCreateCmd.Command.Stderr = &stderr
b, err := containerCreateCmd.Output()
if err != nil {
return "", errors.New(stderr.String())
}
containerID := strings.TrimSpace(string(b))
err = common.PlugnTrigger("post-container-create", []string{"app", appName, containerID, phase}...)
return containerID, err
}

13
plugins/app-json/go.mod Normal file
View File

@@ -0,0 +1,13 @@
module github.com/dokku/dokku/plugins/app-json
go 1.15
require (
github.com/codeskyblue/go-sh v0.0.0-20190412065543-76bd3d59ff27 // indirect
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 // indirect
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a
)
replace github.com/dokku/dokku/plugins/common => ../common

10
plugins/app-json/go.sum Normal file
View File

@@ -0,0 +1,10 @@
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q=
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
github.com/codeskyblue/go-sh v0.0.0-20190412065543-76bd3d59ff27 h1:HHUr4P/aKh4quafGxDT9LDasjGdlGkzLbfmmrlng3kA=
github.com/codeskyblue/go-sh v0.0.0-20190412065543-76bd3d59ff27/go.mod h1:VQx0hjo2oUeQkQUET7wRwradO6f+fN5jzXgB/zROxxE=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1XjNtTFGCwSM6OmFJblU4ld4gACoJsbadJg=
github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=

View File

@@ -1,133 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/config/functions"
source "$PLUGIN_AVAILABLE_PATH/ps/functions"
get_phase_script() {
declare desc="extracts app.json from app image and returns the appropriate json key/value"
declare IMAGE_TAG="$1" PHASE_SCRIPT_KEY="$2"
local APP_JSON_FILE=$(mktemp "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
trap "rm -rf '$APP_JSON_FILE' >/dev/null" RETURN INT TERM
copy_from_image "$IMAGE" "app.json" "$APP_JSON_FILE" 2>/dev/null || true
if [[ ! -f "$APP_JSON_FILE" ]]; then
return 0
fi
get_json_value ".scripts.dokku.${PHASE_SCRIPT_KEY}" <"$APP_JSON_FILE"
}
get_release_cmd() {
declare desc="extracts the release command from a given app's procfile"
declare APP="$1" IMAGE_TAG="$2"
extract_procfile "$APP" "$IMAGE_TAG" >/dev/null
trap "remove_procfile $APP" RETURN INT TERM EXIT
get_cmd_from_procfile "$APP" "release" "5000"
}
execute_script() {
declare desc="executes appropriate phase script key from app.json"
declare APP="$1" IMAGE_TAG="$2" PHASE_SCRIPT_KEY="$3"
local IMAGE id SCRIPT_CMD
local 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\"")
local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$APP"
IMAGE=$(get_deploying_app_image_name "$APP" "$IMAGE_TAG")
if [[ "$PHASE_SCRIPT_KEY" == "release" ]]; then
SCRIPT_CMD=$(get_release_cmd "$APP" "$IMAGE_TAG" 2>/dev/null || true)
else
SCRIPT_CMD=$(get_phase_script "$IMAGE" "$PHASE_SCRIPT_KEY" 2>/dev/null || true)
fi
if [[ -z "$SCRIPT_CMD" ]]; then
return
fi
dokku_log_exclaim "${PHASE_SCRIPT_KEY^} command declared: '$SCRIPT_CMD'"
local COMMAND
COMMAND="set -eo pipefail; [[ \$DOKKU_TRACE ]] && set -x ; "
COMMAND+=" if [[ -d '/app' ]]; then "
COMMAND+=" export HOME=/app ; "
COMMAND+=" cd \$HOME ; "
COMMAND+=" fi ; "
COMMAND+=" if [[ -d '/app/.profile.d' ]]; then "
COMMAND+=" for file in /app/.profile.d/*; do source \$file; done ; "
COMMAND+=" fi ; "
COMMAND+=" if [[ -d '/cache' ]]; then "
COMMAND+=" rm -rf /tmp/cache ; "
COMMAND+=" ln -sf /cache /tmp/cache ; "
COMMAND+=" fi ; "
if [[ "$SCRIPT_CMD" == /* ]]; then
local SCRIPT_BIN="$(echo "$SCRIPT_CMD" | cut -d' ' -f1)"
COMMAND+=" if [[ ! -x \"$SCRIPT_BIN\" ]]; then "
COMMAND+=" echo specified binary is not executable ; "
COMMAND+=" exit 1 ; "
COMMAND+=" fi ; "
fi
COMMAND+=" $SCRIPT_CMD || exit 1;"
COMMAND+=" if [[ -d '/cache' ]]; then "
COMMAND+=" rm -f /tmp/cache ; "
COMMAND+=" fi ; "
local CACHE_DIR="$DOKKU_ROOT/$APP/cache"
local CACHE_HOST_DIR="$DOKKU_HOST_ROOT/$APP/cache"
[[ -d $CACHE_DIR ]] || mkdir -p "$CACHE_DIR"
local DOCKER_ARGS=$(: | plugn trigger docker-args-deploy "$APP" "$IMAGE_TAG")
local IMAGE_SOURCE_TYPE="dockerfile"
is_image_herokuish_based "$IMAGE" "$APP" && IMAGE_SOURCE_TYPE="herokuish"
DOCKER_ARGS+=$(: | plugn trigger docker-args-process-deploy "$APP" "$IMAGE_SOURCE_TYPE" "$IMAGE_TAG")
# strip certain args from DOCKER_ARGS
local filtered_args=("restart" "cpus" "memory" "memory-swap" "memory-reservation" "gpus")
for filtered_arg in "${filtered_args[@]}"; do
DOCKER_ARGS=$(sed -e "s/--${filtered_arg}=[[:graph:]]\+[[:blank:]]\?//g" <<<"$DOCKER_ARGS")
done
# eval args as array to respect escapes
declare -a ARG_ARRAY
eval "ARG_ARRAY=($DOCKER_ARGS)"
local DOKKU_APP_SHELL="/bin/bash"
DOKKU_APP_SHELL="$(config_get --global DOKKU_APP_SHELL || echo "$DOKKU_APP_SHELL")"
DOKKU_APP_SHELL="$(config_get "$APP" DOKKU_APP_SHELL || echo "$DOKKU_APP_SHELL")"
[[ -z "$DOKKU_APP_SHELL" ]] && DOKKU_APP_SHELL="/bin/bash"
local DOKKU_CONTAINER_EXIT_CODE=0
id=$("$DOCKER_BIN" container create "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS --env DOKKU_TRACE="$DOKKU_TRACE" --label=dokku_phase_script="${PHASE_SCRIPT_KEY}" -v "$CACHE_HOST_DIR:/cache" "${ARG_ARRAY[@]}" "$IMAGE" "$DOKKU_APP_SHELL" -c "$COMMAND")
plugn trigger post-container-create "app" "$id" "$APP" "$PHASE_SCRIPT_KEY"
"$DOCKER_BIN" container start "$id" >/dev/null || DOKKU_CONTAINER_EXIT_CODE=$?
DOKKU_CONTAINER_EXIT_CODE="$("$DOCKER_BIN" container wait "$id" 2>/dev/null || echo "$DOKKU_CONTAINER_EXIT_CODE")"
if [[ "$DOKKU_CONTAINER_EXIT_CODE" -ne 0 ]]; then
dokku_container_log_verbose_quiet "$id"
dokku_log_fail "execution of '$SCRIPT_CMD' failed!"
fi
dokku_container_log_verbose_quiet "$id"
if [[ "$PHASE_SCRIPT_KEY" != "predeploy" ]]; then
return
fi
if ! is_image_herokuish_based "$IMAGE" "$APP"; then
local DOKKU_DOCKERFILE_ENTRYPOINT=$(config_get "$APP" DOKKU_DOCKERFILE_ENTRYPOINT)
local DOKKU_DOCKERFILE_CMD=$(config_get "$APP" DOKKU_DOCKERFILE_CMD)
[[ -z "$DOKKU_DOCKERFILE_ENTRYPOINT" ]] && DOKKU_DOCKERFILE_ENTRYPOINT="$(get_entrypoint_from_image "$IMAGE")"
[[ -z "$DOKKU_DOCKERFILE_CMD" ]] && DOKKU_DOCKERFILE_CMD="$(get_cmd_from_image "$IMAGE")"
[[ -n "$DOKKU_DOCKERFILE_ENTRYPOINT" ]] && local DOCKER_COMMIT_ENTRYPOINT_CHANGE_ARG="--change='$DOKKU_DOCKERFILE_ENTRYPOINT'"
[[ -n "$DOKKU_DOCKERFILE_CMD" ]] && local DOCKER_COMMIT_CMD_CHANGE_ARG="--change='$DOKKU_DOCKERFILE_CMD'"
local DOCKER_COMMIT_ARGS="$DOCKER_COMMIT_ENTRYPOINT_CHANGE_ARG $DOCKER_COMMIT_CMD_CHANGE_ARG"
fi
eval "$DOCKER_BIN" container commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "${DOCKER_COMMIT_ARGS[@]}" "$id" "$IMAGE" >/dev/null
}

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core app-json plugin"
version = "0.21.2"
version = "0.22.7"
[plugin.config]

View File

@@ -1,16 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_CORE_AVAILABLE_PATH/app-json/internal-functions"
trigger-app-json-post-deploy() {
declare desc="app-json scripts execution"
declare trigger="post-deploy"
declare APP="$1" IMAGE_TAG="$4"
local PHASE_SCRIPT_KEY="postdeploy"
execute_script "$APP" "$IMAGE_TAG" "$PHASE_SCRIPT_KEY"
}
trigger-app-json-post-deploy "$@"

View File

@@ -1,17 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_CORE_AVAILABLE_PATH/app-json/internal-functions"
trigger-app-json-pre-deploy() {
declare desc="app-json scripts execution"
declare trigger="pre-deploy"
declare APP="$1" IMAGE_TAG="$2"
local PHASE_SCRIPT_KEY="predeploy"
execute_script "$APP" "$IMAGE_TAG" "$PHASE_SCRIPT_KEY"
execute_script "$APP" "$IMAGE_TAG" "release"
}
trigger-app-json-pre-deploy "$@"

View File

@@ -0,0 +1,36 @@
package main
import (
"flag"
"fmt"
"os"
"strings"
"github.com/dokku/dokku/plugins/app-json"
"github.com/dokku/dokku/plugins/common"
)
// main entrypoint to all triggers
func main() {
parts := strings.Split(os.Args[0], "/")
trigger := parts[len(parts)-1]
flag.Parse()
var err error
switch trigger {
case "post-deploy":
appName := flag.Arg(0)
imageTag := flag.Arg(3)
err = appjson.TriggerPostDeploy(appName, imageTag)
case "pre-deploy":
appName := flag.Arg(0)
imageTag := flag.Arg(1)
err = appjson.TriggerPreDeploy(appName, imageTag)
default:
common.LogFail(fmt.Sprintf("Invalid plugin trigger call: %s", trigger))
}
if err != nil {
common.LogFail(err.Error())
}
}

View File

@@ -0,0 +1,21 @@
package appjson
// TriggerPostDeploy is a trigger to execute the postdeploy deployment task
func TriggerPostDeploy(appName string, imageTag string) error {
if err := executeScript(appName, imageTag, "postdeploy"); err != nil {
return err
}
return nil
}
// TriggerPreDeploy is a trigger to execute predeploy and release deployment tasks
func TriggerPreDeploy(appName string, imageTag string) error {
if err := executeScript(appName, imageTag, "predeploy"); err != nil {
return err
}
if err := executeScript(appName, imageTag, "release"); err != nil {
return err
}
return nil
}

View File

@@ -1,32 +0,0 @@
package apps
import (
"github.com/dokku/dokku/plugins/common"
)
// ReportSingleApp is an internal function that displays the app report for one or more apps
func ReportSingleApp(appName, infoFlag string) error {
if err := common.VerifyAppName(appName); err != nil {
return err
}
deploySource := ""
if b, err := common.PlugnTriggerSetup("deploy-source", []string{appName}...).SetInput("").Output(); err != nil {
deploySource = string(b[:])
}
locked := "false"
if appIsLocked(appName) {
locked = "true"
}
infoFlags := map[string]string{
"--app-dir": common.AppRoot(appName),
"--app-deploy-source": deploySource,
"--app-locked": locked,
}
trimPrefix := false
uppercaseFirstCharacter := true
return common.ReportSingleApp("app", appName, infoFlag, infoFlags, trimPrefix, uppercaseFirstCharacter)
}

View File

@@ -12,15 +12,7 @@ import (
// checks if an app exists
func appExists(appName string) error {
if err := common.IsValidAppName(appName); err != nil {
return err
}
if !common.DirectoryExists(common.AppRoot(appName)) {
return fmt.Errorf("App %s does not exist", appName)
}
return nil
return common.VerifyAppName(appName)
}
// checks if an app is locked
@@ -52,10 +44,6 @@ func createApp(appName string) error {
// destroys an app
func destroyApp(appName string) error {
if err := common.VerifyAppName(appName); err != nil {
return err
}
if os.Getenv("DOKKU_APPS_FORCE_DELETE") != "1" {
if err := common.AskForDestructiveConfirmation(appName, "app"); err != nil {
return err
@@ -83,6 +71,17 @@ func destroyApp(appName string) error {
forceCleanup := true
common.DockerCleanup(appName, forceCleanup)
// remove contents for apps that are symlinks to other folders
if err := os.RemoveAll(fmt.Sprintf("%v/", common.AppRoot(appName))); err != nil {
common.LogWarn(err.Error())
}
// then remove the folder and/or the symlink
if err := os.RemoveAll(common.AppRoot(appName)); err != nil {
common.LogWarn(err.Error())
}
return nil
}
@@ -140,7 +139,7 @@ func maybeCreateApp(appName string) error {
}
b, _ := common.PlugnTriggerOutput("config-get-global", []string{"DOKKU_DISABLE_APP_AUTOCREATION"}...)
disableAutocreate := string(b[:])
disableAutocreate := strings.TrimSpace(string(b[:]))
if disableAutocreate == "true" {
common.LogWarn("App auto-creation disabled.")
return fmt.Errorf("Re-enable app auto-creation or create an app with 'dokku apps:create %s'", appName)

View File

@@ -1,11 +1,12 @@
module github.com/dokku/dokku/plugins/apps
go 1.14
go 1.15
require (
github.com/codeskyblue/go-sh v0.0.0-20190412065543-76bd3d59ff27 // indirect
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 // indirect
github.com/spf13/pflag v1.0.5 // indirect
)
replace github.com/dokku/dokku/plugins/common => ../common

View File

@@ -4,3 +4,7 @@ github.com/codeskyblue/go-sh v0.0.0-20190412065543-76bd3d59ff27 h1:HHUr4P/aKh4qu
github.com/codeskyblue/go-sh v0.0.0-20190412065543-76bd3d59ff27/go.mod h1:VQx0hjo2oUeQkQUET7wRwradO6f+fN5jzXgB/zROxxE=
github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1XjNtTFGCwSM6OmFJblU4ld4gACoJsbadJg=
github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=

View File

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

52
plugins/apps/report.go Normal file
View File

@@ -0,0 +1,52 @@
package apps
import (
"strings"
"github.com/dokku/dokku/plugins/common"
)
// ReportSingleApp is an internal function that displays the app report for one or more apps
func ReportSingleApp(appName, infoFlag string) error {
if err := common.VerifyAppName(appName); err != nil {
return err
}
flags := map[string]common.ReportFunc{
"--app-dir": reportDir,
"--app-deploy-source": reportDeploySource,
"--app-locked": reportLocked,
}
flagKeys := []string{}
for flagKey := range flags {
flagKeys = append(flagKeys, flagKey)
}
trimPrefix := false
uppercaseFirstCharacter := true
infoFlags := common.CollectReport(appName, infoFlag, flags)
return common.ReportSingleApp("app", appName, infoFlag, infoFlags, flagKeys, trimPrefix, uppercaseFirstCharacter)
}
func reportDir(appName string) string {
return common.AppRoot(appName)
}
func reportDeploySource(appName string) string {
deploySource := ""
if b, err := common.PlugnTriggerSetup("deploy-source", []string{appName}...).SetInput("").Output(); err != nil {
deploySource = strings.TrimSpace(string(b[:]))
}
return deploySource
}
func reportLocked(appName string) string {
locked := "false"
if appIsLocked(appName) {
locked = "true"
}
return locked
}

View File

@@ -1,13 +1,14 @@
package main
import (
"flag"
"fmt"
"os"
"strings"
"github.com/dokku/dokku/plugins/apps"
"github.com/dokku/dokku/plugins/common"
flag "github.com/spf13/pflag"
)
// main entrypoint to all subcommands
@@ -64,10 +65,12 @@ func main() {
err = apps.CommandRename(oldAppName, newAppName, *skipDeploy)
case "report":
args := flag.NewFlagSet("apps:report", flag.ExitOnError)
args.Parse(os.Args[2:])
appName := args.Arg(0)
infoFlag := args.Arg(1)
err = apps.CommandReport(appName, infoFlag)
osArgs, infoFlag, flagErr := common.ParseReportArgs("apps", os.Args[2:])
if flagErr == nil {
args.Parse(osArgs)
appName := args.Arg(0)
err = apps.CommandReport(appName, infoFlag)
}
case "unlock":
args := flag.NewFlagSet("apps:unlock", flag.ExitOnError)
args.Parse(os.Args[2:])

View File

@@ -4,7 +4,6 @@ import (
"errors"
"fmt"
"os"
"strings"
"github.com/dokku/dokku/plugins/common"
)
@@ -19,7 +18,7 @@ func CommandClone(oldAppName string, newAppName string, skipDeploy bool, ignoreE
return errors.New("Please specify an new app name")
}
if err := common.IsValidAppName(oldAppName); err != nil {
if err := common.VerifyAppName(oldAppName); err != nil {
return err
}
@@ -27,10 +26,6 @@ func CommandClone(oldAppName string, newAppName string, skipDeploy bool, ignoreE
return err
}
if err := appExists(oldAppName); err != nil {
return err
}
if err := appExists(newAppName); err == nil {
if ignoreExisting {
common.LogWarn("Name is already taken")
@@ -62,8 +57,8 @@ func CommandClone(oldAppName string, newAppName string, skipDeploy bool, ignoreE
// CommandCreate creates app via command line
func CommandCreate(appName string) error {
if appName == "" {
return errors.New("Please specify an app to run the command on")
if err := common.IsValidAppName(appName); err != nil {
return err
}
return createApp(appName)
@@ -71,8 +66,8 @@ func CommandCreate(appName string) error {
// CommandDestroy destroys an app
func CommandDestroy(appName string, force bool) error {
if appName == "" {
return errors.New("Please specify an app to run the command on")
if err := common.VerifyAppName(appName); err != nil {
return err
}
if force {
@@ -84,10 +79,6 @@ func CommandDestroy(appName string, force bool) error {
// CommandExists checks if an app exists
func CommandExists(appName string) error {
if appName == "" {
return errors.New("Please specify an app to run the command on")
}
return appExists(appName)
}
@@ -109,10 +100,6 @@ func CommandList() error {
// CommandLock locks an app for deployment
func CommandLock(appName string) error {
if appName == "" {
return errors.New("Please specify an app to run the command on")
}
if err := common.VerifyAppName(appName); err != nil {
return err
}
@@ -128,10 +115,6 @@ func CommandLock(appName string) error {
// CommandLocked checks if an app is locked for deployment
func CommandLocked(appName string) error {
if appName == "" {
return errors.New("Please specify an app to run the command on")
}
if err := common.VerifyAppName(appName); err != nil {
return err
}
@@ -154,7 +137,7 @@ func CommandRename(oldAppName string, newAppName string, skipDeploy bool) error
return errors.New("Please specify an new app name")
}
if err := common.IsValidAppName(oldAppName); err != nil {
if err := common.VerifyAppName(oldAppName); err != nil {
return err
}
@@ -162,10 +145,6 @@ func CommandRename(oldAppName string, newAppName string, skipDeploy bool) error
return err
}
if err := appExists(oldAppName); err != nil {
return err
}
if err := appExists(newAppName); err == nil {
return errors.New("Name is already taken")
}
@@ -197,15 +176,6 @@ func CommandRename(oldAppName string, newAppName string, skipDeploy bool) error
// CommandReport displays an app report for one or more apps
func CommandReport(appName string, infoFlag string) error {
if appName == "" {
return errors.New("Please specify an app to run the command on")
}
if strings.HasPrefix(appName, "--") {
infoFlag = appName
appName = ""
}
if len(appName) == 0 {
apps, err := common.DokkuApps()
if err != nil {
@@ -224,10 +194,6 @@ func CommandReport(appName string, infoFlag string) error {
// CommandUnlock unlocks an app for deployment
func CommandUnlock(appName string) error {
if appName == "" {
return errors.New("Please specify an app to run the command on")
}
if err := common.VerifyAppName(appName); err != nil {
return err
}

View File

@@ -1,9 +1,6 @@
package apps
import (
"fmt"
"os"
"github.com/dokku/dokku/plugins/common"
)
@@ -31,16 +28,6 @@ func TriggerAppMaybeCreate(appName string) error {
func TriggerPostDelete(appName string) error {
imageRepo := common.GetAppImageRepo(appName)
// remove contents for apps that are symlinks to other folders
if err := os.RemoveAll(fmt.Sprintf("%v/", common.AppRoot(appName))); err != nil {
common.LogWarn(err.Error())
}
// then remove the folder and/or the symlink
if err := os.RemoveAll(common.AppRoot(appName)); err != nil {
common.LogWarn(err.Error())
}
imagesByAppLabel, err := listImagesByAppLabel(appName)
if err != nil {
common.LogWarn(err.Error())

View File

@@ -0,0 +1,38 @@
#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/config/functions"
trigger-builder-cnb-builder-build() {
declare desc="builder-cnb builder-build plugin trigger"
declare trigger="builder-build"
declare BUILDER_TYPE="$1" APP="$2" SOURCECODE_WORK_DIR="$3"
if [[ "$BUILDER_TYPE" != "cnb" ]]; then
return
fi
if ! command -v "pack" &>/dev/null; then
dokku_log_fail "Missing pack, install it"
fi
local IMAGE=$(get_app_image_name "$APP")
pushd "$SOURCECODE_WORK_DIR" &>/dev/null
local TMP_FILE=$(mktemp "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
trap "rm -rf '$TMP_FILE' >/dev/null" RETURN INT TERM
config_export app "$APP" --format envfile --merged > "$TMP_FILE"
plugn trigger pre-build-cnb "$APP" "$SOURCECODE_WORK_DIR"
pack build "$IMAGE" --builder heroku/buildpacks --path "$SOURCECODE_WORK_DIR" --default-process web
echo "FROM $IMAGE" | suppress_output "$DOCKER_BIN" image build --label=com.dokku.image-stage=build --label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku --label=com.dokku.app-name=$APP --label=dokku -t "$IMAGE" -
plugn trigger post-build-cnb "$APP" "$SOURCECODE_WORK_DIR"
}
trigger-builder-cnb-builder-build "$@"

View File

@@ -0,0 +1,22 @@
#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
trigger-builder-cnb-builder-release() {
declare desc="builder-cnb builder-release plugin trigger"
declare trigger="builder-release"
declare BUILDER_TYPE="$1" APP="$2" IMAGE_TAG="$3"
if [[ "$BUILDER_TYPE" != "cnb" ]]; then
return
fi
plugn trigger pre-release-cnb "$APP" "$IMAGE_TAG"
local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG")
echo "FROM $IMAGE" | suppress_output "$DOCKER_BIN" image build --label=com.dokku.image-stage=release --label=com.dokku.app-name=$APP --label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku --label=dokku -t "$IMAGE" -
plugn trigger post-release-cnb "$APP" "$IMAGE_TAG"
}
trigger-builder-cnb-builder-release "$@"

View File

@@ -0,0 +1,4 @@
[plugin]
description = "dokku core builder-cnb plugin"
version = "0.22.7"
[plugin.config]

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