Compare commits

...

38 Commits

Author SHA1 Message Date
Dokku Bot
e99ea77069 Release 0.35.4
# History

## 0.35.4

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.35.4/bootstrap.sh
sudo DOKKU_TAG=v0.35.4 bash bootstrap.sh
```

### Bug Fixes

- #7209: @josegonzalez Exit non-zero if any deployment tasks fails
- #7211: @josegonzalez Always set the git rev env var when building an app via git:sync
- #7208: @josegonzalez Compute path for docker-container-healthchecker
- #7205: @Cactusbone chore: fix vagrant dokku-windows config

### Tests

- #7210: @josegonzalez Ensure pack binary is installed correctly when running tests in a devcontainer

### Dependencies

- #7206: @dependabot[bot] chore(deps): bump mkdocs-material from 9.5.37 to 9.5.38 in /docs/_build
- #7207: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.10.1 to 10.10.2 in /docs/_build
- #7203: @dependabot[bot] chore(deps): bump mkdocs-material from 9.5.36 to 9.5.37 in /docs/_build
2024-09-29 06:50:53 +00:00
Jose Diaz-Gonzalez
27ce6b622c Merge pull request #7209 from dokku/6919-failed-deployment-tasks
Exit non-zero if any deployment tasks fails
2024-09-29 01:09:47 -04:00
Jose Diaz-Gonzalez
24b5447ba7 Merge pull request #7211 from dokku/6827-set-git-rev-on-sync
Always set the git rev env var when building an app via git:sync
2024-09-29 00:38:09 -04:00
Jose Diaz-Gonzalez
9490034412 tests: update tests for cnb builder 2024-09-29 00:04:58 -04:00
Jose Diaz-Gonzalez
1abb180d1c fix: correct lint issue 2024-09-28 23:56:28 -04:00
Jose Diaz-Gonzalez
b8b112cb7b fix: exit non-zero if any deployment tasks fails 2024-09-28 23:56:28 -04:00
Jose Diaz-Gonzalez
fcb66a43cc Merge pull request #7210 from dokku/test-pack
Ensure pack binary is installed correctly when running tests in a devcontainer
2024-09-28 23:48:38 -04:00
Jose Diaz-Gonzalez
4ec6fa3eb0 fix: always set the git rev env var when building an app via git:sync
Closes #6827
2024-09-28 23:47:48 -04:00
Jose Diaz-Gonzalez
b9ebf2bcca Merge pull request #7208 from dokku/7010-docker-container-healthchecker-path
Compute path for docker-container-healthchecker
2024-09-28 22:31:31 -04:00
Jose Diaz-Gonzalez
03102cd681 tests: ensure pack binary is installed correctly when running tests in a devcontainer 2024-09-28 22:30:09 -04:00
Jose Diaz-Gonzalez
e905503bb9 fix: compute path for docker-container-healthchecker
This fixes an issue for source-based Dokku installs where the binary is installed in /usr/local/bin instead of /usr/bin due to not being installed via an OS package.

Closes #7010
2024-09-28 21:11:13 -04:00
Jose Diaz-Gonzalez
5857a937d5 Merge pull request #7206 from dokku/dependabot/pip/docs/_build/mkdocs-material-9.5.38
chore(deps): bump mkdocs-material from 9.5.37 to 9.5.38 in /docs/_build
2024-09-26 11:11:21 -04:00
Jose Diaz-Gonzalez
ed4646153f Merge pull request #7207 from dokku/dependabot/pip/docs/_build/pymdown-extensions-10.10.2
chore(deps): bump pymdown-extensions from 10.10.1 to 10.10.2 in /docs/_build
2024-09-26 11:11:12 -04:00
Jose Diaz-Gonzalez
34df653536 Merge pull request #7205 from F4-Group/fix-vagrant-windows
chore: fix vagrant dokku-windows config
2024-09-26 11:10:52 -04:00
dependabot[bot]
8954e51224 chore(deps): bump pymdown-extensions in /docs/_build
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.10.1 to 10.10.2.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.10.1...10.10.2)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-26 14:50:28 +00:00
dependabot[bot]
ab18225237 chore(deps): bump mkdocs-material from 9.5.37 to 9.5.38 in /docs/_build
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.37 to 9.5.38.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.37...9.5.38)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-26 14:50:21 +00:00
Charly Koza
a7e2928f1e chore: fix vagrant dokku-windows config
Fixes #7202.
2024-09-26 11:20:01 +02:00
Jose Diaz-Gonzalez
de33c7375b Merge pull request #7203 from dokku/dependabot/pip/docs/_build/mkdocs-material-9.5.37
chore(deps): bump mkdocs-material from 9.5.36 to 9.5.37 in /docs/_build
2024-09-25 12:28:43 -04:00
dependabot[bot]
afe3ce4ab5 chore(deps): bump mkdocs-material from 9.5.36 to 9.5.37 in /docs/_build
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.36 to 9.5.37.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.36...9.5.37)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-25 13:14:54 +00:00
Dokku Bot
095995da87 Release 0.35.3
# History

## 0.35.3

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.35.3/bootstrap.sh
sudo DOKKU_TAG=v0.35.3 bash bootstrap.sh
```

### Bug Fixes

- #7200: @josegonzalez Automatically select a container type if none is specified
- #7199: @josegonzalez Check if nginx is running before reloading during an app deletion
- #7198: @josegonzalez Add builder-herokuish to default help output
- #7197: @josegonzalez Implement missing network:info command

### Tests

- #7201: @josegonzalez Run arm build on 22.04

### Dependencies

- #7193: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.9 to 10.10.1 in /docs/_build
- #7194: @dependabot[bot] chore(deps): bump traefik from 3.1.2 to 3.1.4 in /plugins/traefik-vhosts
- #7195: @dependabot[bot] chore(deps): bump dokku/openresty-docker-proxy from 0.9.0 to 0.9.1 in /plugins/openresty-vhosts
- #7196: @dependabot[bot] chore(deps): bump socket.io from 4.7.5 to 4.8.0 in /tests/apps/.websocket.disabled
2024-09-24 19:01:02 +00:00
Jose Diaz-Gonzalez
5832523446 Merge pull request #7201 from dokku/buildjet-2204
Run arm build on 22.04
2024-09-23 21:54:05 -04:00
Jose Diaz-Gonzalez
68be10b661 Merge pull request #7200 from dokku/6893-enter-without-container-type
Automatically select a container type if none is specified
2024-09-23 21:53:21 -04:00
Jose Diaz-Gonzalez
0a9ce752cc Merge pull request #7199 from dokku/6832-is-nginx-running
Check if nginx is running before reloading during an app deletion
2024-09-23 21:52:51 -04:00
Jose Diaz-Gonzalez
9d76265e33 fix: run arm build on 22.04
There is no 24.04 buildjet runner, so this just stalls forever.
2024-09-23 21:46:48 -04:00
Jose Diaz-Gonzalez
4b30e33ce8 Merge pull request #7198 from dokku/6974-builder-herokuish-help
Add builder-herokuish to default help output
2024-09-23 21:45:51 -04:00
Jose Diaz-Gonzalez
34bdd15364 Merge pull request #7197 from dokku/7093-network-info
Implement missing network:info command
2024-09-23 21:45:44 -04:00
Jose Diaz-Gonzalez
caa7b10091 fix: automatically select a container type if none is specified
Closes #6893
2024-09-23 21:41:02 -04:00
Jose Diaz-Gonzalez
ac56a5ffdd fix: check if nginx is running before reloading during an app deletion
The purpose of the reload is to remove nginx from being loaded. If nginx isn't running, then by definition the config is not loaded.

Closes #6832
2024-09-23 21:25:23 -04:00
Jose Diaz-Gonzalez
aa74178622 fix: add builder-herokuish to default help output
Closes #6974
2024-09-23 20:33:16 -04:00
Jose Diaz-Gonzalez
61b7752cce fix: implement missing network:info command
Also add json format output to the network:list command.

