mirror of
https://github.com/dokku/dokku.git
synced 2026-02-24 04:00:36 +01:00
# History ## 0.21.0 Install/update via the bootstrap script: ```shell wget https://raw.githubusercontent.com/dokku/dokku/v0.21.0/bootstrap.sh sudo DOKKU_TAG=v0.21.0 bash bootstrap.sh ``` ### Bug Fixes - #4058: @hugopeixoto Ensure web installer creates files with correct permissions - #4055: @hugopeixoto Delete dokkurc recursively during uninstall - #4057: @hugopeixoto Install sudo when installing from source - #4045: @josegonzalez Filter gpus instead of nvidia-gpus from resource arguments - #4029: @josegonzalez Filter args _after_ docker-args-process-deploy - #4026: @josegonzalez Filter resource args from deploy tasks - #4022: @josegonzalez Do not allow slashes in app names - #4020: @josegonzalez Properly handle multiple containers in ps:inspect - #3989: @josegonzalez Correct entering running containers - #3977: @josegonzalez Set default port for all run commands - #3969: @josegonzalez Do not logrotate all services files - #3964: @josegonzalez Remove all --force-yes usage throughout the codebase - #3955: @benwh Fix missing 502 error page - #3953: @josegonzalez Use correct function name for cmd-tar-in and update migration guide ### New Features - #4041: @rvanlaar feat: Add download option to the certs plugin - #4043: @josegonzalez Allow controlling nginx proxy-read-timeout - #4038: @josegonzalez Create proxy:build-config command - #4021: @josegonzalez Depend on python3 binary for CentOS 8 support - #4004: @josegonzalez Add support for moby-engine - #3967: @josegonzalez Add Ubuntu 20.04 support - #3988: @josegonzalez Upgrade plugn to 0.5.0 - #3987: @josegonzalez Upgrade sigil to 0.6.0 - #3986: @josegonzalez Upgrade sshcommand to 0.11.0 - #3985: @josegonzalez Upgrade go-procfile-util to 0.8.2 - #3982: @josegonzalez Allow apps named tls - #3979: @josegonzalez Upgrade herokuish - #3971: @josegonzalez feat: allow users to customize the source of the dokku.conf nginx template - #3966: @josegonzalez Move domain manipulation into triggers - #3965: @josegonzalez Drop dokku references in logging output - #3954: @josegonzalez feat: upgrade herokuish to 0.5.12 - #3940: @josegonzalez Expose last updated time in git:report - #3939: @josegonzalez Add support for outputting the last visited time ### Refactors - #4035: @josegonzalez Switch to go mod - #4008: @josegonzalez Standardize golang command code ### Documentation - #4056: @swrobel Remove invalid help entry for dokku ps commmand - #4039: @josegonzalez Break out bc-break and refactors in changelog - #4025: @alexjj Switch AUR helper to yay - #4019: @tdak Added one possible solution to an error - #4014: @rvanlaar Update dreamhost cloudinit script - #4003: @josegonzalez Add dokku.ai asset - #3999: @DavidLemayian Update URL for less than 1gb memory in bootstrap.sh [ci skip] - #3998: @josegonzalez Document the #dokku channel on slack - #3996: @josegonzalez Clarify network aliases and add section on tld management - #3980: @josegonzalez Clarify that the web installer is not supported in docker-based installs - #3970: @josegonzalez Clarify the 'see the docs' internal links - #3968: @josegonzalez Document access.conf issue - #3957: @swrobel Add official registry plugin - #3942: @scowalt Fix grammar in environment variables documentation ### Tests - #4046: @rvanlaar Make `make test` pass on linting - #4037: @josegonzalez Try to output oomkill information - #4036: @josegonzalez Store the deb and rpm artifacts - #4034: @josegonzalez Teardown apps and containers in global teardown - #4031: @josegonzalez Delete old apps and ensure the test helper is quieter - #4030: @josegonzalez Update circleci workflow - #3947: @jayjun Scope init tests to container processes only ### Other - #4051: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 177 to 178 in /tests/apps/php - #4028: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 176 to 177 in /tests/apps/php - #4016: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.29.v20200521 to 9.4.30.v20200611 in /tests/apps/java - #4006: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 174 to 176 in /tests/apps/php - #4001: @dependabot-preview[bot] chore(deps): bump jetty-servlet from 9.4.28.v20200408 to 9.4.29.v20200521 in /tests/apps/java - #4002: @dependabot-preview[bot] chore(deps): bump monolog/monolog from 1.25.3 to 1.25.4 in /tests/apps/php - #3993: @dependabot-preview[bot] chore(deps): bump github.com/golang/protobuf from 1.4.1 to 1.4.2 in /tests/apps/gogrpc - #3962: @dependabot-preview[bot] chore(deps): bump github.com/golang/protobuf from 1.4.0 to 1.4.1 in /tests/apps/gogrpc - #3959: @dependabot-preview[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 173 to 174 in /tests/apps/php - #3950: @dependabot-preview[bot] chore(deps): bump google.golang.org/grpc from 1.29.0 to 1.29.1 in /tests/apps/gogrpc - #3946: @dependabot-preview[bot] chore(deps): bump google.golang.org/grpc from 1.28.1 to 1.29.0 in /tests/apps/gogrpc
374 lines
19 KiB
HTML
374 lines
19 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="">
|
|
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
|
|
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
|
|
|
|
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/apple-touch-icon-57x57.png">
|
|
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/apple-touch-icon-60x60.png">
|
|
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/apple-touch-icon-72x72.png">
|
|
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/apple-touch-icon-76x76.png">
|
|
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/apple-touch-icon-114x114.png">
|
|
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/apple-touch-icon-120x120.png">
|
|
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/apple-touch-icon-144x144.png">
|
|
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/apple-touch-icon-152x152.png">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/apple-touch-icon-180x180.png">
|
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
|
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/manifest.json">
|
|
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/favicon.ico">
|
|
<meta name="apple-mobile-web-app-title" content="Dokku">
|
|
<meta name="application-name" content="Dokku">
|
|
<meta name="msapplication-TileColor" content="#da532c">
|
|
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/mstile-144x144.png">
|
|
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/favicons/browserconfig.xml">
|
|
<meta name="theme-color" content="#ffffff">
|
|
|
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet">
|
|
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.21.0/docs/assets/style.css" rel="stylesheet">
|
|
<!-- <link href="/dokku/docs/assets/style.css" rel="stylesheet"> -->
|
|
<style>
|
|
.sponsors {
|
|
background-color: #272822;
|
|
color: #FCFCFC;
|
|
}
|
|
.sponsors a {
|
|
color: #f0ad4e;
|
|
}
|
|
.sponsors .backer img,
|
|
.sponsors .sponsor img {
|
|
-webkit-border-radius: 3px;
|
|
border-radius: 3px;
|
|
border: 8px solid gray;
|
|
margin: 20px auto 20px auto;
|
|
max-width: 192px;
|
|
}
|
|
.sponsors .backer img {
|
|
-webkit-border-radius: 50%;
|
|
border-radius: 50%;
|
|
border: 0;
|
|
}
|
|
.sponsors img:hover {
|
|
-moz-box-shadow: 4px 4px 8px 0px rgba(0,0,0,0.75);
|
|
-webkit-box-shadow: 4px 4px 8px 0px rgba(0,0,0,0.75);
|
|
box-shadow: 0px 0px 32px 0px rgba(0,0,0,0.75);
|
|
}
|
|
.sponsors .fund-link {
|
|
display: block;
|
|
font-size: .8em;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="header">
|
|
<div class="container">
|
|
<div class="row">
|
|
<div>
|
|
<h1 class="heading navbar-brand">
|
|
<a href="/{{NAME}}/">Dokku</a>
|
|
</h1>
|
|
<ul class="nav nav-pills pull-xs-right">
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="https://dokku.github.io/">Blog</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="https://github.com/dokku/dokku/">Code</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/{{NAME}}/getting-started/installation/">Docs</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="https://webchat.freenode.net/?channels=dokku">IRC</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="https://glider-slackin.herokuapp.com/">Slack</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="https://gliderlabs.us10.list-manage.com/subscribe?u=49c4b06ffd30bcf49ec53c277&id=f526006fd5">Newsletter</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="blurb">
|
|
<div class="container">
|
|
<div class="row">
|
|
<h2>The smallest PaaS implementation you've ever seen</h2>
|
|
<p>Dokku helps you build and manage the lifecycle of applications</p>
|
|
<div class="blurb-buttons">
|
|
<a class="btn btn-lg btn-warning" href="/{{NAME}}/getting-started/installation/">View Documentation</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container marketing">
|
|
<div class="quickstart-code">
|
|
<p class="title">Quick-start Instructions</p>
|
|
<div class="tabs">
|
|
<div data-tab="curl" class="tab tab-curl tab-active">curl | bash</div>
|
|
<div data-tab="apt" class="tab tab-apt">apt</div>
|
|
<div data-tab="arch" class="tab tab-arch">arch</div>
|
|
</div>
|
|
<div class="shell shell-curl shell-active">
|
|
<p class="line">
|
|
<span class="output"> # for debian systems, installs dokku via apt-get</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">wget https://raw.githubusercontent.com/dokku/dokku/v0.21.0/bootstrap.sh</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">sudo DOKKU_TAG=v0.21.0 bash bootstrap.sh</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="output"> # go to your server's IP and follow the web installer</span>
|
|
</p>
|
|
</div>
|
|
|
|
<div class="shell shell-apt">
|
|
<p class="line">
|
|
<span class="output"> # install docker</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">wget -nv -O - https://get.docker.com/ | sh</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="output"> # setup dokku apt repository</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">wget -nv -O - https://packagecloud.io/dokku/dokku/gpgkey | apt-key add -</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">export SOURCE="https://packagecloud.io/dokku/dokku/ubuntu/"</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">export OS_ID="$(lsb_release -cs 2>/dev/null || echo "bionic")"</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">echo "xenial bionic focal" | grep -q "$OS_ID" || OS_ID="bionic"</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">echo "deb $SOURCE $OS_ID main" | tee /etc/apt/sources.list.d/dokku.list</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">apt-get update</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="output"> # install dokku</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">apt-get install dokku</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">dokku plugin:install-dependencies --core <span class="output"># run with root!</span></span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="output"> # go to your server's IP and follow the web installer</span>
|
|
</p>
|
|
</div>
|
|
|
|
<div class="shell shell-arch">
|
|
<p class="line">
|
|
<span class="output"> # install dokku via yay</span>
|
|
</p>
|
|
<p class="line">
|
|
<span class="path"></span>
|
|
<span class="prompt">$</span>
|
|
<span class="command">yay -S dokku</span>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="alternate-instructions">
|
|
<p>Hate <code>curl | bash</code>? See our official <a href="https://github.com/Azure/azure-quickstart-templates/tree/master/dokku-vm" target="_blank">Azure</a>, <a href="https://www.digitalocean.com/features/one-click-apps/dokku/" target="_blank">DigitalOcean</a>, and <a href="/{{NAME}}~{{REF}}/getting-started/install/dreamhost/">DreamHost Cloud</a> instructions.</p>
|
|
<p>Still no love? <a href="https://github.com/dokku/dokku/blob/master/CONTRIBUTING.md" target="_blank">Contributions welcome</a>!</a></p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container-fluid slack-channel">
|
|
Have a question? Join us in our public slack channel!
|
|
|
|
<div class="inline-container">
|
|
<a class="button slack-button" href="https://glider-slackin.herokuapp.com/">
|
|
<img src="./assets/slack-logo.png" alt="Slack Logo">
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container marketing">
|
|
<!-- START THE FEATURETTES -->
|
|
|
|
<div class="row featurette">
|
|
<div class="col-md-7">
|
|
<h2 class="featurette-heading">Own Your PaaS. <span class="text-muted">Infrastructure at a fraction of the cost.</span></h2>
|
|
<p class="lead">Powered by Docker, you can install Dokku on any hardware. Use it on inexpensive cloud providers. Use the extra cash to buy a pony or feed kittens. You'll save tens of dollars a year on your dog photo sharing website.</p>
|
|
</div>
|
|
<div class="col-md-5">
|
|
<img class="featurette-image img-responsive center-block" alt="Docker Logo" src="./assets/docker.png">
|
|
</div>
|
|
</div>
|
|
|
|
<hr class="featurette-divider">
|
|
|
|
<div class="row featurette">
|
|
<div class="col-md-7 col-md-push-5">
|
|
<h2 class="featurette-heading">Easy Git Deploys. <span class="text-muted">From your command-line to the cloud.</span></h2>
|
|
<p class="lead">Once it's set up on a host, you can push Heroku-compatible applications to it via Git. They'll build using Heroku buildpacks and then run in isolated containers. The end result is your own, single-host version of Heroku.</p>
|
|
</div>
|
|
<div class="col-md-5 col-md-pull-7">
|
|
<img class="featurette-image img-responsive center-block" alt="Git Logo" src="./assets/git.png">
|
|
</div>
|
|
</div>
|
|
|
|
<hr class="featurette-divider">
|
|
|
|
<div class="row featurette">
|
|
<div class="col-md-7">
|
|
<h2 class="featurette-heading">Extensible Platform. <span class="text-muted">Customize your PaaS.</span></h2>
|
|
<p class="lead">Write dokku plugins in any language. Share them online with others, and extend those already available. Dokku's simple core is easy to hack and add the features you need to get your job done.</p>
|
|
</div>
|
|
<div class="col-md-5">
|
|
<img class="featurette-image img-responsive center-block" alt="Extend Logo" src="./assets/extend.png">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container-fluid slack-channel sponsors">
|
|
<h3>Sponsor Dokku</h3>
|
|
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
|
|
<p>Here are a few of our sponsors and backers. Join them and <a href="https://opencollective.com/dokku#sponsor" target="_blank">become a sponsor</a> on OpenCollective!</p>
|
|
|
|
<p class="sponsor">
|
|
<a href="https://opencollective.com/dokku/sponsor/0/website" target="_blank"><img src="https://opencollective.com/dokku/sponsor/0/avatar.svg" style="max-width: 192px"></a>
|
|
<a href="https://opencollective.com/dokku/sponsor/1/website" target="_blank"><img src="https://opencollective.com/dokku/sponsor/1/avatar.svg" style="max-width: 192px"></a>
|
|
<a href="https://opencollective.com/dokku/sponsor/2/website" target="_blank"><img src="https://opencollective.com/dokku/sponsor/2/avatar.svg" style="max-width: 192px"></a>
|
|
<a href="https://opencollective.com/dokku/sponsor/3/website" target="_blank"><img src="https://opencollective.com/dokku/sponsor/3/avatar.svg" style="max-width: 192px"></a>
|
|
</p>
|
|
|
|
<p class="backer">
|
|
<a href="https://opencollective.com/dokku/backer/0/website" target="_blank"><img src="https://opencollective.com/dokku/backer/0/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/1/website" target="_blank"><img src="https://opencollective.com/dokku/backer/1/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/2/website" target="_blank"><img src="https://opencollective.com/dokku/backer/2/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/3/website" target="_blank"><img src="https://opencollective.com/dokku/backer/3/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/4/website" target="_blank"><img src="https://opencollective.com/dokku/backer/4/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/5/website" target="_blank"><img src="https://opencollective.com/dokku/backer/5/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/6/website" target="_blank"><img src="https://opencollective.com/dokku/backer/6/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/7/website" target="_blank"><img src="https://opencollective.com/dokku/backer/7/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/8/website" target="_blank"><img src="https://opencollective.com/dokku/backer/8/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/9/website" target="_blank"><img src="https://opencollective.com/dokku/backer/9/avatar.svg"></a>
|
|
</p>
|
|
<p class="backer">
|
|
<a href="https://opencollective.com/dokku/backer/10/website" target="_blank"><img src="https://opencollective.com/dokku/backer/10/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/11/website" target="_blank"><img src="https://opencollective.com/dokku/backer/11/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/12/website" target="_blank"><img src="https://opencollective.com/dokku/backer/12/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/13/website" target="_blank"><img src="https://opencollective.com/dokku/backer/13/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/14/website" target="_blank"><img src="https://opencollective.com/dokku/backer/14/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/15/website" target="_blank"><img src="https://opencollective.com/dokku/backer/15/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/16/website" target="_blank"><img src="https://opencollective.com/dokku/backer/16/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/17/website" target="_blank"><img src="https://opencollective.com/dokku/backer/17/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/18/website" target="_blank"><img src="https://opencollective.com/dokku/backer/18/avatar.svg"></a>
|
|
<a href="https://opencollective.com/dokku/backer/19/website" target="_blank"><img src="https://opencollective.com/dokku/backer/19/avatar.svg"></a>
|
|
</p>
|
|
|
|
<p>You can also <a href="https://www.patreon.com/dokku" target="_blank">back us anonymously</a> on Patreon.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container">
|
|
<footer>
|
|
<p>© 2013-2020 Dokku</p>
|
|
</footer>
|
|
</div>
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function (e) {
|
|
var 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'), ' ');;
|
|
}
|
|
},
|
|
activateTab = function(tab) {
|
|
removeClass(document.querySelectorAll('.shell-active')[0], 'shell-active');
|
|
removeClass(document.querySelectorAll('.tab-active')[0], 'tab-active');
|
|
addClass(document.querySelectorAll('.shell-' + tab)[0], 'shell-active');
|
|
addClass(document.querySelectorAll('.tab-' + tab)[0], 'tab-active');
|
|
window.location.hash = '#install-' + tab;
|
|
};
|
|
|
|
var hash = window.location.hash.replace('#install-', '');
|
|
if (['curl', 'apt', 'arch'].indexOf(hash) !== -1) {
|
|
activateTab(hash);
|
|
}
|
|
|
|
Array.prototype.forEach.call(document.querySelectorAll('.tab'), function (el, i) {
|
|
addListener(el, 'click', function(e) {
|
|
activateTab(this.getAttribute('data-tab'));
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|