mirror of
https://github.com/dokku/dokku.git
synced 2026-02-24 12:12:08 +01:00
# History ## 0.33.8 Install/update via the bootstrap script: ```shell wget -NP . https://dokku.com/install/v0.33.8/bootstrap.sh sudo DOKKU_TAG=v0.33.8 bash bootstrap.sh ``` ### Bug Fixes - #6675: @josegonzalez Remove the need for executing crontab as root - #6660: @josegonzalez Handle case where systemctl isn't in /usr/bin - #6659: @josegonzalez Add missing cron:set command - #6658: @josegonzalez Execute go get/build with mod in readonly mode - #6642: @josegonzalez Use correct annotations key for the ingress chart - #6631: @josegonzalez Correctly use cache volume for herokuish builds - #6629: @josegonzalez Use smaller reference to image pull secrets in secret naming - #6628: @josegonzalez Ensure non-web processes do not attempt to perform web logic in k3s templates - #6623: @josegonzalez Do not allow reusing the same scheme:host-port mappings when setting ports - #6624: @taraszka Install jq in vagrant vm - #6614: @josegonzalez Correct issue where --force-tty was not properly supported by run:detached calls ### New Features - #6673: @josegonzalez Add image version as label to built images - #6640: @josegonzalez Add initial support for injecting keda addons - #6662: @josegonzalez Allow limiting letsencrypt to certain domains when using openresty as a proxy - #6643: @josegonzalez Add ability to add extra labels - #6639: @josegonzalez Add support for setting underscores-in-headers for nginx, openresty, and k3s - #6634: @josegonzalez feat: install keda addon in k3s cluster - #6616: @josegonzalez Ensure referenced images get updated by dependabot - #6613: @josegonzalez Add a helper binary to deploy a test app for local development ### Refactors - #6644: @josegonzalez Only apply the cluster issuers helm chart when setting letsencrypt properties - #6641: @josegonzalez Rename image pull secrets to standardize on secret naming pattern - #6626: @josegonzalez Copy code into initial base image via docker build ### Documentation - #6656: @holamendi Fix typo in builder management docs - #6652: @Calyhre Added dokku-mdns to list of community plugins - #6649: @undercontr Added detach flag to Docker installation documentation ### Dependencies - #6671: @josegonzalez Update dokku dependencies - #6672: @dependabot[bot] chore(deps): bump golang from 1.22.0 to 1.22.1 in /tests/apps/go-fail-predeploy - #6670: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.62.0 to 1.62.1 in /tests/apps/gogrpc - #6669: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.32.0 to 1.33.0 in /tests/apps/gogrpc - #6668: @dependabot[bot] chore(deps): bump golang from 1.22.0 to 1.22.1 in /tests/apps/zombies-dockerfile-tini - #6667: @dependabot[bot] chore(deps): bump golang from 1.22.0 to 1.22.1 in /tests/apps/gogrpc - #6664: @dependabot[bot] chore(deps): bump golang from 1.22.0 to 1.22.1 in /tests/apps/go-fail-postdeploy - #6666: @dependabot[bot] chore(deps): bump pyparsing from 3.1.1 to 3.1.2 in /docs/_build - #6665: @dependabot[bot] chore(deps): bump mkdocs-material from 9.5.12 to 9.5.13 in /docs/_build - #6663: @dependabot[bot] chore(deps): bump golang from 1.22.0 to 1.22.1 in /tests/apps/zombies-dockerfile-no-tini - #6661: @josegonzalez Bump go modules - #6654: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.7 to 10.7.1 in /docs/_build - #6653: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.20.0 to 0.21.0 in /plugins/common - #6651: @dependabot[bot] chore(deps): bump python-dateutil from 2.9.0 to 2.9.0.post0 in /docs/_build - #6648: @dependabot[bot] chore(deps): bump python-dateutil from 2.8.2 to 2.9.0 in /docs/_build - #6645: @dependabot[bot] chore(deps): bump rack from 2.2.8 to 2.2.8.1 in /tests/apps/ruby - #6646: @dependabot[bot] chore(deps): bump mkdocs-material from 9.5.11 to 9.5.12 in /docs/_build - #6638: @josegonzalez chore: bump go modules - #6635: @dependabot[bot] chore(deps): bump tj-actions/changed-files from 42.0.4 to 42.0.5 - #6636: @dependabot[bot] chore(deps): bump timberio/vector from 0.36.X-debian to 0.36.0-debian in /plugins/logs - #6637: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.19.0 to 0.20.0 in /plugins/common - #6619: @dependabot[bot] chore(deps): bump traefik from v2.10 to 2.11 in /plugins/traefik-vhosts - #6622: @josegonzalez chore(deps): bump timberio/vector from 0.35.X-debian to 0.36.X-debian in /plugins/logs - #6618: @dependabot[bot] chore(deps): bump mkdocs-material from 9.5.10 to 9.5.11 in /docs/_build - #6621: @dependabot[bot] chore(deps): bump byjg/easy-haproxy from 4.3.0 to 4.4.0 in /plugins/haproxy-vhosts - #6610: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.14.1 to 3.14.2 in /plugins/scheduler-k3s
588 lines
30 KiB
HTML
588 lines
30 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
|
|
<meta name="description" content="">
|
|
<meta name="author" content="">
|
|
<title>Dokku - {{DOC_TITLE}}</title>
|
|
|
|
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/apple-touch-icon-57x57.png">
|
|
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/apple-touch-icon-60x60.png">
|
|
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/apple-touch-icon-72x72.png">
|
|
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/apple-touch-icon-76x76.png">
|
|
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/apple-touch-icon-114x114.png">
|
|
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/apple-touch-icon-120x120.png">
|
|
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/apple-touch-icon-144x144.png">
|
|
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/apple-touch-icon-152x152.png">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/apple-touch-icon-180x180.png">
|
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
|
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/manifest.json">
|
|
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/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.33.8/docs/assets/favicons/mstile-144x144.png">
|
|
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.33.8/docs/assets/favicons/browserconfig.xml">
|
|
<meta name="theme-color" content="#ffffff">
|
|
|
|
<script>
|
|
if ('{{DOC}}' == 'index.md') {
|
|
var indexLink = '/{{NAME}}/';
|
|
if ('{{REF}}' !== 'master') {
|
|
indexLink = '/{{NAME}}~{{REF}}/';
|
|
}
|
|
window.location.replace(window.location.origin + indexLink);
|
|
}
|
|
</script>
|
|
|
|
<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">
|
|
|
|
<!-- Font (Lato) -->
|
|
<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.33.8/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>
|
|
<body>
|
|
<div class="dev-warning doc-floating-warning" style="display:none">
|
|
This document is for dokku's development version, which can be significantly different from previous releases. For older releases, use the version selector floating in the bottom right corner of this page.
|
|
</div>
|
|
<header class="hero-section">
|
|
<nav class="navbar navbar-expand-md navbar-dark py-3" id="mainNav">
|
|
<div class="container top-50 px-4 px-lg-5">
|
|
<a class="navbar-brand d-flex" href="/{{NAME}}/">
|
|
<img class="me-3" src="./assets/dokku-logo.svg" alt="" width="55">
|
|
<span class="align-self-center d-block">Dokku</span>
|
|
</a>
|
|
<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.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">
|
|
<a class="nav-link dropdown-toggle mx-0 mx-md-2 underline" id="navbarDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
Social
|
|
</a>
|
|
<ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
|
|
<div class="d-grid gap-2">
|
|
<a href="https://discord.gg/YQjANGMZvu" class="btn rounded-2 d-flex align-items-center py-2 px-3 lh-sm text-start mx-2">
|
|
<img class="me-3" alt="discord" src="./assets/social/discord.png" width="25px" />
|
|
<div>
|
|
<strong class="d-block">Discord</strong>
|
|
</div>
|
|
</a>
|
|
<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>
|
|
</div>
|
|
</a>
|
|
<a href="https://webchat.libera.chat/?channels=dokku" class="btn rounded-2 d-flex align-items-center py-2 px-3 lh-sm text-start mx-2">
|
|
<img class="me-3" alt="irc" src="./assets/social/irc.png" width="25px" />
|
|
<div>
|
|
<strong class="d-block">IRC</strong>
|
|
</div>
|
|
</a>
|
|
<a href="https://github.com/dokku/dokku/discussions" class="btn rounded-2 d-flex align-items-center py-2 px-3 lh-sm text-start mx-2">
|
|
<img class="me-3" alt="github" src="./assets/social/github.png" width="25px" />
|
|
<div>
|
|
<strong class="d-block">GitHub Discussions</strong>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item"><a class="nav-link mx-0 mx-md-2 underline" href="https://pro.dokku.com/">Pro</a></li>
|
|
<li class="nav-item"><a class="btn btn-primary mx-0 mx-md-3 cta" href="/{{NAME}}/getting-started/installation/">Get Started</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
</header>
|
|
|
|
<div class="container">
|
|
<div class="improve-slideout">
|
|
<i class="fa fa-pencil icon-improve"></i>
|
|
<a href="https://github.com/{{USER}}/{{NAME}}/edit/master/docs/{{DOC}}" target="_blank">
|
|
<div class="improve-slideout-inner"><h6>Improve This Doc <i class="fa fa-github git-improve"></i></h6></div>
|
|
</a>
|
|
</div>
|
|
<a class="back-to-contents" href="#page-contents"><i class="fa fa-arrow-circle-up icon-improve" title="Back to Contents"></i></a>
|
|
|
|
<div class="row">
|
|
<div class="col-4 col-md-3" style="padding-top:16px">
|
|
<div class="list-group">
|
|
<a href="#" class="list-group-item disabled">Getting Started</a>
|
|
<a href="/{{NAME}}/getting-started/installation/" class="list-group-item">Getting Started with Dokku</a>
|
|
<a href="/{{NAME}}/getting-started/upgrading/" class="list-group-item">Upgrading Dokku</a>
|
|
<a href="/{{NAME}}/getting-started/uninstalling/" class="list-group-item">Uninstalling Dokku</a>
|
|
<a href="/{{NAME}}/getting-started/troubleshooting/" class="list-group-item">Troubleshooting</a>
|
|
<a href="/{{NAME}}/getting-started/where-to-get-help/" class="list-group-item">Getting Help</a>
|
|
|
|
<a href="#" class="list-group-item disabled">Commercial</a>
|
|
<a href="/{{NAME}}/enterprise/pro/" class="list-group-item">Dokku Pro</a>
|
|
|
|
<a href="#" class="list-group-item disabled">Deployment</a>
|
|
|
|
<a href="/{{NAME}}/deployment/application-deployment/" class="list-group-item">Deploying an Application</a>
|
|
<a href="/{{NAME}}/deployment/application-management/" class="list-group-item">Application Management</a>
|
|
<a href="/{{NAME}}/deployment/logs/" class="list-group-item">Application Logs</a>
|
|
<a href="/{{NAME}}/deployment/remote-commands/" class="list-group-item">Remote Commands</a>
|
|
<a href="/{{NAME}}/deployment/user-management/" class="list-group-item">User Management</a>
|
|
<a href="/{{NAME}}/deployment/zero-downtime-deploys/" class="list-group-item">Zero Downtime Deploy Checks</a>
|
|
|
|
<a href="#" class="list-group-item disabled">Builders</a>
|
|
|
|
<a href="/{{NAME}}/deployment/builders/builder-management/" class="list-group-item">Builder Management</a>
|
|
<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/nixpacks/" class="list-group-item">Nixpacks 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>
|
|
<a href="/{{NAME}}/deployment/methods/git/" class="list-group-item">Git Deployment</a>
|
|
<a href="/{{NAME}}/deployment/methods/image/" class="list-group-item">Docker Image Deployment</a>
|
|
<a href="/{{NAME}}/deployment/methods/archive/" class="list-group-item">Archive Deployment</a>
|
|
|
|
<a href="#" class="list-group-item disabled">Configuration</a>
|
|
|
|
<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/ssl/" class="list-group-item">SSL Configuration</a>
|
|
|
|
<a href="#" class="list-group-item disabled">Interacting with Processes</a>
|
|
|
|
<a href="/{{NAME}}/processes/entering-containers/" class="list-group-item">Entering Containers</a>
|
|
<a href="/{{NAME}}/processes/one-off-tasks/" class="list-group-item">One-Off Tasks</a>
|
|
<a href="/{{NAME}}/processes/process-management/" class="list-group-item">Process Management</a>
|
|
<a href="/{{NAME}}/processes/scheduled-cron-tasks/" class="list-group-item">Scheduled Cron Tasks</a>
|
|
|
|
<a href="#" class="list-group-item disabled">Network Management</a>
|
|
|
|
<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/haproxy/" class="list-group-item">Haproxy Proxy</a>
|
|
<a href="/{{NAME}}/networking/proxies/nginx/" class="list-group-item">Nginx Proxy</a>
|
|
<a href="/{{NAME}}/networking/proxies/openresty/" class="list-group-item">Openresty 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>
|
|
|
|
<a href="/{{NAME}}/advanced-usage/backup-recovery/" class="list-group-item">Backup and Recovery</a>
|
|
<a href="/{{NAME}}/advanced-usage/deployment-tasks/" class="list-group-item">Deployment Tasks</a>
|
|
<a href="/{{NAME}}/advanced-usage/docker-options/" class="list-group-item">Docker Container Options</a>
|
|
<a href="/{{NAME}}/advanced-usage/registry-management/" class="list-group-item">Docker Registry Management</a>
|
|
<a href="/{{NAME}}/advanced-usage/event-logs/" class="list-group-item">Event Logs</a>
|
|
<a href="/{{NAME}}/advanced-usage/persistent-storage/" class="list-group-item">Persistent Storage</a>
|
|
<a href="/{{NAME}}/advanced-usage/plugin-management/" class="list-group-item">Plugin Management</a>
|
|
<a href="/{{NAME}}/advanced-usage/repository-management/" class="list-group-item">Repository Management</a>
|
|
<a href="/{{NAME}}/advanced-usage/resource-management/" class="list-group-item">Resource Management</a>
|
|
|
|
<a href="#" class="list-group-item disabled">Schedulers</a>
|
|
|
|
<a href="/{{NAME}}/deployment/schedulers/scheduler-management/" class="list-group-item">Scheduler Management</a>
|
|
<a href="/{{NAME}}/deployment/schedulers/docker-local/" class="list-group-item">Docker Local</a>
|
|
<a href="/{{NAME}}/deployment/schedulers/k3s/" 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="#" class="list-group-item disabled">Development</a>
|
|
|
|
<a href="/{{NAME}}/development/plugin-creation/" class="list-group-item">Plugin Creation</a>
|
|
<a href="/{{NAME}}/development/plugin-triggers/" class="list-group-item">Plugin Triggers</a>
|
|
<a href="/{{NAME}}/development/testing/" class="list-group-item">Running Tests</a>
|
|
<a href="/{{NAME}}/development/release-process/" class="list-group-item">Release Process</a>
|
|
|
|
<a href="#" class="list-group-item disabled">Continuous Integration</a>
|
|
<a href="/{{NAME}}/deployment/continuous-integration/github-actions/" class="list-group-item">GitHub Actions</a>
|
|
<a href="/{{NAME}}/deployment/continuous-integration/gitlab-ci/" class="list-group-item">GitLab CI</a>
|
|
<a href="/{{NAME}}/deployment/continuous-integration/generic/" class="list-group-item">Generic</a>
|
|
|
|
<a href="#" class="list-group-item disabled">Community Contributions</a>
|
|
<a href="/{{NAME}}/community/clients/" class="list-group-item">Clients</a>
|
|
<a href="/{{NAME}}/community/plugins/" class="list-group-item">Plugins</a>
|
|
</div>
|
|
</div>
|
|
<div class="col-8 col-md-9 markdown-body" style="padding-top:16px">
|
|
{{CONTENT}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="rst-versions rst-badge" data-toggle="rst-versions">
|
|
<span class="rst-current-version" data-toggle="rst-current-version" data-doc="{{DOC}}" data-ref="{{REF}}">
|
|
<span class="fa fa-book"> </span>
|
|
v: {{REF}}
|
|
<span class="fa fa-caret-down"></span>
|
|
</span>
|
|
<div class="rst-other-versions">
|
|
<dl>
|
|
<dt>Versions</dt>
|
|
</dl>
|
|
|
|
<dl>
|
|
<dt>On GitHub</dt>
|
|
<dd>
|
|
<a href="https://github.com/{{USER}}/{{NAME}}/blob/master/docs/{{DOC}}" target="_blank">View</a>
|
|
</dd>
|
|
<dd>
|
|
<a href="https://github.com/{{USER}}/{{NAME}}/edit/master/docs/{{DOC}}" target="_blank">Edit</a>
|
|
</dd>
|
|
</dl>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="dev-warning doc-floating-warning" style="display:none">
|
|
This document is for dokku's development version, which can be significantly different from previous releases. For older releases, use the version selector floating in the bottom right corner of this page.
|
|
</div>
|
|
|
|
<!-- Footer section -->
|
|
<footer class="px-4 px-lg-5 text-start mt-5">
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-lg-12 align-self-start text-white">
|
|
<p class="m-0 py-3">© 2013-2022 Dokku. Website designed & developed by <a href="https://yasoob.me" class="text-decoration-none text-white">Yasoob Khalid</a></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/1.3.0/anchor.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2" crossorigin="anonymous"></script>
|
|
|
|
<script src="https://dokku.dpdcart.com/dpd.js"></script>
|
|
<script>
|
|
// Source: https://github.com/Alhadis/Snippets/blob/master/js/polyfills/IE8-child-elements.js
|
|
if (!('nextElementSibling' in document.documentElement)) {
|
|
Object.defineProperty(Element.prototype, 'nextElementSibling', {
|
|
get: function () {
|
|
var e = this.nextSibling;
|
|
while (e && 1 !== e.nodeType) {
|
|
e = e.nextSibling;
|
|
}
|
|
return e;
|
|
}
|
|
});
|
|
}
|
|
// Source: https://jonlabelle.com/snippets/view/javascript/wrap-an-html-element-in-javascript
|
|
HTMLElement.prototype.wrap = function (elms) {
|
|
if (!elms.length) elms = [elms];
|
|
for (var i = elms.length - 1; i >= 0; i--) {
|
|
var child = (i > 0) ? this.cloneNode(true) : this;
|
|
var el = elms[i];
|
|
var parent = el.parentNode;
|
|
var sibling = el.nextSibling;
|
|
child.appendChild(el);
|
|
if (sibling) {
|
|
parent.insertBefore(child, sibling);
|
|
} else {
|
|
parent.appendChild(child);
|
|
}
|
|
}
|
|
};
|
|
|
|
document.addEventListener('DOMContentLoaded', function (e) {
|
|
var markdownBody = document.querySelectorAll('.markdown-body')[0],
|
|
isRedirect = markdownBody.innerHTML.trim().indexOf('<p>See the <a href=') === 0;
|
|
if (isRedirect) {
|
|
var redirectUrl = markdownBody.getElementsByTagName('a')[0].href;
|
|
window.location.replace(redirectUrl);
|
|
}
|
|
anchors.options.visible = 'always';
|
|
anchors.add('.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6');
|
|
|
|
var tables = document.querySelectorAll('table'),
|
|
blockquotes = document.querySelectorAll('blockquote'),
|
|
versionList = document.querySelectorAll('.rst-other-versions dl')[0],
|
|
backToContentsEl = document.querySelectorAll('.back-to-contents')[0]
|
|
currentVersionEl = document.querySelectorAll('.rst-current-version')[0],
|
|
currentVersion = currentVersionEl.getAttribute('data-ref'),
|
|
versionContainer = document.querySelectorAll('.rst-versions.rst-badge')[0],
|
|
pageHeader = document.querySelectorAll('.markdown-body p')[0],
|
|
headers = document.querySelectorAll('h2, h3, h4'),
|
|
classNames = ['table', 'table-striped', 'table-hover', 'table-condensed'],
|
|
localPath = location.pathname.split('/').splice(2).join('/'),
|
|
addClass = function (el, className) {
|
|
if (el.classList) {
|
|
el.classList.add(className);
|
|
} else {
|
|
el.className += ' ' + className;
|
|
}
|
|
},
|
|
addListener = function (elem, type, fn) {
|
|
if (elem.addEventListener) {
|
|
elem.addEventListener(type, fn, false);
|
|
} else if (elem.attachEvent) {
|
|
elem.attachEvent('on' + type, function() {
|
|
return fn.call(elem, window.event);
|
|
});
|
|
} else {
|
|
elem['on' + type] = fn;
|
|
}
|
|
},
|
|
hasClass = function (el, className) {
|
|
if (el.classList) {
|
|
return el.classList.contains(className);
|
|
} else {
|
|
return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);
|
|
}
|
|
},
|
|
removeClass = function (el, className) {
|
|
if (el.classList) {
|
|
el.classList.remove(className);
|
|
} else {
|
|
el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');;
|
|
}
|
|
},
|
|
languageClass = function (el) {
|
|
if (!hasClass(el, 'highlight')) {
|
|
return;
|
|
}
|
|
var classes = [];
|
|
if (el.classList) {
|
|
classes = el.classList.value.split(/\s+/);
|
|
} else {
|
|
classes = el.className.split(/\s+/);
|
|
}
|
|
var language = null;
|
|
for (i = 0; i < classes.length; i++) {
|
|
if (classes[i].lastIndexOf('highlight-source-', 0) === 0) {
|
|
language = classes[i].replace('highlight-source-', '');
|
|
break;
|
|
}
|
|
}
|
|
return language;
|
|
};
|
|
|
|
addListener(backToContentsEl, 'click', function(e) {
|
|
e.preventDefault();
|
|
var scrollToTop = window.setInterval(function() {
|
|
var pos = window.pageYOffset;
|
|
if ( pos > 0 ) {
|
|
window.scrollTo( 0, pos - 20 );
|
|
} else {
|
|
window.clearInterval( scrollToTop );
|
|
}
|
|
}, 1);
|
|
return false;
|
|
});
|
|
|
|
var ls2 = {
|
|
save : function (key, jsonData, expirationMS) {
|
|
if (typeof (Storage) === 'undefined') { return false; }
|
|
var record = {value: JSON.stringify(jsonData), timestamp: new Date().getTime()/1000 + expirationMS}
|
|
localStorage.setItem(key, JSON.stringify(record));
|
|
return jsonData;
|
|
},
|
|
load : function (key) {
|
|
if (typeof (Storage) === 'undefined') { return false; }
|
|
var record = JSON.parse(localStorage.getItem(key));
|
|
if (!record){return false;}
|
|
return (new Date().getTime()/1000 < record.timestamp && JSON.parse(record.value));
|
|
}
|
|
};
|
|
|
|
var ToC =
|
|
'<nav role="navigation" class="table-of-contents">' +
|
|
'<ul>';
|
|
|
|
var newLine, el, title, link, currentDepth, count = 0, lastNodeDepth = null;
|
|
Array.prototype.forEach.call(headers, function (el, i) {
|
|
count++;
|
|
title = el.innerText || element.textContent;
|
|
link = '#' + el.getAttribute('id');
|
|
currentDepth = parseInt(el.nodeName.replace('H', ''), 10);
|
|
|
|
newLine =
|
|
'<li>' +
|
|
'<a href="' + link + '" class="current-depth-' + currentDepth + '">' +
|
|
title +
|
|
'</a>' +
|
|
'</li>';
|
|
|
|
if (currentDepth === lastNodeDepth || lastNodeDepth === null) {
|
|
} else if (currentDepth > lastNodeDepth) {
|
|
newLine = '<ul>' + newLine;
|
|
} else if (currentDepth < lastNodeDepth) {
|
|
newLine = '</ul>' + newLine;
|
|
}
|
|
ToC += newLine;
|
|
|
|
lastNodeDepth = currentDepth;
|
|
});
|
|
ToC += '</ul></nav>';
|
|
|
|
if (count > 1) {
|
|
var navItems = document.querySelectorAll('.list-group-item');
|
|
Array.prototype.forEach.call(navItems, function(el, i){
|
|
if (el.getAttribute('href') == location.pathname) {
|
|
el.insertAdjacentHTML('afterEnd', ToC);
|
|
}
|
|
});
|
|
}
|
|
|
|
Array.prototype.forEach.call(blockquotes, function (el, i) {
|
|
if (el.innerHTML.toLowerCase().indexOf('warning') !== -1) {
|
|
addClass(el, 'warning');
|
|
el.innerHTML = el.innerHTML.replace('Warning', '<strong>Warning</strong>')
|
|
} else if (el.innerHTML.toLowerCase().indexOf('new as of') !== -1) {
|
|
addClass(el, 'new-as-of');
|
|
} else if (el.innerHTML.toLowerCase().indexOf('not yet released') !== -1) {
|
|
addClass(el, 'not-yet-released');
|
|
}
|
|
});
|
|
Array.prototype.forEach.call(classNames, function (className, i) {
|
|
Array.prototype.forEach.call(tables, function (el, i) {
|
|
addClass(el, className);
|
|
});
|
|
});
|
|
|
|
var addLanguageLabel = function (el, language) {
|
|
var labelWrapper = document.createElement('div'),
|
|
label = document.createElement('div');
|
|
|
|
labelWrapper.setAttribute('class', 'highlight-show-language');
|
|
label.setAttribute('class', 'highlight-show-language-label');
|
|
label.appendChild(document.createTextNode(language));
|
|
labelWrapper.appendChild(label);
|
|
el.insertBefore(labelWrapper, el.firstChild);
|
|
};
|
|
|
|
var highlightElements = document.querySelectorAll('pre');
|
|
Array.prototype.forEach.call(highlightElements, function(el, i) {
|
|
var language = languageClass(el.parentElement);
|
|
if (typeof (language) === 'undefined') {
|
|
return;
|
|
}
|
|
|
|
addLanguageLabel(el.parentElement, language);
|
|
|
|
var nextEl = el.parentElement.nextElementSibling;
|
|
if (nextEl !== null && nextEl.nodeName.toLowerCase() === 'pre') {
|
|
var wrapper = document.createElement('div');
|
|
wrapper.setAttribute('class', 'highlight-output');
|
|
wrapper.wrap(nextEl);
|
|
addLanguageLabel(wrapper, 'output');
|
|
addClass(el, 'highlight-has-output');
|
|
}
|
|
});
|
|
|
|
addListener(currentVersionEl, 'click', function() {
|
|
if (hasClass(versionContainer, 'shift-up')) {
|
|
removeClass(versionContainer, 'shift-up');
|
|
} else {
|
|
addClass(versionContainer, 'shift-up');
|
|
}
|
|
});
|
|
|
|
var range = function(start, count) {
|
|
return Array.apply(0, Array(count))
|
|
.map(function (element, index) {
|
|
return index + start;
|
|
});
|
|
}
|
|
|
|
var parseVersions = function(version, versions) {
|
|
var pieces = version.split('.'),
|
|
prefix = pieces.slice(0, 2).join('.') + '.',
|
|
maxPatchVersion = parseInt(pieces.slice(2, 3)[0], 10),
|
|
versionRange = range(0, maxPatchVersion + 1);
|
|
|
|
for (var i in versionRange) {
|
|
versions.push(prefix.concat(versionRange[i]));
|
|
}
|
|
return versions;
|
|
}
|
|
|
|
var addVersionLink = function(version) {
|
|
var a = document.createElement('a'),
|
|
dd = document.createElement('dd'),
|
|
ref = 'dokku~v' + version,
|
|
versionName = 'v' + version;
|
|
if (version == 'master') {
|
|
ref = 'dokku';
|
|
versionName = 'master';
|
|
}
|
|
|
|
a.setAttribute('href', '/' + ref + '/' + localPath);
|
|
a.appendChild(document.createTextNode(versionName));
|
|
if (versionName == currentVersion) {
|
|
var strong = document.createElement('strong');
|
|
strong.appendChild(a);
|
|
dd.appendChild(strong);
|
|
} else {
|
|
dd.appendChild(a);
|
|
}
|
|
versionList.appendChild(dd);
|
|
};
|
|
|
|
var processVersions = function(data) {
|
|
var versions = [];
|
|
for (var key in data['max-versions']) {
|
|
if (!data['max-versions'].hasOwnProperty(key)) {
|
|
continue;
|
|
}
|
|
|
|
versions = parseVersions(data['max-versions'][key], versions);
|
|
}
|
|
|
|
addVersionLink('master');
|
|
versions.reverse();
|
|
Array.prototype.forEach.call(versions, function (version, i) {
|
|
addVersionLink(version);
|
|
});
|
|
};
|
|
|
|
if (currentVersion === 'master') {
|
|
document.querySelectorAll('.dev-warning')[0].style.position = 'relative';
|
|
Array.prototype.forEach.call(document.querySelectorAll('.dev-warning'), function (el, i) {
|
|
el.style.display = '';
|
|
});
|
|
}
|
|
|
|
data = ls2.load('max-versions');
|
|
if (!data) {
|
|
var request = new XMLHttpRequest();
|
|
request.open('GET', '/dokku/assets/versions.json', true);
|
|
request.setRequestHeader('Cache-Control', 'no-cache, no-store');
|
|
|
|
request.onload = function() {
|
|
if (request.status >= 200 && request.status < 400) {
|
|
var data = JSON.parse(request.responseText);
|
|
// store for 1 day
|
|
ls2.save('max-versions', data, 86400);
|
|
processVersions(data);
|
|
}
|
|
};
|
|
|
|
request.onerror = function() {
|
|
// There was a connection error of some sort
|
|
};
|
|
|
|
request.send();
|
|
} else {
|
|
processVersions(data);
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|