Closes #7093
2024-09-23 20:27:13 -04:00
Jose Diaz-Gonzalez
0f8395365e Merge pull request #7193 from dokku/dependabot/pip/docs/_build/pymdown-extensions-10.10.1
chore(deps): bump pymdown-extensions from 10.9 to 10.10.1 in /docs/_build
2024-09-23 16:25:13 -04:00
Jose Diaz-Gonzalez
2fd9de8456 Merge pull request #7194 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-3.1.4
chore(deps): bump traefik from 3.1.2 to 3.1.4 in /plugins/traefik-vhosts
2024-09-23 16:24:51 -04:00
Jose Diaz-Gonzalez
a53d8cf5c7 Merge pull request #7195 from dokku/dependabot/docker/plugins/openresty-vhosts/dokku/openresty-docker-proxy-0.9.1
chore(deps): bump dokku/openresty-docker-proxy from 0.9.0 to 0.9.1 in /plugins/openresty-vhosts
2024-09-23 16:24:36 -04:00
Jose Diaz-Gonzalez
551ca6771f Merge pull request #7196 from dokku/dependabot/npm_and_yarn/tests/apps/dot-websocket.disabled/socket.io-4.8.0
chore(deps): bump socket.io from 4.7.5 to 4.8.0 in /tests/apps/.websocket.disabled
2024-09-23 16:24:24 -04:00
dependabot[bot]
04bae1efd9 chore(deps): bump socket.io in /tests/apps/.websocket.disabled
Bumps [socket.io](https://github.com/socketio/socket.io) from 4.7.5 to 4.8.0.
- [Release notes](https://github.com/socketio/socket.io/releases)
- [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io/compare/socket.io@4.7.5...socket.io@4.8.0)

---
updated-dependencies:
- dependency-name: socket.io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 13:57:13 +00:00
dependabot[bot]
e09a9185f5 chore(deps): bump dokku/openresty-docker-proxy
Bumps dokku/openresty-docker-proxy from 0.9.0 to 0.9.1.

---
updated-dependencies:
- dependency-name: dokku/openresty-docker-proxy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 13:30:59 +00:00
dependabot[bot]
fe89dc3ac4 chore(deps): bump traefik from 3.1.2 to 3.1.4 in /plugins/traefik-vhosts
Bumps traefik from 3.1.2 to 3.1.4.

---
updated-dependencies:
- dependency-name: traefik
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 13:21:10 +00:00
dependabot[bot]
66dbd22805 chore(deps): bump pymdown-extensions in /docs/_build
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.9 to 10.10.1.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.9...10.10.1)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 13:18:38 +00:00
84 changed files with 617 additions and 188 deletions

View File

@@ -2,7 +2,7 @@ FROM dokku/dokku:latest
RUN apt-get update RUN apt-get update
RUN apt-get install --no-install-recommends -y build-essential file nano && \ RUN apt-get install --no-install-recommends -y build-essential file nano && \
apt-get install --no-install-recommends -y help2man shellcheck uuid-runtime wget xmlstarlet && \ apt-get install --no-install-recommends -y software-properties-common help2man shellcheck uuid-runtime wget xmlstarlet && \
apt-get clean autoclean && \ apt-get clean autoclean && \
apt-get autoremove --yes && \ apt-get autoremove --yes && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*

View File

@@ -97,7 +97,7 @@ jobs:
build-image-arm64: build-image-arm64:
name: build-image.linux/arm64 name: build-image.linux/arm64
needs: build needs: build
runs-on: buildjet-4vcpu-ubuntu-2404-arm runs-on: buildjet-4vcpu-ubuntu-2204-arm
timeout-minutes: 20 timeout-minutes: 20
steps: steps:

View File

@@ -1,5 +1,58 @@
# History # History
## 0.35.4
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.35.4/bootstrap.sh
sudo DOKKU_TAG=v0.35.4 bash bootstrap.sh
```
### Bug Fixes
- #7209: @josegonzalez Exit non-zero if any deployment tasks fails
- #7211: @josegonzalez Always set the git rev env var when building an app via git:sync
- #7208: @josegonzalez Compute path for docker-container-healthchecker
- #7205: @Cactusbone chore: fix vagrant dokku-windows config
### Tests
- #7210: @josegonzalez Ensure pack binary is installed correctly when running tests in a devcontainer
### Dependencies
- #7206: @dependabot[bot] chore(deps): bump mkdocs-material from 9.5.37 to 9.5.38 in /docs/_build
- #7207: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.10.1 to 10.10.2 in /docs/_build
- #7203: @dependabot[bot] chore(deps): bump mkdocs-material from 9.5.36 to 9.5.37 in /docs/_build
## 0.35.3
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.35.3/bootstrap.sh
sudo DOKKU_TAG=v0.35.3 bash bootstrap.sh
```
### Bug Fixes
- #7200: @josegonzalez Automatically select a container type if none is specified
- #7199: @josegonzalez Check if nginx is running before reloading during an app deletion
- #7198: @josegonzalez Add builder-herokuish to default help output
- #7197: @josegonzalez Implement missing network:info command
### Tests
- #7201: @josegonzalez Run arm build on 22.04
### Dependencies
- #7193: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.9 to 10.10.1 in /docs/_build
- #7194: @dependabot[bot] chore(deps): bump traefik from 3.1.2 to 3.1.4 in /plugins/traefik-vhosts
- #7195: @dependabot[bot] chore(deps): bump dokku/openresty-docker-proxy from 0.9.0 to 0.9.1 in /plugins/openresty-vhosts
- #7196: @dependabot[bot] chore(deps): bump socket.io from 4.7.5 to 4.8.0 in /tests/apps/.websocket.disabled
## 0.35.2 ## 0.35.2
Install/update via the bootstrap script: Install/update via the bootstrap script:

View File

@@ -86,8 +86,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`: To install the latest stable release, run the following commands as a user who has access to `sudo`:
```shell ```shell
wget -NP . https://dokku.com/install/v0.35.2/bootstrap.sh wget -NP . https://dokku.com/install/v0.35.4/bootstrap.sh
sudo DOKKU_TAG=v0.35.2 bash bootstrap.sh sudo DOKKU_TAG=v0.35.4 bash bootstrap.sh
``` ```
You can then proceed to configure your server domain (via `dokku domains:set-global`) and user access (via `dokku ssh-keys:add`) to complete the installation. You can then proceed to configure your server domain (via `dokku domains:set-global`) and user access (via `dokku ssh-keys:add`) to complete the installation.

2
Vagrantfile vendored
View File

@@ -72,7 +72,7 @@ Vagrant::configure("2") do |config|
config.vm.define "dokku-windows", autostart: false do |vm| config.vm.define "dokku-windows", autostart: false do |vm|
vm.vm.hostname = "#{DOKKU_DOMAIN}" vm.vm.hostname = "#{DOKKU_DOMAIN}"
vm.vm.network :private_network, ip: DOKKU_IP vm.vm.network :private_network, ip: DOKKU_IP
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update -qq >/dev/null && apt-get -qq -y --no-install-recommends install git dos2unix >/dev/null" vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update -qq >/dev/null && apt-get -qq -y --no-install-recommends install git dos2unix nginx >/dev/null"
vm.vm.provision :shell, :inline => "cd /vagrant/ && export DOKKU_BRANCH=`git symbolic-ref -q --short HEAD 2>/dev/null` && export DOKKU_TAG=`git describe --tags --exact-match 2>/dev/null` && cd /root/ && cp /vagrant/bootstrap.sh ./ && dos2unix bootstrap.sh && bash bootstrap.sh" vm.vm.provision :shell, :inline => "cd /vagrant/ && export DOKKU_BRANCH=`git symbolic-ref -q --short HEAD 2>/dev/null` && export DOKKU_TAG=`git describe --tags --exact-match 2>/dev/null` && cd /root/ && cp /vagrant/bootstrap.sh ./ && dos2unix bootstrap.sh && bash bootstrap.sh"
end end

2
debian/control vendored
View File

@@ -1,5 +1,5 @@
Package: dokku Package: dokku
Version: 0.35.2 Version: 0.35.4
Section: web Section: web
Priority: optional Priority: optional
Architecture: amd64 Architecture: amd64

View File

@@ -8,11 +8,11 @@ MarkupSafe==2.1.5
mergedeep==1.3.4 mergedeep==1.3.4
mkdocs==1.6.1 mkdocs==1.6.1
mkdocs-exclude==1.0.2 mkdocs-exclude==1.0.2
mkdocs-material==9.5.36 mkdocs-material==9.5.38
mkdocs-material-extensions==1.3.1 mkdocs-material-extensions==1.3.1
packaging==24.1 packaging==24.1
Pygments==2.18.0 Pygments==2.18.0
pymdown-extensions==10.9 pymdown-extensions==10.10.2
pyparsing==3.1.4 pyparsing==3.1.4
python-dateutil==2.9.0.post0 python-dateutil==2.9.0.post0
PyYAML==6.0.2 PyYAML==6.0.2

View File

@@ -36,35 +36,35 @@ dokku plugin:list
``` ```
plugn: dev plugn: dev
00_dokku-standard 0.35.2 enabled dokku core standard plugin 00_dokku-standard 0.35.4 enabled dokku core standard plugin
20_events 0.35.2 enabled dokku core events logging plugin 20_events 0.35.4 enabled dokku core events logging plugin
app-json 0.35.2 enabled dokku core app-json plugin app-json 0.35.4 enabled dokku core app-json plugin
apps 0.35.2 enabled dokku core apps plugin apps 0.35.4 enabled dokku core apps plugin
build-env 0.35.2 enabled dokku core build-env plugin build-env 0.35.4 enabled dokku core build-env plugin
buildpacks 0.35.2 enabled dokku core buildpacks plugin buildpacks 0.35.4 enabled dokku core buildpacks plugin
certs 0.35.2 enabled dokku core certificate management plugin certs 0.35.4 enabled dokku core certificate management plugin
checks 0.35.2 enabled dokku core checks plugin checks 0.35.4 enabled dokku core checks plugin
common 0.35.2 enabled dokku core common plugin common 0.35.4 enabled dokku core common plugin
config 0.35.2 enabled dokku core config plugin config 0.35.4 enabled dokku core config plugin
docker-options 0.35.2 enabled dokku core docker-options plugin docker-options 0.35.4 enabled dokku core docker-options plugin
domains 0.35.2 enabled dokku core domains plugin domains 0.35.4 enabled dokku core domains plugin
enter 0.35.2 enabled dokku core enter plugin enter 0.35.4 enabled dokku core enter plugin
git 0.35.2 enabled dokku core git plugin git 0.35.4 enabled dokku core git plugin
logs 0.35.2 enabled dokku core logs plugin logs 0.35.4 enabled dokku core logs plugin
network 0.35.2 enabled dokku core network plugin network 0.35.4 enabled dokku core network plugin
nginx-vhosts 0.35.2 enabled dokku core nginx-vhosts plugin nginx-vhosts 0.35.4 enabled dokku core nginx-vhosts plugin
plugin 0.35.2 enabled dokku core plugin plugin plugin 0.35.4 enabled dokku core plugin plugin
proxy 0.35.2 enabled dokku core proxy plugin proxy 0.35.4 enabled dokku core proxy plugin
ps 0.35.2 enabled dokku core ps plugin ps 0.35.4 enabled dokku core ps plugin
repo 0.35.2 enabled dokku core repo plugin repo 0.35.4 enabled dokku core repo plugin
resource 0.35.2 enabled dokku core resource plugin resource 0.35.4 enabled dokku core resource plugin
scheduler-docker-local 0.35.2 enabled dokku core scheduler-docker-local plugin scheduler-docker-local 0.35.4 enabled dokku core scheduler-docker-local plugin
shell 0.35.2 enabled dokku core shell plugin shell 0.35.4 enabled dokku core shell plugin
ssh-keys 0.35.2 enabled dokku core ssh-keys plugin ssh-keys 0.35.4 enabled dokku core ssh-keys plugin
storage 0.35.2 enabled dokku core storage plugin storage 0.35.4 enabled dokku core storage plugin
tags 0.35.2 enabled dokku core tags plugin tags 0.35.4 enabled dokku core tags plugin
tar 0.35.2 enabled dokku core tar plugin tar 0.35.4 enabled dokku core tar plugin
trace 0.35.2 enabled dokku core trace plugin trace 0.35.4 enabled dokku core trace plugin
``` ```
> [!WARNING] > [!WARNING]

View File

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

View File

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

View File

@@ -32,6 +32,6 @@
"0.32.4", "0.32.4",
"0.33.9", "0.33.9",
"0.34.9", "0.34.9",
"0.35.2" "0.35.4"
] ]
} }

View File

@@ -29,7 +29,7 @@ The workflow looks like this:
```shell ```shell
# having dokku-arch in ../dokku-arch # having dokku-arch in ../dokku-arch
vagrant up build-arch vagrant up build-arch
# wait for "==> build-arch: ==> Finished making: dokku 0.35.2-2 (Mon Feb 22 23:20:37 CET 2016)" # wait for "==> build-arch: ==> Finished making: dokku 0.35.4-2 (Mon Feb 22 23:20:37 CET 2016)"
cd ../dokku-arch cd ../dokku-arch
git add PKGBUILD .SRCINFO git add PKGBUILD .SRCINFO
git commit -m 'Update to dokku 0.9.9' git commit -m 'Update to dokku 0.9.9'

View File

@@ -3,7 +3,7 @@
Pull the dokku/dokku image: Pull the dokku/dokku image:
```shell ```shell
docker pull dokku/dokku:0.35.2 docker pull dokku/dokku:0.35.4
``` ```
Next, run the image. Next, run the image.
@@ -19,7 +19,7 @@ docker container run -d \
--publish 8443:443 \ --publish 8443:443 \
--volume /var/lib/dokku:/mnt/dokku \ --volume /var/lib/dokku:/mnt/dokku \
--volume /var/run/docker.sock:/var/run/docker.sock \ --volume /var/run/docker.sock:/var/run/docker.sock \
dokku/dokku:0.35.2 dokku/dokku:0.35.4
``` ```
Alternatively, you can use `docker-compose.yml`: Alternatively, you can use `docker-compose.yml`:
@@ -27,7 +27,7 @@ Alternatively, you can use `docker-compose.yml`:
```yaml ```yaml
services: services:
dokku: dokku:
image: dokku/dokku:0.35.2 image: dokku/dokku:0.35.4
container_name: dokku container_name: dokku
network_mode: bridge network_mode: bridge
ports: ports:
@@ -83,7 +83,7 @@ redis: https://github.com/dokku/dokku-redis.git
The alternative is to build a custom docker image via a custom Dockerfile. This Dockerfile can run any `plugin:install` command. Note that the version installed at that time will be the one that persists. Below is an example Dockerfile showing this method. The alternative is to build a custom docker image via a custom Dockerfile. This Dockerfile can run any `plugin:install` command. Note that the version installed at that time will be the one that persists. Below is an example Dockerfile showing this method.
```Dockerfile ```Dockerfile
FROM dokku/dokku:0.35.2 FROM dokku/dokku:0.35.4
RUN dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres RUN dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres
RUN dokku plugin:install https://github.com/dokku/dokku-redis.git redis RUN dokku plugin:install https://github.com/dokku/dokku-redis.git redis
``` ```

View File

@@ -37,8 +37,8 @@ To install the latest stable version of Dokku, you can run the following shell c
```shell ```shell
# for debian systems, installs Dokku via apt-get # for debian systems, installs Dokku via apt-get
wget -NP . https://dokku.com/install/v0.35.2/bootstrap.sh wget -NP . https://dokku.com/install/v0.35.4/bootstrap.sh
sudo DOKKU_TAG=v0.35.2 bash bootstrap.sh sudo DOKKU_TAG=v0.35.4 bash bootstrap.sh
``` ```
The installation process takes about 5-10 minutes, depending upon internet connection speed. The installation process takes about 5-10 minutes, depending upon internet connection speed.

View File

@@ -10,26 +10,26 @@
<meta name="author" content=""> <meta name="author" content="">
<title>Dokku - The smallest PaaS implementation you've ever seen</title> <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.35.2/docs/assets/favicons/apple-touch-icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-76x76.png"> <link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-114x114.png"> <link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32"> <link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.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.35.4/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96"> <link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16"> <link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/manifest.json"> <link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/favicon.ico"> <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/favicon.ico">
<meta name="apple-mobile-web-app-title" content="Dokku"> <meta name="apple-mobile-web-app-title" content="Dokku">
<meta name="application-name" content="Dokku"> <meta name="application-name" content="Dokku">
<meta name="msapplication-TileColor" content="#da532c"> <meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/mstile-144x144.png"> <meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/browserconfig.xml"> <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/browserconfig.xml">
<meta name="theme-color" content="#ffffff"> <meta name="theme-color" content="#ffffff">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
@@ -38,7 +38,7 @@
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/style.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/style.css" rel="stylesheet">
<!-- <link href="./assets/style.css" rel="stylesheet"> --> <!-- <link href="./assets/style.css" rel="stylesheet"> -->
</head> </head>
@@ -98,7 +98,7 @@
<main class="container px-4 px-lg-5"> <main class="container px-4 px-lg-5">
<div class="row"> <div class="row">
<div class="col-lg-7"> <div class="col-lg-7">
<a class="badge-link" href="https://github.com/dokku/dokku/releases"><span class="badge py-2 d-flex fit-content"><div class="circle align-self-center me-2"></div>Latest release <span id="releaseVersion" class="ms-1">v0.35.2</span></span></a> <a class="badge-link" href="https://github.com/dokku/dokku/releases"><span class="badge py-2 d-flex fit-content"><div class="circle align-self-center me-2"></div>Latest release <span id="releaseVersion" class="ms-1">v0.35.4</span></span></a>
<h1 class="text-white hero-heading mt-5">An open source PAAS alternative to Heroku.</h1> <h1 class="text-white hero-heading mt-5">An open source PAAS alternative to Heroku.</h1>
<h4 class="text-white mt-5">Dokku helps you build and manage the lifecycle of applications from building to scaling.</h4> <h4 class="text-white mt-5">Dokku helps you build and manage the lifecycle of applications from building to scaling.</h4>
<div class="d-flex mt-5"> <div class="d-flex mt-5">
@@ -125,7 +125,7 @@
</p> </p>
<p class="line"> <p class="line">
<span class="prompt">$</span> <span class="prompt">$</span>
<span class="command">sudo DOKKU_TAG=v0.35.2 bash bootstrap.sh</span> <span class="command">sudo DOKKU_TAG=v0.35.4 bash bootstrap.sh</span>
</p> </p>
<br> <br>

View File

@@ -4,15 +4,15 @@
> New as of 0.11.0, Enhanced in 0.20.0 > New as of 0.11.0, Enhanced in 0.20.0
``` ```
network:create <network> # Creates an attachable docker network network:create <network> # Creates an attachable docker network
network:destroy <network> # Destroys a docker network network:destroy <network> # Destroys a docker network
network:exists <network> # Checks if a docker network exists network:exists <network> # Checks if a docker network exists
network:info <network> # Outputs information about a docker network network:info <network> [--format text|json] # Outputs information about a docker network
network:list # Lists all docker networks network:list [--format text|json] # Lists all docker networks
network:report [<app>] [<flag>] # Displays a network report for one or more apps network:report [<app>] [<flag>] # Displays a network report for one or more apps
network:rebuild <app> # Rebuilds network settings for an app network:rebuild <app> # Rebuilds network settings for an app
network:rebuildall # Rebuild network settings for all apps network:rebuildall # Rebuild network settings for all apps
network:set <app> <key> (<value>) # Set or clear a network property for an app network:set <app> <key> (<value>) # Set or clear a network property for an app
``` ```
The Network plugin allows developers to abstract the concept of container network management, allowing developers to both change what networks a given container is attached to as well as rebuild the configuration on the fly. The Network plugin allows developers to abstract the concept of container network management, allowing developers to both change what networks a given container is attached to as well as rebuild the configuration on the fly.
@@ -51,6 +51,21 @@ none
test-network test-network
``` ```
The `network:list` command also takes a `--format` flag, with the valid options including `text` (default) and `json`. The `json` output format can be used for automation purposes:
```shell
dokku network:list --format json
```
```
[
{"CreatedAt":"2024-02-25T01:55:24.275184461Z","Driver":"bridge","ID":"d18df2d21433","Internal":false,"IPv6":false,"Labels":{},"Name":"bridge","Scope":"local"},
{"CreatedAt":"2024-02-25T01:55:24.275184461Z","Driver":"bridge","ID":"f50fa882e7de","Internal":false,"IPv6":false,"Labels":{},"Name":"test-network","Scope":"local"},
{"CreatedAt":"2024-02-25T01:55:24.275184461Z","Driver":"host","ID":"ab6a59291443","Internal":false,"IPv6":false,"Labels":{},"Name":"host","Scope":"local"},
{"CreatedAt":"2024-02-25T01:55:24.275184461Z","Driver":"null","ID":"e2506bc8b7d7","Internal":false,"IPv6":false,"Labels":{},"Name":"none","Scope":"local"}
]
```
### Creating a network ### Creating a network
> [!IMPORTANT] > [!IMPORTANT]
@@ -117,16 +132,30 @@ The `network:exists` command will return non-zero if the network does not exist,
### Checking network info ### Checking network info
> [!IMPORTANT] > [!IMPORTANT]
> New as of 0.20.0, Requires Docker 1.21+ > New as of 0.35.3
Network information can be retrieved via the `network:info` command. This is a slightly different version of the `docker network` command. Network information can be retrieved via the `network:info` command. This is a slightly different version of the `docker network` command.
```shell ```shell
dokku network:info test-network dokku network:info bridge
``` ```
``` ```
// TODO =====> bridge network information
ID: d18df2d21433
Name: bridge
Driver: bridge
Scope: local
```
The `network:info` command also takes a `--format` flag, with the valid options including `text` (default) and `json`. The `json` output format can be used for automation purposes:
```shell
dokku network:info bridge --format json
```
```
{"CreatedAt":"2024-02-25T01:55:24.275184461Z","Driver":"bridge","ID":"d18df2d21433","Internal":false,"IPv6":false,"Labels":{},"Name":"bridge","Scope":"local"}
``` ```
### Routing an app to a known ip:port combination ### Routing an app to a known ip:port combination

View File

@@ -12,6 +12,9 @@ enter <app> [<container-type> || --container-id <container-id>] # Connect to a
The `enter` command can be used to enter a running container. The following variations of the command exist: The `enter` command can be used to enter a running container. The following variations of the command exist:
```shell ```shell
# enter the first container
dokku enter node-js-app
# enter the web process # enter the web process
dokku enter node-js-app web dokku enter node-js-app web

View File

@@ -9,26 +9,26 @@
<meta name="author" content=""> <meta name="author" content="">
<title>Dokku - {{DOC_TITLE}}</title> <title>Dokku - {{DOC_TITLE}}</title>
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-76x76.png"> <link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-114x114.png"> <link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32"> <link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.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.35.4/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96"> <link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16"> <link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/manifest.json"> <link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/favicon.ico"> <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/favicon.ico">
<meta name="apple-mobile-web-app-title" content="Dokku"> <meta name="apple-mobile-web-app-title" content="Dokku">
<meta name="application-name" content="Dokku"> <meta name="application-name" content="Dokku">
<meta name="msapplication-TileColor" content="#da532c"> <meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/mstile-144x144.png"> <meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/favicons/browserconfig.xml"> <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/favicons/browserconfig.xml">
<meta name="theme-color" content="#ffffff"> <meta name="theme-color" content="#ffffff">
<script> <script>
@@ -48,7 +48,7 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.2/docs/assets/style.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.4/docs/assets/style.css" rel="stylesheet">
<!-- <link href="./assets/style.css" rel="stylesheet"> --> <!-- <link href="./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"> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
</head> </head>

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core builder-dockerfile plugin" description = "dokku core builder-dockerfile plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -0,0 +1,15 @@
#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_AVAILABLE_PATH/builder-herokuish/help-functions"
case "$1" in
help | builder-herokuish:help)
cmd-builder-herokuish-help "$@"
;;
*)
exit "$DOKKU_NOT_IMPLEMENTED_EXIT"
;;
esac

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core builder-herokuish plugin" description = "dokku core builder-herokuish plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core builder-lambda plugin" description = "dokku core builder-lambda plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core builder-nixpacks plugin" description = "dokku core builder-nixpacks plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core builder-null plugin" description = "dokku core builder-null plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core builder-pack plugin" description = "dokku core builder-pack plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core builder plugin" description = "dokku core builder plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core buildpacks plugin" description = "dokku core buildpacks plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core caddy-vhosts plugin" description = "dokku core caddy-vhosts plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

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

View File

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

View File

@@ -3,6 +3,7 @@ package common
import ( import (
"fmt" "fmt"
"os" "os"
"strconv"
"strings" "strings"
"time" "time"
) )
@@ -64,6 +65,17 @@ func ContainerWait(containerID string) bool {
if err != nil { if err != nil {
return false return false
} }
stdout := result.StdoutContents()
if stdout != "0" {
exitCode, err := strconv.Atoi(stdout)
if err != nil {
return false
}
return exitCode == 0
}
return result.ExitCode == 0 return result.ExitCode == 0
} }

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core cron plugin" description = "dokku core cron plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

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

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core domains plugin" description = "dokku core domains plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core enter plugin" description = "dokku core enter plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -235,10 +235,11 @@ cmd-git-sync() {
if [[ "$SHOULD_BUILD" == "true" ]]; then if [[ "$SHOULD_BUILD" == "true" ]]; then
if [[ -n "$GIT_REF" ]]; then if [[ -n "$GIT_REF" ]]; then
GIT_REF="$(fn-git-cmd "$APP_ROOT" rev-parse "$GIT_REF")" GIT_REF="$(fn-git-cmd "$APP_ROOT" rev-parse "$GIT_REF")"
plugn trigger receive-app "$APP" "$GIT_REF"
else else
plugn trigger receive-app "$APP" GIT_REF="$UPDATED_REF"
fi fi
plugn trigger receive-app "$APP" "$GIT_REF"
plugn trigger deploy-source-set "$APP" "git-sync" "${GIT_REMOTE}#${GIT_REF}" plugn trigger deploy-source-set "$APP" "git-sync" "${GIT_REMOTE}#${GIT_REF}"
fi fi
} }

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core git plugin" description = "dokku core git plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core haproxy-vhosts plugin" description = "dokku core haproxy-vhosts plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core logs plugin" description = "dokku core logs plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,13 +1,27 @@
package network package network
import ( import (
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"strconv"
"strings" "strings"
"time"
"github.com/dokku/dokku/plugins/common" "github.com/dokku/dokku/plugins/common"
) )
type DockerNetwork struct {
CreatedAt time.Time
Driver string
ID string
Internal bool
IPv6 bool
Labels map[string]string
Name string
Scope string
}
// attachAppToNetwork attaches a container to a network // attachAppToNetwork attaches a container to a network
func attachAppToNetwork(containerID string, networkName string, appName string, phase string, processType string) error { func attachAppToNetwork(containerID string, networkName string, appName string, phase string, processType string) error {
if isContainerInNetwork(containerID, networkName) { if isContainerInNetwork(containerID, networkName) {
@@ -110,13 +124,13 @@ func networkExists(networkName string) (bool, error) {
exists := false exists := false
networks, err := listNetworks() networks, err := getNetworks()
if err != nil { if err != nil {
return false, err return false, err
} }
for _, n := range networks { for _, network := range networks {
if networkName == n { if networkName == network.Name {
exists = true exists = true
break break
} }
@@ -125,21 +139,75 @@ func networkExists(networkName string) (bool, error) {
return exists, nil return exists, nil
} }
// listNetworks returns a list of docker networks // getNetworks returns a list of docker networks
func listNetworks() ([]string, error) { func getNetworks() (map[string]DockerNetwork, error) {
result, err := common.CallExecCommand(common.ExecCommandInput{ result, err := common.CallExecCommand(common.ExecCommandInput{
Command: common.DockerBin(), Command: common.DockerBin(),
Args: []string{"network", "ls", "--format", "{{ .Name }}"}, Args: []string{"network", "ls", "--format", "json"},
}) })
if err != nil { if err != nil {
common.LogVerboseQuiet(result.StderrContents()) common.LogVerboseQuiet(result.StderrContents())
return []string{}, err return map[string]DockerNetwork{}, err
} }
if result.ExitCode != 0 { if result.ExitCode != 0 {
common.LogVerboseQuiet(result.StderrContents()) common.LogVerboseQuiet(result.StderrContents())
return []string{}, fmt.Errorf("Unable to list networks") return map[string]DockerNetwork{}, fmt.Errorf("Unable to list networks")
}
networkLines := strings.Split(result.StdoutContents(), "\n")
networks := map[string]DockerNetwork{}
for _, line := range networkLines {
if line == "" {
continue
}
result := make(map[string]interface{})
err := json.Unmarshal([]byte(line), &result)
if err != nil {
return map[string]DockerNetwork{}, err
}
network := DockerNetwork{
Driver: result["Driver"].(string),
ID: result["ID"].(string),
Name: result["Name"].(string),
Scope: result["Scope"].(string),
Labels: map[string]string{},
}
if createdAtVal := result["CreatedAt"].(string); createdAtVal != "" {
createdAt, err := time.Parse("2006-01-02 15:04:05.999999999 -0700 MST", "2024-02-25 01:55:24.275184461 +0000 UTC")
if err == nil {
network.CreatedAt = createdAt
}
}
if ipv6Val := result["IPv6"].(string); ipv6Val != "" {
val, err := strconv.ParseBool(ipv6Val)
if err == nil {
network.IPv6 = val
}
}
if internalVal := result["Internal"].(string); internalVal != "" {
val, err := strconv.ParseBool(internalVal)
if err == nil {
network.Internal = val
}
}
labels := strings.Split(result["Labels"].(string), ",")
for _, v := range labels {
parts := strings.SplitN(v, "=", 2)
if len(parts) != 2 {
continue
}
key := parts[0]
value := parts[1]
network.Labels[key] = value
}
networks[network.Name] = network
} }
networks := strings.Split(result.StdoutContents(), "\n")
return networks, nil return networks, nil
} }

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core network plugin" description = "dokku core network plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -21,8 +21,8 @@ Additional commands:`
network:create <network>, Creates an attachable docker network network:create <network>, Creates an attachable docker network
network:destroy <network>, Destroys a docker network network:destroy <network>, Destroys a docker network
network:exists <network>, Checks if a docker network exists network:exists <network>, Checks if a docker network exists
network:info <network>, Outputs information about a docker network network:info <network> [--format text|json], Outputs information about a docker network
network:list, Lists all docker networks network:list [--format text|json], Lists all docker networks
network:rebuild <app>, Rebuilds network settings for an app network:rebuild <app>, Rebuilds network settings for an app
network:rebuildall, Rebuild network settings for all apps network:rebuildall, Rebuild network settings for all apps
network:report [<app>] [<flag>], Displays a network report for one or more apps network:report [<app>] [<flag>], Displays a network report for one or more apps

View File

@@ -36,12 +36,15 @@ func main() {
err = network.CommandExists(networkName) err = network.CommandExists(networkName)
case "info": case "info":
args := flag.NewFlagSet("network:info", flag.ExitOnError) args := flag.NewFlagSet("network:info", flag.ExitOnError)
format := args.String("format", "text", "format: [ text | json ]")
args.Parse(os.Args[2:]) args.Parse(os.Args[2:])
err = network.CommandInfo() networkName := args.Arg(0)
err = network.CommandInfo(networkName, *format)
case "list": case "list":
args := flag.NewFlagSet("network:list", flag.ExitOnError) args := flag.NewFlagSet("network:list", flag.ExitOnError)
format := args.String("format", "text", "format: [ text | json ]")
args.Parse(os.Args[2:]) args.Parse(os.Args[2:])
err = network.CommandList() err = network.CommandList(*format)
case "rebuild": case "rebuild":
args := flag.NewFlagSet("network:rebuild", flag.ExitOnError) args := flag.NewFlagSet("network:rebuild", flag.ExitOnError)
args.Parse(os.Args[2:]) args.Parse(os.Args[2:])

View File

@@ -1,6 +1,7 @@
package network package network
import ( import (
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"os" "os"
@@ -74,20 +75,67 @@ func CommandExists(networkName string) error {
} }
// CommandInfo is an alias for "docker network inspect" // CommandInfo is an alias for "docker network inspect"
func CommandInfo() error { func CommandInfo(networkName string, format string) error {
return nil if networkName == "" {
} return errors.New("No network name specified")
}
// CommandList is an alias for "docker network ls" if format != "json" && format != "text" {
func CommandList() error { return errors.New("Invalid format specified, use either text or json")
networks, err := listNetworks() }
networks, err := getNetworks()
if err != nil { if err != nil {
return err return err
} }
network, ok := networks[networkName]
if !ok {
return errors.New("Network does not exist")
}
if format == "json" {
out, err := json.Marshal(network)
if err != nil {
return err
}
common.Log(string(out))
return nil
}
length := 10
common.LogInfo2Quiet(fmt.Sprintf("%s network information", networkName))
common.LogVerbose(fmt.Sprintf("%s%s", common.RightPad("ID:", length, " "), network.ID))
common.LogVerbose(fmt.Sprintf("%s%s", common.RightPad("Name:", length, " "), network.Name))
common.LogVerbose(fmt.Sprintf("%s%s", common.RightPad("Driver:", length, " "), network.Driver))
common.LogVerbose(fmt.Sprintf("%s%s", common.RightPad("Scope:", length, " "), network.Scope))
return nil
}
// CommandList is an alias for "docker network ls"
func CommandList(format string) error {
networks, err := getNetworks()
if err != nil {
return err
}
if format == "json" {
networkList := []DockerNetwork{}
for _, network := range networks {
networkList = append(networkList, network)
}
out, err := json.Marshal(networkList)
if err != nil {
return err
}
common.Log(string(out))
return nil
}
common.LogInfo2Quiet("Networks") common.LogInfo2Quiet("Networks")
for _, networkName := range networks { for _, network := range networks {
fmt.Println(networkName) fmt.Println(network.Name)
} }
return nil return nil

View File

@@ -75,7 +75,7 @@ trigger-nginx-vhosts-install() {
case "$DOKKU_DISTRO" in case "$DOKKU_DISTRO" in
debian | raspbian) debian | raspbian)
if [[ -x "$systemctl_path" ]]; then if [[ -x "$systemctl_path" ]]; then
echo "%dokku ALL=(ALL) NOPASSWD:$systemctl_path enable $NGINX_INIT_NAME, $systemctl_path disable $NGINX_INIT_NAME, $systemctl_path reload $NGINX_INIT_NAME, $systemctl_path start $NGINX_INIT_NAME, $systemctl_path stop $NGINX_INIT_NAME, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE" echo "%dokku ALL=(ALL) NOPASSWD:$systemctl_path enable $NGINX_INIT_NAME, $systemctl_path disable $NGINX_INIT_NAME, $systemctl_path reload $NGINX_INIT_NAME, $systemctl_path start $NGINX_INIT_NAME, $systemctl_path stop $NGINX_INIT_NAME, $systemctl_path is-active --quiet $NGINX_INIT_NAME, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE"
else else
echo "%dokku ALL=(ALL) NOPASSWD:/usr/sbin/invoke-rc.d $NGINX_INIT_NAME enable, /usr/sbin/invoke-rc.d $NGINX_INIT_NAME disable, /usr/sbin/invoke-rc.d $NGINX_INIT_NAME reload, /usr/sbin/invoke-rc.d $NGINX_INIT_NAME start, /usr/sbin/invoke-rc.d $NGINX_INIT_NAME stop, $NGINX_BIN -t, ${NGINX_BIN} -t -c *" >"$NGINX_SUDOERS_FILE" echo "%dokku ALL=(ALL) NOPASSWD:/usr/sbin/invoke-rc.d $NGINX_INIT_NAME enable, /usr/sbin/invoke-rc.d $NGINX_INIT_NAME disable, /usr/sbin/invoke-rc.d $NGINX_INIT_NAME reload, /usr/sbin/invoke-rc.d $NGINX_INIT_NAME start, /usr/sbin/invoke-rc.d $NGINX_INIT_NAME stop, $NGINX_BIN -t, ${NGINX_BIN} -t -c *" >"$NGINX_SUDOERS_FILE"
fi fi
@@ -83,18 +83,18 @@ trigger-nginx-vhosts-install() {
ubuntu) ubuntu)
if [[ "$DOKKU_INIT_SYSTEM" == "sv" ]]; then if [[ "$DOKKU_INIT_SYSTEM" == "sv" ]]; then
echo "%dokku ALL=(ALL) NOPASSWD:/usr/bin/sv enable $NGINX_INIT_NAME, /usr/bin/sv disable $NGINX_INIT_NAME, /usr/bin/sv reload $NGINX_INIT_NAME, /usr/bin/sv start $NGINX_INIT_NAME, /usr/bin/sv stop $NGINX_INIT_NAME, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE" echo "%dokku ALL=(ALL) NOPASSWD:/usr/bin/sv enable $NGINX_INIT_NAME, /usr/bin/sv disable $NGINX_INIT_NAME, /usr/bin/sv reload $NGINX_INIT_NAME, /usr/bin/sv start $NGINX_INIT_NAME, /usr/bin/sv stop $NGINX_INIT_NAME, /usr/bin/sv status $NGINX_INIT_NAME, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE"
elif [[ -x "$systemctl_path" ]]; then elif [[ -x "$systemctl_path" ]]; then
echo "%dokku ALL=(ALL) NOPASSWD:$systemctl_path enable $NGINX_INIT_NAME, $systemctl_path disable $NGINX_INIT_NAME, $systemctl_path reload $NGINX_INIT_NAME, $systemctl_path start $NGINX_INIT_NAME, $systemctl_path stop $NGINX_INIT_NAME, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE" echo "%dokku ALL=(ALL) NOPASSWD:$systemctl_path enable $NGINX_INIT_NAME, $systemctl_path disable $NGINX_INIT_NAME, $systemctl_path reload $NGINX_INIT_NAME, $systemctl_path start $NGINX_INIT_NAME, $systemctl_path stop $NGINX_INIT_NAME, $systemctl_path is-active --quiet $NGINX_INIT_NAME, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE"
elif [[ -x /usr/bin/sv ]]; then elif [[ -x /usr/bin/sv ]]; then
echo "%dokku ALL=(ALL) NOPASSWD:/usr/bin/sv enable $NGINX_INIT_NAME, /usr/bin/sv disable $NGINX_INIT_NAME, /usr/bin/sv reload $NGINX_INIT_NAME, /usr/bin/sv start $NGINX_INIT_NAME, /usr/bin/sv stop $NGINX_INIT_NAME, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE" echo "%dokku ALL=(ALL) NOPASSWD:/usr/bin/sv enable $NGINX_INIT_NAME, /usr/bin/sv disable $NGINX_INIT_NAME, /usr/bin/sv reload $NGINX_INIT_NAME, /usr/bin/sv start $NGINX_INIT_NAME, /usr/bin/sv stop $NGINX_INIT_NAME, /usr/bin/sv status $NGINX_INIT_NAME, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE"
else else
echo "%dokku ALL=(ALL) NOPASSWD:/etc/init.d/$NGINX_INIT_NAME enable, /etc/init.d/$NGINX_INIT_NAME disable, /etc/init.d/$NGINX_INIT_NAME reload, /etc/init.d/$NGINX_INIT_NAME start, /etc/init.d/$NGINX_INIT_NAME stop, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE" echo "%dokku ALL=(ALL) NOPASSWD:/etc/init.d/$NGINX_INIT_NAME enable, /etc/init.d/$NGINX_INIT_NAME disable, /etc/init.d/$NGINX_INIT_NAME reload, /etc/init.d/$NGINX_INIT_NAME start, /etc/init.d/$NGINX_INIT_NAME stop, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE"
fi fi
;; ;;
arch) arch)
echo "%dokku ALL=(ALL) NOPASSWD:$systemctl_path enable $NGINX_INIT_NAME, $systemctl_path disable $NGINX_INIT_NAME, $systemctl_path reload $NGINX_INIT_NAME, $systemctl_path start $NGINX_INIT_NAME, $systemctl_path stop $NGINX_INIT_NAME, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE" echo "%dokku ALL=(ALL) NOPASSWD:$systemctl_path enable $NGINX_INIT_NAME, $systemctl_path disable $NGINX_INIT_NAME, $systemctl_path reload $NGINX_INIT_NAME, $systemctl_path start $NGINX_INIT_NAME, $systemctl_path stop $NGINX_INIT_NAME, $systemctl_path is-active --quiet $NGINX_INIT_NAME, $NGINX_BIN -t, $NGINX_BIN -t -c *" >"$NGINX_SUDOERS_FILE"
;; ;;
esac esac

