Compare commits
178 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6cda8189f2 | ||
|
|
e63dbcd132 | ||
|
|
716326573c | ||
|
|
99e2e0ea68 | ||
|
|
674cb2b6eb | ||
|
|
d9e584f5a1 | ||
|
|
a39a47b3ae | ||
|
|
dfcce1c6a6 | ||
|
|
8cb708b8f7 | ||
|
|
f8489efe17 | ||
|
|
7843738a2f | ||
|
|
300aacfa5b | ||
|
|
b72a2544ab | ||
|
|
1474297397 | ||
|
|
02c304fada | ||
|
|
64706f021c | ||
|
|
10c222839d | ||
|
|
a3ca2a56b8 | ||
|
|
bdf12179fa | ||
|
|
674de032f8 | ||
|
|
807ae5e651 | ||
|
|
bf26d32495 | ||
|
|
b23eb8f330 | ||
|
|
c715857ac7 | ||
|
|
a74ab40494 | ||
|
|
7316b6322c | ||
|
|
14752ac407 | ||
|
|
3aab81aa7c | ||
|
|
bed0e0ce71 | ||
|
|
46b9df3872 | ||
|
|
a2c8c77dad | ||
|
|
224dc15f09 | ||
|
|
68752c9318 | ||
|
|
0abbe320f3 | ||
|
|
59c7144255 | ||
|
|
c5d282dcd1 | ||
|
|
87c11ca077 | ||
|
|
bf13a6fd97 | ||
|
|
75beecf65b | ||
|
|
8845715959 | ||
|
|
c2a170b6ec | ||
|
|
4ed1bcb3f4 | ||
|
|
dd26a82646 | ||
|
|
9ab58d6f33 | ||
|
|
9cb54fc742 | ||
|
|
80924a0c31 | ||
|
|
4b086ff8a4 | ||
|
|
b53a8526cd | ||
|
|
401183fdd8 | ||
|
|
a862bdaf88 | ||
|
|
e77e8d71bd | ||
|
|
344d2e83ad | ||
|
|
4c9deedba9 | ||
|
|
460edc8b3e | ||
|
|
98117db6a5 | ||
|
|
cf92615936 | ||
|
|
11b640c0b8 | ||
|
|
48ddbb4279 | ||
|
|
3240491113 | ||
|
|
1d232aae89 | ||
|
|
d3890fee9f | ||
|
|
8fe33a0e41 | ||
|
|
d560ee13e0 | ||
|
|
1d5c9edbd2 | ||
|
|
4b0a40a20c | ||
|
|
47c1bfe26d | ||
|
|
01531c3986 | ||
|
|
d3a5289156 | ||
|
|
fa7de79faf | ||
|
|
db11f1f15f | ||
|
|
0d6263c9b5 | ||
|
|
ab0b127778 | ||
|
|
062aa7aa43 | ||
|
|
f7905b4943 | ||
|
|
08b77b62d4 | ||
|
|
b8907d1f8e | ||
|
|
9b05b9c2f4 | ||
|
|
0b097b9b87 | ||
|
|
ece77aa8c4 | ||
|
|
0b5743a74c | ||
|
|
66d2694751 | ||
|
|
46ee448489 | ||
|
|
953a2636a4 | ||
|
|
1d1daafc07 | ||
|
|
19ed0b00ea | ||
|
|
18e787d65f | ||
|
|
548013e46f | ||
|
|
6348126f0c | ||
|
|
0fd909b277 | ||
|
|
563293d1ff | ||
|
|
9d87bdf93b | ||
|
|
702fb6c330 | ||
|
|
16dd0adb35 | ||
|
|
c9caa0880f | ||
|
|
801fc5d78c | ||
|
|
741ffc635c | ||
|
|
591fe8642d | ||
|
|
3a44c414d1 | ||
|
|
5276543ee5 | ||
|
|
4ce71cb6db | ||
|
|
f09b960997 | ||
|
|
e15f411939 | ||
|
|
58af38a9ab | ||
|
|
bc4eaa002f | ||
|
|
78ad3f59b1 | ||
|
|
045825857a | ||
|
|
293ead4f35 | ||
|
|
c4c6ac5617 | ||
|
|
414c891c6c | ||
|
|
deeb18b56c | ||
|
|
f60e0d7c8a | ||
|
|
6a3933213c | ||
|
|
8b2afbadc2 | ||
|
|
403da909cb | ||
|
|
d749a400a2 | ||
|
|
a7d5fb69e2 | ||
|
|
e66671f3c5 | ||
|
|
583cbc7326 | ||
|
|
d32f0fe2b5 | ||
|
|
9c6380f07d | ||
|
|
ea7299eef7 | ||
|
|
d5085d3156 | ||
|
|
8ab44f1ab0 | ||
|
|
12d5bc4649 | ||
|
|
bebb05268c | ||
|
|
aeaf8e78f1 | ||
|
|
b66a8e6181 | ||
|
|
8fe122ffbd | ||
|
|
45e250443c | ||
|
|
f4c886e10f | ||
|
|
40c5cd089a | ||
|
|
823928a44c | ||
|
|
98feb988fa | ||
|
|
b605de522c | ||
|
|
707cafd26d | ||
|
|
f2c7392276 | ||
|
|
f094ea1f72 | ||
|
|
ebed512dbc | ||
|
|
8cef4a4f5d | ||
|
|
36e93cab03 | ||
|
|
c4de27a4a6 | ||
|
|
6caf4e6039 | ||
|
|
7cc84dcdbe | ||
|
|
65b9c6aa3e | ||
|
|
2959fdd154 | ||
|
|
a71e4219be | ||
|
|
30e279b6b9 | ||
|
|
216647890e | ||
|
|
9c3876045a | ||
|
|
86d7b6b649 | ||
|
|
d91957b969 | ||
|
|
5ee0619888 | ||
|
|
fbd77ee5e8 | ||
|
|
35c248fb5c | ||
|
|
7eecbefdd0 | ||
|
|
2715d2a485 | ||
|
|
951dd98f17 | ||
|
|
8ca71d9ff5 | ||
|
|
f2e791f48f | ||
|
|
f549934740 | ||
|
|
3a09d2217f | ||
|
|
92790b70e8 | ||
|
|
02d6813209 | ||
|
|
96ef82cbc9 | ||
|
|
f9c2251711 | ||
|
|
fb73c9e1d9 | ||
|
|
15695eded2 | ||
|
|
70fc35c317 | ||
|
|
0835e7706f | ||
|
|
c4d1196975 | ||
|
|
4ce2d63a0e | ||
|
|
e4db82aebf | ||
|
|
3f05666d59 | ||
|
|
35e1ac9825 | ||
|
|
4a81bce0e7 | ||
|
|
1d9b8fdda8 | ||
|
|
571a96fc77 | ||
|
|
dac21b7280 |
@@ -7,8 +7,9 @@ RUN apt-get install --no-install-recommends -y build-essential file nano && \
|
||||
apt-get autoremove --yes && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN wget https://dl.google.com/go/go1.17.9.linux-amd64.tar.gz && \
|
||||
tar -xvf go1.17.9.linux-amd64.tar.gz && \
|
||||
ARG TARGETARCH
|
||||
RUN wget https://dl.google.com/go/go1.17.9.linux-${TARGETARCH}.tar.gz && \
|
||||
tar -xvf go1.17.9.linux-${TARGETARCH}.tar.gz && \
|
||||
mv go /usr/local
|
||||
|
||||
RUN GOROOT=/usr/local/go /usr/local/go/bin/go install golang.org/x/tools/gopls@latest 2>&1
|
||||
|
||||
@@ -7,6 +7,8 @@ build
|
||||
docs
|
||||
tests
|
||||
!build/package/*
|
||||
!docs/_build/entrypoint
|
||||
!docs/_build/requirements.txt
|
||||
!tests/dhparam.pem
|
||||
!contrib/bash-completion
|
||||
!contrib/docker
|
||||
|
||||
39
.github/workflows/docs.yml
vendored
Normal file
39
.github/workflows/docs.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
name: 'docs'
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Cloning repo
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: "Setup python 3.10"
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: Generate documentation
|
||||
env:
|
||||
BOT_GITHUB_USERNAME: ${{ secrets.HOMEBREW_GITHUB_USERNAME }}
|
||||
BOT_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
|
||||
|
||||
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
|
||||
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
|
||||
sudo apt update
|
||||
sudo apt install gh -y
|
||||
|
||||
gh auth login --with-token <<<"$BOT_GITHUB_API_TOKEN"
|
||||
contrib/build-docs
|
||||
@@ -135,4 +135,4 @@ which contains test setup information as well as tips for running tests.
|
||||
- [Existing issues](https://github.com/dokku/dokku/issues)
|
||||
- [General GitHub documentation](https://help.github.com/)
|
||||
- [GitHub pull request documentation](https://help.github.com/send-pull-requests/)
|
||||
- [Gliderlabs Slack in the #dokku channel](https://glider-slackin.herokuapp.com/)
|
||||
- [Gliderlabs Slack in the #dokku channel](https://slack.dokku.com/)
|
||||
|
||||
97
HISTORY.md
97
HISTORY.md
@@ -1,5 +1,102 @@
|
||||
# History
|
||||
|
||||
## 0.28.2
|
||||
|
||||
Install/update via the bootstrap script:
|
||||
|
||||
```shell
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.28.2/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.28.2 bash bootstrap.sh
|
||||
```
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- #5393: @josegonzalez Correct issue with replacing the version in the installation guide
|
||||
- #5354: @josegonzalez Report the correct value for the letsencrypt server
|
||||
- #5347: @josegonzalez Set correct version on builder-lambda plugin
|
||||
|
||||
### New Features
|
||||
|
||||
- #5392: @josegonzalez Add support for devcontainers on ARM64 instances
|
||||
|
||||
### Documentation
|
||||
|
||||
- #5365: @josegonzalez Use correct indentation for embedded list in remote commands documentation
|
||||
- #5357: @josegonzalez Reference blog on main domain
|
||||
- #5355: @josegonzalez Autogenerate documentation in CI
|
||||
- #5351: @josegonzalez Fix formatting on list in deployment tasks
|
||||
- #5328: @holtergram Call out git remote change when renaming an app
|
||||
- #5344: @josegonzalez Generate docs via mkdocs
|
||||
- #5342: @josegonzalez Ensure doc links work on github as well as on docs site
|
||||
- #5336: @josegonzalez Add note about docker-compose requirement for using the caddy plugin
|
||||
- #5337: @josegonzalez Add note about docker-compose requirement for using the traefik…
|
||||
- #5332: @cdubz Remove errant semicolon from wget command
|
||||
- #5329: @josegonzalez Use updated url for gliderlabs slack invite app
|
||||
- #5315: @alexislefebvre Fix doc link for systems with less than 1GB memory
|
||||
|
||||
### Other
|
||||
|
||||
- #5382: @dependabot[bot] chore(deps): bump sinatra from 2.2.2 to 3.0.2 in /tests/apps/ruby
|
||||
- #5386: @dependabot[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 224 to 225 in /tests/apps/php
|
||||
- #5361: @dependabot[bot] chore(deps): bump jetty-servlet from 11.0.11 to 11.0.12 in /tests/apps/java
|
||||
- #5346: @dependabot[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 223 to 224 in /tests/apps/php
|
||||
|
||||
## 0.28.1
|
||||
|
||||
Install/update via the bootstrap script:
|
||||
|
||||
```shell
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.28.1/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.28.1 bash bootstrap.sh
|
||||
```
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- #5313: @josegonzalez Fix issues with multiple domains in new proxy plugins
|
||||
|
||||
## 0.28.0
|
||||
|
||||
Install/update via the bootstrap script:
|
||||
|
||||
```shell
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.28.0/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.28.0 bash bootstrap.sh
|
||||
```
|
||||
|
||||
See the [0.28.0 migration guide](/docs/appendices/0.28.0-migration-guide.md) for more information on migrating to 0.28.0.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- #5299: @josegonzalez Do not trigger restarts when mutating config globally
|
||||
- #5298: @josegonzalez Set core.bare=true on correct repository path
|
||||
|
||||
### New Features
|
||||
|
||||
- #5300: @josegonzalez Add the ability to disable the init process
|
||||
- #5295: @josegonzalez Add an official caddy proxy implementation
|
||||
- #5293: @josegonzalez Add an official traefik proxy implementation
|
||||
- #5202: @josegonzalez Add builder-lambda plugin
|
||||
|
||||
### Documentation
|
||||
|
||||
- #5296: @janlavicka Fix typo in kubernetes docs
|
||||
- #5288: @josegonzalez Do not have bottom border float on page
|
||||
- #5283: @alexgleason Homepage: fix link in quick install guide
|
||||
|
||||
### Other
|
||||
|
||||
- #5297: @josegonzalez Update vector image
|
||||
- #5294: @josegonzalez Document and enable alternative proxy implementations
|
||||
- #5291: @dependabot[bot] chore(deps): bump werkzeug from 2.2.1 to 2.2.2 in /tests/apps/python-flask
|
||||
- #5292: @dependabot[bot] chore(deps): bump flask from 2.2.1 to 2.2.2 in /tests/apps/multi
|
||||
- #5290: @dependabot[bot] chore(deps): bump flask from 2.2.1 to 2.2.2 in /tests/apps/python-flask
|
||||
- #5227: @josegonzalez Drop forwarded port from vagrant setup
|
||||
- #5285: @josegonzalez Update all development dependencies
|
||||
- #5240: @josegonzalez Drop support for CentOS, Fedora, OpenSuse, as well as Debian 9
|
||||
- #5281: @dependabot[bot] chore(deps): bump flask from 2.1.3 to 2.2.1 in /tests/apps/multi
|
||||
- #5280: @dependabot[bot] chore(deps): bump flask from 2.1.3 to 2.2.1 in /tests/apps/python-flask
|
||||
- #5284: @dependabot[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 222 to 223 in /tests/apps/php
|
||||
|
||||
## 0.27.10
|
||||
|
||||
Install/update via the bootstrap script:
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
> For problems affecting all applications, the report output for a broken application is useful for our debugging.
|
||||
> In these cases, you may run `dokku report` without any arguments to display the top-level reporting information.
|
||||
|
||||
### How (deb/make/rpm) and where (AWS, VirtualBox, physical, etc.) was Dokku installed?
|
||||
### How (deb/make) and where (AWS, VirtualBox, physical, etc.) was Dokku installed?
|
||||
|
||||
### Additional information
|
||||
|
||||
|
||||
49
Makefile
49
Makefile
@@ -1,17 +1,21 @@
|
||||
DOKKU_VERSION ?= master
|
||||
|
||||
DOCKER_IMAGE_LABELER_VERSION ?= 0.4.1
|
||||
HEROKUISH_VERSION ?= 0.5.34
|
||||
NETRC_VERSION ?= 0.5.1
|
||||
PLUGN_VERSION ?= 0.8.2
|
||||
PROCFILE_VERSION ?= 0.14.1
|
||||
SIGIL_VERSION ?= 0.8.1
|
||||
SSHCOMMAND_VERSION ?= 0.15.0
|
||||
DOCKER_IMAGE_LABELER_URL ?= https://github.com/dokku/docker-image-labeler/releases/download/v${DOCKER_IMAGE_LABELER_VERSION}/docker-image-labeler_${DOCKER_IMAGE_LABELER_VERSION}_linux_amd64.tgz
|
||||
NETRC_URL ?= https://github.com/dokku/netrc/releases/download/v${NETRC_VERSION}/netrc_${NETRC_VERSION}_linux_amd64.tgz
|
||||
PLUGN_URL ?= https://github.com/dokku/plugn/releases/download/v${PLUGN_VERSION}/plugn_${PLUGN_VERSION}_linux_amd64.tgz
|
||||
PROCFILE_UTIL_URL ?= https://github.com/josegonzalez/go-procfile-util/releases/download/v${PROCFILE_VERSION}/procfile-util_${PROCFILE_VERSION}_linux_amd64.tgz
|
||||
SIGIL_URL ?= https://github.com/gliderlabs/sigil/releases/download/v${SIGIL_VERSION}/gliderlabs-sigil_${SIGIL_VERSION}_linux_amd64.tgz
|
||||
TARGETARCH ?= amd64
|
||||
|
||||
DOCKER_IMAGE_LABELER_VERSION ?= 0.5.0
|
||||
HEROKUISH_VERSION ?= 0.5.37
|
||||
LAMBDA_BUILDER_VERSION ?= 0.4.0
|
||||
NETRC_VERSION ?= 0.6.0
|
||||
PLUGN_VERSION ?= 0.12.0
|
||||
PROCFILE_VERSION ?= 0.15.0
|
||||
SIGIL_VERSION ?= 0.9.0
|
||||
SSHCOMMAND_VERSION ?= 0.16.0
|
||||
DOCKER_IMAGE_LABELER_URL ?= https://github.com/dokku/docker-image-labeler/releases/download/v${DOCKER_IMAGE_LABELER_VERSION}/docker-image-labeler_${DOCKER_IMAGE_LABELER_VERSION}_linux_${TARGETARCH}.tgz
|
||||
LAMBDA_BUILDER_URL ?= https://github.com/dokku/lambda-builder/releases/download/v${LAMBDA_BUILDER_VERSION}/lambda-builder_${LAMBDA_BUILDER_VERSION}_linux_${TARGETARCH}.tgz
|
||||
NETRC_URL ?= https://github.com/dokku/netrc/releases/download/v${NETRC_VERSION}/netrc_${NETRC_VERSION}_linux_${TARGETARCH}.tgz
|
||||
PLUGN_URL ?= https://github.com/dokku/plugn/releases/download/v${PLUGN_VERSION}/plugn_${PLUGN_VERSION}_linux_${TARGETARCH}.tgz
|
||||
PROCFILE_UTIL_URL ?= https://github.com/josegonzalez/go-procfile-util/releases/download/v${PROCFILE_VERSION}/procfile-util_${PROCFILE_VERSION}_linux_${TARGETARCH}.tgz
|
||||
SIGIL_URL ?= https://github.com/gliderlabs/sigil/releases/download/v${SIGIL_VERSION}/gliderlabs-sigil_${SIGIL_VERSION}_linux_${TARGETARCH}.tgz
|
||||
SSHCOMMAND_URL ?= https://github.com/dokku/sshcommand/releases/download/v${SSHCOMMAND_VERSION}/sshcommand_${SSHCOMMAND_VERSION}_linux_x86_64.tgz
|
||||
STACK_URL ?= https://github.com/gliderlabs/herokuish.git
|
||||
PREBUILT_STACK_URL ?= gliderlabs/herokuish:latest-20
|
||||
@@ -36,12 +40,12 @@ endif
|
||||
|
||||
include common.mk
|
||||
|
||||
.PHONY: all apt-update install version copyfiles copyplugin man-db plugins dependencies docker-image-labeler netrc sshcommand procfile-util plugn docker aufs stack count vagrant-acl-add vagrant-dokku go-build
|
||||
.PHONY: all apt-update install version copyfiles copyplugin man-db plugins dependencies docker-image-labeler lambda-builder netrc sshcommand procfile-util plugn docker aufs stack count vagrant-acl-add vagrant-dokku go-build
|
||||
|
||||
include docs.mk
|
||||
include tests.mk
|
||||
include package.mk
|
||||
include deb.mk
|
||||
include rpm.mk
|
||||
include arch.mk
|
||||
|
||||
all:
|
||||
@@ -131,7 +135,7 @@ plugin-dependencies: plugn procfile-util
|
||||
plugins: plugn procfile-util docker
|
||||
sudo -E dokku plugin:install --core
|
||||
|
||||
dependencies: apt-update docker-image-labeler netrc sshcommand plugn procfile-util docker help2man man-db sigil dos2unix jq parallel
|
||||
dependencies: apt-update docker-image-labeler lambda-builder netrc sshcommand plugn procfile-util docker help2man man-db sigil dos2unix jq parallel
|
||||
$(MAKE) -e stack
|
||||
|
||||
apt-update:
|
||||
@@ -155,27 +159,32 @@ man-db:
|
||||
docker-image-labeler:
|
||||
wget -qO /tmp/docker-image-labeler_latest.tgz ${DOCKER_IMAGE_LABELER_URL}
|
||||
tar xzf /tmp/docker-image-labeler_latest.tgz -C /usr/local/bin
|
||||
mv /usr/local/bin/docker-image-labeler-amd64 /usr/local/bin/docker-image-labeler
|
||||
mv /usr/local/bin/docker-image-labeler-${TARGETARCH} /usr/local/bin/docker-image-labeler
|
||||
|
||||
lambda-builder:
|
||||
wget -qO /tmp/lambda-builder_latest.tgz ${LAMBDA_BUILDER_URL}
|
||||
tar xzf /tmp/lambda-builder_latest.tgz -C /usr/local/bin
|
||||
mv /usr/local/bin/lambda-builder-${TARGETARCH} /usr/local/bin/lambda-builder
|
||||
|
||||
netrc:
|
||||
wget -qO /tmp/netrc_latest.tgz ${NETRC_URL}
|
||||
tar xzf /tmp/netrc_latest.tgz -C /usr/local/bin
|
||||
mv /usr/local/bin/netrc-amd64 /usr/local/bin/netrc
|
||||
mv /usr/local/bin/netrc-${TARGETARCH} /usr/local/bin/netrc
|
||||
|
||||
procfile-util:
|
||||
wget -qO /tmp/procfile-util_latest.tgz ${PROCFILE_UTIL_URL}
|
||||
tar xzf /tmp/procfile-util_latest.tgz -C /usr/local/bin
|
||||
mv /usr/local/bin/procfile-util-amd64 /usr/local/bin/procfile-util
|
||||
mv /usr/local/bin/procfile-util-${TARGETARCH} /usr/local/bin/procfile-util
|
||||
|
||||
plugn:
|
||||
wget -qO /tmp/plugn_latest.tgz ${PLUGN_URL}
|
||||
tar xzf /tmp/plugn_latest.tgz -C /usr/local/bin
|
||||
mv /usr/local/bin/plugn-amd64 /usr/local/bin/plugn
|
||||
mv /usr/local/bin/plugn-${TARGETARCH} /usr/local/bin/plugn
|
||||
|
||||
sigil:
|
||||
wget -qO /tmp/sigil_latest.tgz ${SIGIL_URL}
|
||||
tar xzf /tmp/sigil_latest.tgz -C /usr/local/bin
|
||||
mv /usr/local/bin/gliderlabs-sigil-amd64 /usr/local/bin/sigil
|
||||
mv /usr/local/bin/gliderlabs-sigil-${TARGETARCH} /usr/local/bin/sigil
|
||||
|
||||
sshcommand:
|
||||
wget -qO /tmp/sshcommand_latest.tgz ${SSHCOMMAND_URL}
|
||||
|
||||
13
README.md
13
README.md
@@ -3,7 +3,7 @@
|
||||
[](https://github.com/dokku/dokku/actions?query=workflow%3ACI)
|
||||
[](https://packagecloud.io/dokku/dokku)
|
||||
[](https://aur.archlinux.org/packages/dokku/)
|
||||
[](https://glider-slackin.herokuapp.com/)
|
||||
[](https://slack.dokku.com/)
|
||||
[](https://dokku.com/docs/getting-started/installation/)
|
||||
[](#sponsors)
|
||||
[](#backers)
|
||||
@@ -75,8 +75,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 18.04 / 20.04 / 22.04 x64 - Any currently supported release
|
||||
- Debian 9+ x64
|
||||
- CentOS 7 x64 *(experimental)*
|
||||
- Debian 10+ x64
|
||||
- Arch Linux x64 *(experimental)*
|
||||
|
||||
An SSH keypair that can be used for application deployment. If this exists before installation, it will be automatically imported into dokku.
|
||||
@@ -87,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`:
|
||||
|
||||
```shell
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.27.10/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.27.10 bash bootstrap.sh
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.28.2/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.28.2 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.
|
||||
@@ -105,11 +104,11 @@ Full documentation - including advanced installation docs - are available online
|
||||
|
||||
## Support
|
||||
|
||||
You can use [GitHub Issues](https://github.com/dokku/dokku/issues), check [Troubleshooting](https://dokku.com/docs/getting-started/troubleshooting/) in the documentation, or join us on [Gliderlabs Slack in the #dokku channel](https://glider-slackin.herokuapp.com/).
|
||||
You can use [GitHub Issues](https://github.com/dokku/dokku/issues), check [Troubleshooting](https://dokku.com/docs/getting-started/troubleshooting/) in the documentation, or join us on [Gliderlabs Slack in the #dokku channel](https://slack.dokku.com/).
|
||||
|
||||
## Contribution
|
||||
|
||||
After checking [GitHub Issues](https://github.com/dokku/dokku/issues), the [Troubleshooting Guide](https://dokku.com/docs/getting-started/troubleshooting/) or having a chat with us on [Gliderlabs Slack in the #dokku channel](https://glider-slackin.herokuapp.com/), feel free to fork and create a Pull Request.
|
||||
After checking [GitHub Issues](https://github.com/dokku/dokku/issues), the [Troubleshooting Guide](https://dokku.com/docs/getting-started/troubleshooting/) or having a chat with us on [Gliderlabs Slack in the #dokku channel](https://slack.dokku.com/), feel free to fork and create a Pull Request.
|
||||
|
||||
While we may not merge your PR as is, they serve to start conversations and improve the general Dokku experience for all users.
|
||||
|
||||
|
||||
17
Vagrantfile
vendored
17
Vagrantfile
vendored
@@ -6,7 +6,6 @@ BOX_CPUS = ENV["BOX_CPUS"] || "1"
|
||||
BOX_MEMORY = ENV["BOX_MEMORY"] || "1024"
|
||||
DOKKU_DOMAIN = ENV["DOKKU_DOMAIN"] || "dokku.me"
|
||||
DOKKU_IP = ENV["DOKKU_IP"] || "10.0.0.2"
|
||||
FORWARDED_PORT = (ENV["FORWARDED_PORT"] || '8080').to_i
|
||||
PREBUILT_STACK_URL = File.exist?("#{File.dirname(__FILE__)}/stack.tgz") ? 'file:///root/dokku/stack.tgz' : nil
|
||||
PUBLIC_KEY_PATH = "#{Dir.home}/.ssh/id_rsa.pub"
|
||||
|
||||
@@ -43,7 +42,6 @@ Vagrant::configure("2") do |config|
|
||||
|
||||
config.vm.define "dokku", primary: true do |vm|
|
||||
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||
vm.vm.network :private_network, ip: DOKKU_IP
|
||||
|
||||
@@ -72,7 +70,6 @@ Vagrant::configure("2") do |config|
|
||||
|
||||
# For windows users. Sharing folder from windows creates problem with sym links and so, sync the repo instead from GOS.
|
||||
config.vm.define "dokku-windows", autostart: false do |vm|
|
||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||
vm.vm.network :private_network, ip: DOKKU_IP
|
||||
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update -qq >/dev/null && apt-get -qq -y --no-install-recommends install git dos2unix >/dev/null"
|
||||
@@ -81,28 +78,17 @@ Vagrant::configure("2") do |config|
|
||||
|
||||
config.vm.define "dokku-deb", autostart: false do |vm|
|
||||
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||
vm.vm.network :private_network, ip: DOKKU_IP
|
||||
vm.vm.provision :shell, :inline => "cd /root/dokku && make install-from-deb"
|
||||
end
|
||||
|
||||
config.vm.define "dokku-rpm", autostart: false do |vm|
|
||||
vm.vm.box = "centos/7"
|
||||
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||
vm.vm.network :private_network, ip: DOKKU_IP
|
||||
vm.vm.provision :shell, :inline => "cd /root/dokku && bash bootstrap.sh"
|
||||
end
|
||||
|
||||
config.vm.define "build", autostart: false do |vm|
|
||||
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||
vm.vm.network :private_network, ip: DOKKU_IP
|
||||
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update -qq >/dev/null && apt-get -qq -y --no-install-recommends install git >/dev/null && cd /root/dokku && #{make_cmd}"
|
||||
vm.vm.provision :shell, :inline => "export IS_RELEASE=true && cd /root/dokku && make deb-all rpm-all"
|
||||
vm.vm.provision :shell, :inline => "export IS_RELEASE=true && cd /root/dokku && make deb-all"
|
||||
end
|
||||
|
||||
config.vm.define "build-arch", autostart: false do |vm|
|
||||
@@ -111,7 +97,6 @@ Vagrant::configure("2") do |config|
|
||||
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
|
||||
vm.vm.provision :shell, :inline => "cd /dokku && make arch-all", privileged: false
|
||||
|
||||
38
bootstrap.sh
38
bootstrap.sh
@@ -3,7 +3,7 @@ set -eo pipefail
|
||||
[[ $TRACE ]] && set -x
|
||||
|
||||
# A script to bootstrap dokku.
|
||||
# It expects to be run on Ubuntu 18.04/20.04, or CentOS 7 via 'sudo'
|
||||
# It expects to be run on Ubuntu 18.04/20.04 via 'sudo`
|
||||
# If installing a tag higher than 0.3.13, it may install dokku via a package (so long as the package is higher than 0.3.13)
|
||||
# It checks out the dokku source code from GitHub into ~/dokku and then runs 'make install' from dokku source.
|
||||
|
||||
@@ -12,7 +12,7 @@ set -eo pipefail
|
||||
# That's good because it prevents our output overlapping with wget's.
|
||||
# It also means that we can't run a partially downloaded script.
|
||||
|
||||
SUPPORTED_VERSIONS="Debian [9, 10, 11], CentOS [7], Fedora (partial) [33, 34], Ubuntu [18.04, 20.04, 22.04]"
|
||||
SUPPORTED_VERSIONS="Debian [10, 11], Ubuntu [18.04, 20.04, 22.04]"
|
||||
|
||||
log-fail() {
|
||||
declare desc="log fail formatter"
|
||||
@@ -139,9 +139,6 @@ install-dokku-from-package() {
|
||||
debian | ubuntu)
|
||||
install-dokku-from-deb-package "$@"
|
||||
;;
|
||||
centos | fedora | rhel)
|
||||
install-dokku-from-rpm-package "$@"
|
||||
;;
|
||||
*)
|
||||
log-fail "Unsupported Linux distribution. For manual installation instructions, consult https://dokku.com/docs/getting-started/advanced-installation/"
|
||||
;;
|
||||
@@ -163,7 +160,7 @@ install-dokku-from-deb-package() {
|
||||
local NO_INSTALL_RECOMMENDS=${DOKKU_NO_INSTALL_RECOMMENDS:=""}
|
||||
local OS_ID
|
||||
|
||||
if ! in-array "$DOKKU_DISTRO_VERSION" "18.04" "20.04" "22.04" "9" "10" "11"; then
|
||||
if ! in-array "$DOKKU_DISTRO_VERSION" "18.04" "20.04" "22.04" "10" "11"; then
|
||||
log-fail "Unsupported Linux distribution. Only the following versions are supported: $SUPPORTED_VERSIONS"
|
||||
fi
|
||||
|
||||
@@ -231,35 +228,6 @@ install-dokku-from-deb-package() {
|
||||
fi
|
||||
}
|
||||
|
||||
install-dokku-from-rpm-package() {
|
||||
local DOKKU_CHECKOUT="$1"
|
||||
|
||||
if ! in-array "$DOKKU_DISTRO_VERSION" "7"; then
|
||||
log-fail "Unsupported Linux distribution. Only the following versions are supported: $SUPPORTED_VERSIONS"
|
||||
fi
|
||||
|
||||
echo "--> Installing docker"
|
||||
curl -fsSL https://get.docker.com/ | sh
|
||||
|
||||
echo "--> Installing epel for nginx packages to be available"
|
||||
yum install -y epel-release
|
||||
|
||||
echo "--> Installing herokuish and dokku"
|
||||
curl -s https://packagecloud.io/install/repositories/dokku/dokku/script.rpm.sh | bash
|
||||
if [[ -n $DOKKU_CHECKOUT ]]; then
|
||||
yum -y install herokuish "dokku-$DOKKU_CHECKOUT"
|
||||
else
|
||||
yum -y install herokuish dokku
|
||||
fi
|
||||
|
||||
echo "--> Enabling docker and nginx on system startup"
|
||||
systemctl enable docker
|
||||
systemctl enable nginx
|
||||
|
||||
echo "--> Starting nginx"
|
||||
systemctl start nginx
|
||||
}
|
||||
|
||||
main() {
|
||||
export DOKKU_DISTRO DOKKU_DISTRO_VERSION
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
154
contrib/build-docs
Executable file
154
contrib/build-docs
Executable file
@@ -0,0 +1,154 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail
|
||||
|
||||
readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)"
|
||||
|
||||
main() {
|
||||
pushd "$ROOT_DIR" >/dev/null || return 1
|
||||
rm -rf docs-main tmp/docs-source tmp/docs-build # tmp/docs-build
|
||||
cp -r docs docs-main
|
||||
|
||||
echo "====> Generating docs image"
|
||||
make docs-build-image
|
||||
|
||||
echo "====> Fetching latest docs"
|
||||
git clone -q https://github.com/dokku/docs.git tmp/docs-build
|
||||
|
||||
echo "====> Processing version: latest"
|
||||
rm -rf tmp/docs-build/docs
|
||||
git clone -q https://github.com/dokku/dokku.git tmp/docs-source
|
||||
|
||||
rm -rf docs/assets
|
||||
mkdir -p docs/assets
|
||||
cp -r docs-main/assets/extra.css docs/assets/extra.css
|
||||
cp -r docs-main/assets/favicons docs/assets/favicons
|
||||
cp -r docs-main/assets/dokku-logo.svg docs/assets/dokku-logo.svg
|
||||
|
||||
rm -rf tmp/docs-build/assets
|
||||
cp -r docs-main/assets tmp/docs-build/assets
|
||||
cp docs-main/_build/app-nginx.conf.sigil tmp/docs-build/app-nginx.conf.sigil
|
||||
mkdir -p tmp/docs-build/nginx.conf.d
|
||||
touch tmp/docs-build/.static
|
||||
echo "[]" >tmp/docs-build/versions.json
|
||||
|
||||
sed -i.bak "s/outdated/outdated_hidden/g" docs/_overrides/main.html && rm docs/_overrides/main.html.bak
|
||||
echo "----> Generating docs"
|
||||
make docs-build
|
||||
if [[ -n "$GITHUB_ACTION" ]]; then
|
||||
sudo chown -R "$(whoami)" site
|
||||
fi
|
||||
|
||||
rm -rf site/_build
|
||||
mv site tmp/docs-build/docs
|
||||
mv docs/home.html tmp/docs-build/index.html
|
||||
sed -i.bak "s/{{NAME}}~{{REF}}/docs/g" tmp/docs-build/index.html && rm tmp/docs-build/index.html.bak
|
||||
sed -i.bak "s/{{NAME}}/docs/g" tmp/docs-build/index.html && rm tmp/docs-build/index.html.bak
|
||||
sed -i.bak 's/="\/docs\/"/="\/"/g' tmp/docs-build/index.html && rm tmp/docs-build/index.html.bak
|
||||
|
||||
jq -C -r '.["max-versions"][]' docs-main/assets/versions.json | while read -r current_version; do
|
||||
major="$(echo "$current_version" | cut -d'.' -f1)"
|
||||
minor="$(echo "$current_version" | cut -d'.' -f2)"
|
||||
patch="$(echo "$current_version" | cut -d'.' -f3)"
|
||||
while true; do
|
||||
if [[ "$patch" -lt 0 ]]; then
|
||||
break
|
||||
fi
|
||||
version="${major}.${minor}.${patch}"
|
||||
echo "====> Processing version: ${major}.${minor}.${patch}"
|
||||
|
||||
if [[ "$major" -lt 1 ]]; then
|
||||
if [[ "$current_version" != "$version" ]]; then
|
||||
echo " Writing rewrite rule"
|
||||
echo "rewrite ^/docs~v$version/(.*)$ /docs~v$current_version/\$1 redirect;" >"tmp/docs-build/nginx.conf.d/$version.conf"
|
||||
echo " Removing old docs"
|
||||
rm -rf "tmp/docs-build/docs~v${version}"
|
||||
patch=$((patch - 1))
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
jq --arg title "v$version" --arg version "docs~v$version" '. += [{"title": $title, "version": $version, "aliases": []}]' tmp/docs-build/versions.json >tmp/docs-build/versions.json.bak
|
||||
mv tmp/docs-build/versions.json.bak tmp/docs-build/versions.json
|
||||
if [[ -d "tmp/docs-build/docs~v${version}" ]]; then
|
||||
echo " ! Docs exist, skipping regeneration"
|
||||
rm -rf "tmp/docs-build/docs~v${version}/assets/favicons"
|
||||
cp -r docs-main/assets/favicons "tmp/docs-build/docs~v${version}/assets/favicons"
|
||||
cp -r docs-main/assets/dokku-logo.svg "tmp/docs-build/docs~v${version}/assets/dokku-logo.svg"
|
||||
cp -r docs-main/assets/extra.css "tmp/docs-build/docs~v${version}/assets/extra.css"
|
||||
patch=$((patch - 1))
|
||||
continue
|
||||
fi
|
||||
|
||||
git -C tmp/docs-source checkout -q -- .
|
||||
git -C tmp/docs-source checkout -q "tags/v${version}" -b "v${version}-branch"
|
||||
rm -rf docs
|
||||
mv tmp/docs-source/docs docs
|
||||
|
||||
rm -rf docs/assets
|
||||
mkdir -p docs/assets
|
||||
cp -r docs-main/assets/favicons docs/assets/favicons
|
||||
cp -r docs-main/assets/dokku-logo.svg docs/assets/dokku-logo.svg
|
||||
cp -r docs-main/assets/extra.css docs/assets/extra.css
|
||||
|
||||
cp -r docs-main/_build docs/_build
|
||||
cp -r docs-main/_overrides docs/_overrides
|
||||
git checkout -q -- mkdocs.yml
|
||||
sed -i.bak "s/site_dir: site/site_dir: docs~v$version/g" mkdocs.yml && rm mkdocs.yml.bak
|
||||
if [[ ! -f docs/template.html ]]; then
|
||||
if [[ "$patch" -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "----> Generating docs"
|
||||
if ! make docs-build; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ -d "docs~v${version}" ]]; then
|
||||
if [[ -n "$GITHUB_ACTION" ]]; then
|
||||
sudo chown -R "$(whoami)" "docs~v${version}"
|
||||
fi
|
||||
|
||||
rm -rf "docs~v${version}/_build"
|
||||
mv "docs~v${version}" "tmp/docs-build/docs~v${version}"
|
||||
fi
|
||||
|
||||
if [[ "$patch" -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
patch=$((patch - 1))
|
||||
done
|
||||
done
|
||||
|
||||
echo "====> Rebuild versions"
|
||||
if [[ -f "tmp/docs-build/versions.json" ]]; then
|
||||
python contrib/sort-mkdocs-versions
|
||||
else
|
||||
echo " No version file exists"
|
||||
fi
|
||||
|
||||
echo "====> Cleanup main repo"
|
||||
rm -rf docs
|
||||
mv docs-main docs
|
||||
git checkout -- mkdocs.yml docs
|
||||
|
||||
if [[ "$(git -C tmp/docs-build ls-files -dmo)" == "docs/sitemap.xml.gz" ]]; then
|
||||
echo " ! No doc changes found"
|
||||
git -C tmp/docs-build checkout -- docs/sitemap.xml.gz
|
||||
else
|
||||
echo "====> Pushing docs"
|
||||
git -C tmp/docs-build add .
|
||||
git -C tmp/docs-build commit -m "chore: regenerate docs"
|
||||
|
||||
if [[ -n "$BOT_GITHUB_USERNAME" ]] && [[ -n "$BOT_GITHUB_API_TOKEN" ]]; then
|
||||
git -C tmp/docs-build remote set-url origin "https://$BOT_GITHUB_USERNAME:$BOT_GITHUB_API_TOKEN@github.com/dokku/docs.git"
|
||||
fi
|
||||
|
||||
git -C tmp/docs-build push origin master
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
@@ -18,7 +18,7 @@ WORKDIR ${WORKDIR}
|
||||
COPY Makefile ${WORKDIR}/
|
||||
COPY *.mk ${WORKDIR}/
|
||||
|
||||
RUN make deb-setup rpm-setup sshcommand plugn
|
||||
RUN make deb-setup sshcommand plugn
|
||||
|
||||
COPY . ${WORKDIR}
|
||||
|
||||
@@ -37,7 +37,7 @@ RUN PLUGIN_MAKE_TARGET=${PLUGIN_MAKE_TARGET} \
|
||||
IS_RELEASE=${IS_RELEASE} \
|
||||
SKIP_GO_CLEAN=true \
|
||||
make version copyfiles \
|
||||
&& make deb-dokku rpm-dokku
|
||||
&& make deb-dokku
|
||||
|
||||
FROM builder as armhf
|
||||
|
||||
|
||||
@@ -134,7 +134,6 @@ fn-publish-package() {
|
||||
local OS_ID ex
|
||||
|
||||
[[ "$IS_RELEASE" == "true" ]] && REPOSITORY=dokku/dokku
|
||||
[[ "$RELEASE_TYPE" == "rpm" ]] && DIST=el/7
|
||||
[[ "$RELEASE_TYPE" == "raspbian" ]] && DIST=raspbian
|
||||
|
||||
if [[ "$RELEASE_TYPE" == "raspbian" ]]; then
|
||||
@@ -159,7 +158,7 @@ fn-publish-package() {
|
||||
done
|
||||
|
||||
DIST=debian
|
||||
OS_IDS=("stretch" "buster" "bullseye")
|
||||
OS_IDS=("buster" "bullseye")
|
||||
for OS_ID in "${OS_IDS[@]}"; do
|
||||
log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
||||
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
||||
@@ -224,7 +223,7 @@ fn-repo-update() {
|
||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/style.css
|
||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/development/release-process.md
|
||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/getting-started/install/docker.md
|
||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/getting-started/installation.md
|
||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/getting-started/installation/index.md
|
||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/home.html
|
||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/template.html
|
||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" README.md
|
||||
@@ -408,18 +407,15 @@ main() {
|
||||
fn-extract-package "$IS_RELEASE" "dokku_${NEXT_VERSION}_armhf.deb" || log-fail "Error extracting deb package"
|
||||
fn-extract-package "$IS_RELEASE" "dokku_${NEXT_VERSION}_arm64.deb" || log-fail "Error extracting deb package"
|
||||
fn-extract-package "$IS_RELEASE" "dokku_${NEXT_VERSION}_amd64.deb" || log-fail "Error extracting deb package"
|
||||
fn-extract-package "$IS_RELEASE" "dokku-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error extracting rpm package"
|
||||
mkdir -p build/package
|
||||
cp -f "build/dokku_${NEXT_VERSION}_amd64.deb" build/package/dokku-amd64.deb
|
||||
cp -f "build/dokku_${NEXT_VERSION}_arm64.deb" build/package/dokku-arm64.deb
|
||||
cp -f "build/dokku_${NEXT_VERSION}_armhf.deb" build/package/dokku-armhf.deb
|
||||
cp -f "build/dokku-${NEXT_VERSION}-1.x86_64.rpm" build/package/dokku-amd64.rpm
|
||||
|
||||
if [[ "$RELEASE" != "build" ]]; then
|
||||
fn-publish-package "$IS_RELEASE" "raspbian" "build/dokku_${NEXT_VERSION}_armhf.deb" || log-fail "Error publishing deb package"
|
||||
fn-publish-package "$IS_RELEASE" "deb" "build/dokku_${NEXT_VERSION}_arm64.deb" || log-fail "Error publishing deb package"
|
||||
fn-publish-package "$IS_RELEASE" "deb" "build/dokku_${NEXT_VERSION}_amd64.deb" || log-fail "Error publishing deb package"
|
||||
fn-publish-package "$IS_RELEASE" "rpm" "build/dokku-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error publishing rpm package"
|
||||
fn-build-docker-image "$NEXT_VERSION" "$IS_RELEASE" || log-fail "Error building docker image"
|
||||
|
||||
fn-repo-push-tags "$IS_RELEASE"
|
||||
|
||||
38
contrib/sort-mkdocs-versions
Normal file
38
contrib/sort-mkdocs-versions
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env python
|
||||
import json
|
||||
|
||||
|
||||
def main():
|
||||
version_file = "tmp/docs-build/versions.json"
|
||||
data = []
|
||||
with open(version_file) as f:
|
||||
data = json.load(f)
|
||||
|
||||
versions = []
|
||||
for info in data:
|
||||
if info["title"] == "latest":
|
||||
continue
|
||||
versions.append(info["title"].removeprefix("v"))
|
||||
|
||||
versions.sort(key=lambda x: list(map(int, x.split('.'))), reverse=True)
|
||||
data = [
|
||||
{
|
||||
"aliases": ["latest"],
|
||||
"title": "latest",
|
||||
"version": "docs",
|
||||
}
|
||||
]
|
||||
|
||||
for version in versions:
|
||||
data.append({
|
||||
"aliases": [],
|
||||
"title": f"v{version}",
|
||||
"version": f"docs~v{version}",
|
||||
})
|
||||
|
||||
with open(version_file, "w") as f:
|
||||
json.dump(data, f, indent=4)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
344
contrib/write-mkdocs
Normal file
344
contrib/write-mkdocs
Normal file
@@ -0,0 +1,344 @@
|
||||
#!/usr/bin/env python
|
||||
from bs4 import BeautifulSoup
|
||||
import os
|
||||
import pathlib
|
||||
import shutil
|
||||
import sys
|
||||
import yaml
|
||||
|
||||
|
||||
def get_nav_from_selector(soup, selector, docs_dir):
|
||||
navigation = []
|
||||
header_name = ""
|
||||
for anchor in soup.select(selector):
|
||||
classes = anchor.get("class", [])
|
||||
if classes is None:
|
||||
continue
|
||||
|
||||
if "disabled" in classes:
|
||||
header_name = anchor.text
|
||||
navigation.append({header_name: []})
|
||||
|
||||
href = anchor.get("href", "")
|
||||
if href is None:
|
||||
continue
|
||||
|
||||
href = str(href)
|
||||
if href == "#":
|
||||
continue
|
||||
|
||||
url = href.replace("{{NAME}}", "")
|
||||
filename = url.replace("http://progrium.viewdocs.io/dokku/", "")
|
||||
filename = filename.replace("http://dokku.viewdocs.io/dokku/", "")
|
||||
filename = filename.strip("/") + ".md"
|
||||
filename = filename.removeprefix("dokku/")
|
||||
|
||||
ignore_errors_for = [
|
||||
"getting-started/installation.md",
|
||||
"getting-started/upgrading.md",
|
||||
]
|
||||
if not os.path.exists(docs_dir + "/" + filename):
|
||||
if filename not in ignore_errors_for:
|
||||
print("error fetching markdown file:", filename)
|
||||
continue
|
||||
|
||||
for nav in navigation:
|
||||
if header_name in nav:
|
||||
if filename == "getting-started/installation.md":
|
||||
child_dir = "getting-started/install/"
|
||||
children = os.listdir(docs_dir + "/" + child_dir)
|
||||
children = [child_dir + c for c in children]
|
||||
children.sort()
|
||||
children.insert(
|
||||
0, "getting-started/advanced-installation.md")
|
||||
if os.path.exists(docs_dir + "/" + filename):
|
||||
children.insert(0, filename)
|
||||
else:
|
||||
children.insert(
|
||||
0, "getting-started/installation/index.md")
|
||||
nav[header_name].append({
|
||||
"Getting Started with Dokku": children,
|
||||
})
|
||||
continue
|
||||
elif filename == "getting-started/upgrading.md":
|
||||
child_dir = "appendices/"
|
||||
children = os.listdir(docs_dir + "/" + child_dir)
|
||||
|
||||
children.sort(key=lambda x: list(
|
||||
map(int, x.split("-")[0].split('.'))),
|
||||
reverse=True)
|
||||
children = [child_dir + c for c in children]
|
||||
if os.path.exists(docs_dir + "/" + filename):
|
||||
children.insert(0, filename)
|
||||
else:
|
||||
children.insert(
|
||||
0, "getting-started/upgrading/index.md")
|
||||
nav[header_name].append({
|
||||
"Upgrading": children,
|
||||
})
|
||||
continue
|
||||
else:
|
||||
nav[header_name].append(filename)
|
||||
return navigation
|
||||
|
||||
|
||||
def generate_nav(src, dest):
|
||||
navigation = []
|
||||
repo_dir = pathlib.Path(__file__).parent.parent.resolve()
|
||||
docs_dir = str(repo_dir) + "/docs"
|
||||
with open(docs_dir + "/template.html") as response:
|
||||
soup = BeautifulSoup(response, "html.parser")
|
||||
selectors = [
|
||||
".container .row .list-group a",
|
||||
".container-fluid .row .list-group a",
|
||||
]
|
||||
for selector in selectors:
|
||||
navigation = get_nav_from_selector(soup, selector, docs_dir)
|
||||
if len(navigation) > 0:
|
||||
break
|
||||
|
||||
if len(navigation) == 0:
|
||||
print("No navigation found")
|
||||
sys.exit(1)
|
||||
|
||||
with open(src) as f:
|
||||
data = yaml.unsafe_load(f)
|
||||
data["nav"] = [
|
||||
{"Docs": navigation},
|
||||
{"Pro": "https://pro.dokku.com/docs/getting-started/"},
|
||||
{"Blog": "https://dokku.com/blog/"},
|
||||
{"Purchase Dokku Pro": "https://dokku.dpdcart.com/cart/add?product_id=217344&method_id=236878"},
|
||||
]
|
||||
|
||||
with open(dest, mode="wt", encoding="utf-8") as f:
|
||||
yaml.dump(data, f)
|
||||
|
||||
|
||||
def modify_content_noop(lines, _):
|
||||
modified = False
|
||||
updated_lines = []
|
||||
for line in lines:
|
||||
updated_lines.append(line)
|
||||
return updated_lines, modified
|
||||
|
||||
|
||||
def modify_content_links(lines, filename):
|
||||
filename = filename.replace("/usr/src/source/docs/", "")
|
||||
parts = filename.split("/")
|
||||
parts.pop()
|
||||
replacement = "](" + '/'.join([".." for _ in parts]) + "/"
|
||||
modified = False
|
||||
updated_lines = []
|
||||
for line in lines:
|
||||
if "](/docs/" in line:
|
||||
line = line.replace("](/docs/", replacement)
|
||||
modified = True
|
||||
|
||||
updated_lines.append(line)
|
||||
return updated_lines, modified
|
||||
|
||||
|
||||
def modify_content_stripspace(lines, _):
|
||||
modified = False
|
||||
updated_lines = []
|
||||
for line in lines:
|
||||
line = line.rstrip()
|
||||
updated_lines.append(line)
|
||||
return updated_lines, modified
|
||||
|
||||
|
||||
def modify_content_inject_newlines(lines, _):
|
||||
modified = False
|
||||
updated_lines = []
|
||||
for line in lines:
|
||||
updated_lines.append(line.rstrip() + "\n")
|
||||
return updated_lines, modified
|
||||
|
||||
|
||||
def is_info(line):
|
||||
return line.startswith("> ")
|
||||
|
||||
|
||||
def is_new(line):
|
||||
return line.startswith("> ") and "new as of" in line.lower()
|
||||
|
||||
|
||||
def is_note(line):
|
||||
return line.startswith("> Note:")
|
||||
|
||||
|
||||
def is_warning(line):
|
||||
return line.startswith("> Warning:")
|
||||
|
||||
|
||||
def modify_content_admonition(lines, _):
|
||||
modified = False
|
||||
updated_lines = []
|
||||
admonition_lines = []
|
||||
is_admonition = False
|
||||
for line in lines:
|
||||
if is_info(line) or is_new(line) or is_note(line) or is_warning(line):
|
||||
if is_new(line):
|
||||
line = line.replace("> ", "!!! tip \"New\"\n\n ")
|
||||
line = line.replace("New as of", "Introduced in")
|
||||
line = line.replace("new as of", "introduced in")
|
||||
if is_note(line):
|
||||
line = line.replace(
|
||||
"> Note: ", "!!! note \"Note\"\n\n ")
|
||||
elif is_warning(line):
|
||||
line = line.replace(
|
||||
"> Warning: ", "!!! warning \"Warning\"\n\n ")
|
||||
elif is_info(line):
|
||||
if not is_admonition:
|
||||
line = line.replace("> ", "!!! info \"Info\"\n\n ")
|
||||
elif line in [">", "> "]:
|
||||
line = ""
|
||||
else:
|
||||
line = " " + line.removeprefix("> ")
|
||||
|
||||
is_admonition = True
|
||||
admonition_lines.append(line)
|
||||
elif is_admonition and line in [">", "> "]:
|
||||
line = ""
|
||||
admonition_lines.append(line)
|
||||
elif is_admonition and line.startswith("> "):
|
||||
line = " " + line.removeprefix("> ")
|
||||
admonition_lines.append(line)
|
||||
elif line == "":
|
||||
is_admonition = False
|
||||
if len(admonition_lines) > 0:
|
||||
updated_lines.extend(admonition_lines)
|
||||
admonition_lines = []
|
||||
updated_lines.append("")
|
||||
else:
|
||||
updated_lines.append(line)
|
||||
return updated_lines, modified
|
||||
|
||||
|
||||
def is_shell_codeblock_start(line):
|
||||
return line == "```shell"
|
||||
|
||||
|
||||
def modify_content_terminal_example(lines, _):
|
||||
modified = False
|
||||
updated_lines = []
|
||||
command_block = []
|
||||
example_block = []
|
||||
in_command_block = False
|
||||
in_example_block = False
|
||||
previous_block = ""
|
||||
next_line_must_be = None
|
||||
for line in lines:
|
||||
if is_shell_codeblock_start(line):
|
||||
command_block.append(line)
|
||||
modified = True
|
||||
in_command_block = True
|
||||
continue
|
||||
elif in_command_block:
|
||||
command_block.append(line)
|
||||
if line == "```":
|
||||
in_command_block = False
|
||||
previous_block = "command_block"
|
||||
next_line_must_be = ""
|
||||
continue
|
||||
elif line == "```":
|
||||
if previous_block == "":
|
||||
updated_lines.append(line)
|
||||
continue
|
||||
elif previous_block == "command_block":
|
||||
example_block.append(line)
|
||||
|
||||
if in_example_block:
|
||||
previous_block = ""
|
||||
in_example_block = False
|
||||
updated_lines.append("=== \"Shell\"")
|
||||
updated_lines.append("")
|
||||
for command_line in command_block:
|
||||
updated_lines.append(f" {command_line}")
|
||||
command_block = []
|
||||
|
||||
updated_lines.append("")
|
||||
updated_lines.append("=== \"Output\"")
|
||||
updated_lines.append("")
|
||||
for example_line in example_block:
|
||||
updated_lines.append(f" {example_line}")
|
||||
example_block = []
|
||||
else:
|
||||
in_example_block = True
|
||||
continue
|
||||
elif previous_block == "command_block":
|
||||
if next_line_must_be is None:
|
||||
if in_example_block:
|
||||
example_block.append(line)
|
||||
else:
|
||||
updated_lines.extend(command_block)
|
||||
updated_lines.append("")
|
||||
updated_lines.append(line)
|
||||
command_block = []
|
||||
previous_block = ""
|
||||
continue
|
||||
elif next_line_must_be == "":
|
||||
if line == "":
|
||||
next_line_must_be = None
|
||||
continue
|
||||
|
||||
updated_lines.append(line)
|
||||
|
||||
if len(command_block) > 0:
|
||||
updated_lines.extend(command_block)
|
||||
|
||||
return updated_lines, modified
|
||||
|
||||
|
||||
def update_markdown(src):
|
||||
markdown_files = []
|
||||
allowed_extensions = [".md"]
|
||||
for subdir, _, files in os.walk(src):
|
||||
for file in files:
|
||||
ext = os.path.splitext(file)[-1].lower()
|
||||
file_path = os.path.join(subdir, file)
|
||||
if ext in allowed_extensions:
|
||||
markdown_files.append(file_path)
|
||||
|
||||
modifiers = [
|
||||
modify_content_noop,
|
||||
modify_content_links,
|
||||
modify_content_stripspace,
|
||||
modify_content_admonition,
|
||||
modify_content_terminal_example,
|
||||
modify_content_inject_newlines,
|
||||
]
|
||||
|
||||
for file in markdown_files:
|
||||
modified = False
|
||||
lines = []
|
||||
with open(file, 'r') as f:
|
||||
lines = f.readlines()
|
||||
for modifier in modifiers:
|
||||
lines, m = modifier(lines, file)
|
||||
if m:
|
||||
modified = True
|
||||
|
||||
if modified:
|
||||
with open(file, 'w') as fp:
|
||||
fp.writelines(lines)
|
||||
|
||||
|
||||
def main():
|
||||
print("----> Copying mkdocs.yml")
|
||||
print(" Generating navigation")
|
||||
generate_nav("/usr/src/source/mkdocs.yml", "/usr/src/app/mkdocs.yml")
|
||||
|
||||
print("----> Copying docs folder")
|
||||
update_markdown("/usr/src/source/docs",)
|
||||
|
||||
if os.path.exists("/usr/src/app/docs"):
|
||||
print(" Removing old docs folder")
|
||||
shutil.rmtree("/usr/src/app/docs")
|
||||
|
||||
print(" Performing copy")
|
||||
shutil.copytree("/usr/src/source/docs", "/usr/src/app/docs")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
4
debian/control
vendored
4
debian/control
vendored
@@ -1,9 +1,9 @@
|
||||
Package: dokku
|
||||
Version: 0.27.10
|
||||
Version: 0.28.2
|
||||
Section: web
|
||||
Priority: optional
|
||||
Architecture: amd64
|
||||
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, docker-image-labeler (>= 0.2.2), net-tools, netrc, software-properties-common, parallel, procfile-util (>= 0.11.0), python-software-properties | python3-software-properties, rsync, rsyslog, dos2unix, jq, unzip
|
||||
Depends: apache2-utils, 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, docker-image-labeler (>= 0.2.2), lambda-builder, net-tools, netrc, software-properties-common, parallel, procfile-util (>= 0.11.0), python-software-properties | python3-software-properties, rsync, rsyslog, dos2unix, jq, unzip
|
||||
Recommends: herokuish (>= 0.3.4), bash-completion, 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>
|
||||
|
||||
19
docs.mk
Normal file
19
docs.mk
Normal file
@@ -0,0 +1,19 @@
|
||||
.PHONY: docs-build-image
|
||||
docs-build-image:
|
||||
docker build -f docs/_build/Dockerfile --progress plain -t app/mkdocs .
|
||||
|
||||
.PHONY: docs-build
|
||||
docs-build:
|
||||
@docker run --rm -p 3487:3487 -v "$(PWD):/usr/src/source" --name docs-serve app/mkdocs build
|
||||
|
||||
.PHONY: docs-serve
|
||||
docs-serve:
|
||||
docker run --rm -p 3487:3487 -v "$(PWD):/usr/src/source" --name docs-serve app/mkdocs serve
|
||||
|
||||
.PHONY: docs-deps
|
||||
docs-deps:
|
||||
@docker run --rm -p 3487:3487 -v "$(PWD):/usr/src/app" app/mkdocs deps
|
||||
|
||||
.PHONY: docs-enter
|
||||
docs-enter:
|
||||
docker exec -it docs-serve bash
|
||||
12
docs/_build/Dockerfile
vendored
Normal file
12
docs/_build/Dockerfile
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
FROM python:3.10-alpine
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
COPY docs/_build/requirements.txt .
|
||||
|
||||
RUN apk add --no-cache bash yaml && \
|
||||
pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY docs/_build/entrypoint /bin/entrypoint
|
||||
|
||||
ENTRYPOINT [ "/bin/entrypoint" ]
|
||||
30
docs/_build/app-nginx.conf.sigil
vendored
Normal file
30
docs/_build/app-nginx.conf.sigil
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
worker_processes 1;
|
||||
error_log stderr;
|
||||
pid nginx.pid;
|
||||
daemon off;
|
||||
|
||||
events {
|
||||
worker_connections 768;
|
||||
}
|
||||
|
||||
http {
|
||||
types_hash_max_size 2048;
|
||||
include mime.types;
|
||||
charset UTF-8;
|
||||
server {
|
||||
listen {{ $.PORT }};
|
||||
server_name _;
|
||||
root /app/www;
|
||||
index index.html;
|
||||
port_in_redirect off;
|
||||
|
||||
include /app/www/nginx.conf.d/*.conf;
|
||||
location ^~ /nginx.conf.d/ {
|
||||
return 404;
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
}
|
||||
}
|
||||
39
docs/_build/entrypoint
vendored
Executable file
39
docs/_build/entrypoint
vendored
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail
|
||||
|
||||
write-mkdocs() {
|
||||
if [[ -f /usr/src/source/contrib/write-mkdocs ]]; then
|
||||
if ! python /usr/src/source/contrib/write-mkdocs; then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
declare CMD="$1" ARGS=("${@:2}")
|
||||
|
||||
if [[ "$CMD" == "build" ]]; then
|
||||
write-mkdocs
|
||||
echo "----> Executing mkdocs build"
|
||||
mkdocs build
|
||||
site_dir="$(grep site_dir mkdocs.yml | awk '{print $2}')"
|
||||
cp -r "/usr/src/app/${site_dir}" "/usr/src/source/${site_dir}"
|
||||
|
||||
return $?
|
||||
fi
|
||||
|
||||
if [[ "$CMD" == "deps" ]]; then
|
||||
pip freeze
|
||||
return $?
|
||||
fi
|
||||
|
||||
if [[ "$CMD" == "serve" ]]; then
|
||||
write-mkdocs
|
||||
mkdocs serve -a 0.0.0.0:3487
|
||||
return $?
|
||||
fi
|
||||
|
||||
"$CMD" "${ARGS[@]}"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
23
docs/_build/requirements.txt
vendored
Normal file
23
docs/_build/requirements.txt
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
beautifulsoup4==4.11.1
|
||||
click==8.1.3
|
||||
ghp-import==2.1.0
|
||||
importlib-metadata==4.12.0
|
||||
Jinja2==3.1.2
|
||||
Markdown==3.3.7
|
||||
MarkupSafe==2.1.1
|
||||
mergedeep==1.3.4
|
||||
mkdocs==1.3.1
|
||||
mkdocs-exclude==1.0.2
|
||||
mkdocs-material==8.4.2
|
||||
mkdocs-material-extensions==1.0.3
|
||||
packaging==21.3
|
||||
Pygments==2.13.0
|
||||
pymdown-extensions==9.5
|
||||
pyparsing==3.0.9
|
||||
python-dateutil==2.8.2
|
||||
PyYAML==6.0
|
||||
pyyaml_env_tag==0.1
|
||||
six==1.16.0
|
||||
soupsieve==2.3.2.post1
|
||||
watchdog==2.1.9
|
||||
zipp==3.8.1
|
||||
56
docs/_overrides/main.html
Normal file
56
docs/_overrides/main.html
Normal file
@@ -0,0 +1,56 @@
|
||||
<!--
|
||||
Copyright (c) 2016-2022 Martin Donath <martin.donath@squidfunk.com>
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to
|
||||
deal in the Software without restriction, including without limitation the
|
||||
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
-->
|
||||
|
||||
{% extends "base.html" %}
|
||||
|
||||
<!-- Custom front matter -->
|
||||
{% block extrahead %}
|
||||
|
||||
<!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) -->
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{ 'overrides/assets/stylesheets/main.css' | url }}"
|
||||
/>
|
||||
{% endblock %}
|
||||
|
||||
<!-- Announcement bar -->
|
||||
{% block announce %}
|
||||
<a href="https://twitter.com/dokku">
|
||||
For updates follow <strong>@dokku</strong> on
|
||||
<span class="twemoji twitter">
|
||||
{% include ".icons/fontawesome/brands/twitter.svg" %}
|
||||
</span>
|
||||
<strong>Twitter</strong>
|
||||
</a>
|
||||
{% endblock %}
|
||||
|
||||
<!-- Theme-related JavaScript -->
|
||||
{% block scripts %}
|
||||
{{ super() }}
|
||||
|
||||
<!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) -->
|
||||
<script src="{{ 'overrides/assets/javascripts/bundle.js' | url }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block outdated %}
|
||||
You're not viewing the latest version.
|
||||
<a href="{{ page.abs_url }}">
|
||||
<strong>Click here to go to latest.</strong>
|
||||
</a>
|
||||
{% endblock %}
|
||||
@@ -17,30 +17,30 @@ To support this, Dokku provides support for a special `release` command within y
|
||||
Each "phase" has different expectations and limitations:
|
||||
|
||||
- `app.json`: `scripts.dokku.predeploy`
|
||||
- When to use: This should be used if your app does not support arbitrary build commands and you need to make changes to the built image.
|
||||
- Are changes committed to the image at this phase: Yes
|
||||
- Example use-cases
|
||||
- Bundling assets in a slightly different way
|
||||
- Installing a custom package from source or copying a binary into place
|
||||
- When to use: This should be used if your app does not support arbitrary build commands and you need to make changes to the built image.
|
||||
- Are changes committed to the image at this phase: Yes
|
||||
- Example use-cases
|
||||
- Bundling assets in a slightly different way
|
||||
- Installing a custom package from source or copying a binary into place
|
||||
- `app.json`: `scripts.dokku.postdeploy`
|
||||
- When to use: This should be used in conjunction with external systems to signal the completion of your deploy.
|
||||
- Are changes committed to the image at this phase: No
|
||||
- Example use-cases
|
||||
- Notifying slack that your app is deployed
|
||||
- Coordinating traffic routing with a central load balancer
|
||||
- When to use: This should be used in conjunction with external systems to signal the completion of your deploy.
|
||||
- Are changes committed to the image at this phase: No
|
||||
- Example use-cases
|
||||
- Notifying slack that your app is deployed
|
||||
- Coordinating traffic routing with a central load balancer
|
||||
- `app.json`: `scripts.postdeploy`
|
||||
- When to use: This should be used when you wish to run a command _once_, after the app is created and not on subsequent deploys to the app.
|
||||
- Are changes committed to the image at this phase: No
|
||||
- Example use-cases
|
||||
- Setting up OAuth clients and DNS
|
||||
- Loading seed/test data into the app’s test database
|
||||
- When to use: This should be used when you wish to run a command _once_, after the app is created and not on subsequent deploys to the app.
|
||||
- Are changes committed to the image at this phase: No
|
||||
- Example use-cases
|
||||
- Setting up OAuth clients and DNS
|
||||
- Loading seed/test data into the app’s test database
|
||||
- `Procfile`: `release`
|
||||
- When to use: This should be used in conjunction with external systems to signal the completion of your app image build.
|
||||
- Are changes committed to the image at this phase: No
|
||||
- Example use-cases
|
||||
- Sending CSS, JS, and other assets from your app’s slug to a CDN or S3 bucket
|
||||
- Priming or invalidating cache stores
|
||||
- Running database migrations
|
||||
- When to use: This should be used in conjunction with external systems to signal the completion of your app image build.
|
||||
- Are changes committed to the image at this phase: No
|
||||
- Example use-cases
|
||||
- Sending CSS, JS, and other assets from your app’s slug to a CDN or S3 bucket
|
||||
- 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. The exceptions are if the entrypoint is one of the following:
|
||||
|
||||
|
||||
@@ -175,4 +175,4 @@ By default, Dokku will execute your buildpack app processes as the `herokuishuse
|
||||
|
||||
> NOTE: this user must exist in your herokuish image.
|
||||
|
||||
Additionally, the default `docker-local` scheduler that comes with Dokku will ensure your storage mounts are owned by either `herokuishuser` or the overridden value you have set in `DOKKU_APP_USER`. See the [docker-local scheduler documentation](/docs/advanced-usage/schedulers/docker-local.md#disabling-chown-of-persistent-storage) docs for more information.
|
||||
Additionally, the default `docker-local` scheduler that comes with Dokku will ensure your storage mounts are owned by either `herokuishuser` or the overridden value you have set in `DOKKU_APP_USER`. See the [docker-local scheduler documentation](/docs/deployment/schedulers/docker-local.md#disabling-chown-of-persistent-storage) docs for more information.
|
||||
|
||||
@@ -35,35 +35,35 @@ dokku plugin:list
|
||||
|
||||
```
|
||||
plugn: dev
|
||||
00_dokku-standard 0.27.10 enabled dokku core standard plugin
|
||||
20_events 0.27.10 enabled dokku core events logging plugin
|
||||
app-json 0.27.10 enabled dokku core app-json plugin
|
||||
apps 0.27.10 enabled dokku core apps plugin
|
||||
build-env 0.27.10 enabled dokku core build-env plugin
|
||||
buildpacks 0.27.10 enabled dokku core buildpacks plugin
|
||||
certs 0.27.10 enabled dokku core certificate management plugin
|
||||
checks 0.27.10 enabled dokku core checks plugin
|
||||
common 0.27.10 enabled dokku core common plugin
|
||||
config 0.27.10 enabled dokku core config plugin
|
||||
docker-options 0.27.10 enabled dokku core docker-options plugin
|
||||
domains 0.27.10 enabled dokku core domains plugin
|
||||
enter 0.27.10 enabled dokku core enter plugin
|
||||
git 0.27.10 enabled dokku core git plugin
|
||||
logs 0.27.10 enabled dokku core logs plugin
|
||||
network 0.27.10 enabled dokku core network plugin
|
||||
nginx-vhosts 0.27.10 enabled dokku core nginx-vhosts plugin
|
||||
plugin 0.27.10 enabled dokku core plugin plugin
|
||||
proxy 0.27.10 enabled dokku core proxy plugin
|
||||
ps 0.27.10 enabled dokku core ps plugin
|
||||
repo 0.27.10 enabled dokku core repo plugin
|
||||
resource 0.27.10 enabled dokku core resource plugin
|
||||
scheduler-docker-local 0.27.10 enabled dokku core scheduler-docker-local plugin
|
||||
shell 0.27.10 enabled dokku core shell plugin
|
||||
ssh-keys 0.27.10 enabled dokku core ssh-keys plugin
|
||||
storage 0.27.10 enabled dokku core storage plugin
|
||||
tags 0.27.10 enabled dokku core tags plugin
|
||||
tar 0.27.10 enabled dokku core tar plugin
|
||||
trace 0.27.10 enabled dokku core trace plugin
|
||||
00_dokku-standard 0.28.2 enabled dokku core standard plugin
|
||||
20_events 0.28.2 enabled dokku core events logging plugin
|
||||
app-json 0.28.2 enabled dokku core app-json plugin
|
||||
apps 0.28.2 enabled dokku core apps plugin
|
||||
build-env 0.28.2 enabled dokku core build-env plugin
|
||||
buildpacks 0.28.2 enabled dokku core buildpacks plugin
|
||||
certs 0.28.2 enabled dokku core certificate management plugin
|
||||
checks 0.28.2 enabled dokku core checks plugin
|
||||
common 0.28.2 enabled dokku core common plugin
|
||||
config 0.28.2 enabled dokku core config plugin
|
||||
docker-options 0.28.2 enabled dokku core docker-options plugin
|
||||
domains 0.28.2 enabled dokku core domains plugin
|
||||
enter 0.28.2 enabled dokku core enter plugin
|
||||
git 0.28.2 enabled dokku core git plugin
|
||||
logs 0.28.2 enabled dokku core logs plugin
|
||||
network 0.28.2 enabled dokku core network plugin
|
||||
nginx-vhosts 0.28.2 enabled dokku core nginx-vhosts plugin
|
||||
plugin 0.28.2 enabled dokku core plugin plugin
|
||||
proxy 0.28.2 enabled dokku core proxy plugin
|
||||
ps 0.28.2 enabled dokku core ps plugin
|
||||
repo 0.28.2 enabled dokku core repo plugin
|
||||
resource 0.28.2 enabled dokku core resource plugin
|
||||
scheduler-docker-local 0.28.2 enabled dokku core scheduler-docker-local plugin
|
||||
shell 0.28.2 enabled dokku core shell plugin
|
||||
ssh-keys 0.28.2 enabled dokku core ssh-keys plugin
|
||||
storage 0.28.2 enabled dokku core storage plugin
|
||||
tags 0.28.2 enabled dokku core tags plugin
|
||||
tar 0.28.2 enabled dokku core tar plugin
|
||||
trace 0.28.2 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.
|
||||
|
||||
@@ -28,7 +28,7 @@ Valid resource options include:
|
||||
- `--network-egress`
|
||||
- `--nvidia-gpu`
|
||||
|
||||
See the [Supported Resource Management Properties](/docs/advanced-usage/schedulers/docker-local.md#supported-resource-management-properties) section of the docker local scheduler documentation for more information on how each resource limit maps to Docker.
|
||||
See the [Supported Resource Management Properties](/docs/deployment/schedulers/docker-local.md#supported-resource-management-properties) section of the docker local scheduler documentation for more information on how each resource limit maps to Docker.
|
||||
|
||||
Resource limits and reservations are applied only during the `run` and `deploy` phases of an application, and will not impact the `build` phase of an application.
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
|
||||
By default, Dokku will ship a PCI Compliant nginx configuration. For developers whose users are on older browsers or mobile devices, you may need to ship a custom `nginx.conf.sigil` to enable ciphers for older browsers.
|
||||
|
||||
See the [nginx customization](/docs/configuration/nginx/#customizing-the-nginx-configuration) docs for more details.
|
||||
See the [nginx customization](/docs/networking/proxies/nginx/#customizing-the-nginx-configuration) docs for more details.
|
||||
|
||||
## Nginx Error Pages
|
||||
|
||||
We now ship with nicer error pages by default. You are free to customize your Dokku installation via a custom `nginx.conf.sigil` to change what error pages are displayed in different circumstances.
|
||||
|
||||
See the [nginx customization](/docs/configuration/nginx/#customizing-the-nginx-configuration) docs for more details.
|
||||
See the [nginx customization](/docs/networking/proxies/nginx/#customizing-the-nginx-configuration) docs for more details.
|
||||
|
||||
@@ -7,7 +7,7 @@ The [dokku-registry](https://github.com/dokku/dokku-registry) plugin is now buil
|
||||
- Builder plugins should call `post-release-builder` at the end of the build.
|
||||
- The `push` and `pull` command are not implemented. Users wishing to deploy a remote image should use `git:from-image`. Image pushing is not available at this time.
|
||||
- At this time, remote docker repositories are not automatically created for AWS, and users must create those repositories for their applications as necessary. This may be implemented in the future.
|
||||
- Docker images are only pushed when configured to do so. See the [registry management documentation](/docs/deployment/registry-management.md) for more details.
|
||||
- Docker images are only pushed when configured to do so. See the [registry management documentation](/docs/advanced-usage/registry-management.md) for more details.
|
||||
|
||||
Before upgrading, uninstall the registry plugin via `dokku plugin:uninstall registry`. Not doing so will cause issues with Dokku.
|
||||
|
||||
|
||||
25
docs/appendices/0.28.0-migration-guide.md
Normal file
25
docs/appendices/0.28.0-migration-guide.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# 0.28.0 Migration Guide
|
||||
|
||||
## Removals
|
||||
|
||||
Support for the following operating systems has been removed:
|
||||
|
||||
- CentOS 7
|
||||
- Debian 9 (Stretch)
|
||||
- Fedora
|
||||
- OpenSuse
|
||||
|
||||
Dokku will no longer provide packages for RPM based systems. Debian 9 users _may_ use new Debian packages, though support is not guaranteed.
|
||||
|
||||
All users are encouraged to install Dokku via the [Docker-based installation method](/docs/getting-started/install/docker.md), or switch to a supported operating system.
|
||||
|
||||
## Deprecations
|
||||
|
||||
Ubuntu 18.04 is now a deprecated installation target. The operating system will be considered EOL by Canonical in April 2023. Users are encouraged to upgrade to Ubuntu 22.04 or consider switching their instllation method to the [Docker-based installation method](/docs/getting-started/install/docker.md) to avoid any disruption in usage.
|
||||
|
||||
## Additions
|
||||
|
||||
New in 0.28.0 are the Caddy and Traefik plugins. As community plugins wrapping these proxies exist, users should:
|
||||
|
||||
- Recommended: Uninstall the community plugin in question and switch all config to the new plugins.
|
||||
- Upgrade the community plugin to a version that does not use the `proxy:set` value of `caddy` or `traefik`.
|
||||
@@ -5,11 +5,11 @@
|
||||
- The nginx-vhosts template language is now [sigil](https://github.com/gliderlabs/sigil)
|
||||
- No need to escape literal `$` characters (or other "bash-isms")
|
||||
- Template variables are represented as {{ .VARIABLE_NAME }}
|
||||
- A detailed list of template variables can be found [here](/docs/configuration/nginx.md#available-template-variables)
|
||||
- A detailed list of template variables can be found [here](/docs/networking/proxies/nginx.md#available-template-variables)
|
||||
- A custom nginx-vhosts template must be named `nginx.conf.sigil`
|
||||
- The default path for this custom template is the root of your repo (i.e. `/app` in the container or `WORKDIR` if defined in a dockerfile app)
|
||||
- Dokku no longer looks for this file in `/home/dokku/node-js-app` on the Dokku server
|
||||
- Check out an example template [here](/docs/configuration/nginx.md)
|
||||
- Check out an example template [here](/docs/networking/proxies/nginx.md)
|
||||
- Support for server-wide SSL certs have been dropped in favor of using the `certs` plugin
|
||||
- `dokku certs:add node-js-app < certs.tar`
|
||||
- All domains for an SSL-enabled app will be redirected to https by default
|
||||
|
||||
5
docs/assets/extra.css
Normal file
5
docs/assets/extra.css
Normal file
@@ -0,0 +1,5 @@
|
||||
:root > * {
|
||||
--md-primary-fg-color: #2A8FBD;
|
||||
--md-primary-fg-color--light: #ECB7B7;
|
||||
--md-primary-fg-color--dark: #90030C;
|
||||
}
|
||||
@@ -2,10 +2,10 @@
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square70x70logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/mstile-70x70.png"/>
|
||||
<square150x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/mstile-150x150.png"/>
|
||||
<square310x310logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/mstile-310x310.png"/>
|
||||
<wide310x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/mstile-310x150.png"/>
|
||||
<square70x70logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/mstile-70x70.png"/>
|
||||
<square150x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/mstile-150x150.png"/>
|
||||
<square310x310logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/mstile-310x310.png"/>
|
||||
<wide310x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/mstile-310x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
|
||||
@@ -2,37 +2,37 @@
|
||||
"name": "Dokku",
|
||||
"icons": [
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.10\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.28.2\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
||||
"sizes": "36x36",
|
||||
"type": "image\/png",
|
||||
"density": "0.75"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.10\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.28.2\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
||||
"sizes": "48x48",
|
||||
"type": "image\/png",
|
||||
"density": "1.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.10\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.28.2\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image\/png",
|
||||
"density": "1.5"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.10\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.28.2\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image\/png",
|
||||
"density": "2.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.10\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.28.2\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image\/png",
|
||||
"density": "3.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.10\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.28.2\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image\/png",
|
||||
"density": "4.0"
|
||||
|
||||
@@ -712,7 +712,6 @@ button.list-group-item:hover {
|
||||
color: rgb(71, 74, 84);
|
||||
font-size: 1.1em;
|
||||
font-weight: normal;
|
||||
height: 20px;
|
||||
line-height: 1.7;
|
||||
text-align: left;
|
||||
}
|
||||
@@ -1341,4 +1340,4 @@ ul.fas li .fa-large:before {
|
||||
.markdown-body a {
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
"0.24.10",
|
||||
"0.25.7",
|
||||
"0.26.8",
|
||||
"0.27.10"
|
||||
"0.27.10",
|
||||
"0.28.2"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -113,4 +113,4 @@ dokku domains:report node-js-app --domains-app-enabled
|
||||
|
||||
## Default site
|
||||
|
||||
This is specific to your proxy plugin of choice. See the [nginx documentation](/docs/configuration/nginx.md#default-site) for more information on how to configure this for the default nginx proxy implementation.
|
||||
This is specific to your proxy plugin of choice. See the [nginx documentation](/docs/networking/proxies/nginx.md#default-site) for more information on how to configure this for the default nginx proxy implementation.
|
||||
|
||||
@@ -43,7 +43,7 @@ cat yourdomain_com.crt yourdomain_com.ca-bundle > server.crt
|
||||
|
||||
When an SSL certificate is associated to an application, the certificate will be associated with _all_ domains currently associated with said application. Your certificate _should_ be associated with all of those domains, otherwise accessing the application will result in SSL errors. If you wish to remove one of the domains from the application, refer to the [domain configuration documentation](/docs/configuration/domains.md).
|
||||
|
||||
Note that with the default nginx template, requests will be redirected to the `https` version of the domain. If this is not the desired state of request resolution, you may customize the nginx template in use. For more details, see the [nginx documentation](/docs/configuration/nginx.md).
|
||||
Note that with the default nginx template, requests will be redirected to the `https` version of the domain. If this is not the desired state of request resolution, you may customize the nginx template in use. For more details, see the [nginx documentation](/docs/networking/proxies/nginx.md).
|
||||
|
||||
### Certificate generation
|
||||
|
||||
@@ -126,7 +126,7 @@ dokku certs:report node-js-app --ssl-enabled
|
||||
|
||||
The [HSTS header](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) is an HTTP header that can inform browsers that all requests to a given site should be made via HTTPS. Dokku does enables this header by default for HTTPS requests.
|
||||
|
||||
See the [NGINX HSTS documentation](/docs/configuration/nginx.md#hsts-header) for more information on how the HSTS configuration can be managed for your application.
|
||||
See the [NGINX HSTS documentation](/docs/networking/proxies/nginx.md#hsts-header) for more information on how the HSTS configuration can be managed for your application.
|
||||
|
||||
## HTTP/2 support
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Deploying to Dokku
|
||||
# Deploying an Application
|
||||
|
||||
> 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.
|
||||
|
||||
@@ -105,7 +105,7 @@ 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 [herokuish buildpacks documentation](/docs/deployment/builders/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/builders/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.
|
||||
- [Docker Image](https://docs.docker.com/get-started/overview/#docker-objects): See the [docker image documentation](/docs/deployment/methods/git.md#initializing-an-app-repository-from-a-docker-image) to learn about how to deploy a Docker Image.
|
||||
|
||||
### Setting up SSL
|
||||
|
||||
@@ -242,7 +242,7 @@ See the [Dockerfile documentation](/docs/deployment/builders/dockerfiles.md) for
|
||||
|
||||
## Image tagging
|
||||
|
||||
See the [image tagging documentation](/docs/deployment/methods/images.md) for more information on how Docker images can be tagged and deployed for a given application.
|
||||
See the [image tagging documentation](/docs/deployment/methods/git.md#initializing-an-app-repository-from-a-docker-image) for more information on how Docker images can be tagged and deployed for a given application.
|
||||
|
||||
## Specifying a custom buildpack
|
||||
|
||||
|
||||
@@ -150,6 +150,12 @@ By default, Dokku will deploy the renamed app, though you can skip the deploy by
|
||||
dokku apps:rename --skip-deploy node-js-app io-js-app
|
||||
```
|
||||
|
||||
Remember to also change your git remote on your local machine in order to make `git push dokku main:master` work again. For this you can use `git remote set-url`.
|
||||
|
||||
```shell
|
||||
git remote set-url dokku dokku@dokku.me:io-js-app
|
||||
```
|
||||
|
||||
### Cloning an existing app
|
||||
|
||||
> New as of 0.11.5
|
||||
|
||||
@@ -17,6 +17,7 @@ Dokku supports the following built-in builders:
|
||||
|
||||
- `builder-dockerfile`: Builds apps using a `Dockerfile` via `docker build`. See the [dockerfile builder documentation](/docs/deployment/builders/dockerfiles.md) for more information on how this builder functions.
|
||||
- `builder-herokuish`: Builds apps with Heroku's v2a Buildpack specification via `gliderlabs/herokuish`. See the [herokuish builder documentation](/docs/deployment/builders/herokuish-buildpacks.md) for more information on how this builder functions.
|
||||
- `builder-lambda`: Builds AWS Lambda functions in an environment simulating AWS Lambda runtimes via [lambda-builder](https://github.com/dokku/lambda-builder). See the [lambda builder documentation](/docs/deployment/builders/lambda.md) for more information on how this builder functions.
|
||||
- `builder-null`: Does nothing during the build phase. See the [null builder documentation](/docs/deployment/builders/null.md) for more information on how this builder functions.
|
||||
- `builder-pack`: Builds apps with Cloud Native Buildpacks via the `pack-cli` tool. See the [cloud native buildpacks builder documentation](/docs/deployment/builders/cloud-native-buildpacks.md) for more information on how this builder functions.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Cloud Native Buildpacks (Experimental)
|
||||
# Cloud Native Buildpacks
|
||||
|
||||
> New as of 0.22.0
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ Dockerfile2
|
||||
|
||||
For security reasons - and as per [Docker recommendations](https://github.com/docker/docker/issues/13490) - Dockerfile-based deploys have variables available only during runtime.
|
||||
|
||||
For users that require customization in the `build` phase, you may use build arguments via the [docker-options plugin](docs/advanced-usage/docker-options.md):
|
||||
For users that require customization in the `build` phase, you may use build arguments via the [docker-options plugin](/docs/advanced-usage/docker-options.md):
|
||||
|
||||
```shell
|
||||
dokku docker-options:add node-js-app build '--build-arg NODE_ENV=production'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Herokuish Buildpack Deployment
|
||||
# Herokuish Buildpacks
|
||||
|
||||
> Subcommands new as of 0.15.0
|
||||
|
||||
|
||||
107
docs/deployment/builders/lambda.md
Normal file
107
docs/deployment/builders/lambda.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# Lambda Builder
|
||||
|
||||
> New as of 0.28.0
|
||||
|
||||
The `lambda` builder builds AWS Lambda functions in an environment simulating AWS Lambda runtimes via [lambda-builder](https://github.com/dokku/lambda-builder). Apps built via this builder can run natively in Dokku and may also have their artifacts scheduled to Lambda via an appropriate scheduler.
|
||||
|
||||
## Usage
|
||||
|
||||
### Detection
|
||||
|
||||
This builder will be auto-detected in the following case:
|
||||
|
||||
- A `lambda.yml` exists in the root of the app repository.
|
||||
|
||||
The builder may also be selected via the `builder:set` command
|
||||
|
||||
```shell
|
||||
dokku builder:set node-js-app selected lambda
|
||||
```
|
||||
|
||||
### Supported languages
|
||||
|
||||
The `lambda` builder plugin supports the following AWS runtime languages on Amazon Linux 2:
|
||||
|
||||
- dotnet
|
||||
- go (builder is based on AL1)
|
||||
- nodejs
|
||||
- python
|
||||
- ruby
|
||||
|
||||
See the [lambda-builder](https://github.com/dokku/lambda-builder#how-does-it-work) documentation for more information on how specific languages are detected.
|
||||
|
||||
### Customizing the build environment
|
||||
|
||||
The `lambda` builder plugin delegates all build logic to [lambda-builder](https://github.com/dokku/lambda-builder), including language detection and build/runtime environment specification. The lambda-builder tool supports a `lambda.yml` file format for customizing how apps are built. Please see the readme for lambda-builder for more information on different options.
|
||||
|
||||
### Changing the `lambda.yml` location
|
||||
|
||||
When deploying a monorepo, it may be desirable to specify the specific path of the `lambda.yml` file to use for a given app. This can be done via the `builder-lambda:set` command. If a value is specified and that file does not exist in the app's build directory, then the build will fail.
|
||||
|
||||
```shell
|
||||
dokku builder-lambda:set node-js-app lambdayml-path lambda2.yml
|
||||
```
|
||||
|
||||
The default value may be set by passing an empty value for the option:
|
||||
|
||||
```shell
|
||||
dokku builder-lambda:set node-js-app lambdayml-path
|
||||
```
|
||||
|
||||
The `lambdayml-path` property can also be set globally. The global default is `lambda.yml`, and the global value is used when no app-specific value is set.
|
||||
|
||||
```shell
|
||||
dokku builder-lambda:set --global lambdayml-path lambda2.yml
|
||||
```
|
||||
|
||||
The default value may be set by passing an empty value for the option.
|
||||
|
||||
```shell
|
||||
dokku builder-lambda:set --global lambdayml-path
|
||||
```
|
||||
|
||||
### Displaying builder-lambda reports for an app
|
||||
|
||||
You can get a report about the app's storage status using the `builder-lambda:report` command:
|
||||
|
||||
```shell
|
||||
dokku builder-lambda-json:report
|
||||
```
|
||||
|
||||
```
|
||||
=====> node-js-app builder-lambda information
|
||||
Builder-lambda computed lambdayml path: lambda2.yml
|
||||
Builder-lambda global lambdayml path: lambda.yml
|
||||
Builder-lambda lambdayml path: lambda2.yml
|
||||
=====> python-sample builder-lambda information
|
||||
Builder-lambda computed lambdayml path: lambda.yml
|
||||
Builder-lambda global lambdayml path: lambda.yml
|
||||
Builder-lambda lambdayml path:
|
||||
=====> ruby-sample builder-lambda information
|
||||
Builder-lambda computed lambdayml path: lambda.yml
|
||||
Builder-lambda global lambdayml path: lambda.yml
|
||||
Builder-lambda lambdayml path:
|
||||
```
|
||||
|
||||
You can run the command for a specific app also.
|
||||
|
||||
```shell
|
||||
dokku builder-lambda:report node-js-app
|
||||
```
|
||||
|
||||
```
|
||||
=====> node-js-app builder-lambda information
|
||||
Builder-lambda computed lambdayml path: lambda2.yml
|
||||
Builder-lambda global lambdayml path: lambda.yml
|
||||
Builder-lambda lambdayml path: lambda2.yml
|
||||
```
|
||||
|
||||
You can pass flags which will output only the value of the specific information you want. For example:
|
||||
|
||||
```shell
|
||||
dokku builder-lambda:report node-js-app --builder-lambda-lambdayml-path
|
||||
```
|
||||
|
||||
```
|
||||
lambda2.yml
|
||||
```
|
||||
@@ -20,7 +20,7 @@ You can easily get logs of an app using the `logs` command:
|
||||
dokku logs node-js-app
|
||||
```
|
||||
|
||||
Logs are pulled via integration with the scheduler for the specified application via "live tailing". As such, logs from previously running deployments are usually not available. Users that desire to see logs from previous deployments for debugging purposes should persist those logs to external services. Please see Dokku's [vector integration](deployment/logs.md#vector-logging-shipping) for more information on how to persist logs across deployments to ship logs to another service or a third-party platform.
|
||||
Logs are pulled via integration with the scheduler for the specified application via "live tailing". As such, logs from previously running deployments are usually not available. Users that desire to see logs from previous deployments for debugging purposes should persist those logs to external services. Please see Dokku's [vector integration](/docs/deployment/logs.md#vector-logging-shipping) for more information on how to persist logs across deployments to ship logs to another service or a third-party platform.
|
||||
|
||||
#### Behavioral modifiers
|
||||
|
||||
@@ -43,7 +43,7 @@ The above command will show logs continually from the web process.
|
||||
|
||||
### Failed deploy logs
|
||||
|
||||
> Warning: The default [docker-local scheduler](/docs/advanced-usage/schedulers/docker-local.md) will "store" these until the next deploy or until the old containers are garbage collected - whichever runs first. If you require the logs beyond this point in time, please ship the logs to a centralized log server.
|
||||
> Warning: The default [docker-local scheduler](/docs/deployment/schedulers/docker-local.md) will "store" these until the next deploy or until the old containers are garbage collected - whichever runs first. If you require the logs beyond this point in time, please ship the logs to a centralized log server.
|
||||
|
||||
In some cases, it may be useful to retrieve the logs from a previously failed deploy.
|
||||
|
||||
|
||||
@@ -84,10 +84,10 @@ It also supports several flags (all flags unspecified here are passed as is to t
|
||||
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.
|
||||
- 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.
|
||||
- Removes the local `dokku` git remote if set.
|
||||
|
||||
## Unofficial Clients
|
||||
|
||||
|
||||
@@ -37,6 +37,22 @@ Once set, you may re-enable it by setting a blank value for `disable-chown`:
|
||||
dokku scheduler-docker-local:set node-js-app disable-chown
|
||||
```
|
||||
|
||||
### Disabling the init process
|
||||
|
||||
The `scheduler-docker-local` injects an init process by default via the `--init`. For some apps - such as those where the built docker image uses S6 as the init - this may be undesirable and cause issues with process starts. You may disable this by running the following `scheduler-docker-local:set` command for your application:
|
||||
|
||||
```shell
|
||||
dokku scheduler-docker-local:set node-js-app init-process false
|
||||
```
|
||||
|
||||
Once set, you may re-enable it by setting a blank value for `init-process`:
|
||||
|
||||
```shell
|
||||
dokku scheduler-docker-local:set node-js-app init-process
|
||||
```
|
||||
|
||||
All image containers with the label `org.opencontainers.image.vendor=linuxserver.io` will have the automatic init process injection force-disabled without further intervention.
|
||||
|
||||
### Deploying Process Types in Parallel
|
||||
|
||||
> New as of 0.25.5
|
||||
@@ -112,7 +128,7 @@ This plugin implements various functionality through `plugn` triggers to integra
|
||||
|
||||
### Logging support
|
||||
|
||||
App logs for the `logs` command are fetched from running containers via the `docker` cli. To persist logs across deployments, consider using Dokku's [vector integration](deployment/logs.md#vector-logging-shipping) to ship logs to another service or a third-party platform.
|
||||
App logs for the `logs` command are fetched from running containers via the `docker` cli. To persist logs across deployments, consider using Dokku's [vector integration](/docs/deployment/logs.md#vector-logging-shipping) to ship logs to another service or a third-party platform.
|
||||
|
||||
### Supported Resource Management Properties
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> Warning: This scheduler is not in Dokku core and thus functionality may change over time as the API stabilizes.
|
||||
|
||||
The [Nomad Scheduler Plugin](https://github.com/dokku/dokku-scheduler-kubernetes) is available free as an external plugin. Please see the plugin's [issue tracker](https://github.com/dokku/dokku-scheduler-kubernetes/issues) for more information on the status of the plugin.
|
||||
The [Kubernetes Scheduler Plugin](https://github.com/dokku/dokku-scheduler-kubernetes) is available free as an external plugin. Please see the plugin's [issue tracker](https://github.com/dokku/dokku-scheduler-kubernetes/issues) for more information on the status of the plugin.
|
||||
|
||||
For users that require additional functionality, please refer to the [Sponsoring Documentation](https://github.com/dokku/.github/blob/master/SPONSORING.md).
|
||||
|
||||
|
||||
@@ -18,8 +18,6 @@ Dokku supports the following built-in schedulers:
|
||||
- `scheduler-docker-local`: Schedules apps against the local docker socket and runs containers directly on the Dokku host. See the [docker-local scheduler documentation](/docs/deployment/schedulers/docker-local.md) for more information on how this scheduler functions.
|
||||
- `scheduler-null`: Does nothing during the scheduler phase. See the [null scheduler documentation](/docs/deployment/schedulers/null.md) for more information on how this scheduler functions.
|
||||
|
||||
See the [alternate schedulers documentation](/docs/deployment/schedulers/alternate-schedulers.md) for more information on other scheduler plugins.
|
||||
|
||||
### Overriding the auto-selected scheduler
|
||||
|
||||
If desired, the scheduler can be specified via the `scheduler:set` command by speifying a value for `selected`. The selected scheduler will always be used.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Zero Downtime Deploys
|
||||
# Zero Downtime Deploy Checks
|
||||
|
||||
> New as of 0.5.0
|
||||
|
||||
|
||||
@@ -441,7 +441,6 @@ DOKKU_SCHEDULER="$1"
|
||||
```shell
|
||||
#!/usr/bin/env bash
|
||||
# Installs nginx for the current plugin
|
||||
# Supports both opensuse and ubuntu
|
||||
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
@@ -451,9 +450,8 @@ case "$DOKKU_DISTRO" in
|
||||
debian|raspbian|ubuntu)
|
||||
apt-get -qq -y --no-install-recommends install nginx
|
||||
;;
|
||||
|
||||
opensuse)
|
||||
zypper -q in -y nginx
|
||||
*)
|
||||
echo "Installation on $DOKKU_DISTRO not supported" 1>&2
|
||||
;;
|
||||
esac
|
||||
```
|
||||
@@ -1844,6 +1842,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
# TODO
|
||||
```
|
||||
|
||||
### `proxy-configure-ports`
|
||||
|
||||
- Description: Configures the proxy port mapping
|
||||
- Invoked by: `internally triggered by proxy plugins`
|
||||
- Arguments: `$APP`
|
||||
- Example:
|
||||
|
||||
```shell
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
# TODO
|
||||
```
|
||||
|
||||
### `proxy-disable`
|
||||
|
||||
- Description: Disables the configured proxy implementation for an app
|
||||
|
||||
@@ -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.27.10-2 (Mon Feb 22 23:20:37 CET 2016)"
|
||||
# wait for "==> build-arch: ==> Finished making: dokku 0.28.2-2 (Mon Feb 22 23:20:37 CET 2016)"
|
||||
cd ../dokku-arch
|
||||
git add PKGBUILD .SRCINFO
|
||||
git commit -m 'Update to dokku 0.9.9'
|
||||
|
||||
@@ -17,6 +17,8 @@ While we do provide official packages for a variety of platforms, as our test su
|
||||
|
||||
## Local Test Execution
|
||||
|
||||
### Vagrant VM
|
||||
|
||||
- Setup Dokku in a [Vagrant VM](/docs/getting-started/install/vagrant.md).
|
||||
- Run the following to setup tests and execute them:
|
||||
|
||||
@@ -25,18 +27,6 @@ While we do provide official packages for a variety of platforms, as our test su
|
||||
sudo su -
|
||||
cd ~/dokku
|
||||
make ci-dependencies setup-deploy-tests
|
||||
|
||||
# execute the entire test suite (linter, bats tests, and app deployment tests)
|
||||
make test
|
||||
|
||||
# run linter
|
||||
make lint
|
||||
|
||||
# execute all bats tests
|
||||
make unit-tests
|
||||
|
||||
# execute all app deployment tests
|
||||
make deploy-tests
|
||||
```
|
||||
|
||||
After making changes to your local Dokku clone, don't forget to update the Vagrant Dokku install.
|
||||
@@ -49,7 +39,54 @@ make copyfiles
|
||||
make go-build-plugin copyplugin PLUGIN_NAME=apps
|
||||
```
|
||||
|
||||
Additionally you may run a specific app deployment tests with a target similar to:
|
||||
### VSCode Dev Container
|
||||
|
||||
- Open Dokku in a VSCode DevContainer
|
||||
- Run the following in the VSCode terminal to setup tests and execute them:
|
||||
|
||||
```shell
|
||||
make ci-dependencies setup-deploy-tests
|
||||
```
|
||||
|
||||
After making changes to your local Dokku clone, don't forget to update the Vagrant Dokku install.
|
||||
|
||||
```shell
|
||||
# update vagrant dokku install from local git clone
|
||||
make copyfiles
|
||||
|
||||
# build a specific plugin
|
||||
make go-build-plugin copyplugin PLUGIN_NAME=apps
|
||||
```
|
||||
|
||||
### Executing tests
|
||||
|
||||
Execute the entire test suite (linter, bats tests, and app deployment tests):
|
||||
|
||||
```shell
|
||||
make test
|
||||
```
|
||||
|
||||
Run the linter
|
||||
|
||||
```shell
|
||||
make lint
|
||||
```
|
||||
|
||||
Execute all bats tests
|
||||
|
||||
```shell
|
||||
make unit-tests
|
||||
```
|
||||
|
||||
Execute all app deployment tests
|
||||
|
||||
```shell
|
||||
make deploy-tests
|
||||
```
|
||||
|
||||
#### Executing App Tests
|
||||
|
||||
You may run a specific app deployment tests with a target similar to:
|
||||
|
||||
```shell
|
||||
make deploy-test-nodejs-express
|
||||
@@ -57,32 +94,32 @@ make deploy-test-nodejs-express
|
||||
|
||||
For a full list of test make targets check out `tests.mk` in the root of the Dokku repository.
|
||||
|
||||
## Executing a single test suite
|
||||
#### Executing a single test suite
|
||||
|
||||
When working on a particular plugin, it may be useful to run _only_ a particular test suite. This can be done by specifying the test suite path:
|
||||
|
||||
```shell
|
||||
bats tests/unit/10_apps.bats
|
||||
bats tests/unit/apps_1.bats
|
||||
```
|
||||
|
||||
It is also possible to target multiple test suites at a time.
|
||||
|
||||
```shell
|
||||
bats tests/unit/10_apps.bats tests/unit/10_certs.bats
|
||||
bats tests/unit/apps_1.bats tests/unit/certs.bats
|
||||
```
|
||||
|
||||
## Executing a single test
|
||||
#### Executing a single test
|
||||
|
||||
In order to increase testing velocity, a wrapper script around Bats is available that can be used to run a single test case within a suite.
|
||||
|
||||
Tests within a suite may be listed by specifying the suite as a parameter to `bats`.
|
||||
|
||||
```shell
|
||||
bats tests/unit/10_apps.bats
|
||||
bats tests/unit/apps_1.bats
|
||||
```
|
||||
|
||||
A single test can be specified via the `--filter` argument. The tests are selected via regex match, and all matches are executed.
|
||||
|
||||
```shell
|
||||
bats --filter clone tests/unit/10_apps.bats
|
||||
bats --filter list tests/unit/apps_1.bats
|
||||
```
|
||||
|
||||
@@ -12,7 +12,6 @@ As well, you may wish to customize your installation in some other fashion. or e
|
||||
|
||||
- [Debian Package Installation Notes](/docs/getting-started/install/debian.md)
|
||||
- [Docker-based Installation Notes](/docs/getting-started/install/docker.md)
|
||||
- [RPM Package Installation Notes](/docs/getting-started/install/rpm.md)
|
||||
- [Vagrant Installation Notes](/docs/getting-started/install/vagrant.md)
|
||||
- [Advanced Install Customization](/docs/getting-started/advanced-installation.md)
|
||||
- [Automated deployment via ansible](https://github.com/dokku/ansible-dokku)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
Pull the dokku/dokku image:
|
||||
|
||||
```shell
|
||||
docker pull dokku/dokku:0.27.10
|
||||
docker pull dokku/dokku:0.28.2
|
||||
```
|
||||
|
||||
Next, run the image.
|
||||
@@ -18,7 +18,7 @@ docker container run \
|
||||
--publish 8443:443 \
|
||||
--volume /var/lib/dokku:/mnt/dokku \
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock \
|
||||
dokku/dokku:0.27.10
|
||||
dokku/dokku:0.28.2
|
||||
```
|
||||
|
||||
The above command will start a new docker container that is ready when a message similar to `Runit started as PID 12345` appears.
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
# RPM Package Installation Notes
|
||||
|
||||
> New as of 0.8.0 *(experimental)*
|
||||
|
||||
> **Warning:** Web installer is not available on CentOS. You will need to configure [SSH keys](/docs/deployment/user-management.md#adding-ssh-keys) and [virtual hosts](/docs/configuration/domains.md#customizing-hostnames) using dokku command line interface.
|
||||
|
||||
Dokku defaults to being installed via RPM package on CentOS 7. While certain hosts may require extra work to get running, you may optionally wish to automate the installation of Dokku without the use of our `bootstrap.sh` Bash script. The following are the steps run by said script:
|
||||
|
||||
```shell
|
||||
# Install docker
|
||||
curl -fsSL https://get.docker.com/ | sh
|
||||
|
||||
# Install epel for nginx packages to be available
|
||||
sudo yum install -y epel-release
|
||||
|
||||
# Install dokku
|
||||
curl -s https://packagecloud.io/install/repositories/dokku/dokku/script.rpm.sh | sudo bash
|
||||
sudo yum install -y herokuish dokku
|
||||
sudo dokku plugin:install-dependencies --core
|
||||
systemctl start nginx
|
||||
|
||||
# Enable docker and nginx on system startup
|
||||
systemctl enable docker
|
||||
systemctl enable nginx
|
||||
```
|
||||
|
||||
The [devicemapper](https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/) is the default Docker storage driver on CentOS 7 and defaults to a configuration mode known as `loop-lvm`. This mode is designed to work out-of-the-box with no additional configuration. However, production deployments should not run under `loop-lvm` mode. The preferred configuration for production deployments is [`direct-lvm`](https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#/configure-direct-lvm-mode-for-production).
|
||||
@@ -10,8 +10,7 @@ To start using Dokku, you'll need a system that meets the following minimum requ
|
||||
|
||||
- A fresh installation of any of the following operating systems:
|
||||
- [Ubuntu 18.04/20.04/22.04](https://www.ubuntu.com/download)
|
||||
- [Debian 9+ x64](https://www.debian.org/distrib/)
|
||||
- [CentOS 7 x64](https://www.centos.org/download/) *(experimental)*
|
||||
- [Debian 10+ x64](https://www.debian.org/distrib/)
|
||||
- A server with one of the following architectures
|
||||
- AMD64 (alternatively known as `x86_64`), commonly used for Intel cloud servers
|
||||
- ARMV7 (alternatively known as `armhf`), commonly used for Raspberry PI
|
||||
@@ -20,7 +19,7 @@ To start using Dokku, you'll need a system that meets the following minimum requ
|
||||
To avoid memory pressure during builds or runtime of your applications, we suggest the following:
|
||||
|
||||
- At least 1 GB of system memory
|
||||
- If your system has less than 1GB of memory, you can use [this workaround](/docs/getting-started/advanced-installation.md#vms-with-less-than-1gb-of-memory).
|
||||
- If your system has less than 1GB of memory, you can use [this workaround](/docs/getting-started/advanced-installation.md#vms-with-less-than-1-gb-of-memory).
|
||||
|
||||
Finally, we recommend attaching at least one domain name to your server. This is not required, but using a domain name will make app access easier. When connecting a domain, either a single domain or a wildcard may be associated to the server's IP.
|
||||
|
||||
@@ -39,8 +38,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.27.10/bootstrap.sh;
|
||||
sudo DOKKU_TAG=v0.27.10 bash bootstrap.sh
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.28.2/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.28.2 bash bootstrap.sh
|
||||
```
|
||||
|
||||
The installation process takes about 5-10 minutes, depending upon internet connection speed.
|
||||
@@ -9,13 +9,6 @@ While we hate to see you go, if you need to uninstall Dokku, the following may h
|
||||
yay -Rsn dokku
|
||||
```
|
||||
|
||||
## CentOS Uninstallation
|
||||
|
||||
```shell
|
||||
# uninstall dokku
|
||||
yum remove dokku herokuish
|
||||
```
|
||||
|
||||
## Debian Uninstallation
|
||||
|
||||
```shell
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Upgrading
|
||||
|
||||
If your version of Dokku is pre 0.3.0 (check with `dokku version`), we recommend [a fresh install](/docs/getting-started/installation.md) on a new server.
|
||||
If your version of Dokku is pre 0.3.0 (check with `dokku version`), we recommend [a fresh install](/docs/getting-started/installation/index.md) on a new server.
|
||||
|
||||
## Security Updates
|
||||
|
||||
@@ -9,7 +9,6 @@ For any security related updates, please follow our [Twitter account](https://tw
|
||||
Your operating system may occasionally provide security updates. We recommend setting unattended upgrades for your operating system. Here are some helpful links:
|
||||
|
||||
- [Arch Linux System Maintenance](https://wiki.archlinux.org/index.php/System_maintenance)
|
||||
- [CentOS Automatic Security Updates](https://serversforhackers.com/c/automatic-security-updates-centos)
|
||||
- [Debian Unattended Upgrades](https://wiki.debian.org/UnattendedUpgrades)
|
||||
- [Ubuntu Unattended Upgrades](https://help.ubuntu.com/community/AutomaticSecurityUpdates)
|
||||
|
||||
@@ -19,6 +18,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.28](/docs/appendices/0.28.0-migration-guide.md)
|
||||
- [Upgrading to 0.27](/docs/appendices/0.27.0-migration-guide.md)
|
||||
- [Upgrading to 0.26](/docs/appendices/0.26.0-migration-guide.md)
|
||||
- [Upgrading to 0.25](/docs/appendices/0.25.0-migration-guide.md)
|
||||
@@ -20,7 +20,7 @@ GitHub Discussions is a new way for the Dokku community to interact with each ot
|
||||
|
||||
### The Slack Channel
|
||||
|
||||
- [Gliderlabs Slack](https://glider-slackin.herokuapp.com/) (Join the `#dokku` channel)
|
||||
- [Gliderlabs Slack](https://slack.dokku.com/) (Join the `#dokku` channel)
|
||||
|
||||
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 our brand new sports car.
|
||||
|
||||
|
||||
@@ -10,26 +10,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.27.10/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.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.28.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.28.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.28.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.28.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.28.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.28.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.28.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.28.2/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.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.28.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/favicon.ico">
|
||||
<meta name="apple-mobile-web-app-title" content="Dokku">
|
||||
<meta name="application-name" content="Dokku">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/browserconfig.xml">
|
||||
<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">
|
||||
@@ -38,7 +38,7 @@
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<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://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/style.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/style.css" rel="stylesheet">
|
||||
<!-- <link href="./assets/style.css" rel="stylesheet"> -->
|
||||
</head>
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
<button class="navbar-toggler navbar-toggler-right" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
|
||||
<div class="collapse navbar-collapse" id="navbarResponsive">
|
||||
<ul class="navbar-nav ms-auto my-2 my-lg-0">
|
||||
<li class="nav-item"><a class="nav-link mx-0 mx-md-2 underline" href="https://dokku.github.io/">Blog</a></li>
|
||||
<li class="nav-item"><a class="nav-link mx-0 mx-md-2 underline" href="https://dokku.com/blog/">Blog</a></li>
|
||||
<li class="nav-item"><a class="nav-link mx-0 mx-md-2 underline" href="https://github.com/dokku/dokku/">Code</a></li>
|
||||
<li class="nav-item"><a class="nav-link mx-0 mx-md-2 underline" href="/{{NAME}}/getting-started/installation/">Docs</a></li>
|
||||
<li class="nav-item dropdown">
|
||||
@@ -68,7 +68,7 @@
|
||||
<strong class="d-block">Discord</strong>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://glider-slackin.herokuapp.com/" class="btn rounded-2 d-flex align-items-center py-2 px-3 lh-sm text-start mx-2">
|
||||
<a href="https://slack.dokku.com/" class="btn rounded-2 d-flex align-items-center py-2 px-3 lh-sm text-start mx-2">
|
||||
<img class="me-3" alt="slack" src="./assets/social/slack.png" width="25px" />
|
||||
<div>
|
||||
<strong class="d-block">Slack</strong>
|
||||
@@ -98,7 +98,7 @@
|
||||
<main class="container px-4 px-lg-5">
|
||||
<div class="row">
|
||||
<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.27.1</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.28.2</span></span></a>
|
||||
<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>
|
||||
<div class="d-flex mt-5">
|
||||
@@ -117,14 +117,14 @@
|
||||
<br>
|
||||
<p class="line">
|
||||
<span class="prompt">$</span>
|
||||
<span class="command">wget https://dokku.com/installer/latest/bootstrap.sh</span>
|
||||
<span class="command">wget https://raw.githubusercontent.com/dokku/dokku/v0.28.2/bootstrap.sh</span>
|
||||
</p>
|
||||
<p class="line">
|
||||
<span class="output"># run the installer</span>
|
||||
</p>
|
||||
<p class="line">
|
||||
<span class="prompt">$</span>
|
||||
<span class="command">sudo DOKKU_TAG=v0.27.10 bash bootstrap.sh</span>
|
||||
<span class="command">sudo DOKKU_TAG=v0.28.2 bash bootstrap.sh</span>
|
||||
</p>
|
||||
<br>
|
||||
<p class="line">
|
||||
@@ -223,7 +223,7 @@
|
||||
Deploy</a>
|
||||
<a class="nav-link" id="nav-scale-tab" data-bs-toggle="tab" href="#nav-scale" role="tab" aria-controls="nav-scale" aria-selected="false">
|
||||
<svg width="23" height="24" viewBox="0 0 23 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0L2.5 0V21H23V23.7364H0V0ZM15.1473 4.08735C15.1473 3.89062 15.2543 3.57401 15.3891 3.4349C15.5239 3.29579 15.7067 3.21764 15.8973 3.21764H21.6473C21.8379 3.21764 22.2313 3.38443 22.3661 3.52353C22.5009 3.66264 22.6529 4.06992 22.6529 4.26665V10.2008C22.6529 10.3975 22.5985 10.5861 22.4637 10.7253C22.3289 10.8644 22.0528 10.9376 21.8622 10.9376C21.6715 10.9376 21.2739 10.8644 21.1391 10.7253C21.0043 10.5861 20.9286 10.3975 20.9286 10.2008V6.34359L15.7349 12.8963C15.6713 12.9764 15.5028 13.1856 15.4132 13.2322C15.3236 13.2788 15.2256 13.3056 15.1254 13.3108C15.0252 13.3159 14.9251 13.2994 14.8314 13.2622C14.7378 13.225 14.6527 13.1681 14.5817 13.0949L10.9086 9.79904L5.65683 16.7063C5.43978 16.9911 4.8927 16.8125 4.47404 16.5042C4.08636 16.2187 3.75998 15.7452 3.99173 15.3696L9.97348 7.33459C10.0345 7.24783 10.113 7.17575 10.2037 7.12332C10.2943 7.0709 10.3948 7.03937 10.4984 7.0309C10.602 7.02244 10.7061 7.03725 10.8036 7.07432C10.9011 7.11138 10.9896 7.16981 11.0631 7.24558L14.8314 10.7253L19.3036 5.07432L15.8973 5.00841C15.7067 5.00841 15.4678 4.92015 15.333 4.78104C15.1982 4.64193 15.1473 4.28407 15.1473 4.08735Z" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0L2.5 0V21H23V23.7364H0V0ZM15.1473 4.08735C15.1473 3.89062 15.2543 3.57401 15.3891 3.4349C15.5239 3.29579 15.7067 3.21764 15.8973 3.21764H21.6473C21.8379 3.21764 22.2313 3.38443 22.3661 3.52353C22.5009 3.66264 22.6529 4.06992 22.6529 4.26665V10.2008C22.6529 10.3975 22.5985 10.5861 22.4637 10.7253C22.3289 10.8644 22.0.28.20.9376 21.8622 10.9376C21.6715 10.9376 21.2739 10.8644 21.1391 10.7253C21.0043 10.5861 20.9286 10.3975 20.9286 10.2008V6.34359L15.7349 12.8963C15.6713 12.9764 15.5028 13.1856 15.4132 13.2322C15.3236 13.2788 15.2256 13.3056 15.1254 13.3108C15.0252 13.3159 14.9251 13.2994 14.8314 13.2622C14.7378 13.225 14.6527 13.1681 14.5817 13.0949L10.9086 9.79904L5.65683 16.7063C5.43978 16.9911 4.8927 16.8125 4.47404 16.5042C4.08636 16.2187 3.75998 15.7452 3.99173 15.3696L9.97348 7.33459C10.0345 7.24783 10.113 7.17575 10.2037 7.12332C10.2943 7.0709 10.3948 7.03937 10.4984 7.0309C10.602 7.02244 10.7061 7.03725 10.8036 7.07432C10.9011 7.11138 10.9896 7.16981 11.0631 7.24558L14.8314 10.7253L19.3036 5.07432L15.8973 5.00841C15.7067 5.00841 15.4678 4.92015 15.333 4.78104C15.1982 4.64193 15.1473 4.28407 15.1473 4.08735Z" />
|
||||
</svg>
|
||||
Scale</a>
|
||||
</div>
|
||||
@@ -735,4 +735,4 @@
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -65,7 +65,7 @@ If everything is working correctly, you should also be able to query for any oth
|
||||
|
||||
If they all return your IP address, you have set DNS up properly for dokku. You should also be able to `ssh root@myserver.example.tld` and access your server.
|
||||
|
||||
Proceed with the setup instructions in the [installation documentation](/docs/getting-started/installation.md)
|
||||
Proceed with the setup instructions in the [installation documentation](/docs/getting-started/installation/index.md)
|
||||
|
||||
### Using the root of your domain (node-js-app.example.tld)
|
||||
|
||||
@@ -74,4 +74,4 @@ This section is a work in progress. It is incomplete.
|
||||
Using the 'root' of your domain is nearly identical to the previous example.
|
||||
|
||||
* hostname is under `example.tld`, still needs `A` record.
|
||||
* Update your global domain using the [domains plugin](docs/configuration/domains.md).
|
||||
* Update your global domain using the [domains plugin](/docs/configuration/domains.md).
|
||||
|
||||
@@ -161,7 +161,7 @@ Only a single `$IP:$PORT` combination can be routed to for a given app, and that
|
||||
|
||||
> New as of 0.20.0, Requires Docker 1.21+
|
||||
|
||||
Apps will default to being associated with the default `bridge` network or a network specified by the `initial-network` network property. Additionally, an app can be attached to `attachable` networks by changing the `attach-post-create` or `attach-post-deploy` network properties when using the [docker-local scheduler](/docs/advanced-usage/schedulers/docker-local.md). A change in these values will require an app deploy or rebuild.
|
||||
Apps will default to being associated with the default `bridge` network or a network specified by the `initial-network` network property. Additionally, an app can be attached to `attachable` networks by changing the `attach-post-create` or `attach-post-deploy` network properties when using the [docker-local scheduler](/docs/deployment/schedulers/docker-local.md). A change in these values will require an app deploy or rebuild.
|
||||
|
||||
```shell
|
||||
# associates the network after a container is created but before it is started
|
||||
@@ -308,7 +308,7 @@ dokku network:rebuildall
|
||||
|
||||
### Container network interface binding
|
||||
|
||||
> This functionality does not control the `--network` docker flag. Please use the [docker-options plugin](docs/advanced-usage/docker-options.md) to manage this flag.
|
||||
> This functionality does not control the `--network` docker flag. Please use the [docker-options plugin](/docs/advanced-usage/docker-options.md) to manage this flag.
|
||||
|
||||
By default, an app will only bind to the internal interface. This behavior can be modified per app by changing the `bind-all-interfaces` network property.
|
||||
|
||||
|
||||
202
docs/networking/proxies/caddy.md
Normal file
202
docs/networking/proxies/caddy.md
Normal file
@@ -0,0 +1,202 @@
|
||||
# Caddy Proxy
|
||||
|
||||
> New as of 0.28.0
|
||||
|
||||
Dokku provides integration with the [Caddy](https://caddyserver.com/) proxy service by utilizing the Docker label-based integration implemented by Caddy.
|
||||
|
||||
```
|
||||
caddy:report [<app>] [<flag>] # Displays a caddy report for one or more apps
|
||||
caddy:logs [--num num] [--tail] # Display caddy log output
|
||||
caddy:set <app> <property> (<value>) # Set or clear an caddy property for an app
|
||||
caddy:show-config <app> # Display caddy compose config
|
||||
caddy:start # Starts the caddy server
|
||||
caddy:stop # Stops the caddy server
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
Using the `caddy` plugin integration requires the `docker-compose-plugin` for Docker. See [this document](https://docs.docker.com/compose/install/compose-plugin/) from the Docker documentation for more information on the installation process for the `docker-compose-plugin`.
|
||||
|
||||
## Usage
|
||||
|
||||
> Warning: As using multiple proxy plugins on a single Dokku installation can lead to issues routing requests to apps, doing so should be avoided. As the default proxy implementation is nginx, users are encouraged to stop the nginx service before switching to Caddy.
|
||||
|
||||
The Caddy plugin has specific rules for routing requests:
|
||||
|
||||
- Caddy integration is exposed via docker labels attached to containers. Changes in labels require either app deploys or rebuilds.
|
||||
- While Caddy will respect labels associated with other containers, only `web` containers have Caddy labels injected by the plugin.
|
||||
- Only `http:80` and `https:443` port mappings are supported.
|
||||
- Caddy will automatically enable SSL if the letsencrypt email property is set. SSL will be disabled otherwise.
|
||||
- If no `http:80` mapping is found, the first `http` port mapping is used for http requests.
|
||||
- If no `https:443` mapping is found, the first `https` port mapping is used for https requests.
|
||||
- If no `https` mapping is found, the container port from `http:80` will be used for https requests.
|
||||
- Requests are routed as soon as the container is running and passing healthchecks.
|
||||
|
||||
### Switching to Caddy
|
||||
|
||||
To use the Caddy plugin, use the `proxy:set` command for the app in question:
|
||||
|
||||
```shell
|
||||
dokku proxy:set node-js-app caddy
|
||||
```
|
||||
|
||||
This will enable the docker label-based Caddy integration. All future deploys will inject the correct labels for Caddy to read and route requests to containers. Due to the docker label-based integration used by Caddy, a single deploy or rebuild will be required before requests will route successfully.
|
||||
|
||||
```shell
|
||||
dokku ps:rebuild node-js-app
|
||||
```
|
||||
|
||||
Any changes to domains or port mappings will also require either a deploy or rebuild.
|
||||
|
||||
### Starting Caddy container
|
||||
|
||||
Caddy can be started via the `caddy:start` command. This will start a Caddy container via the `docker compose up` command.
|
||||
|
||||
```shell
|
||||
dokku caddy:start
|
||||
```
|
||||
|
||||
### Stopping the Caddy container
|
||||
|
||||
Caddy may be stopped via the `caddy:stop` command.
|
||||
|
||||
```shell
|
||||
dokku caddy:stop
|
||||
```
|
||||
|
||||
The Caddy container will be stopped and removed from the system. If the container is not running, this command will do nothing.
|
||||
|
||||
### Showing the Caddy compose config
|
||||
|
||||
For debugging purposes, it may be useful to show the Caddy compose config. This can be achieved via the `caddy:show-config` command.
|
||||
|
||||
```shell
|
||||
dokku caddy:show-config
|
||||
```
|
||||
|
||||
### Customizing the Caddy container image
|
||||
|
||||
While the default Caddy image is hardcoded, users may specify an alternative by setting the `image` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku caddy:set --global image lucaslorentz/caddy-docker-proxy:2.7
|
||||
```
|
||||
|
||||
#### Checking the Caddy container's logs
|
||||
|
||||
It may be necessary to check the Caddy container's logs to ensure that Caddy is operating as expected. This can be performed with the `caddy:logs` command.
|
||||
|
||||
```shell
|
||||
dokku caddy:logs
|
||||
```
|
||||
|
||||
This command also supports the following modifiers:
|
||||
|
||||
```shell
|
||||
--num NUM # the number of lines to display
|
||||
--tail # continually stream logs
|
||||
```
|
||||
|
||||
You can use these modifiers as follows:
|
||||
|
||||
```shell
|
||||
dokku caddy:logs --tail --num 10
|
||||
```
|
||||
|
||||
The above command will show logs continually from the vector container, with an initial history of 10 log lines
|
||||
|
||||
### Changing the Caddy log level
|
||||
|
||||
Caddy log output is set to `ERROR` by default. It may be changed by setting the `log-level` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku caddy:set --global log-level DEBUG
|
||||
```
|
||||
|
||||
After modifying, the Caddy container will need to be restarted.
|
||||
|
||||
### SSL Configuration
|
||||
|
||||
The caddy plugin only supports automatic ssl certificates from it's letsencrypt integration. Managed certificates provided by the `certs` plugin are ignored.
|
||||
|
||||
#### Enabling letsencrypt integration
|
||||
|
||||
By default, letsencrypt is disabled and https port mappings are ignored. To enable, set the `letsencrypt-email` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku caddy:set --global letsencrypt-email automated@dokku.sh
|
||||
```
|
||||
|
||||
After enabling, the Caddy container will need to be restarted and apps will need to be rebuilt. All http requests will then be redirected to https.
|
||||
|
||||
#### Customizing the letsencrypt server
|
||||
|
||||
The letsencrypt integration is set to the production letsencrypt server by default. To change this, set the `letsencrypt-server` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku caddy:set --global letsencrypt-server https://acme-staging-v02.api.letsencrypt.org/directory
|
||||
```
|
||||
|
||||
After enabling, the Caddy container will need to be restarted and apps will need to be rebuilt to retrieve certificates from the new server.
|
||||
|
||||
### Using Caddy's Internal TLS server
|
||||
|
||||
To switch to Caddy's internal TLS server for certificate provisioning, set the `tls-internal` property. This can only be set on a per-app basis.
|
||||
|
||||
```shell
|
||||
dokku caddy:set node-js-app tls-internal true
|
||||
```
|
||||
|
||||
## Displaying Caddy reports for an app
|
||||
|
||||
You can get a report about the app's Caddy config using the `caddy:report` command:
|
||||
|
||||
```shell
|
||||
dokku caddy:report
|
||||
```
|
||||
|
||||
```
|
||||
=====> node-js-app caddy information
|
||||
Caddy image: lucaslorentz/caddy-docker-proxy:2.7
|
||||
Caddy letsencrypt email:
|
||||
Caddy letsencrypt server:
|
||||
Caddy log level: ERROR
|
||||
Caddy polling interval: 5s
|
||||
Caddy tls internal: false
|
||||
=====> python-app caddy information
|
||||
Caddy image: lucaslorentz/caddy-docker-proxy:2.7
|
||||
Caddy letsencrypt email:
|
||||
Caddy letsencrypt server:
|
||||
Caddy log level: ERROR
|
||||
Caddy polling interval: 5s
|
||||
Caddy tls internal: false
|
||||
=====> ruby-app caddy information
|
||||
Caddy image: lucaslorentz/caddy-docker-proxy:2.7
|
||||
Caddy letsencrypt email:
|
||||
Caddy letsencrypt server:
|
||||
Caddy log level: ERROR
|
||||
Caddy polling interval: 5s
|
||||
Caddy tls internal: false
|
||||
```
|
||||
|
||||
You can run the command for a specific app also.
|
||||
|
||||
```shell
|
||||
dokku caddy:report node-js-app
|
||||
```
|
||||
|
||||
```
|
||||
=====> node-js-app caddy information
|
||||
Caddy image: lucaslorentz/caddy-docker-proxy:2.7
|
||||
Caddy letsencrypt email:
|
||||
Caddy letsencrypt server:
|
||||
Caddy log level: ERROR
|
||||
Caddy polling interval: 5s
|
||||
Caddy tls internal: false
|
||||
```
|
||||
|
||||
You can pass flags which will output only the value of the specific information you want. For example:
|
||||
|
||||
```shell
|
||||
dokku caddy:report node-js-app --caddy-image
|
||||
```
|
||||
@@ -1,4 +1,4 @@
|
||||
# Nginx Configuration
|
||||
# Nginx Proxy
|
||||
|
||||
Dokku uses nginx as its server for routing requests to specific applications. By default, access and error logs are written for each app to `/var/log/nginx/${APP}-access.log` and `/var/log/nginx/${APP}-error.log` respectively
|
||||
|
||||
@@ -8,16 +8,40 @@ nginx:error-logs <app> [-t] # Show the nginx error logs for an appl
|
||||
nginx:report [<app>] [<flag>] # Displays a nginx report for one or more apps
|
||||
nginx:set <app> <property> (<value>) # Set or clear an nginx property for an app
|
||||
nginx:show-config <app> # Display app nginx config
|
||||
nginx:start # Starts the nginx server
|
||||
nginx:stop # Stops the nginx server
|
||||
nginx:validate-config [<app>] [--clean] # Validates and optionally cleans up invalid nginx configurations
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
> Warning: As using multiple proxy plugins on a single Dokku installation can lead to issues routing requests to apps, doing so should be avoided.
|
||||
|
||||
### 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)
|
||||
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/networking/proxies/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)
|
||||
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).
|
||||
|
||||
### Starting nginx
|
||||
|
||||
> New as of 0.28.0
|
||||
|
||||
The nginx server can be started via `nginx:start`.
|
||||
|
||||
```shell
|
||||
dokku nginx:start
|
||||
````
|
||||
|
||||
### Stopping nginx
|
||||
|
||||
> New as of 0.28.0
|
||||
|
||||
The nginx server can be stopped via `nginx:stop`.
|
||||
|
||||
```shell
|
||||
dokku nginx:stop
|
||||
````
|
||||
|
||||
### Binding to specific addresses
|
||||
|
||||
254
docs/networking/proxies/traefik.md
Normal file
254
docs/networking/proxies/traefik.md
Normal file
@@ -0,0 +1,254 @@
|
||||
# Traefik Proxy
|
||||
|
||||
> New as of 0.28.0
|
||||
|
||||
Dokku provides integration with the [Traefik](https://traefik.io/) proxy service by utilizing the Docker label-based integration implemented by Traefik.
|
||||
|
||||
```
|
||||
traefik:report [<app>] [<flag>] # Displays a traefik report for one or more apps
|
||||
traefik:logs [--num num] [--tail] # Display traefik log output
|
||||
traefik:set <app> <property> (<value>) # Set or clear an traefik property for an app
|
||||
traefik:show-config <app> # Display traefik compose config
|
||||
traefik:start # Starts the traefik server
|
||||
traefik:stop # Stops the traefik server
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
Using the `traefik` plugin integration requires the `docker-compose-plugin` for Docker. See [this document](https://docs.docker.com/compose/install/compose-plugin/) from the Docker documentation for more information on the installation process for the `docker-compose-plugin`.
|
||||
|
||||
## Usage
|
||||
|
||||
> Warning: As using multiple proxy plugins on a single Dokku installation can lead to issues routing requests to apps, doing so should be avoided. As the default proxy implementation is nginx, users are encouraged to stop the nginx service before switching to Traefik.
|
||||
|
||||
The Traefik plugin has specific rules for routing requests:
|
||||
|
||||
- Traefik integration is exposed via docker labels attached to containers. Changes in labels require either app deploys or rebuilds.
|
||||
- While Traefik will respect labels associated with other containers, only `web` containers have Traefik labels injected by the plugin.
|
||||
- Only `http:80` and `https:443` port mappings are supported.
|
||||
- If no `http:80` mapping is found, the first `http` port mapping is used for http requests.
|
||||
- If no `https:443` mapping is found, the first `https` port mapping is used for https requests.
|
||||
- If no `https` mapping is found, the container port from `http:80` will be used for https requests.
|
||||
- Requests are routed as soon as the container is running and passing healthchecks.
|
||||
|
||||
### Switching to Traefik
|
||||
|
||||
To use the Traefik plugin, use the `proxy:set` command for the app in question:
|
||||
|
||||
```shell
|
||||
dokku proxy:set node-js-app traefik
|
||||
```
|
||||
|
||||
This will enable the docker label-based Traefik integration. All future deploys will inject the correct labels for Traefik to read and route requests to containers. Due to the docker label-based integration used by Traefik, a single deploy or rebuild will be required before requests will route successfully.
|
||||
|
||||
```shell
|
||||
dokku ps:rebuild node-js-app
|
||||
```
|
||||
|
||||
Any changes to domains or port mappings will also require either a deploy or rebuild.
|
||||
|
||||
### Starting Traefik container
|
||||
|
||||
Traefik can be started via the `traefik:start` command. This will start a Traefik container via the `docker compose up` command.
|
||||
|
||||
```shell
|
||||
dokku traefik:start
|
||||
```
|
||||
|
||||
### Stopping the Traefik container
|
||||
|
||||
Traefik may be stopped via the `traefik:stop` command.
|
||||
|
||||
```shell
|
||||
dokku traefik:stop
|
||||
```
|
||||
|
||||
The Traefik container will be stopped and removed from the system. If the container is not running, this command will do nothing.
|
||||
|
||||
### Showing the Traefik compose config
|
||||
|
||||
For debugging purposes, it may be useful to show the Traefik compose config. This can be achieved via the `traefik:show-config` command.
|
||||
|
||||
```shell
|
||||
dokku traefik:show-config
|
||||
```
|
||||
|
||||
### Customizing the Traefik container image
|
||||
|
||||
While the default Traefik image is hardcoded, users may specify an alternative by setting the `image` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku traefik:set --global image traefik:v2.8
|
||||
```
|
||||
|
||||
#### Checking the Traefik container's logs
|
||||
|
||||
It may be necessary to check the Traefik container's logs to ensure that Traefik is operating as expected. This can be performed with the `traefik:logs` command.
|
||||
|
||||
```shell
|
||||
dokku traefik:logs
|
||||
```
|
||||
|
||||
This command also supports the following modifiers:
|
||||
|
||||
```shell
|
||||
--num NUM # the number of lines to display
|
||||
--tail # continually stream logs
|
||||
```
|
||||
|
||||
You can use these modifiers as follows:
|
||||
|
||||
```shell
|
||||
dokku traefik:logs --tail --num 10
|
||||
```
|
||||
|
||||
The above command will show logs continually from the vector container, with an initial history of 10 log lines
|
||||
|
||||
### Changing the Traefik log level
|
||||
|
||||
Traefik log output is set to `ERROR` by default. It may be changed by setting the `log-level` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku traefik:set --global log-level DEBUG
|
||||
```
|
||||
|
||||
After modifying, the Traefik container will need to be restarted.
|
||||
|
||||
### SSL Configuration
|
||||
|
||||
The traefik plugin only supports automatic ssl certificates from it's letsencrypt integration. Managed certificates provided by the `certs` plugin are ignored.
|
||||
|
||||
#### Enabling letsencrypt integration
|
||||
|
||||
By default, letsencrypt is disabled and https port mappings are ignored. To enable, set the `letsencrypt-email` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku traefik:set --global letsencrypt-email automated@dokku.sh
|
||||
```
|
||||
|
||||
After enabling, apps will need to be rebuilt and the Traefik container will need to be restarted. All http requests will then be redirected to https.
|
||||
|
||||
#### Customizing the letsencrypt server
|
||||
|
||||
The letsencrypt integration is set to the production letsencrypt server by default. To change this, set the `letsencrypt-server` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku traefik:set --global letsencrypt-server https://acme-staging-v02.api.letsencrypt.org/directory
|
||||
```
|
||||
|
||||
After enabling, the Traefik container will need to be restarted and apps will need to be rebuilt to retrieve certificates from the new server.
|
||||
|
||||
### API Access
|
||||
|
||||
Traefik exposes an API and Dashboard, which Dokku disables by default for security reasons. It can be exposed and customized as described below.
|
||||
|
||||
#### Enabling the api
|
||||
|
||||
> Warning: Users enabling the dashboard should also enable api basic auth.
|
||||
|
||||
By default, the api is disabled. To enable, set the `api` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku traefik:set --global api true
|
||||
```
|
||||
|
||||
After enabling, the Traefik container will need to be restarted.
|
||||
|
||||
#### Enabling the dashboard
|
||||
|
||||
> Warning: Users enabling the dashboard should also enable api basic auth.
|
||||
|
||||
By default, the dashboard is disabled. To enable, set the `dashboard` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku traefik:set --global dashboard true
|
||||
```
|
||||
|
||||
After enabling, the Traefik container will need to be restarted.
|
||||
|
||||
#### Enabling api basic auth
|
||||
|
||||
Users enabling either the api or dashboard are encouraged to enable basic auth. This will apply _only_ to the api/dashboard, and not to apps. To enable, set the `basic-auth-username` and `basic-auth-password` properties with the `--global` flag:. Both must be set or basic auth will not be enabled.
|
||||
|
||||
```shell
|
||||
dokku traefik:set --global basic-auth-username username
|
||||
dokku traefik:set --global basic-auth-password password
|
||||
```
|
||||
|
||||
After enabling, the Traefik container will need to be restarted.
|
||||
|
||||
#### Customizing the api hostname
|
||||
|
||||
The hostname used for the api and dashboard is set to `traefik.dokku.me` by default. It can be customized by setting the `api-vhost` property with the `--global` flag:
|
||||
|
||||
```shell
|
||||
dokku traefik:set --global api-vhost lb.dokku.me
|
||||
```
|
||||
|
||||
After enabling, the Traefik container will need to be restarted.
|
||||
|
||||
## Displaying Traefik reports for an app
|
||||
|
||||
You can get a report about the app's Traefik config using the `traefik:report` command:
|
||||
|
||||
```shell
|
||||
dokku traefik:report
|
||||
```
|
||||
|
||||
```
|
||||
=====> node-js-app traefik information
|
||||
Traefik api enabled: false
|
||||
Traefik api vhost: traefik.dokku.me
|
||||
Traefik basic auth password: password
|
||||
Traefik basic auth username: user
|
||||
Traefik dashboard enabled: false
|
||||
Traefik image: traefik:v2.8
|
||||
Traefik letsencrypt email:
|
||||
Traefik letsencrypt server:
|
||||
Traefik log level: ERROR
|
||||
=====> python-app traefik information
|
||||
Traefik api enabled: false
|
||||
Traefik api vhost: traefik.dokku.me
|
||||
Traefik basic auth password: password
|
||||
Traefik basic auth username: user
|
||||
Traefik dashboard enabled: false
|
||||
Traefik image: traefik:v2.8
|
||||
Traefik letsencrypt email:
|
||||
Traefik letsencrypt server:
|
||||
Traefik log level: ERROR
|
||||
=====> ruby-app traefik information
|
||||
Traefik api enabled: false
|
||||
Traefik api vhost: traefik.dokku.me
|
||||
Traefik basic auth password: password
|
||||
Traefik basic auth username: user
|
||||
Traefik dashboard enabled: false
|
||||
Traefik image: traefik:v2.8
|
||||
Traefik letsencrypt email:
|
||||
Traefik letsencrypt server:
|
||||
Traefik log level: ERROR
|
||||
```
|
||||
|
||||
You can run the command for a specific app also.
|
||||
|
||||
```shell
|
||||
dokku traefik:report node-js-app
|
||||
```
|
||||
|
||||
```
|
||||
=====> node-js-app traefik information
|
||||
Traefik api enabled: false
|
||||
Traefik api vhost: traefik.dokku.me
|
||||
Traefik basic auth password: password
|
||||
Traefik basic auth username: user
|
||||
Traefik dashboard enabled: false
|
||||
Traefik image: traefik:v2.8
|
||||
Traefik letsencrypt email:
|
||||
Traefik letsencrypt server:
|
||||
Traefik log level: ERROR
|
||||
```
|
||||
|
||||
You can pass flags which will output only the value of the specific information you want. For example:
|
||||
|
||||
```shell
|
||||
dokku traefik:report node-js-app --traefik-api-enabled
|
||||
```
|
||||
@@ -131,3 +131,44 @@ See the [port management documentation](/docs/networking/port-management.md) for
|
||||
> Changed as of 0.11.0
|
||||
|
||||
From Dokku versions `0.5.0` until `0.11.0`, enabling or disabling an application's proxy would **also** control whether or not the application was bound to all interfaces - e.g. `0.0.0.0`. As of `0.11.0`, this is now controlled by the network plugin. Please see the [network documentation](/docs/networking/network.md#container-network-interface-binding) for more information.
|
||||
|
||||
## Implementing a Proxy
|
||||
|
||||
Custom plugins names _must_ have the suffix `-vhosts` or scheduler overriding via `proxy:set` may not function as expected.
|
||||
|
||||
At this time, the following dokku commands are used to implement a complete proxy implementation.
|
||||
|
||||
- `domains:add`: Adds a given domain to an app.
|
||||
- trigers: `post-domains-update`
|
||||
- `domains:clear`: Clears out an app's associated domains.
|
||||
- trigers: `post-domains-update`
|
||||
- `domains:disable`: Disables domains for an app.
|
||||
- trigers: `pre-disable-vhost`
|
||||
- `domains:enable`: Enables domains for an app.
|
||||
- trigers: `pre-enable-vhost`
|
||||
- `domains:remove`: Removes a domain from an app.
|
||||
- trigers: `post-domains-update`
|
||||
- `domains:set`: Sets all domains for a given app.
|
||||
- trigers: `post-domains-update`
|
||||
- `proxy:build-config`: Builds - or rebuilds - external proxy configuration.
|
||||
- triggers: `proxy-build-config`
|
||||
- `proxy:clear-config`: Clears out external proxy configuration.
|
||||
- triggers: `proxy-clear-config`
|
||||
- `proxy:disable`: Disables the proxy configuration for an app.
|
||||
- triggers: `proxy-disable`
|
||||
- `proxy:enable`: Enables the proxy configuration for an app.
|
||||
- triggers: `proxy-enable`
|
||||
- `proxy:ports-add`: Adds one or more port mappings to an app
|
||||
- triggers: `post-proxy-ports-update`
|
||||
- `proxy:ports-clear`: Clears out all port mappings for an app.
|
||||
- triggers: `post-proxy-ports-update`
|
||||
- `proxy:ports-remove`: Removes one or more port mappings from an app.
|
||||
- triggers: `post-proxy-ports-update`
|
||||
- `proxy:ports-set`: Sets all port mappings for an app.
|
||||
- triggers: `post-proxy-ports-update`
|
||||
|
||||
Proxy implementations may decide to omit some functionality here, or use plugin triggers to supplement config with information from other plugins.
|
||||
|
||||
Individual proxy implementations _may_ trigger app rebuilds, depending on how proxy metadata is exposed for the proxy implementation.
|
||||
|
||||
Finally, proxy implementations _may_ install extra software needed for the proxy itself in whatever manner deemed fit. Proxy software can run on the host itself or within a running Docker container with either exposed ports or host networking.
|
||||
|
||||
@@ -164,7 +164,7 @@ 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.
|
||||
- See the [nginx request proxying documentation](/docs/networking/proxies/nginx.md#request-proxying) for more information on how nginx handles proxied requests.
|
||||
- Only the `web` process may be bound to an external port.
|
||||
|
||||
#### Changing the `Procfile` location
|
||||
|
||||
@@ -9,26 +9,26 @@
|
||||
<meta name="author" content="">
|
||||
<title>Dokku - {{DOC_TITLE}}</title>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.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.28.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.28.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.28.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.28.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.28.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.28.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.28.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.28.2/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.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.28.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/favicon.ico">
|
||||
<meta name="apple-mobile-web-app-title" content="Dokku">
|
||||
<meta name="application-name" content="Dokku">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<script>
|
||||
@@ -47,8 +47,8 @@
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<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://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.10/docs/assets/style.css" rel="stylesheet">
|
||||
|
||||
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.28.2/docs/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">
|
||||
</head>
|
||||
@@ -66,7 +66,7 @@
|
||||
<button class="navbar-toggler navbar-toggler-right" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
|
||||
<div class="collapse navbar-collapse" id="navbarResponsive">
|
||||
<ul class="navbar-nav ms-auto my-2 my-lg-0">
|
||||
<li class="nav-item"><a class="nav-link mx-0 mx-md-2 underline" href="https://dokku.github.io/">Blog</a></li>
|
||||
<li class="nav-item"><a class="nav-link mx-0 mx-md-2 underline" href="https://dokku.com/blog/">Blog</a></li>
|
||||
<li class="nav-item"><a class="nav-link mx-0 mx-md-2 underline" href="https://github.com/dokku/dokku/">Code</a></li>
|
||||
<li class="nav-item"><a class="nav-link mx-0 mx-md-2 underline" href="/{{NAME}}/getting-started/installation/">Docs</a></li>
|
||||
<li class="nav-item dropdown">
|
||||
@@ -81,7 +81,7 @@
|
||||
<strong class="d-block">Discord</strong>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://glider-slackin.herokuapp.com/" class="btn rounded-2 d-flex align-items-center py-2 px-3 lh-sm text-start mx-2">
|
||||
<a href="https://slack.dokku.com/" class="btn rounded-2 d-flex align-items-center py-2 px-3 lh-sm text-start mx-2">
|
||||
<img class="me-3" alt="slack" src="./assets/social/slack.png" width="25px" />
|
||||
<div>
|
||||
<strong class="d-block">Slack</strong>
|
||||
@@ -147,6 +147,7 @@
|
||||
<a href="/{{NAME}}/deployment/builders/cloud-native-buildpacks/" class="list-group-item">Cloud Native Buildpacks</a>
|
||||
<a href="/{{NAME}}/deployment/builders/herokuish-buildpacks/" class="list-group-item">Herokuish Buildpacks</a>
|
||||
<a href="/{{NAME}}/deployment/builders/dockerfiles/" class="list-group-item">Dockerfile Deployment</a>
|
||||
<a href="/{{NAME}}/deployment/builders/lambda/" class="list-group-item">Lambda Builder</a>
|
||||
<a href="/{{NAME}}/deployment/builders/null/" class="list-group-item">Null Builder</a>
|
||||
|
||||
<a href="#" class="list-group-item disabled">Deployment Methods</a>
|
||||
@@ -156,7 +157,6 @@
|
||||
|
||||
<a href="/{{NAME}}/configuration/environment-variables/" class="list-group-item">Environment Variables</a>
|
||||
<a href="/{{NAME}}/configuration/domains/" class="list-group-item">Domain Configuration</a>
|
||||
<a href="/{{NAME}}/configuration/nginx/" class="list-group-item">Nginx Configuration</a>
|
||||
<a href="/{{NAME}}/configuration/ssl/" class="list-group-item">SSL Configuration</a>
|
||||
|
||||
<a href="#" class="list-group-item disabled">Interacting with Processes</a>
|
||||
@@ -171,7 +171,13 @@
|
||||
<a href="/{{NAME}}/networking/dns/" class="list-group-item">DNS Configuration</a>
|
||||
<a href="/{{NAME}}/networking/network/" class="list-group-item">Network Management</a>
|
||||
<a href="/{{NAME}}/networking/port-management/" class="list-group-item">Port Management</a>
|
||||
|
||||
<a href="#" class="list-group-item disabled">Proxy Configuration</a>
|
||||
|
||||
<a href="/{{NAME}}/networking/proxy-management/" class="list-group-item">Proxy Management</a>
|
||||
<a href="/{{NAME}}/networking/proxies/caddy/" class="list-group-item">Caddy Proxy</a>
|
||||
<a href="/{{NAME}}/networking/proxies/nginx/" class="list-group-item">Nginx Proxy</a>
|
||||
<a href="/{{NAME}}/networking/proxies/traefik/" class="list-group-item">Traefik Proxy</a>
|
||||
|
||||
<a href="#" class="list-group-item disabled">Advanced Usage</a>
|
||||
|
||||
@@ -192,7 +198,6 @@
|
||||
<a href="/{{NAME}}/deployment/schedulers/kubernetes/" class="list-group-item">Kubernetes</a>
|
||||
<a href="/{{NAME}}/deployment/schedulers/nomad/" class="list-group-item">Nomad</a>
|
||||
<a href="/{{NAME}}/deployment/schedulers/null/" class="list-group-item">Null Scheduler</a>
|
||||
<a href="/{{NAME}}/deployment/schedulers/alternate-schedulers/" class="list-group-item">Alternate Schedulers</a>
|
||||
|
||||
<a href="#" class="list-group-item disabled">Development</a>
|
||||
|
||||
|
||||
@@ -4,49 +4,40 @@
|
||||
"advanced-installation": "getting-started/advanced-installation/",
|
||||
"troubleshooting": "getting-started/troubleshooting/",
|
||||
"upgrading": "getting-started/upgrading/",
|
||||
|
||||
"application-deployment": "deployment/application-deployment/",
|
||||
"checks-examples": "deployment/zero-downtime-deploys/",
|
||||
"remote-commands": "deployment/remote-commands/",
|
||||
|
||||
"process-management": "processes/process-management/",
|
||||
"deployment/process-management": "processes/process-management/",
|
||||
"deployment/one-off-processes": "processes/one-off-tasks/",
|
||||
|
||||
"deployment/buildpacks": "deployment/builders/herokuish-buildpacks/",
|
||||
"deployment/methods/buildpacks": "deployment/builders/herokuish-buildpacks/",
|
||||
"deployment/dockerfiles": "deployment/builders/dockerfiles/",
|
||||
|
||||
"deployment/methods/cloud-native-buildpacks": "deployment/builders/cloud-native-buildpacks/",
|
||||
"deployment/methods/dockerfiles": "deployment/builders/dockerfiles/",
|
||||
"deployment/methods/herokuish-buildpacks": "deployment/builders/herokuish-buildpacks/",
|
||||
|
||||
"deployment/images": "deployment/methods/git/#initializing-an-app-repository-from-a-docker-image",
|
||||
"deployment/tar": "deployment/methods/git/#initializing-an-app-repository-from-an-archive-file",
|
||||
"deployment/methods/images": "deployment/methods/git/#initializing-an-app-repository-from-a-docker-image",
|
||||
"deployment/methods/tar": "deployment/methods/git/#initializing-an-app-repository-from-an-archive-file",
|
||||
"configuration-management": "configuration/environment-variables/",
|
||||
"deployment/ssl-configuration": "configuration/ssl/",
|
||||
"nginx": "configuration/nginx/",
|
||||
|
||||
"configuration/nginx": "networking/proxies/nginx/",
|
||||
"nginx": "networking/proxies/nginx/",
|
||||
"dns": "networking/dns/",
|
||||
"configuration/dns": "networking/dns/",
|
||||
"proxy": "networking/proxy-management/",
|
||||
"advanced-usage/proxy-management": "networking/proxy-management/",
|
||||
|
||||
"backup-recovery": "advanced-usage/backup-recovery/",
|
||||
"deployment-tasks": "advanced-usage/deployment-tasks/",
|
||||
"deployment/deployment-tasks": "advanced-usage/deployment-tasks/",
|
||||
"docker-options": "advanced-usage/docker-options/",
|
||||
"dokku-events-logs": "advanced-usage/event-logs/",
|
||||
"dokku-storage": "advanced-usage/persistent-storage/",
|
||||
|
||||
"advanced-usage/schedulers/alternate-schedulers": "deployment/schedulers/scheduler-management/",
|
||||
"advanced-usage/schedulers/docker-local": "deployment/schedulers/docker-local/",
|
||||
"deployment/schedulers/alternate-schedulers": "deployment/schedulers/scheduler-management/",
|
||||
|
||||
"community/tutorials/deploying-with-gitlab-ci": "deployment/continuous-integration/gitlab-ci/",
|
||||
|
||||
"plugins": "community/plugins/"
|
||||
}
|
||||
}
|
||||
|
||||
6
dokku
6
dokku
@@ -138,9 +138,15 @@ execute_dokku_cmd() {
|
||||
events | events:*)
|
||||
local PLUGIN_NAME=${PLUGIN_NAME/events/20_events}
|
||||
;;
|
||||
caddy | caddy:*)
|
||||
local PLUGIN_NAME=${PLUGIN_NAME/caddy/caddy-vhosts}
|
||||
;;
|
||||
nginx | nginx:*)
|
||||
local PLUGIN_NAME=${PLUGIN_NAME/nginx/nginx-vhosts}
|
||||
;;
|
||||
traefik | traefik:*)
|
||||
local PLUGIN_NAME=${PLUGIN_NAME/traefik/traefik-vhosts}
|
||||
;;
|
||||
deploy | cleanup | url | urls | report)
|
||||
local PLUGIN_NAME="00_dokku-standard"
|
||||
;;
|
||||
|
||||
91
mkdocs.yml
Normal file
91
mkdocs.yml
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
# yaml-language-server: $schema=https://squidfunk.github.io/mkdocs-material/schema.json
|
||||
|
||||
markdown_extensions:
|
||||
- admonition
|
||||
- attr_list
|
||||
- footnotes
|
||||
- md_in_html
|
||||
- pymdownx.details
|
||||
- pymdownx.emoji:
|
||||
emoji_generator: !!python/name:materialx.emoji.to_svg
|
||||
emoji_index: !!python/name:materialx.emoji.twemoji
|
||||
- pymdownx.highlight:
|
||||
anchor_linenums: true
|
||||
- pymdownx.inlinehilite
|
||||
- pymdownx.snippets
|
||||
- pymdownx.superfences
|
||||
- pymdownx.tabbed:
|
||||
alternate_style: true
|
||||
- tables
|
||||
|
||||
repo_url: https://github.com/dokku/dokku
|
||||
|
||||
site_dir: site
|
||||
site_name: Dokku Documentation
|
||||
site_url: https://dokku.com/docs/
|
||||
|
||||
extra:
|
||||
social:
|
||||
- icon: fontawesome/brands/github
|
||||
link: https://github.com/dokku/dokku
|
||||
- icon: fontawesome/solid/bug
|
||||
link: https://github.com/dokku/dokku/issues
|
||||
- icon: fontawesome/brands/discord
|
||||
link: https://discord.gg/YQjANGMZvu
|
||||
- icon: fontawesome/brands/slack
|
||||
link: https://slack.dokku.com/
|
||||
- icon: fontawesome/solid/hashtag
|
||||
link: https://webchat.libera.chat/?channels=dokku
|
||||
- icon: fontawesome/brands/twitter
|
||||
link: https://twitter.com/dokku
|
||||
- icon: fontawesome/solid/comments
|
||||
link: https://github.com/dokku/dokku/discussions
|
||||
- icon: fontawesome/solid/cart-shopping
|
||||
link: https://dokku.dpdcart.com/cart/add?product_id=217344&method_id=236878
|
||||
version:
|
||||
provider: mike
|
||||
|
||||
theme:
|
||||
custom_dir: docs/_overrides
|
||||
favicon: assets/favicons/favicon-96x96.png
|
||||
features:
|
||||
- navigation.indexes
|
||||
- navigation.instant
|
||||
- navigation.sections
|
||||
- navigation.tabs
|
||||
- navigation.top
|
||||
- search.highlight
|
||||
homepage: https://dokku.com
|
||||
icon:
|
||||
admonition:
|
||||
tip: fontawesome/solid/wand-magic-sparkles
|
||||
logo: assets/dokku-logo.svg
|
||||
name: material
|
||||
palette:
|
||||
# Palette toggle for light mode
|
||||
- media: "(prefers-color-scheme: light)"
|
||||
scheme: default
|
||||
toggle:
|
||||
icon: material/toggle-switch
|
||||
name: Switch to dark mode
|
||||
|
||||
# Palette toggle for dark mode
|
||||
- media: "(prefers-color-scheme: dark)"
|
||||
scheme: slate
|
||||
toggle:
|
||||
icon: material/toggle-switch-off-outline
|
||||
name: Switch to light mode
|
||||
|
||||
plugins:
|
||||
- search
|
||||
- exclude:
|
||||
glob:
|
||||
- _build/Dockerfile
|
||||
- _build/entrypoint
|
||||
- _build/requirements.txt
|
||||
- home.html
|
||||
- template.html
|
||||
|
||||
extra_css:
|
||||
- assets/extra.css
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core standard plugin"
|
||||
version = "0.27.10"
|
||||
version = "0.28.2"
|
||||
[plugin.config]
|
||||
|
||||
@@ -17,7 +17,7 @@ trigger-events-install() {
|
||||
# shellcheck disable=SC2174
|
||||
mkdir -m 775 -p "$DOKKU_LOGS_DIR"
|
||||
case "$DOKKU_DISTRO" in
|
||||
arch | debian | centos | fedora | raspbian | rhel)
|
||||
arch | debian | raspbian)
|
||||
chgrp dokku "$DOKKU_LOGS_DIR"
|
||||
;;
|
||||
*)
|
||||
@@ -28,7 +28,7 @@ trigger-events-install() {
|
||||
if [[ ! -f "$DOKKU_EVENTS_LOGFILE" ]]; then
|
||||
touch "$DOKKU_EVENTS_LOGFILE"
|
||||
case "$DOKKU_DISTRO" in
|
||||
arch | debian | centos | fedora | raspbian | rhel)
|
||||
arch | debian | raspbian)
|
||||
chgrp dokku "$DOKKU_EVENTS_LOGFILE"
|
||||
;;
|
||||
*)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core events logging plugin"
|
||||
version = "0.27.10"
|
||||
version = "0.28.2"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core app-json plugin"
|
||||
version = "0.27.10"
|
||||
version = "0.28.2"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core apps plugin"
|
||||
version = "0.27.10"
|
||||
version = "0.28.2"
|
||||
[plugin.config]
|
||||
|
||||
@@ -20,7 +20,7 @@ trigger-builder-dockerfile-builder-release() {
|
||||
trap "rm -rf '$TMP_WORK_DIR' >/dev/null" RETURN INT TERM EXIT
|
||||
|
||||
local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG")
|
||||
if ! "$DOCKER_BIN" image build "${DOCKER_BUILD_LABEL_ARGS[@]}" $DOKKU_GLOBAL_BUILD_ARGS -f "$PLUGIN_AVAILABLE_PATH/builder-dockerfile/dockerfiles/builder-release.Dockerfile" --build-arg APP_IMAGE="$IMAGE" -t "$IMAGE" "$TMP_WORK_DIR"; then
|
||||
if ! suppress_output "$DOCKER_BIN" image build "${DOCKER_BUILD_LABEL_ARGS[@]}" $DOKKU_GLOBAL_BUILD_ARGS -f "$PLUGIN_AVAILABLE_PATH/builder-dockerfile/dockerfiles/builder-release.Dockerfile" --build-arg APP_IMAGE="$IMAGE" -t "$IMAGE" "$TMP_WORK_DIR"; then
|
||||
dokku_log_warn "Failure injecting docker labels on image"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core builder-dockerfile plugin"
|
||||
version = "0.27.10"
|
||||
version = "0.28.2"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core builder-herokuish plugin"
|
||||
version = "0.27.10"
|
||||
version = "0.28.2"
|
||||
[plugin.config]
|
||||
|
||||
43
plugins/builder-lambda/builder-build
Executable file
43
plugins/builder-lambda/builder-build
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
trigger-builder-lambda-builder-build() {
|
||||
declare desc="builder-lambda builder-build plugin trigger"
|
||||
declare trigger="builder-build"
|
||||
declare BUILDER_TYPE="$1" APP="$2" SOURCECODE_WORK_DIR="$3"
|
||||
|
||||
if [[ "$BUILDER_TYPE" != "lambda" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
dokku_log_info1 "Building $APP from lambda"
|
||||
|
||||
local IMAGE=$(get_app_image_name "$APP")
|
||||
|
||||
pushd "$SOURCECODE_WORK_DIR" &>/dev/null
|
||||
|
||||
plugn trigger pre-build-lambda "$APP"
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
lambda-builder build --generate-image --write-procfile --image-env=DOCKER_LAMBDA_STAY_OPEN=1 --label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku --label=com.dokku.image-stage=build --label=com.dokku.builder-type=lambda "--label=com.dokku.app-name=$APP" $DOKKU_GLOBAL_BUILD_ARGS --port 5000 --tag "$IMAGE" --working-directory "$SOURCECODE_WORK_DIR"
|
||||
if [[ ! -f "$SOURCECODE_WORK_DIR/lambda.zip" ]]; then
|
||||
dokku_log_warn "Compressed lambda.zip not detected, failed to build lambda function"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local GIT_REV="$(plugn trigger git-revision "$APP")"
|
||||
mkdir -p "${DOKKU_LIB_ROOT}/data/builder-lambda/$APP"
|
||||
pushd "${DOKKU_LIB_ROOT}/data/builder-lambda/$APP" >/dev/null
|
||||
rm -f -- *.zip
|
||||
popd &>/dev/null || pushd "/tmp" >/dev/null
|
||||
cp "$SOURCECODE_WORK_DIR/lambda.zip" "${DOKKU_LIB_ROOT}/data/builder-lambda/$APP/$GIT_REV.zip"
|
||||
if [[ -f "$SOURCECODE_WORK_DIR/Procfile" ]]; then
|
||||
cp "$SOURCECODE_WORK_DIR/Procfile" "${DOKKU_LIB_ROOT}/data/builder-lambda/$APP/$GIT_REV.Procfile"
|
||||
fi
|
||||
|
||||
plugn trigger post-build-lambda "$APP"
|
||||
}
|
||||
|
||||
trigger-builder-lambda-builder-build "$@"
|
||||
22
plugins/builder-lambda/builder-detect
Executable file
22
plugins/builder-lambda/builder-detect
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
trigger-builder-lambda-builder-detect() {
|
||||
declare desc="builder-lambda builder-detect plugin trigger"
|
||||
declare trigger="builder-detect"
|
||||
declare APP="$1" SOURCECODE_WORK_DIR="$2"
|
||||
local ARCHITECTURE="$(dpkg --print-architecture 2>/dev/null || true)"
|
||||
|
||||
if [[ "$ARCHITECTURE" == "armhf" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ -f "$SOURCECODE_WORK_DIR/lambda.yml" ]]; then
|
||||
echo "lambda"
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
trigger-builder-lambda-builder-detect "$@"
|
||||
32
plugins/builder-lambda/builder-release
Executable file
32
plugins/builder-lambda/builder-release
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
trigger-builder-lambda-builder-release() {
|
||||
declare desc="builder-lambda builder-release plugin trigger"
|
||||
declare trigger="builder-release"
|
||||
declare BUILDER_TYPE="$1" APP="$2" IMAGE_TAG="$3"
|
||||
|
||||
if [[ "$BUILDER_TYPE" != "lambda" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
local DOCKER_BUILD_LABEL_ARGS="--label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku --label=com.dokku.app-name=$APP --label=com.dokku.image-stage=release --label=dokku"
|
||||
|
||||
plugn trigger pre-release-lambda "$APP" "$IMAGE_TAG"
|
||||
|
||||
TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")"
|
||||
trap "rm -rf '$TMP_WORK_DIR' >/dev/null" RETURN INT TERM EXIT
|
||||
|
||||
local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG")
|
||||
if ! suppress_output "$DOCKER_BIN" image build "${DOCKER_BUILD_LABEL_ARGS[@]}" $DOKKU_GLOBAL_BUILD_ARGS -f "$PLUGIN_AVAILABLE_PATH/builder-lambda/dockerfiles/builder-release.Dockerfile" --build-arg APP_IMAGE="$IMAGE" -t "$IMAGE" "$TMP_WORK_DIR"; then
|
||||
dokku_log_warn "Failure injecting docker labels on image"
|
||||
return 1
|
||||
fi
|
||||
|
||||
plugn trigger post-release-lambda "$APP" "$IMAGE_TAG"
|
||||
plugn trigger post-release-builder "$BUILDER_TYPE" "$APP" "$IMAGE"
|
||||
}
|
||||
|
||||
trigger-builder-lambda-builder-release "$@"
|
||||
15
plugins/builder-lambda/commands
Executable file
15
plugins/builder-lambda/commands
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_AVAILABLE_PATH/builder-lambda/help-functions"
|
||||
|
||||
case "$1" in
|
||||
help | builder-lambda:help)
|
||||
cmd-builder-lambda-help "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
exit "$DOKKU_NOT_IMPLEMENTED_EXIT"
|
||||
;;
|
||||
|
||||
esac
|
||||
30
plugins/builder-lambda/core-post-extract
Executable file
30
plugins/builder-lambda/core-post-extract
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/builder-lambda/internal-functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
trigger-builder-lambda-core-post-extract() {
|
||||
declare desc="builder-lambda post-extract plugin trigger"
|
||||
declare trigger="post-extract"
|
||||
declare APP="$1" SOURCECODE_WORK_DIR="$2"
|
||||
local NEW_LAMBDA_YML="$(fn-builder-lambda-computed-lambdayml-path "$APP")"
|
||||
|
||||
pushd "$TMP_WORK_DIR" >/dev/null
|
||||
|
||||
if [[ -z "$NEW_LAMBDA_YML" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ ! -f "$NEW_LAMBDA_YML" ]]; then
|
||||
rm -f lambda.yml
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ "$NEW_LAMBDA_YML" != "lambda.yml" ]]; then
|
||||
mv "$NEW_LAMBDA_YML" lambda.yml
|
||||
fi
|
||||
popd &>/dev/null || pushd "/tmp" >/dev/null
|
||||
}
|
||||
|
||||
trigger-builder-lambda-core-post-extract "$@"
|
||||
@@ -0,0 +1,2 @@
|
||||
ARG APP_IMAGE
|
||||
FROM $APP_IMAGE
|
||||
33
plugins/builder-lambda/help-functions
Executable file
33
plugins/builder-lambda/help-functions
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
cmd-builder-lambda-help() {
|
||||
declare desc="help command"
|
||||
declare CMD="$1"
|
||||
local plugin_name="builder-lambda"
|
||||
local plugin_description="Manage the lambda builder integration for an app"
|
||||
|
||||
if [[ "$CMD" == "${plugin_name}:help" ]]; then
|
||||
echo -e "Usage: dokku ${plugin_name}[:COMMAND]"
|
||||
echo ''
|
||||
echo "$plugin_description"
|
||||
echo ''
|
||||
echo 'Additional commands:'
|
||||
fn-help-content | sort | column -c2 -t -s,
|
||||
elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then
|
||||
fn-help-content
|
||||
else
|
||||
cat <<help_desc
|
||||
$plugin_name, $plugin_description
|
||||
help_desc
|
||||
fi
|
||||
}
|
||||
|
||||
fn-help-content() {
|
||||
declare desc="return help content"
|
||||
cat <<help_content
|
||||
builder-lambda:report [<app>] [<flag>], Displays a builder-lambda report for one or more apps
|
||||
builder-lambda:set <app> <property> (<value>), Set or clear a builder-lambda property for an app
|
||||
help_content
|
||||
}
|
||||
16
plugins/builder-lambda/install
Executable file
16
plugins/builder-lambda/install
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
trigger-builder-lambda-install() {
|
||||
declare desc="installs the builder-lambda plugin"
|
||||
declare trigger="install"
|
||||
|
||||
fn-plugin-property-setup "builder-lambda"
|
||||
|
||||
mkdir -p "${DOKKU_LIB_ROOT}/data/builder-lambda"
|
||||
chown -R "${DOKKU_SYSTEM_USER}:${DOKKU_SYSTEM_GROUP}" "${DOKKU_LIB_ROOT}/data/builder-lambda"
|
||||
}
|
||||
|
||||
trigger-builder-lambda-install "$@"
|
||||
90
plugins/builder-lambda/internal-functions
Executable file
90
plugins/builder-lambda/internal-functions
Executable file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
cmd-builder-lambda-report() {
|
||||
declare desc="displays a builder-lambda report for one or more apps"
|
||||
declare cmd="builder-lambda:report"
|
||||
[[ "$1" == "$cmd" ]] && shift 1
|
||||
declare APP="$1" INFO_FLAG="$2"
|
||||
|
||||
if [[ -n "$APP" ]] && [[ "$APP" == --* ]]; then
|
||||
INFO_FLAG="$APP"
|
||||
APP=""
|
||||
fi
|
||||
|
||||
if [[ -z "$APP" ]] && [[ -z "$INFO_FLAG" ]]; then
|
||||
INFO_FLAG="true"
|
||||
fi
|
||||
|
||||
if [[ -z "$APP" ]]; then
|
||||
for app in $(dokku_apps); do
|
||||
cmd-builder-lambda-report-single "$app" "$INFO_FLAG" | tee || true
|
||||
done
|
||||
else
|
||||
cmd-builder-lambda-report-single "$APP" "$INFO_FLAG"
|
||||
fi
|
||||
}
|
||||
|
||||
cmd-builder-lambda-report-single() {
|
||||
declare APP="$1" INFO_FLAG="$2"
|
||||
if [[ "$INFO_FLAG" == "true" ]]; then
|
||||
INFO_FLAG=""
|
||||
fi
|
||||
verify_app_name "$APP"
|
||||
local flag_map=(
|
||||
"--builder-lambda-computed-lambdayml-path: $(fn-builder-lambda-computed-lambdayml-path "$APP")"
|
||||
"--builder-lambda-global-lambdayml-path: $(fn-builder-lambda-global-lambdayml-path "$APP")"
|
||||
"--builder-lambda-lambdayml-path: $(fn-builder-lambda-lambdayml-path "$APP")"
|
||||
)
|
||||
|
||||
if [[ -z "$INFO_FLAG" ]]; then
|
||||
dokku_log_info2_quiet "${APP} builder-lambda information"
|
||||
for flag in "${flag_map[@]}"; do
|
||||
key="$(echo "${flag#--}" | cut -f1 -d' ' | tr - ' ')"
|
||||
dokku_log_verbose "$(printf "%-30s %-25s" "${key^}" "${flag#*: }")"
|
||||
done
|
||||
else
|
||||
local match=false
|
||||
local value_exists=false
|
||||
for flag in "${flag_map[@]}"; do
|
||||
valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)"
|
||||
if [[ "$flag" == "${INFO_FLAG}:"* ]]; then
|
||||
value=${flag#*: }
|
||||
size="${#value}"
|
||||
if [[ "$size" -ne 0 ]]; then
|
||||
echo "$value" && match=true && value_exists=true
|
||||
else
|
||||
match=true
|
||||
fi
|
||||
fi
|
||||
done
|
||||
[[ "$match" == "true" ]] || dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}"
|
||||
[[ "$value_exists" == "true" ]] || dokku_log_fail "not deployed"
|
||||
fi
|
||||
}
|
||||
|
||||
fn-builder-lambda-computed-lambdayml-path() {
|
||||
declare APP="$1"
|
||||
|
||||
file="$(fn-builder-lambda-lambdayml-path "$APP")"
|
||||
if [[ "$file" == "" ]]; then
|
||||
file="$(fn-builder-lambda-global-lambdayml-path "$APP")"
|
||||
fi
|
||||
|
||||
echo "$file"
|
||||
}
|
||||
|
||||
fn-builder-lambda-global-lambdayml-path() {
|
||||
declare APP="$1"
|
||||
|
||||
fn-plugin-property-get "builder-lambda" "--global" "lambdayml-path" "lambda.yml"
|
||||
}
|
||||
|
||||
fn-builder-lambda-lambdayml-path() {
|
||||
declare APP="$1"
|
||||
|
||||
fn-plugin-property-get "builder-lambda" "$APP" "lambdayml-path" ""
|
||||
}
|
||||
4
plugins/builder-lambda/plugin.toml
Normal file
4
plugins/builder-lambda/plugin.toml
Normal file
@@ -0,0 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core builder-lambda plugin"
|
||||
version = "0.28.2"
|
||||
[plugin.config]
|
||||
14
plugins/builder-lambda/post-app-clone-setup
Executable file
14
plugins/builder-lambda/post-app-clone-setup
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
trigger-builder-lambda-post-app-clone-setup() {
|
||||
declare desc="sets up properties for new app"
|
||||
declare trigger="post-app-clone-setup"
|
||||
declare OLD_APP="$1" NEW_APP="$2"
|
||||
|
||||
fn-plugin-property-clone "builder-lambda" "$OLD_APP" "$NEW_APP"
|
||||
}
|
||||
|
||||
trigger-builder-lambda-post-app-clone-setup "$@"
|
||||
15
plugins/builder-lambda/post-app-rename-setup
Executable file
15
plugins/builder-lambda/post-app-rename-setup
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
trigger-builder-lambda-post-app-rename-setup() {
|
||||
declare desc="updates settings for new app"
|
||||
declare trigger="post-app-rename-setup"
|
||||
declare OLD_APP="$1" NEW_APP="$2"
|
||||
|
||||
fn-plugin-property-clone "builder-lambda" "$OLD_APP" "$NEW_APP"
|
||||
fn-plugin-property-destroy "builder-lambda" "$OLD_APP"
|
||||
}
|
||||
|
||||
trigger-builder-lambda-post-app-rename-setup "$@"
|
||||
15
plugins/builder-lambda/post-delete
Executable file
15
plugins/builder-lambda/post-delete
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
trigger-builder-lambda-post-delete() {
|
||||
declare desc="destroys the builder-lambda properties for a given app"
|
||||
declare trigger="post-delete"
|
||||
declare APP="$1"
|
||||
|
||||
fn-plugin-property-destroy "builder-lambda" "$APP"
|
||||
rm -rf "${DOKKU_LIB_ROOT}/data/builder-lambda/$APP"
|
||||
}
|
||||
|
||||
trigger-builder-lambda-post-delete "$@"
|
||||
6
plugins/builder-lambda/report
Executable file
6
plugins/builder-lambda/report
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_AVAILABLE_PATH/builder-lambda/internal-functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
cmd-builder-lambda-report-single "$@"
|
||||
6
plugins/builder-lambda/subcommands/default
Executable file
6
plugins/builder-lambda/subcommands/default
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_AVAILABLE_PATH/builder-lambda/help-functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
cmd-builder-lambda-help "builder-lambda:help"
|
||||
6
plugins/builder-lambda/subcommands/report
Executable file
6
plugins/builder-lambda/subcommands/report
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_AVAILABLE_PATH/builder-lambda/internal-functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
cmd-builder-lambda-report "$@"
|
||||
30
plugins/builder-lambda/subcommands/set
Executable file
30
plugins/builder-lambda/subcommands/set
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
cmd-builder-lambda-set() {
|
||||
declare desc="set or clear a builder-lambda property for an app"
|
||||
declare cmd="builder-lambda:set"
|
||||
[[ "$1" == "$cmd" ]] && shift 1
|
||||
declare APP="$1" KEY="$2" VALUE="$3"
|
||||
local VALID_KEYS=("lambdayml-path")
|
||||
[[ "$APP" == "--global" ]] || verify_app_name "$APP"
|
||||
|
||||
[[ -z "$KEY" ]] && dokku_log_fail "No key specified"
|
||||
|
||||
if ! fn-in-array "$KEY" "${VALID_KEYS[@]}"; then
|
||||
dokku_log_fail "Invalid key specified, valid keys include: lambdayml-path"
|
||||
fi
|
||||
|
||||
if [[ -n "$VALUE" ]]; then
|
||||
dokku_log_info2_quiet "Setting ${KEY} to ${VALUE}"
|
||||
fn-plugin-property-write "builder-lambda" "$APP" "$KEY" "$VALUE"
|
||||
else
|
||||
dokku_log_info2_quiet "Unsetting ${KEY}"
|
||||
fn-plugin-property-delete "builder-lambda" "$APP" "$KEY"
|
||||
fi
|
||||
}
|
||||
|
||||
cmd-builder-lambda-set "$@"
|
||||
13
plugins/builder-lambda/templates/samconfig.toml.sigil
Normal file
13
plugins/builder-lambda/templates/samconfig.toml.sigil
Normal file
@@ -0,0 +1,13 @@
|
||||
version = 0.1
|
||||
|
||||
[default]
|
||||
[default.deploy]
|
||||
[default.deploy.parameters]
|
||||
stack_name = "{{ $.APP }}-lambda"
|
||||
s3_bucket = "{{ $.S3_BUCKET }}"
|
||||
s3_prefix = "{{ $.APP }}"
|
||||
region = "{{ $.AWS_REGION }}"
|
||||
confirm_changeset = true
|
||||
fail_on_empty_changeset = false
|
||||
capabilities = "CAPABILITY_IAM"
|
||||
image_repositories = []
|
||||
25
plugins/builder-lambda/templates/template.yaml.sigil
Normal file
25
plugins/builder-lambda/templates/template.yaml.sigil
Normal file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
AWSTemplateFormatVersion: "2010-09-09"
|
||||
Transform: AWS::Serverless-2016-10-31
|
||||
Description: >
|
||||
{{ $.APP }}
|
||||
|
||||
# todo: iterate over every process type and create a resource entry
|
||||
Resources:
|
||||
{{ $.APP}}{{ $.PROCESS_TYPE | capitalize}}:
|
||||
Type: AWS::Serverless::Function
|
||||
Properties:
|
||||
Architectures:
|
||||
- x86_64
|
||||
CodeUri: s3://{{ $.S3_BUCKET }}/{{ $.APP }}/{{ $.GIT_REV }}
|
||||
FunctionName: {{ $.APP | lower }}{{ $.PROCESS_TYPE | lower }}
|
||||
Handler: {{ $.HANDLER }}
|
||||
Runtime: {{ $.RUNTIME }}
|
||||
Role: {{ $.IAM_ROLE }}
|
||||
Timeout: 3
|
||||
Environment:
|
||||
Variables:
|
||||
{{ range $key, $value := . }}
|
||||
{{ $key }}: |
|
||||
{{ $value }}
|
||||
{{ end }}
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core builder-null plugin"
|
||||
version = "0.27.10"
|
||||
version = "0.28.2"
|
||||
[plugin.config]
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user