View File

@@ -523,6 +523,57 @@ fn-nginx-vhosts-nginx-location() {
echo "$NGINX_LOCATION" echo "$NGINX_LOCATION"
} }
fn-nginx-vhosts-nginx-is-running() {
declare desc="check if nginx is running"
local NGINX_INIT_NAME
NGINX_INIT_NAME=nginx
if fn-nginx-vhosts-uses-openresty; then
NGINX_INIT_NAME=openresty
fi
case "$DOKKU_DISTRO" in
debian | raspbian)
if [[ -x "$systemctl_path" ]]; then
if sudo "$systemctl_path" is-active --quiet "$NGINX_INIT_NAME"; then
return 0
fi
else
dokku_log_warn "Checking $NGINX_INIT_NAME status is not possible for init.d managed services"
return 0
fi
;;
ubuntu)
# support docker-based installations
if [[ "$DOKKU_INIT_SYSTEM" == "sv" ]]; then
if sudo /usr/bin/sv status $NGINX_INIT_NAME | grep -q "^run:"; then
return 0
fi
elif [[ -x "$systemctl_path" ]]; then
if sudo "$systemctl_path" is-active --quiet "$NGINX_INIT_NAME"; then
return 0
fi
elif [[ -x /usr/bin/sv ]]; then
if sudo /usr/bin/sv status $NGINX_INIT_NAME | grep -q "^run:"; then
return 0
fi
else
dokku_log_warn "Checking $NGINX_INIT_NAME status is not possible for init.d managed services"
return 0
fi
;;
arch)
if sudo "$systemctl_path" is-active --quiet "$NGINX_INIT_NAME"; then
return 0
fi
;;
esac
return 1
}
fn-nginx-vhosts-nginx-init-cmd() { fn-nginx-vhosts-nginx-init-cmd() {
declare desc="start nginx for given distros" declare desc="start nginx for given distros"
declare CMD="$1" declare CMD="$1"

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core nginx-vhosts plugin" description = "dokku core nginx-vhosts plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -10,7 +10,9 @@ trigger-nginx-vhosts-post-delete() {
declare APP="$1" declare APP="$1"
fn-plugin-property-destroy "nginx" "$APP" fn-plugin-property-destroy "nginx" "$APP"
restart_nginx "$@" >/dev/null if fn-nginx-vhosts-nginx-is-running; then
restart_nginx "$@" >/dev/null
fi
rm -rf "${DOKKU_LIB_ROOT}/data/nginx-vhosts/app-$APP" rm -rf "${DOKKU_LIB_ROOT}/data/nginx-vhosts/app-$APP"
} }

View File

@@ -1 +1 @@
FROM dokku/openresty-docker-proxy:0.9.0 FROM dokku/openresty-docker-proxy:0.9.1

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core openresty-vhosts plugin" description = "dokku core openresty-vhosts plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

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

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core ports plugin" description = "dokku core ports plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core proxy plugin" description = "dokku core proxy plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core ps plugin" description = "dokku core ps plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core registry plugin" description = "dokku core registry plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core repo plugin" description = "dokku core repo plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core resource plugin" description = "dokku core resource plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core run plugin" description = "dokku core run plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -153,7 +153,10 @@ trigger-scheduler-docker-local-check-deploy() {
echo "$content" >"$TMP_APP_JSON_OUTPUT" echo "$content" >"$TMP_APP_JSON_OUTPUT"
fi fi
sudo /usr/bin/docker-container-healthchecker check "$DOKKU_APP_CONTAINER_ID" "${ARG_ARRAY[@]}" || FAILEDCHECKS="$?" local docker_container_healthchecker_path
docker_container_healthchecker_path="$(command -v docker-container-healthchecker)"
sudo "$docker_container_healthchecker_path" check "$DOKKU_APP_CONTAINER_ID" "${ARG_ARRAY[@]}" || FAILEDCHECKS="$?"
if [[ $FAILEDCHECKS -gt 0 ]]; then if [[ $FAILEDCHECKS -gt 0 ]]; then
"$DOCKER_BIN" container update --restart=no "$DOKKU_APP_CONTAINER_ID" &>/dev/null || true "$DOCKER_BIN" container update --restart=no "$DOKKU_APP_CONTAINER_ID" &>/dev/null || true

View File

@@ -16,7 +16,9 @@ trigger-scheduler-docker-local-install() {
rm -f "/etc/sudoers.d/dokku-cron" rm -f "/etc/sudoers.d/dokku-cron"
echo "%dokku ALL=(ALL) NOPASSWD:/usr/bin/docker-container-healthchecker" >"/etc/sudoers.d/dokku-docker-container-healthchecker" local docker_container_healthchecker_path
docker_container_healthchecker_path="$(command -v docker-container-healthchecker)"
echo "%dokku ALL=(ALL) NOPASSWD:$docker_container_healthchecker_path" >"/etc/sudoers.d/dokku-docker-container-healthchecker"
chmod "0440" "/etc/sudoers.d/dokku-docker-container-healthchecker" chmod "0440" "/etc/sudoers.d/dokku-docker-container-healthchecker"
DOKKU_PATH="$(command -v dokku)" DOKKU_PATH="$(command -v dokku)"

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core scheduler-docker-local plugin" description = "dokku core scheduler-docker-local plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -39,7 +39,7 @@ trigger-scheduler-docker-local-scheduler-enter() {
esac esac
done done
if [[ -z "$CONTAINER_ID" ]] && [[ -z "$CONTAINER_TYPE" ]]; then if [[ -z "$CONTAINER_ID" ]] && [[ -z "$CONTAINER_TYPE" || "$CONTAINER_TYPE" == "--" ]]; then
AVAILABLE_CONTAINER_TYPES=($(get_app_running_container_types "$APP")) AVAILABLE_CONTAINER_TYPES=($(get_app_running_container_types "$APP"))
if [[ ${#AVAILABLE_CONTAINER_TYPES[@]} -gt 1 ]]; then if [[ ${#AVAILABLE_CONTAINER_TYPES[@]} -gt 1 ]]; then
dokku_log_warn "No container type specified." dokku_log_warn "No container type specified."

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core scheduler-k3s plugin" description = "dokku core scheduler-k3s plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core scheduler-null plugin" description = "dokku core scheduler-null plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core scheduler plugin" description = "dokku core scheduler plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core shell plugin" description = "dokku core shell plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core ssh-keys plugin" description = "dokku core ssh-keys plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core storage plugin" description = "dokku core storage plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core trace plugin" description = "dokku core trace plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -1 +1 @@
FROM traefik:3.1.2 FROM traefik:3.1.4

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku core traefik-vhosts plugin" description = "dokku core traefik-vhosts plugin"
version = "0.35.2" version = "0.35.4"
[plugin.config] [plugin.config]

View File

@@ -7,7 +7,7 @@
"express": "4.21.x", "express": "4.21.x",
"connect": "*", "connect": "*",
"handlebars": "~4.7.1", "handlebars": "~4.7.1",
"socket.io": "~4.7.1", "socket.io": "~4.8.0",
"express3-handlebars": "~0.5.2" "express3-handlebars": "~0.5.2"
}, },
"engines": { "engines": {

125
tests/unit/app-json-4.bats Normal file
View File

@@ -0,0 +1,125 @@
#!/usr/bin/env bats
load test_helper
setup_file() {
install_pack
}
setup() {
global_setup
create_app
}
teardown() {
destroy_app
global_teardown
}
@test "(app-json) app.json failing dokku.predeploy" {
run /bin/bash -c "dokku builder-herokuish:set $TEST_APP allowed true"
echo "output: $output"
echo "status: $status"
assert_success
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_failing_dokku_predeploy
echo "output: $output"
echo "status: $status"
assert_output_contains "Execution of predeploy task failed"
assert_failure
}
@test "(app-json) app.json failing dokku.postdeploy" {
run /bin/bash -c "dokku builder-herokuish:set $TEST_APP allowed true"
echo "output: $output"
echo "status: $status"
assert_success
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_failing_dokku_postdeploy
echo "output: $output"
echo "status: $status"
assert_output_contains "Execution of postdeploy task failed"
assert_failure
}
@test "(app-json) app.json failing postdeploy" {
run /bin/bash -c "dokku builder-herokuish:set $TEST_APP allowed true"
echo "output: $output"
echo "status: $status"
assert_success
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_failing_postdeploy
echo "output: $output"
echo "status: $status"
assert_output_contains "Execution of first deploy postdeploy task failed"
assert_failure
}
@test "(app-json) app.json failing release" {
run /bin/bash -c "dokku builder-herokuish:set $TEST_APP allowed true"
echo "output: $output"
echo "status: $status"
assert_success
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_failing_release
echo "output: $output"
echo "status: $status"
assert_output_contains "Execution of release task failed"
assert_failure
}
add_failing_dokku_predeploy() {
local APP="$1"
local APP_REPO_DIR="$2"
[[ -z "$APP" ]] && local APP="$TEST_APP"
cat >"$APP_REPO_DIR/app.json" <<EOF
{
"scripts": {
"dokku": {
"predeploy": "exit 1"
}
}
}
EOF
}
add_failing_dokku_postdeploy() {
local APP="$1"
local APP_REPO_DIR="$2"
[[ -z "$APP" ]] && local APP="$TEST_APP"
cat >"$APP_REPO_DIR/app.json" <<EOF
{
"scripts": {
"dokku": {
"postdeploy": "exit 1"
}
}
}
EOF
}
add_failing_postdeploy() {
local APP="$1"
local APP_REPO_DIR="$2"
[[ -z "$APP" ]] && local APP="$TEST_APP"
cat >"$APP_REPO_DIR/app.json" <<EOF
{
"scripts": {
"postdeploy": "exit 1"
}
}
EOF
}
add_failing_release() {
local APP="$1"
local APP_REPO_DIR="$2"
[[ -z "$APP" ]] && local APP="$TEST_APP"
cat >"$APP_REPO_DIR/Procfile" <<EOF
web: python3 -u web.py
release: exit 1
EOF
}

View File

@@ -99,7 +99,7 @@ teardown() {
echo "status: $status" echo "status: $status"
assert_success assert_success
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt_cnb
echo "output: $output" echo "output: $output"
echo "status: $status" echo "status: $status"
assert_success assert_success

View File

@@ -181,6 +181,11 @@ teardown() {
assert_success assert_success
assert_output_contains "Application deployed" assert_output_contains "Application deployed"
run /bin/bash -c "dokku config:get $TEST_APP GIT_REV"
echo "output: $output"
echo "status: $status"
assert_output_exists
run /bin/bash -c "cat /home/dokku/$TEST_APP/refs/heads/master" run /bin/bash -c "cat /home/dokku/$TEST_APP/refs/heads/master"
echo "output: $output" echo "output: $output"
echo "status: $status" echo "status: $status"

View File

@@ -22,7 +22,7 @@ teardown() {
echo "status: $status" echo "status: $status"
assert_success assert_success
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt_cnb
echo "output: $output" echo "output: $output"
echo "status: $status" echo "status: $status"
assert_success assert_success

View File

@@ -73,7 +73,7 @@ teardown() {
echo "status: $status" echo "status: $status"
assert_success assert_success
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt_cnb
echo "output: $output" echo "output: $output"
echo "status: $status" echo "status: $status"
assert_success assert_success

View File

@@ -587,6 +587,15 @@ add_requirements_txt() {
echo "flask" >>"$APP_REPO_DIR/requirements.txt" echo "flask" >>"$APP_REPO_DIR/requirements.txt"
} }
add_requirements_txt_cnb() {
local APP="$1"
local APP_REPO_DIR="$2"
[[ -z "$APP" ]] && local APP="$TEST_APP"
mv "$APP_REPO_DIR/app-cnb.json" "$APP_REPO_DIR/app.json"
add_requirements_txt "$APP" "$APP_REPO_DIR"
}
create_network() { create_network() {
local NETWORK_NAME="${1:-$TEST_NETWORK}" local NETWORK_NAME="${1:-$TEST_NETWORK}"
@@ -637,7 +646,7 @@ convert_to_dockerfile() {
} }
install_pack() { install_pack() {
if ! command -v "pack" &>/dev/null; then if [[ ! -x /usr/bin/pack ]]; then
add-apt-repository --yes ppa:cncf-buildpacks/pack-cli add-apt-repository --yes ppa:cncf-buildpacks/pack-cli
apt-get update apt-get update
apt-get --yes install pack-cli apt-get --yes install pack-cli