Compare commits
79 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3585ee8612 | ||
|
|
5dbb31cf8a | ||
|
|
26d50b0140 | ||
|
|
c2fc3141a9 | ||
|
|
23c25d01ff | ||
|
|
de832c596a | ||
|
|
237dfe2bbd | ||
|
|
49a07e5210 | ||
|
|
a1983e0131 | ||
|
|
95a7a93cb9 | ||
|
|
455033703a | ||
|
|
0470d493ae | ||
|
|
c2858e5fb3 | ||
|
|
f85775b870 | ||
|
|
d50f3cd151 | ||
|
|
9b887b6262 | ||
|
|
f3cc2310da | ||
|
|
ce26004fc8 | ||
|
|
ff07842dc5 | ||
|
|
c389b213b5 | ||
|
|
e1e7fbcc52 | ||
|
|
84c0988fd8 | ||
|
|
9229e1a9a7 | ||
|
|
5f83476811 | ||
|
|
0bd06e70d5 | ||
|
|
c78bf267a3 | ||
|
|
c8c83703ed | ||
|
|
baac2ceda2 | ||
|
|
d465ceb045 | ||
|
|
8ed0193b1d | ||
|
|
1de54d52ac | ||
|
|
e1b5b1aafc | ||
|
|
344d48e01b | ||
|
|
279c49f084 | ||
|
|
2b64fe4666 | ||
|
|
2d109a20c5 | ||
|
|
804c822ace | ||
|
|
7f5c2caed6 | ||
|
|
de29abdab6 | ||
|
|
c250d170cd | ||
|
|
c48fe4e2a9 | ||
|
|
81c5173f5e | ||
|
|
ac04199963 | ||
|
|
a2985e082b | ||
|
|
8c24483fb7 | ||
|
|
cd3ce7de22 | ||
|
|
e28c75e56a | ||
|
|
f13796fa57 | ||
|
|
49d8cc4902 | ||
|
|
b22b04af8e | ||
|
|
39bf2a2100 | ||
|
|
b50df757db | ||
|
|
aaeae0d9cc | ||
|
|
4f6843104c | ||
|
|
bdd0f50dd9 | ||
|
|
77b3725d5b | ||
|
|
6c19414b7a | ||
|
|
b3f44e3f96 | ||
|
|
f705004975 | ||
|
|
39ba53607a | ||
|
|
d17cb43bd3 | ||
|
|
c8bcd67498 | ||
|
|
dcf34eb4d4 | ||
|
|
5a35c9a76c | ||
|
|
b23e5d1cbb | ||
|
|
a11b46058e | ||
|
|
b3041661b3 | ||
|
|
66833f12a0 | ||
|
|
18d6e1be3b | ||
|
|
6674d7823e | ||
|
|
f3959c38b0 | ||
|
|
8d0fbc0d1b | ||
|
|
9878c0b6fa | ||
|
|
79cc07d71b | ||
|
|
9d5d147a9c | ||
|
|
82475ab70d | ||
|
|
cc2c7be96e | ||
|
|
68e3f93b08 | ||
|
|
9b3d722eec |
@@ -78,7 +78,8 @@ Output of the following commands
|
||||
- `dokku plugin`:
|
||||
- `docker inspect CONTAINER_ID` (if applicable):
|
||||
- `cat /home/dokku/<app>/nginx.conf` (if applicable):
|
||||
- Output of failing dokku commands with `dokku trace on`:
|
||||
- Output of failing dokku commands with `dokku trace on`
|
||||
(BEWARE: `trace on` will print environment variables for some commands, be sure you're not exposing any sensitive information when posting issues):
|
||||
|
||||
Environment details (AWS, VirtualBox, physical, etc.):
|
||||
|
||||
|
||||
67
HISTORY.md
67
HISTORY.md
@@ -1,5 +1,56 @@
|
||||
# History
|
||||
|
||||
## 0.4.4
|
||||
|
||||
This release adds a few interesting changes:
|
||||
|
||||
- The `dokku logs` command now roughly maps to the `heroku logs` command, and supports most available options.
|
||||
- Native Microsoft Azure support is now available!
|
||||
- Quite a few shellcheck issues were fixed thanks to @callahad!
|
||||
- Experimental debian installation support. Going forward, we will try and make dokku compatible with all systemd installations, as well as investigate dockerfile-based deployment to continue simplifying installation.
|
||||
|
||||
Thanks to all our contributors for making this release great!
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- #1606: @josegonzalez Install plugn 0.2.0 in Makefile installs
|
||||
- #1643: @Flink Fix generated nginx config when NO_VHOST=1
|
||||
- #1644: @mmerickel Watch dokku events through a logrotate
|
||||
- #1647: @callahad Resolve SC2115: 'Use "${var:?}" to ensure this never expands to /'
|
||||
- #1648: @callahad Resolve SC2154: 'variable is referenced but not assigned'
|
||||
- #1649: @callahad Resolve SC2164: 'Use cd ... || exit in case cd fails.'
|
||||
- #1650: @callahad Resolve SC2148: 'target shell is unknown'
|
||||
- #1651: @callahad Resolve SC2029: 'this expands on client side'
|
||||
- #1652: @callahad Resolve SC2143: 'Instead of [ -n $(foo | grep bar) ], use foo | grep -q bar'
|
||||
- #1653: @callahad Resolve SC2145: 'Argument mixes string and array.'
|
||||
- #1655: @callahad Resolve SC2162: 'read without -r mangles backslashes'
|
||||
- #1656: @callahad Resolve SC2001: 'See if you can use ${var//search/replace} instead'
|
||||
- #1660: @callahad Fixup debian/control for Debian
|
||||
- #1662: @xadh00m Only return users of group 'adm'
|
||||
|
||||
### New Features
|
||||
|
||||
- #1607: @josegonzalez Dokku support for Debian Jessie installation
|
||||
- #1610: @kdomanski Add post-stop plugn trigger
|
||||
- #1612: @Flink Add multiple options to the logs plugin
|
||||
- #1613: @kdomanski Add ps:restore to start applications which weren't manually stopped
|
||||
- #1628: @michaelshobbs Move RESTORE variable to DOKKU_APP namespace
|
||||
- #1634: @callahad Allow installation of bats via homebrew
|
||||
- #1645: @rvalyi Add ability to access git repo via ssh
|
||||
- #1664: @michaelshobbs Add $REV to pre-receive-app call
|
||||
|
||||
### Documentation
|
||||
|
||||
- #1605: @josegonzalez Make commented output a bit more readable
|
||||
- #1621: @josegonzalez Document `--force` option for `:destroy` commands
|
||||
- #1623: @sedouard Add Azure Documentation
|
||||
- #1624: @u2mejc Add trace to help output
|
||||
- #1626: @josegonzalez Add official dokku-copy-files-to-image plugin
|
||||
- #1630: @adamwolf Enabling tracing is actually 'dokku trace on'
|
||||
- #1633: @elia Add a warning regarding the use of `trace on`
|
||||
- #1635: @callahad Remove deprecated Linode stackscript
|
||||
- #1657: @kimausloos Various small doc updates
|
||||
|
||||
## 0.4.3
|
||||
|
||||
This release was mainly a documentation release/bugfix.
|
||||
@@ -8,7 +59,7 @@ One major removal was is that as of 0.4.3, we no longer restart containers autom
|
||||
|
||||
If desired, you may replicate this functionality using the official `docker-options` plugin.
|
||||
|
||||
## Bug Fixes
|
||||
### Bug Fixes
|
||||
|
||||
- #1560: @darklow Fixes issue where SSL and non-SSL templates cannot be used at the same time
|
||||
- #1566: @michaelshobbs Fix logic error in enabling nginx
|
||||
@@ -20,7 +71,7 @@ If desired, you may replicate this functionality using the official `docker-opti
|
||||
- #1603: @josegonzalez Add missing plugin triggers
|
||||
Quiet client #1568
|
||||
|
||||
## New Features
|
||||
### New Features
|
||||
|
||||
- #1490: @vijayviji Add windows-specific vagrant setup
|
||||
- #1563: @kdomanski Cleanup all dead containers in dokku cleanup
|
||||
@@ -28,7 +79,7 @@ Quiet client #1568
|
||||
- #1600: @josegonzalez Upgrade to Herokuish 0.3.4
|
||||
- #1602: @josegonzalez Add pre-receive-app plugin trigger
|
||||
|
||||
## Documentation
|
||||
### Documentation
|
||||
|
||||
- #1556: @josegonzalez Use proper cdn link for css asset
|
||||
- #1557: @josegonzalez Code styling changes
|
||||
@@ -212,7 +263,7 @@ This release is a bugfix release covering dokku packaging.
|
||||
- #1397: @josegonzalez Use https docker apt repo
|
||||
- #1394: @josegonzalez Remove `dokku plugins-install` from postinst hook
|
||||
|
||||
### Docs Changes
|
||||
### Documentation
|
||||
|
||||
- #1395: @adrianmoya Adding fqdn requirement
|
||||
|
||||
@@ -239,7 +290,7 @@ This release is a bugfix release mostly covering installation and nginx issues.
|
||||
- #1359: @michaelshobbs allow DOKKU_WAIT_TO_RETIRE to be defined per app
|
||||
- #1365: @michaelshobbs support dockerfile images that don't include bash
|
||||
|
||||
### Docs Changes
|
||||
### Documentation
|
||||
|
||||
- #1305: @josegonzalez Updated documentation site
|
||||
- #1321: @fwolfst Mention alternative to nginx.conf templates: include-dir.
|
||||
@@ -278,7 +329,7 @@ This release is a general bugfix release, with improvements to handling of nginx
|
||||
- #1291: @michaelshobbs Refactored interface for managing global/local app configuration
|
||||
- #1299: @SonicHedgehog Set X-Forwarded-Proto header if TLS is enabled when running checks
|
||||
|
||||
### Docs Changes
|
||||
### Documentation
|
||||
|
||||
- #1273: @alessio Add docs for the events plugin
|
||||
- #1276: @josegonzalez Reorder and deprecate a few plugins
|
||||
@@ -319,7 +370,7 @@ This release pegs Dokku to Docker 1.6.2. Docker 1.7.0 introduced changes in `doc
|
||||
- #1251: @josegonzalez Fallback to using /etc/init.d/nginx reload directly to restart nginx
|
||||
- #1264: @josegonzalez Require lxc-docker-1.6.2
|
||||
|
||||
### Docs Changes
|
||||
### Documentation
|
||||
|
||||
- #1252: @josegonzalez Fix ssh port for vagrant installation. Closes #1139. [ci skip]
|
||||
- #1250: @josegonzalez SSL documentation is misleading
|
||||
@@ -346,7 +397,7 @@ This release pegs Dokku to Docker 1.6.2. Docker 1.7.0 introduced changes in `doc
|
||||
- #1227: @Flink Use --no-cache when building Dockerfile
|
||||
- #1246: @josegonzalez Ensure we call apt-get before installing packages
|
||||
|
||||
### Docs Changes
|
||||
### Documentation
|
||||
|
||||
- #1168: @cjblomqvist [docs] Update git-rev plugin to point to maintained version
|
||||
- #1180: @sherbondy [docs] Clarify usage around official dokku `docker-options` plugin
|
||||
|
||||
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
DOKKU_VERSION = master
|
||||
|
||||
SSHCOMMAND_URL ?= https://raw.githubusercontent.com/progrium/sshcommand/master/sshcommand
|
||||
PLUGN_URL ?= https://github.com/progrium/plugn/releases/download/v0.1.0/plugn_0.1.0_linux_x86_64.tgz
|
||||
PLUGN_URL ?= https://github.com/progrium/dokku/releases/download/v0.4.0/plugn_0.2.0_linux_x86_64.tgz
|
||||
STACK_URL ?= https://github.com/gliderlabs/herokuish.git
|
||||
PREBUILT_STACK_URL ?= gliderlabs/herokuish:latest
|
||||
DOKKU_LIB_ROOT ?= /var/lib/dokku
|
||||
|
||||
@@ -10,8 +10,8 @@ Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen. S
|
||||
|
||||
To install the latest stable release, you can run the following commands as a user that has access to `sudo`:
|
||||
|
||||
wget https://raw.githubusercontent.com/progrium/dokku/v0.4.3/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.4.3 bash bootstrap.sh
|
||||
wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh
|
||||
|
||||
### Upgrading
|
||||
|
||||
|
||||
4
Vagrantfile
vendored
4
Vagrantfile
vendored
@@ -27,6 +27,10 @@ Vagrant::configure("2") do |config|
|
||||
vb.customize ["modifyvm", :id, "--memory", BOX_MEMORY]
|
||||
end
|
||||
|
||||
config.vm.provider :vmware_fusion do |v, override|
|
||||
v.vmx["memsize"] = BOX_MEMORY
|
||||
end
|
||||
|
||||
config.vm.define "empty", autostart: false
|
||||
|
||||
config.vm.define "dokku", primary: true do |vm|
|
||||
|
||||
@@ -6,7 +6,18 @@ if ARGV[0] == "onboot"
|
||||
File.open("/etc/init/dokku-installer.conf", "w") do |f|
|
||||
f.puts "start on runlevel [2345]"
|
||||
f.puts "exec #{File.absolute_path(__FILE__)} selfdestruct"
|
||||
end
|
||||
end if File.directory?("/etc/init")
|
||||
File.open("/etc/systemd/system/dokku-installer.service", "w") do |f|
|
||||
f.puts "[Unit]"
|
||||
f.puts "Description=Dokku web-installer"
|
||||
f.puts ""
|
||||
f.puts "[Service]"
|
||||
f.puts "ExecStart=#{File.absolute_path(__FILE__)} selfdestruct"
|
||||
f.puts ""
|
||||
f.puts "[Install]"
|
||||
f.puts "WantedBy=multi-user.target"
|
||||
f.puts "WantedBy=graphical.target"
|
||||
end if File.directory?("/etc/systemd/system")
|
||||
File.open("/etc/nginx/conf.d/dokku-installer.conf", "w") do |f|
|
||||
f.puts "upstream dokku-installer { server 127.0.0.1:2000; }"
|
||||
f.puts "server {"
|
||||
@@ -21,7 +32,7 @@ if ARGV[0] == "onboot"
|
||||
exit
|
||||
end
|
||||
|
||||
version = "v0.4.3"
|
||||
version = "v0.4.4"
|
||||
dokku_root = ENV["DOKKU_ROOT"] || "/home/dokku"
|
||||
admin_keys = `cat /root/.ssh/authorized_keys`.split("\n")
|
||||
hostname = `bash -c '[[ $(dig +short $HOSTNAME) ]] && echo $HOSTNAME || curl icanhazip.com'`.strip
|
||||
@@ -48,7 +59,7 @@ post "/setup" do
|
||||
end
|
||||
Thread.new {
|
||||
`rm /etc/nginx/conf.d/dokku-installer.conf && /etc/init.d/nginx stop && /etc/init.d/nginx start`
|
||||
`rm /etc/init/dokku-installer.conf && stop dokku-installer`
|
||||
`rm -f /etc/init/dokku-installer.conf /etc/systemd/system/dokku-installer.service && stop dokku-installer`
|
||||
}.run if ARGV[0] == "selfdestruct"
|
||||
end
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ if [[ ! -z $DOKKU_HOST ]]; then
|
||||
fi
|
||||
|
||||
if [[ -z "$donotshift" ]]; then
|
||||
# shellcheck disable=SC2029
|
||||
ssh -o LogLevel=QUIET -t "dokku@$DOKKU_HOST" "$@"
|
||||
exit $?
|
||||
fi
|
||||
@@ -119,7 +120,7 @@ if [[ ! -z $DOKKU_HOST ]]; then
|
||||
done
|
||||
fi
|
||||
fi
|
||||
# shellcheck disable=SC2086
|
||||
# shellcheck disable=SC2086,SC2029
|
||||
ssh -o LogLevel=QUIET -t "dokku@$DOKKU_HOST" $long_args "$verb" "$appname" "${args[@]}"
|
||||
}
|
||||
|
||||
|
||||
@@ -1,174 +0,0 @@
|
||||
#!/bin/bash
|
||||
# <UDF name="hostname" default="" label="Hostname for dokku instance" example="example.com">
|
||||
# <UDF name="ssh_key" default="" label="Public SSH Key for root user" example="Sets the root user's public ssh key, which is also automatically imported into the dokku installer">
|
||||
# <UDF name="notify_email" default="" Label="Send Finish Notification To" example="Email address to send notification to when finished." />
|
||||
|
||||
logit() {
|
||||
# Simple logging function that prepends an easy-to-find marker '=> ' and a timestamp to a message
|
||||
TIMESTAMP=$(date -u +'%m/%d %H:%M:%S')
|
||||
MSG="=> ${TIMESTAMP} $1"
|
||||
echo ${MSG}
|
||||
}
|
||||
|
||||
set_ssh_key() {
|
||||
if [[ -n "${SSH_KEY}" ]]; then
|
||||
logit "Setting root ssh key"
|
||||
mkdir -p /root/.ssh
|
||||
chmod 700 /root/.ssh
|
||||
echo "$SSH_KEY" > /root/.ssh/authorized_keys
|
||||
chmod 600 /root/.ssh/authorized_keys
|
||||
chown -R root:root /root/.ssh
|
||||
fi
|
||||
}
|
||||
|
||||
set_passwordless_ssh() {
|
||||
logit "Turn off password authentication and root login for SSH"
|
||||
echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
|
||||
service ssh restart
|
||||
}
|
||||
|
||||
system_primary_ip() {
|
||||
# returns the primary IP assigned to eth0
|
||||
ifconfig eth0 | awk -F: '/inet addr:/ {print $2}' | awk '{ print $1 }'
|
||||
}
|
||||
|
||||
set_hostname() {
|
||||
logit "Set up hostname"
|
||||
if [[ -n "${HOSTNAME}" ]]; then
|
||||
echo $HOSTNAME > /etc/hostname
|
||||
echo $IPADDR $FQDN $HOSTNAME >> /etc/hosts
|
||||
else
|
||||
system_primary_ip > /etc/hostname
|
||||
echo "$(system_primary_ip) localhost" >> /etc/hosts
|
||||
fi
|
||||
|
||||
IPADDR=$(/sbin/ifconfig eth0 | awk '/inet / { print $2 }' | sed 's/addr://')
|
||||
hostname -F /etc/hostname
|
||||
}
|
||||
|
||||
postfix_install_loopback_only() {
|
||||
logit "Installing and configuring Postfix"
|
||||
# Installs postfix and configure to listen only on the local interface. Also
|
||||
# allows for local mail delivery
|
||||
|
||||
echo "postfix postfix/destinations string localhost.localdomain, localhost" | debconf-set-selections
|
||||
echo "postfix postfix/mailname string localhost" | debconf-set-selections
|
||||
echo "postfix postfix/main_mailer_type select Internet Site" | debconf-set-selections
|
||||
echo "postfix postfix/myhostname string localhost" | debconf-set-selections
|
||||
sudo apt-get install -qq -y postfix > /dev/null 2>&1
|
||||
/usr/sbin/postconf -e "inet_interfaces = loopback-only"
|
||||
#/usr/sbin/postconf -e "local_transport = error:local delivery is disabled"
|
||||
|
||||
touch /tmp/restart-postfix
|
||||
}
|
||||
|
||||
notify_install_via_email() {
|
||||
if [[ -n "${NOTIFY_EMAIL}" ]]; then
|
||||
logit "Sending notification email to ${NOTIFY_EMAIL}"
|
||||
/usr/sbin/sendmail "${NOTIFY_EMAIL}" <<EOD
|
||||
To: ${NOTIFY_EMAIL}
|
||||
Subject: Dokku installation is complete
|
||||
From: Dokku StackScript <no-reply@${HOSTNAME}>
|
||||
|
||||
Your Dokku installation is complete and now ready to be configured: http://$(system_primary_ip) . Please visit this url to complete the setup of your Dokku instance.
|
||||
|
||||
Enjoy using Dokku!
|
||||
EOD
|
||||
fi
|
||||
}
|
||||
|
||||
notify_restart_via_email() {
|
||||
if [[ -n "${NOTIFY_EMAIL}" ]]; then
|
||||
logit "Sending notification email to ${NOTIFY_EMAIL} of required restart"
|
||||
/usr/sbin/sendmail "${NOTIFY_EMAIL}" <<EOD
|
||||
To: ${NOTIFY_EMAIL}
|
||||
Subject: Dokku Linode instance must be restarted
|
||||
From: Dokku StackScript <no-reply@${HOSTNAME}>
|
||||
|
||||
The following linode instance must be restarted:
|
||||
|
||||
${LINODE_LISHUSERNAME}
|
||||
|
||||
Before restarting, please go to this url:
|
||||
|
||||
https://manager.linode.com/linodes/dashboard/${LINODE_LISHUSERNAME}
|
||||
|
||||
Then click "Edit" next to the selected configuration profile and make the following changes:
|
||||
|
||||
- Change the "Kernel" option to the current "pv-grub" release
|
||||
- Set the "Distro helper" option to "no"
|
||||
|
||||
Then save your changes. Next, reboot the instance from the Linode Dashboard. You'll receive an email once the instance is available to continue the dokku installation.
|
||||
EOD
|
||||
fi
|
||||
}
|
||||
|
||||
setup_linode() {
|
||||
logit "Installing via linode"
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -qq -y linux-virtual
|
||||
DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y grub2 grub-pc
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -qq -y grub
|
||||
mkdir -p /boot/grub
|
||||
update-grub -y
|
||||
sed -i 's/kopt=root=UUID=.* ro/kopt=root=\/dev\/xvda console=hvc0 ro quiet/g' /boot/grub/menu.lst
|
||||
sed -i 's/# groot=(hd0,0)/# groot=(hd0)/g' /boot/grub/menu.lst
|
||||
update-grub
|
||||
|
||||
cp /etc/rc.local /etc/rc.local-bak
|
||||
cat << "EOF" > /etc/rc.local
|
||||
#!/bin/sh -e
|
||||
sudo apt-get update >> /root/setup_linode.txt 2>&1
|
||||
sudo apt-get install -y linux-image-extra-"$(uname -r)" >> /root/setup_linode.txt 2>&1
|
||||
modprobe aufs >> /root/setup_linode.txt 2>&1
|
||||
|
||||
sudo apt-get install -y apparmor cgroup-lite >> /root/setup_linode.txt 2>&1
|
||||
|
||||
sudo apt-get install -y dokku >> /root/setup_linode.txt 2>&1
|
||||
|
||||
# Clean up this script so it only runs once
|
||||
rm -f /etc/rc.local
|
||||
mv /etc/rc.local-bak /etc/rc.local
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x /etc/rc.local
|
||||
}
|
||||
|
||||
install_prerequisites() {
|
||||
logit "Installing pre-requisites"
|
||||
sudo apt-get update -qq > /dev/null
|
||||
sudo apt-get install -qq -y apt-transport-https curl > /dev/null 2>&1
|
||||
|
||||
logit "Installing docker"
|
||||
curl -sSL https://get.docker.com/ | sh
|
||||
|
||||
logit "Installing dokku"
|
||||
curl -sSL https://packagecloud.io/gpg.key 2> /dev/null | apt-key add - > /dev/null 2>&1
|
||||
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" > /etc/apt/sources.list.d/dokku.list
|
||||
sudo apt-get update -qq > /dev/null
|
||||
}
|
||||
|
||||
install_dokku() {
|
||||
logit "Installing pre-requisites"
|
||||
sudo apt-get install -qq -y linux-image-extra-"$(uname -r)" > /dev/null 2>&1
|
||||
|
||||
logit "Installing dokku"
|
||||
sudo apt-get install -qq -y dokku > /dev/null 2>&1
|
||||
|
||||
logit "Done!"
|
||||
}
|
||||
|
||||
exec &> /root/stackscript.log
|
||||
|
||||
set_ssh_key
|
||||
set_passwordless_ssh
|
||||
postfix_install_loopback_only
|
||||
set_hostname
|
||||
install_prerequisites
|
||||
|
||||
if [[ -n "$LINODE_ID" ]]; then
|
||||
setup_linode
|
||||
notify_restart_via_email
|
||||
else
|
||||
install_dokku
|
||||
notify_install_via_email
|
||||
fi
|
||||
18
deb.mk
18
deb.mk
@@ -49,7 +49,7 @@ deb-all: deb-herokuish deb-dokku deb-gems deb-plugn deb-sshcommand
|
||||
deb-setup:
|
||||
echo "-> Updating deb repository and installing build requirements"
|
||||
sudo apt-get update -qq > /dev/null
|
||||
sudo apt-get install -qq -y gcc git ruby1.9.1-dev > /dev/null 2>&1
|
||||
sudo apt-get install -qq -y gcc git ruby-dev ruby1.9.1 > /dev/null 2>&1
|
||||
command -v fpm > /dev/null || sudo gem install fpm --no-ri --no-rdoc
|
||||
ssh -o StrictHostKeyChecking=no git@github.com || true
|
||||
|
||||
@@ -69,7 +69,7 @@ deb-herokuish: deb-setup
|
||||
echo "sudo docker build -t gliderlabs/herokuish /var/lib/herokuish 1> /dev/null" >> /tmp/tmp/post-install
|
||||
|
||||
echo "-> Cloning repository"
|
||||
git clone -q "git@github.com:$(HEROKUISH_REPO_NAME).git" /tmp/tmp/herokuish > /dev/null
|
||||
git clone -q "https://github.com/$(HEROKUISH_REPO_NAME).git" /tmp/tmp/herokuish > /dev/null
|
||||
rm -rf /tmp/tmp/herokuish/.git /tmp/tmp/herokuish/.gitignore
|
||||
|
||||
echo "-> Copying files into place"
|
||||
@@ -77,7 +77,7 @@ deb-herokuish: deb-setup
|
||||
cp -rf /tmp/tmp/herokuish /tmp/build/var/lib/herokuish
|
||||
|
||||
echo "-> Creating $(HEROKUISH_PACKAGE_NAME)"
|
||||
sudo fpm -t deb -s dir -C /tmp/build -n herokuish -v $(HEROKUISH_VERSION) -a $(HEROKUISH_ARCHITECTURE) -p $(HEROKUISH_PACKAGE_NAME) --deb-pre-depends 'docker-engine | docker-engine-cs' --after-install /tmp/tmp/post-install --url "https://github.com/$(HEROKUISH_REPO_NAME)" --description $(HEROKUISH_DESCRIPTION) --license 'MIT License' .
|
||||
sudo fpm -t deb -s dir -C /tmp/build -n herokuish -v $(HEROKUISH_VERSION) -a $(HEROKUISH_ARCHITECTURE) -p $(HEROKUISH_PACKAGE_NAME) --deb-pre-depends 'docker-engine | docker-engine-cs' --deb-pre-depends sudo --after-install /tmp/tmp/post-install --url "https://github.com/$(HEROKUISH_REPO_NAME)" --description $(HEROKUISH_DESCRIPTION) --license 'MIT License' .
|
||||
mv *.deb /tmp
|
||||
|
||||
deb-dokku: deb-setup
|
||||
@@ -121,16 +121,18 @@ deb-plugn: deb-setup
|
||||
mkdir -p /tmp/tmp /tmp/build
|
||||
|
||||
echo "-> Cloning repository"
|
||||
git clone -q "git@github.com:$(PLUGN_REPO_NAME).git" /tmp/tmp/plugn > /dev/null
|
||||
git clone -q "https://github.com/$(PLUGN_REPO_NAME).git" /tmp/tmp/plugn > /dev/null
|
||||
rm -rf /tmp/tmp/plugn/.git /tmp/tmp/plugn/.gitignore
|
||||
|
||||
echo "-> Copying files into place"
|
||||
mkdir -p /tmp/build/usr/local/bin $(GOPATH)
|
||||
sudo apt-get clean
|
||||
sudo apt-get update -qq > /dev/null
|
||||
sudo apt-get install -qq -y git golang mercurial > /dev/null 2>&1
|
||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH) && cd /tmp/tmp/plugn && make deps
|
||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH) && cd /tmp/tmp/plugn && go build -o plugn
|
||||
mv /tmp/tmp/plugn/plugn /tmp/build/usr/local/bin/plugn
|
||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH):/tmp/tmp/plugn && go get github.com/progrium/plugn
|
||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH):/tmp/tmp/plugn && cd /home/vagrant/gocode/src/github.com/progrium/plugn && make deps
|
||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH):/tmp/tmp/plugn && cd /home/vagrant/gocode/src/github.com/progrium/plugn && rm plugn && go build -o plugn
|
||||
mv /home/vagrant/gocode/src/github.com/progrium/plugn/plugn /tmp/build/usr/local/bin/plugn
|
||||
|
||||
echo "-> Creating $(PLUGN_PACKAGE_NAME)"
|
||||
sudo fpm -t deb -s dir -C /tmp/build -n plugn -v $(PLUGN_VERSION) -a $(PLUGN_ARCHITECTURE) -p $(PLUGN_PACKAGE_NAME) --url "https://github.com/$(PLUGN_REPO_NAME)" --description $(PLUGN_DESCRIPTION) --license 'MIT License' .
|
||||
@@ -141,7 +143,7 @@ deb-sshcommand: deb-setup
|
||||
mkdir -p /tmp/tmp /tmp/build
|
||||
|
||||
echo "-> Cloning repository"
|
||||
git clone -q "git@github.com:$(SSHCOMMAND_REPO_NAME).git" /tmp/tmp/sshcommand > /dev/null
|
||||
git clone -q "https://github.com/$(SSHCOMMAND_REPO_NAME).git" /tmp/tmp/sshcommand > /dev/null
|
||||
rm -rf /tmp/tmp/sshcommand/.git /tmp/tmp/sshcommand/.gitignore
|
||||
|
||||
echo "-> Copying files into place"
|
||||
|
||||
8
debian/control
vendored
8
debian/control
vendored
@@ -1,9 +1,9 @@
|
||||
Package: dokku
|
||||
Version: 0.3.12
|
||||
Section: base
|
||||
Version: 0.4.4
|
||||
Section: web
|
||||
Priority: optional
|
||||
Architecture: amd64
|
||||
Depends: locales, git, make, curl, software-properties-common, docker-engine | docker-engine-cs | lxc-docker, gcc, python-software-properties, man-db, herokuish, sshcommand
|
||||
Pre-Depends: nginx, dnsutils, ruby, ruby-dev, rubygem-rack, rubygem-rack-protection, rubygem-sinatra, rubygem-tilt, apparmor, cgroupfs-mount | cgroup-lite, plugn
|
||||
Depends: locales, git, make, curl, gcc, man-db, herokuish, sshcommand, docker-engine-cs | docker-engine | lxc-docker (>= 1.6.2) | docker.io (>= 1.6.2), software-properties-common, python-software-properties
|
||||
Pre-Depends: nginx (>= 1.4.6), dnsutils, apparmor, cgroupfs-mount | cgroup-lite, plugn, sudo, ruby, ruby-dev, rubygem-rack , rubygem-rack-protection, rubygem-sinatra, rubygem-tilt
|
||||
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>
|
||||
Description: Docker powered mini-Heroku in around 100 lines of Bash
|
||||
|
||||
4
debian/postinst
vendored
4
debian/postinst
vendored
@@ -24,7 +24,7 @@ case "$1" in
|
||||
touch /var/lib/dokku/core-plugins/config.toml /var/lib/dokku/plugins/config.toml
|
||||
|
||||
# migrate old plugins
|
||||
find /var/lib/dokku/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do
|
||||
find /var/lib/dokku/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
||||
if [ "$plugin" = "available" ] || [ "$plugin" = "enabled" ]; then
|
||||
continue
|
||||
elif [ -f /var/lib/dokku/plugins/$plugin/.core ]; then
|
||||
@@ -35,7 +35,7 @@ case "$1" in
|
||||
done
|
||||
|
||||
# enable all core plugins
|
||||
find /var/lib/dokku/core-plugins/available -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do
|
||||
find /var/lib/dokku/core-plugins/available -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
||||
if [ ! -d /var/lib/dokku/plugins/available/$plugin ]; then
|
||||
ln -s /var/lib/dokku/core-plugins/available/$plugin /var/lib/dokku/plugins/available/$plugin;
|
||||
PLUGIN_PATH=/var/lib/dokku/core-plugins plugn enable $plugin
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square70x70logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/mstile-70x70.png"/>
|
||||
<square150x150logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/mstile-150x150.png"/>
|
||||
<square310x310logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/mstile-310x310.png"/>
|
||||
<wide310x150logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/mstile-310x150.png"/>
|
||||
<square70x70logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-70x70.png"/>
|
||||
<square150x150logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-150x150.png"/>
|
||||
<square310x310logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-310x310.png"/>
|
||||
<wide310x150logo src="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-310x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
|
||||
@@ -2,37 +2,37 @@
|
||||
"name": "Dokku",
|
||||
"icons": [
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.3\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
||||
"sizes": "36x36",
|
||||
"type": "image\/png",
|
||||
"density": "0.75"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.3\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
||||
"sizes": "48x48",
|
||||
"type": "image\/png",
|
||||
"density": "1.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.3\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image\/png",
|
||||
"density": "1.5"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.3\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image\/png",
|
||||
"density": "2.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.3\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image\/png",
|
||||
"density": "3.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.3\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.4.4\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image\/png",
|
||||
"density": "4.0"
|
||||
|
||||
@@ -25,7 +25,7 @@ h1 {
|
||||
padding: 0 0 0 1em;
|
||||
}
|
||||
.header a {
|
||||
background-image: url(https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/dokku.png);
|
||||
background-image: url(https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/dokku.png);
|
||||
color: #fff;
|
||||
text-indent: 40px;
|
||||
background-position: center left;
|
||||
@@ -40,7 +40,7 @@ h1 {
|
||||
.blurb {
|
||||
color: #424242;
|
||||
background-color: #ededed;
|
||||
background-image: url(https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/gplaypattern.png);
|
||||
background-image: url(https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/gplaypattern.png);
|
||||
padding: 45px 0;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -102,6 +102,9 @@ h1 {
|
||||
.quickstart-code .command {
|
||||
color: #ffffcc;
|
||||
}
|
||||
.quickstart-code .line .output {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
.marketing .col-lg-4 {
|
||||
margin-bottom: 20px;
|
||||
text-align: center;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> New as of 0.3.0
|
||||
|
||||
Following a deploy, dokku will now wait `10` seconds before routing traffic to the new container. If the container is not running after this time, then the deploy is failed and your old container will continue serving traffic. You can configure this time using the following command:
|
||||
Following a deploy, dokku will now wait `10` seconds before routing traffic to the new container. If the container is not running after this time, then the deploy is failed and your old container will continue serving traffic. You can modify this value using the following command:
|
||||
|
||||
```shell
|
||||
dokku config:set --global DOKKU_DEFAULT_CHECKS_WAIT=30
|
||||
@@ -18,13 +18,13 @@ A check is a relative URL and may be followed by expected content from the page,
|
||||
/about Our Amazing Team
|
||||
```
|
||||
|
||||
Dokku will wait `5` seconds before running the checks to give server time to start. This time can be overridden on a per-app basis in the `CHECKS` file by setting `WAIT=nn`. You may also override this for the global dokku installation:
|
||||
Dokku will wait `5` seconds before running the checks to give the server time to start. This value can be overridden on a per-app basis in the `CHECKS` file by setting `WAIT=nn`. You may also override this for the global dokku installation:
|
||||
|
||||
```shell
|
||||
dokku config:set --global DOKKU_CHECKS_WAIT=15
|
||||
```
|
||||
|
||||
Dokku will wait `60` seconds before stopping the old container so that existing connections are given a chance to complete. This time is also configurable globally:
|
||||
Dokku will wait `60` seconds before stopping the old container so that existing connections are given a chance to complete. This value is also configurable globally:
|
||||
|
||||
```shell
|
||||
dokku config:set --global DOKKU_WAIT_TO_RETIRE=120
|
||||
|
||||
@@ -21,13 +21,13 @@ You can set multiple environment variables at once:
|
||||
dokku config:set node-js-app ENV=prod COMPILE_ASSETS=1
|
||||
```
|
||||
|
||||
When setting variables with whitespace, you need to escape the whitespace:
|
||||
When setting variables with whitespaces, you need to escape them:
|
||||
|
||||
```shell
|
||||
dokku config:set node-js-app KEY=\"VAL\ WITH\ SPACES\"
|
||||
```
|
||||
|
||||
When setting or unsetting environment variables, you may wish sometimes to avoid an application restart. This is useful when developing plugins or when setting multiple environment variables in a scripted manner. To do so, use the `--no-restart` flag:
|
||||
When setting or unsetting environment variables, you may wish to avoid an application restart. This is useful when developing plugins or when setting multiple environment variables in a scripted manner. To do so, use the `--no-restart` flag:
|
||||
|
||||
```shell
|
||||
dokku --no-restart config:set node-js-app ENV=prod
|
||||
|
||||
@@ -62,9 +62,10 @@ fi
|
||||
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
ubuntu)
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
debian|ubuntu)
|
||||
apt-get install --force-yes -qq -y nginx
|
||||
;;
|
||||
|
||||
@@ -436,6 +437,24 @@ APP="$1";
|
||||
dokku postgres:destroy $APP
|
||||
```
|
||||
|
||||
### `post-stop`
|
||||
|
||||
- Description: Can be used to run commands after an application is manually stopped
|
||||
- Invoked by: `dokku ps:stop`
|
||||
- Arguments: `$APP`
|
||||
- Example:
|
||||
|
||||
```shell
|
||||
#!/usr/bin/env bash
|
||||
# Marks an application as manually stopped
|
||||
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
APP="$1";
|
||||
|
||||
dokku config:set --no-restart $APP MANUALLY_STOPPED=1
|
||||
```
|
||||
|
||||
### `docker-args-build`
|
||||
|
||||
- Description:
|
||||
@@ -591,7 +610,7 @@ nginx -t
|
||||
|
||||
- Description: Allows you to customize the contents of an application directory before they are processed for deployment. The `IMAGE_SOURCE_TYPE` can be any of `[herokuish, dockerfile]`
|
||||
- Invoked by: `dokku git-hook`, `dokku tar-build-locked`
|
||||
- Arguments: `$APP $IMAGE_SOURCE_TYPE $TMP_WORK_DIR`
|
||||
- Arguments: `$APP $IMAGE_SOURCE_TYPE $TMP_WORK_DIR $REV`
|
||||
- Example:
|
||||
|
||||
```shell
|
||||
@@ -601,7 +620,7 @@ nginx -t
|
||||
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
APP="$1"; IMAGE_SOURCE_TYPE="$2"; TMP_WORK_DIR="$3"
|
||||
APP="$1"; IMAGE_SOURCE_TYPE="$2"; TMP_WORK_DIR="$3"; REV="$4"
|
||||
|
||||
echo "$APP" > "$TMP_WORK_DIR/dokku-is-awesome"
|
||||
```
|
||||
|
||||
@@ -4,18 +4,19 @@ Dokku is released in intervals *at most* three weeks apart, though may be releas
|
||||
|
||||
To propose a release, the following tasks need to be performed:
|
||||
|
||||
- The installable version must be changed in the `docs/installation.md` file.
|
||||
- The installable version must be changed in the `contrib/dokku-installer.rb` file.
|
||||
- The installable version must be changed in the `debian/control` file.
|
||||
- The installable version must be changed in the `docs/home.html` file
|
||||
- The installable version must be changed in the `docs/index.md` file
|
||||
- The installable version must be changed in the `README.md` file.
|
||||
- The installable version must be changed in the `contrib/dokku-installer.rb` file.
|
||||
- The installable version must be changed in the `docs/installation.md` file.
|
||||
- The installable version must be changed in the `docs/template.html` file.
|
||||
- The installable version must be changed in the `README.md` file.
|
||||
- The embedded css should be cleared in the `docs/template.html` file.
|
||||
- The versioned links should be updated in the `docs/home.html` file.
|
||||
- The versioned links should be updated in the `docs/template.html` file.
|
||||
- The versioned links should be updated in the `docs/assets/style.css` file.
|
||||
- The versioned links should be updated in the `docs/assets/favicons/browserconfig.xml` file.
|
||||
- The versioned links should be updated in the `docs/assets/favicons/manifest.json` file.
|
||||
- The versioned links should be updated in the `docs/assets/style.css` file.
|
||||
- The versioned links should be updated in the `docs/home.html` file.
|
||||
- The versioned links should be updated in the `docs/template.html` file.
|
||||
- The versioned links should be updated in the `docs/template.html` file.
|
||||
- A list of changes must be made in the `HISTORY.md`.
|
||||
- A tag must be created locally with your release version
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# DNS Configuration
|
||||
|
||||
This is a work in progress.
|
||||
> Note: This is a work in progress.
|
||||
|
||||
### DNS Versions
|
||||
|
||||
@@ -26,9 +26,9 @@ Don't be afraid to ask if you need help. Create a [new issue](https://github.co
|
||||
|
||||
For the examples, we will use the domain name `example.tld` and the IP address `127.0.0.1`.
|
||||
|
||||
Dokku uses a DNS to differentiate between apps on your dokku-powered server. If you are using the domain `example.tld`, and you have two apps `myapp1` and `myapp2`, dokku will make them available at `myapp1.example.tld` and `myapp2.example.tld`.
|
||||
Dokku uses DNS to differentiate between apps on your dokku-powered server. If you are using the domain `example.tld`, and you have two apps `myapp1` and `myapp2`, dokku will make them available at `myapp1.example.tld` and `myapp2.example.tld`.
|
||||
|
||||
To get started, you need to know the IP address of your dokku server. Connect in to it and run `ifconfig` or `ip addr` to see the IP address.
|
||||
To get started, you need to know the IP address of your dokku server. Connect to it and run `ifconfig` or `ip addr` to see the IP address.
|
||||
|
||||
# Caching
|
||||
|
||||
|
||||
11
docs/getting-started/install/azure.md
Normal file
11
docs/getting-started/install/azure.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Microsoft Azure
|
||||
|
||||
- If you don't already have one [generate an SSH key pair](https://help.github.com/articles/generating-ssh-keys/).
|
||||
|
||||
- Go to the [dokku on azure deployment page](https://azure.microsoft.com/en-us/documentation/templates/dokku-vm/) and click **Deploy to Azure**.
|
||||
|
||||
- You'll be prompted to enter a few parameters, including a unique storage account name and a unique name for the sub-domain used for your public IP address. For the `sshKeyData` parameter, copy and paste the contents of the **public** key file you just created. After a few minutes the Dokku instance will be deployed.
|
||||
|
||||
- In your browser of choice, navigate to `http://[[dnsNameForPublicIP]].[[location]].cloudapp.azure.com`. Where `[[dnsNameForPublicIP]]` and `[[location]]` are template parameters you used to deploy the template.
|
||||
|
||||
- Finish your dokku setup like you normally would by creating a **new** public/private key pair for your deployments using `ssh-keygen` (don't use the same one as you created in the first step). You should select 'Use Virtual Host Naming' and set the `Hostname` to a **public dns name** that you own such as one you would purchase from [namecheap](http://namecheap.com). Alternatively thanks to [xip.io]( http://xip.io/) you can just use yourAzurePublicIP.xip.io for free. For example, if your public IP is `44.44.44.44` then you would set it to `44.44.44.44.xip.io`.
|
||||
@@ -10,26 +10,26 @@
|
||||
<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.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/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.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
|
||||
@@ -45,6 +45,7 @@
|
||||
.quickstart-code .shell{background-color:#171717;font-family:Menlo,Consolas,"Courier New",Courier,"Liberation Mono",monospace;margin:0 20px;padding:20px;text-shadow:none;border-radius:0 0 5px 5px;box-shadow:0 5px 30px rgba(0,0,0,0.3)}
|
||||
.quickstart-code .line{display:block;margin:0;padding:0}
|
||||
.quickstart-code .line span{display:inline-block}
|
||||
.quickstart-code .line .output{color:#aaaaaa;}
|
||||
.quickstart-code .path{color:#2a8fbd;user-select:none}
|
||||
.quickstart-code .prompt{color:#f90;user-select:none}
|
||||
.quickstart-code .command{color:#ffc}
|
||||
@@ -86,12 +87,12 @@
|
||||
<p class="line">
|
||||
<span class="path">~</span>
|
||||
<span class="prompt">$</span>
|
||||
<span class="command">wget https://raw.githubusercontent.com/progrium/dokku/v0.4.3/bootstrap.sh</span>
|
||||
<span class="command">wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh</span>
|
||||
</p>
|
||||
<p class="line">
|
||||
<span class="path">~</span>
|
||||
<span class="prompt">$</span>
|
||||
<span class="command">sudo DOKKU_TAG=v0.4.3 bash bootstrap.sh</span>
|
||||
<span class="command">sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh</span>
|
||||
</p>
|
||||
<p class="line">
|
||||
<span class="output"># => Go to your server's IP and follow the web installer</span>
|
||||
|
||||
@@ -15,12 +15,12 @@
|
||||
<p class="line">
|
||||
<span class="path">~</span>
|
||||
<span class="prompt">$</span>
|
||||
<span class="command">wget https://raw.githubusercontent.com/progrium/dokku/v0.4.3/bootstrap.sh</span>
|
||||
<span class="command">wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh</span>
|
||||
</p>
|
||||
<p class="line">
|
||||
<span class="path">~</span>
|
||||
<span class="prompt">$</span>
|
||||
<span class="command">sudo DOKKU_TAG=v0.4.3 bash bootstrap.sh</span>
|
||||
<span class="command">sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh</span>
|
||||
</p>
|
||||
<p class="line">
|
||||
<span class="output"># => Go to your server's IP and follow the web installer</span>
|
||||
|
||||
@@ -19,8 +19,8 @@ To install the latest stable version of dokku, you can run the following shell c
|
||||
|
||||
```shell
|
||||
# installs dokku via apt-get
|
||||
wget https://raw.githubusercontent.com/progrium/dokku/v0.4.3/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.4.3 bash bootstrap.sh
|
||||
wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh
|
||||
```
|
||||
|
||||
The installation process takes about 5-10 minutes, depending upon internet connection speed.
|
||||
@@ -34,7 +34,8 @@ Once you save your settings, the web admin will self-terminate and you should be
|
||||
For various reasons, certain hosting providers may have other steps that should be preferred to the above. If hosted on any of the following popular hosts, please follow the linked to instructions:
|
||||
|
||||
- [Digital Ocean Installation Notes](http://progrium.viewdocs.io/dokku/getting-started/install/digitalocean)
|
||||
- [Linode Installation Notes](http://progrium.viewdocs.io/dokku/getting-started/install/linode)
|
||||
- [Linode Installation Notes](http://progrium.viewdocs.io/dokku/getting-started/install/linode/)
|
||||
- [Microsoft Azure Installation Notes](http://progrium.viewdocs.io/dokku/getting-started/install/azure/)
|
||||
|
||||
As well, you may wish to customize your installation in some other fashion. or experiment with vagrant. The guides below should get you started:
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Nginx Configuration
|
||||
|
||||
Dokku uses nginx as it's 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
|
||||
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
|
||||
|
||||
```
|
||||
nginx:access-logs <app> [-t] Show the nginx access logs for an application (-t follows)
|
||||
@@ -22,7 +22,7 @@ Dokku currently templates out an nginx configuration that is included in the `ng
|
||||
- `nginx.conf.ssl_terminated.template` (since 0.4.0)
|
||||
- `nginx.ssl.conf.template` (since 0.4.2)
|
||||
|
||||
> If placed on disk on the dokku server, the template file **must** be owned by the user `dokku:dokku`.
|
||||
> If placed on the dokku server, the template file **must** be owned by user and group `dokku:dokku`.
|
||||
|
||||
For instance - assuming defaults - to customize the nginx template in use for the `myapp` application, create the file `nginx.conf.template` in your repo or on disk with the with the following contents:
|
||||
|
||||
@@ -70,7 +70,7 @@ The default nginx.conf- templates will include everything from your apps `nginx.
|
||||
include $DOKKU_ROOT/$APP/nginx.conf.d/*.conf;
|
||||
```
|
||||
|
||||
. That means you can put additional configuration in separate files, for example to limit the uploaded body size to 50 megabytes, do
|
||||
That means you can put additional configuration in separate files, for example to limit the uploaded body size to 50 megabytes, do
|
||||
|
||||
```shell
|
||||
mkdir /home/dokku/myapp/nginx.conf.d/
|
||||
|
||||
@@ -44,8 +44,9 @@ The following plugins are available and provided by dokku maintainers. Where not
|
||||
| [RabbitMQ (beta)](https://github.com/dokku/dokku-rabbitmq-plugin) | [dokku][] | 0.4.0+ |
|
||||
| [Redis (beta)](https://github.com/dokku/dokku-redis-plugin) | [dokku][] | 0.4.0+ |
|
||||
| [RethinkDB (beta)](https://github.com/dokku/dokku-rethinkdb-plugin) | [dokku][] | 0.4.0+ |
|
||||
| [Maintenance mode (beta)](https://github.com/dokku/dokku-maintenance) | [dokku][] | 0.4.0+ |
|
||||
| [Copy Files to Image](https://github.com/dokku/dokku-copyfiles-to-image) | [dokku][] | 0.4.0+ |
|
||||
| [HTTP Auth (beta)](https://github.com/dokku/dokku-http-auth) | [dokku][] | 0.4.0+ |
|
||||
| [Maintenance mode (beta)](https://github.com/dokku/dokku-maintenance) | [dokku][] | 0.4.0+ |
|
||||
| [Redirect (beta)](https://github.com/dokku/dokku-redirect) | [dokku][] | 0.4.0+ |
|
||||
|
||||
## Community plugins
|
||||
|
||||
@@ -18,7 +18,7 @@ in order to avoid ssh interpretting dokku arguments for itself.
|
||||
--quiet suppress output headers
|
||||
--trace enable DOKKU_TRACE for current execution only
|
||||
--rm|--rm-container remove docker container after successful dokku run <app> <command>
|
||||
--force force flag. currently used in apps:destroy
|
||||
--force force flag. currently used in apps:destroy and other ":destroy" commands
|
||||
```
|
||||
|
||||
## Clients
|
||||
|
||||
@@ -10,32 +10,31 @@
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400:sans-serif|Open+Sans:400:sans-serif" 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.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/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.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.rawgit.com/progrium/dokku/v0.4.4/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/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.rawgit.com/progrium/dokku/v0.4.3/docs/assets/style.css" rel="stylesheet">
|
||||
<link href="https://cdn.rawgit.com/progrium/dokku/v0.4.4/docs/assets/style.css" rel="stylesheet">
|
||||
<style>
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -46,7 +46,7 @@ The `remote rejected` error does not give enough information. Anything could hav
|
||||
To enable dokku tracing, simply run the following command:
|
||||
|
||||
# Since 0.3.9
|
||||
dokku trace
|
||||
dokku trace on
|
||||
|
||||
In versions older than 0.3.9, you can create a `/home/dokku/dokkurc` file containing the following :
|
||||
|
||||
|
||||
12
dokku
12
dokku
@@ -2,7 +2,15 @@
|
||||
set -eo pipefail
|
||||
shopt -s nullglob
|
||||
|
||||
export DOKKU_DISTRO=${DOKKU_DISTRO:="ubuntu"}
|
||||
case "$(lsb_release -si)" in
|
||||
Debian)
|
||||
export DOKKU_DISTRO=${DOKKU_DISTRO:="debian"}
|
||||
;;
|
||||
*)
|
||||
export DOKKU_DISTRO=${DOKKU_DISTRO:="ubuntu"}
|
||||
;;
|
||||
esac
|
||||
|
||||
export DOKKU_IMAGE=${DOKKU_IMAGE:="gliderlabs/herokuish"}
|
||||
export DOKKU_ROOT=${DOKKU_ROOT:=~dokku}
|
||||
export DOKKU_LIB_ROOT=${DOKKU_LIB_PATH:="/var/lib/dokku"}
|
||||
@@ -87,7 +95,7 @@ case "$1" in
|
||||
|
||||
DOKKU_DEFAULT_DOCKER_ARGS=$(: | plugn trigger docker-args-deploy $APP $IMAGE_TAG)
|
||||
|
||||
while read line || [[ -n "$line" ]]; do
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
TRIM=${line%#*}
|
||||
PROC_TYPE=${TRIM%%=*}
|
||||
PROC_COUNT=${TRIM#*=}
|
||||
|
||||
@@ -193,6 +193,7 @@ case "$1" in
|
||||
cat<<EOF
|
||||
ls, Pretty listing of deployed applications and containers
|
||||
run <app> <cmd>, Run a command in the environment of an application
|
||||
trace [on/off], Enable dokku tracing
|
||||
url <app>, Show the first URL for an application (compatibility)
|
||||
urls <app>, Show all URLs for an application
|
||||
version, Print dokku's version
|
||||
|
||||
@@ -25,7 +25,7 @@ end script
|
||||
EOF
|
||||
;;
|
||||
|
||||
opensuse)
|
||||
debian|opensuse)
|
||||
cat<<EOF > /etc/systemd/system/dokku-redeploy.service
|
||||
[Unit]
|
||||
Description=Dokku app redeploy service
|
||||
@@ -42,7 +42,7 @@ EOF
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
mkdir -p /etc/update-motd.d
|
||||
cat<<EOF > /etc/update-motd.d/99-dokku
|
||||
#!/bin/sh
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ case "$1" in
|
||||
events)
|
||||
if [[ -f $DOKKU_EVENTS_LOGFILE ]]; then
|
||||
if [[ $2 == "-t" ]]; then
|
||||
tail -f $DOKKU_EVENTS_LOGFILE
|
||||
tail -F $DOKKU_EVENTS_LOGFILE
|
||||
else
|
||||
tail -n 100 $DOKKU_EVENTS_LOGFILE
|
||||
fi
|
||||
|
||||
@@ -10,12 +10,26 @@ flag_rsyslog_needs_restart=n
|
||||
# This can be done unconditionally as mkdir -p
|
||||
# exits gracefully if the path already exists
|
||||
mkdir -m 775 -p "$DOKKU_LOGS_DIR"
|
||||
chown syslog:dokku "$DOKKU_LOGS_DIR"
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
chgrp dokku "$DOKKU_LOGS_DIR"
|
||||
;;
|
||||
*)
|
||||
chown syslog:dokku "$DOKKU_LOGS_DIR"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ ! -f "$DOKKU_EVENTS_LOGFILE" ]]; then
|
||||
touch "$DOKKU_EVENTS_LOGFILE"
|
||||
# chown syslog:root might not work on SUSE
|
||||
chown syslog:dokku "$DOKKU_EVENTS_LOGFILE"
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
chgrp dokku "$DOKKU_EVENTS_LOGFILE"
|
||||
;;
|
||||
*)
|
||||
# chown syslog:root might not work on SUSE
|
||||
chown syslog:dokku "$DOKKU_EVENTS_LOGFILE"
|
||||
;;
|
||||
esac
|
||||
chmod 664 "$DOKKU_EVENTS_LOGFILE"
|
||||
fi
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ case "$1" in
|
||||
dokku_log_warn "To proceed, type \"$APP\""
|
||||
echo ""
|
||||
|
||||
read -p "> " app_name
|
||||
read -rp "> " app_name
|
||||
if [[ "$app_name" != "$APP" ]]; then
|
||||
dokku_log_fail "Confirmation did not match $APP. Aborted."
|
||||
fi
|
||||
|
||||
@@ -3,7 +3,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
|
||||
APP="$1"; IMAGE_REPO=$(get_app_image_repo $APP)
|
||||
[[ -n $APP ]] && rm -rf "$DOKKU_ROOT/$APP" > /dev/null
|
||||
[[ -n $APP ]] && rm -rf "${DOKKU_ROOT:?}/$APP" > /dev/null
|
||||
|
||||
# remove all application containers & images
|
||||
# shellcheck disable=SC2046
|
||||
|
||||
@@ -72,7 +72,7 @@ case "$1" in
|
||||
fi
|
||||
|
||||
# create all the app directories
|
||||
while read app; do mkdir "$TARGET_DIR/$app"; echo "Imported $app"; done < $BACKUP_TMP_DIR/.dokku_backup_apps
|
||||
while read -r app; do mkdir "$TARGET_DIR/$app"; echo "Imported $app"; done < $BACKUP_TMP_DIR/.dokku_backup_apps
|
||||
|
||||
# have the plugins import their stuff
|
||||
plugn trigger backup-import $VERSION "$BACKUP_ROOT" $TARGET_DIR "$BACKUP_TMP_DIR/.dokku_backup_apps"
|
||||
|
||||
@@ -108,7 +108,7 @@ fi
|
||||
|
||||
# Reads name/value pairs, sets the WAIT and TIMEOUT variables
|
||||
exec < "$FILENAME"
|
||||
while read LINE; do
|
||||
while read -r LINE; do
|
||||
# Name/value pair
|
||||
if [[ "$LINE" =~ ^.+= ]]; then
|
||||
TRIM=${LINE%#*}
|
||||
@@ -143,7 +143,7 @@ do
|
||||
fi
|
||||
|
||||
exec < "$FILENAME"
|
||||
while read CHECK_URL EXPECTED; do
|
||||
while read -r CHECK_URL EXPECTED; do
|
||||
# Ignore empty lines and lines starting with #
|
||||
# shellcheck disable=SC1001
|
||||
[[ -z "$CHECK_URL" || "$CHECK_URL" =~ ^\# ]] && continue
|
||||
|
||||
@@ -10,16 +10,16 @@ has_tty() {
|
||||
}
|
||||
|
||||
dokku_log_info1() {
|
||||
echo "-----> $@"
|
||||
echo "-----> $*"
|
||||
}
|
||||
|
||||
dokku_log_info2() {
|
||||
echo "=====> $@"
|
||||
echo "=====> $*"
|
||||
}
|
||||
|
||||
dokku_log_info1_quiet() {
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
echo "-----> $@"
|
||||
echo "-----> $*"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
@@ -27,31 +27,31 @@ dokku_log_info1_quiet() {
|
||||
|
||||
dokku_log_info2_quiet() {
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
echo "=====> $@"
|
||||
echo "=====> $*"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
dokku_col_log_info1() {
|
||||
printf "%-25s %-25s %-25s %-25s\n" "-----> $@"
|
||||
printf "%-6s %-18s %-25s %-25s %-25s\n" "----->" "$@"
|
||||
}
|
||||
|
||||
dokku_col_log_info1_quiet() {
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
printf "%-25s %-25s %-25s %-25s\n" "-----> $@"
|
||||
printf "%-6s %-18s %-25s %-25s %-25s\n" "----->" "$@"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
dokku_col_log_info2() {
|
||||
printf "%-25s %-25s %-25s %-25s\n" "=====> $@"
|
||||
printf "%-6s %-18s %-25s %-25s %-25s\n" "=====>" "$@"
|
||||
}
|
||||
|
||||
dokku_col_log_info2_quiet() {
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
printf "%-25s %-25s %-25s %-25s\n" "=====> $@"
|
||||
printf "%-6s %-18s %-25s %-25s %-25s\n" "=====>" "$@"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
@@ -71,18 +71,18 @@ dokku_col_log_msg_quiet() {
|
||||
|
||||
dokku_log_verbose_quiet() {
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
echo " $@"
|
||||
echo " $*"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
dokku_log_verbose() {
|
||||
echo " $@"
|
||||
echo " $*"
|
||||
}
|
||||
|
||||
dokku_log_warn() {
|
||||
echo " ! $@"
|
||||
echo " ! $*"
|
||||
}
|
||||
|
||||
dokku_log_fail() {
|
||||
@@ -98,7 +98,7 @@ dokku_log_plugn_trigger_call() {
|
||||
local l_hook
|
||||
|
||||
l_hook="$1" ; shift
|
||||
dokku_log_event "INVOKED: ${l_hook}( $@ ) NAME=$NAME FINGERPRINT=$FINGERPRINT"
|
||||
dokku_log_event "INVOKED: ${l_hook}( $* ) NAME=$NAME FINGERPRINT=$FINGERPRINT"
|
||||
}
|
||||
|
||||
dokku_container_log_verbose_quiet() {
|
||||
|
||||
@@ -28,7 +28,7 @@ verify_phase() {
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
dokku_log_fail "Phase(s) must be one of [${phases[@]}]"
|
||||
dokku_log_fail "Phase(s) must be one of [${phases[*]}]"
|
||||
}
|
||||
|
||||
get_phase_file_path() {
|
||||
|
||||
@@ -24,7 +24,7 @@ output=""
|
||||
if [[ -f "$PHASE_FILE_PATH" ]]; then
|
||||
DONE=false
|
||||
until $DONE; do
|
||||
read line || DONE=true
|
||||
read -r line || DONE=true
|
||||
|
||||
[[ ! -n "$line" ]] && continue
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ IMPORT_DIR="$2"
|
||||
TARGET_DIR="$3"
|
||||
APPS="$4"
|
||||
|
||||
while read APP; do
|
||||
while read -r APP; do
|
||||
APP_PATH="$TARGET_DIR/$APP";
|
||||
git init --bare $APP_PATH > /dev/null
|
||||
PRERECEIVE_HOOK="$APP_PATH/hooks/pre-receive"
|
||||
|
||||
@@ -21,10 +21,10 @@ git_build_app_repo() {
|
||||
find -name .git -prune -exec rm -rf {} \; > /dev/null
|
||||
|
||||
if [[ -f Dockerfile ]] && [[ "$([[ -f .env ]] && grep -q BUILDPACK_URL .env; echo $?)" != "0" ]] && [[ ! -f ".buildpacks" ]]; then
|
||||
plugn trigger pre-receive-app "$APP" "dockerfile" "$TMP_WORK_DIR"
|
||||
plugn trigger pre-receive-app "$APP" "dockerfile" "$TMP_WORK_DIR" "$REV"
|
||||
dokku receive "$APP" "dockerfile" "$TMP_WORK_DIR" | sed -u "s/^/"$'\e[1G'"/"
|
||||
else
|
||||
plugn trigger pre-receive-app "$APP" "herokuish" "$TMP_WORK_DIR"
|
||||
plugn trigger pre-receive-app "$APP" "herokuish" "$TMP_WORK_DIR" "$REV"
|
||||
dokku receive "$APP" "herokuish" "$TMP_WORK_DIR" | sed -u "s/^/"$'\e[1G'"/"
|
||||
fi
|
||||
}
|
||||
@@ -33,7 +33,7 @@ case "$1" in
|
||||
git-hook)
|
||||
APP=$2
|
||||
|
||||
while read oldrev newrev refname; do
|
||||
while read -r oldrev newrev refname; do
|
||||
# Only run this script for the master branch. You can remove this
|
||||
# if block if you wish to run it for others as well.
|
||||
if [[ $refname = "refs/heads/master" ]]; then
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$(dirname "$0")/functions"
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/nginx-vhosts/functions"
|
||||
@@ -11,34 +12,63 @@ case "$1" in
|
||||
APP_ROOT="$DOKKU_ROOT/$APP"
|
||||
COLORS=(36 33 32 35 31)
|
||||
|
||||
if (is_deployed "$APP"); then
|
||||
CONTAINERS=("$APP_ROOT"/CONTAINER.*)
|
||||
if [[ $3 == "-t" ]]; then
|
||||
DOKKU_LOGS_ARGS="--follow --tail 100"
|
||||
else
|
||||
DOKKU_LOGS_ARGS="--tail 100"
|
||||
fi
|
||||
((MAX_INDEX=${#CONTAINERS[*]} - 1)) || true
|
||||
for i in ${!CONTAINERS[*]}; do
|
||||
DYNO=$(echo "${CONTAINERS[i]}" | sed -r 's/.*CONTAINER\.(.*)/\1/')
|
||||
CID=$(< "${CONTAINERS[i]}")
|
||||
COLOR=${COLORS[i % ${#COLORS[*]}]}
|
||||
DOKKU_LOGS_CMD+="(docker logs -t $DOKKU_LOGS_ARGS $CID 2>&1 | sed -r 's/^([^Z]+Z )/\x1b[${COLOR}m\1$APP[$DYNO]:\x1b[0m /gm')"
|
||||
if [[ $i != "$MAX_INDEX" ]]; then
|
||||
DOKKU_LOGS_CMD+="& "
|
||||
else
|
||||
DOKKU_LOGS_CMD+="; "
|
||||
fi
|
||||
done
|
||||
bash -c "($DOKKU_LOGS_CMD)"
|
||||
else
|
||||
if ! (is_deployed "$APP"); then
|
||||
echo "Application's container not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
shift 2;
|
||||
TEMP=$(getopt -o htqn:p: --long help,tail,quiet,num:,ps: -n 'dokku logs' -- "$@")
|
||||
if [[ $? != 0 ]]; then usage >&2 ; exit 1 ; fi
|
||||
eval set -- "$TEMP"
|
||||
|
||||
DOKKU_LOGS_LINE_NUMBERS="100"
|
||||
while true; do
|
||||
case "$1" in
|
||||
-t|--tail) DOKKU_LOGS_ARGS+="--follow "; shift ;;
|
||||
-n|--num) DOKKU_LOGS_LINE_NUMBERS="$2"; shift 2 ;;
|
||||
-p|--ps) DOKKU_LOGS_ONLY_PROCESS="$2"; shift 2 ;;
|
||||
-q|--quiet) DOKKU_LOGS_NO_PRETTY_PRINT="true"; shift ;;
|
||||
--) shift; break ;;
|
||||
*) echo "Internal error"; exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -n $DOKKU_LOGS_ONLY_PROCESS ]]; then
|
||||
CONTAINERS=("$APP_ROOT/CONTAINER.$DOKKU_LOGS_ONLY_PROCESS".*)
|
||||
else
|
||||
CONTAINERS=("$APP_ROOT"/CONTAINER.*)
|
||||
fi
|
||||
[[ -z $(stat -t "${CONTAINERS[0]}" 2>/dev/null) ]] && exit 0
|
||||
|
||||
DOKKU_LOGS_ARGS+="--tail $DOKKU_LOGS_LINE_NUMBERS"
|
||||
((MAX_INDEX=${#CONTAINERS[*]} - 1)) || true
|
||||
for i in ${!CONTAINERS[*]}; do
|
||||
DYNO=$(echo "${CONTAINERS[i]}" | sed -r 's/.*CONTAINER\.(.*)/\1/')
|
||||
CID=$(< "${CONTAINERS[i]}")
|
||||
COLOR=${COLORS[i % ${#COLORS[*]}]}
|
||||
if [[ $DOKKU_LOGS_NO_PRETTY_PRINT == "true" ]]; then
|
||||
DOKKU_LOGS_CMD+="(docker logs $DOKKU_LOGS_ARGS $CID 2>&1)"
|
||||
else
|
||||
DOKKU_LOGS_PRETTY_PRINT_CMD="sed -r 's/^([^Z]+Z )/\x1b[${COLOR}m\1app[$DYNO]:\x1b[0m /gm'"
|
||||
DOKKU_LOGS_CMD+="(docker logs -t $DOKKU_LOGS_ARGS $CID 2>&1 | $DOKKU_LOGS_PRETTY_PRINT_CMD)"
|
||||
fi
|
||||
if [[ $i != "$MAX_INDEX" ]]; then
|
||||
DOKKU_LOGS_CMD+="& "
|
||||
else
|
||||
DOKKU_LOGS_CMD+="; "
|
||||
fi
|
||||
done
|
||||
bash -c "($DOKKU_LOGS_CMD)"
|
||||
;;
|
||||
|
||||
logs:help)
|
||||
usage
|
||||
;;
|
||||
|
||||
help)
|
||||
cat<<EOF
|
||||
logs <app> [-t], Show the last logs for an application (-t follows)
|
||||
logs <app> [-h] [-t] [-n num] [-q] [-p process], Show the last logs for an application
|
||||
EOF
|
||||
;;
|
||||
|
||||
|
||||
12
plugins/logs/functions
Executable file
12
plugins/logs/functions
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
usage() {
|
||||
echo "Usage: dokku logs <app>"
|
||||
echo " display recent log output"
|
||||
echo ""
|
||||
echo " -n, --num NUM # the number of lines to display"
|
||||
echo " -p, --ps PS # only display logs from the given process"
|
||||
echo " -t, --tail # continually stream logs"
|
||||
echo " -q, --quiet # display raw logs without colors, time and names"
|
||||
}
|
||||
@@ -2,6 +2,11 @@
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get install -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes -qq -y nginx dnsutils
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
[[ -z "$CIRCLECI" ]] && apt-get install -qq -y software-properties-common python-software-properties
|
||||
|
||||
@@ -114,6 +114,10 @@ validate_nginx() {
|
||||
|
||||
restart_nginx() {
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
sudo /usr/sbin/invoke-rc.d nginx reload > /dev/null
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
sudo /etc/init.d/nginx reload > /dev/null
|
||||
;;
|
||||
@@ -141,7 +145,7 @@ nginx_build_config() {
|
||||
if [[ -z "$DOKKU_APP_LISTEN_PORT" ]] && [[ -z "$DOKKU_APP_LISTEN_IP" ]]; then
|
||||
shopt -s nullglob
|
||||
for DOKKU_APP_IP_FILE in $DOKKU_ROOT/$APP/IP.web.*; do
|
||||
DOKKU_APP_PORT_FILE=$(echo $DOKKU_APP_IP_FILE | sed -e "s:IP:PORT:g")
|
||||
DOKKU_APP_PORT_FILE="${DOKKU_APP_IP_FILE//IP/PORT}"
|
||||
DOKKU_APP_LISTENER_IP=$(< $DOKKU_APP_IP_FILE)
|
||||
DOKKU_APP_LISTENER_PORT=$(< $DOKKU_APP_PORT_FILE)
|
||||
|
||||
@@ -229,7 +233,7 @@ EOF
|
||||
local NGINX_SSL_PORT=$DOKKU_NGINX_SSL_PORT
|
||||
fi
|
||||
|
||||
while read line; do
|
||||
while read -r line; do
|
||||
[[ -z "$line" ]] && continue
|
||||
dokku_log_info1 "Configuring SSL for $line..."
|
||||
SSL_SERVER_NAME=$line
|
||||
@@ -250,6 +254,7 @@ EOF
|
||||
eval "cat <<< \"$(< $NGINX_TEMPLATE)\" >> $NGINX_CONF"
|
||||
fi
|
||||
if [[ "$(is_app_vhost_enabled $APP)" == "false" ]] || ([[ -z "$NONSSL_VHOSTS" ]] && [[ -z "$SSL_VHOSTS" ]]); then
|
||||
eval "cat <<< \"$(< $NGINX_TEMPLATE)\" >> $NGINX_CONF"
|
||||
sed --in-place -n -e '/^.*server_name.*$/!p' $NGINX_CONF
|
||||
fi
|
||||
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
echo "%dokku ALL=(ALL) NOPASSWD:/usr/sbin/invoke-rc.d nginx reload, /usr/sbin/nginx -t" > /etc/sudoers.d/dokku-nginx
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
echo "%dokku ALL=(ALL) NOPASSWD:/etc/init.d/nginx reload, /usr/sbin/nginx -t" > /etc/sudoers.d/dokku-nginx
|
||||
;;
|
||||
@@ -33,7 +37,7 @@ fi
|
||||
echo 'server_names_hash_bucket_size 512;' >| /etc/nginx/conf.d/server_names_hash_bucket_size.conf
|
||||
|
||||
# make sure dokku can read the default log dir
|
||||
gpasswd -M "$(egrep ^adm /etc/group | awk -F ":" '{ print $4 }')" dokku
|
||||
gpasswd -M "$(egrep ^adm: /etc/group | awk -F ":" '{ print $4 }')" dokku
|
||||
chgrp -R dokku /var/log/nginx
|
||||
chmod g+r /var/log/nginx
|
||||
|
||||
@@ -41,6 +45,10 @@ chmod g+r /var/log/nginx
|
||||
[[ -f /etc/logrotate.d/nginx ]] && sed -i -e 's/invoke-rc.d/service/g' /etc/logrotate.d/nginx
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
/usr/sbin/invoke-rc.d nginx start
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
/etc/init.d/nginx start
|
||||
;;
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
sudo /usr/sbin/invoke-rc.d nginx reload > /dev/null
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
sudo /etc/init.d/nginx reload > /dev/null
|
||||
;;
|
||||
|
||||
@@ -15,7 +15,7 @@ case "$1" in
|
||||
[[ "$#" -gt 2 ]] && dokku_log_info1_quiet "Cannot install additional core plugins, running core plugin install trigger"
|
||||
PLUGIN_PATH="$PLUGIN_CORE_PATH" plugn trigger install
|
||||
;;
|
||||
https:*|git:*)
|
||||
https:*|git:*|ssh:*)
|
||||
PLUGIN_GIT_URL="$2"
|
||||
download_and_enable_plugin "$PLUGIN_GIT_URL" "$3"
|
||||
plugn trigger install
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
[[ " ps ps:start ps:stop ps:rebuild ps:rebuildall ps:restart ps:restartall ps:scale help ps:help " == *" $1 "* ]] || exit $DOKKU_NOT_IMPLEMENTED_EXIT
|
||||
[[ " ps ps:start ps:stop ps:rebuild ps:rebuildall ps:restart ps:restartall ps:restore ps:scale help ps:help " == *" $1 "* ]] || exit $DOKKU_NOT_IMPLEMENTED_EXIT
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/ps/functions"
|
||||
@@ -41,6 +41,7 @@ case "$1" in
|
||||
if [[ -n "$DOKKU_APP_RUNNING_CONTAINER_IDS" ]]; then
|
||||
echo "Stopping $APP ..."
|
||||
docker stop $DOKKU_APP_RUNNING_CONTAINER_IDS > /dev/null || true
|
||||
plugn trigger post-stop $APP
|
||||
else
|
||||
echo "App $APP already stopped"
|
||||
fi
|
||||
@@ -83,6 +84,20 @@ case "$1" in
|
||||
shopt -u nullglob
|
||||
;;
|
||||
|
||||
ps:restore)
|
||||
shopt -s nullglob
|
||||
for app in $DOKKU_ROOT/*; do
|
||||
[[ ! -d $app ]] && continue
|
||||
APP=$(basename $app)
|
||||
DOKKU_APP_RESTORE=$(dokku config:get $APP DOKKU_APP_RESTORE || true)
|
||||
if [[ $DOKKU_APP_RESTORE != 0 ]]; then
|
||||
echo "Restoring app $APP ..."
|
||||
dokku ps:start $APP
|
||||
fi
|
||||
done
|
||||
shopt -u nullglob
|
||||
;;
|
||||
|
||||
ps:scale)
|
||||
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
APP="$2"; IMAGE_TAG=$(get_running_image_tag $APP)
|
||||
@@ -96,7 +111,7 @@ case "$1" in
|
||||
dokku_log_info1_quiet "Scaling for $APP"
|
||||
dokku_col_log_info1_quiet "proctype" "qty"
|
||||
dokku_col_log_info1_quiet "--------" "---"
|
||||
while read line || [[ -n "$line" ]]; do
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
[[ -z "$line" ]] && continue
|
||||
PROC_NAME=${line%%=*}
|
||||
PROC_COUNT=${line#*=}
|
||||
@@ -118,6 +133,7 @@ case "$1" in
|
||||
ps:rebuildall, Rebuild all apps
|
||||
ps:restart <app>, Restart app container(s)
|
||||
ps:restartall, Restart all deployed app containers
|
||||
ps:restore, Start previously running apps e.g. after reboot
|
||||
EOF
|
||||
;;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
|
||||
print_dokku_scale_file() {
|
||||
local APP="$1"; local DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE"
|
||||
while read line || [[ -n "$line" ]]; do
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
dokku_log_info2_quiet "$line"
|
||||
done < "$DOKKU_SCALE_FILE"
|
||||
}
|
||||
@@ -25,7 +25,7 @@ generate_scale_file() {
|
||||
if [[ ! -e "$PROCFILE" ]]; then
|
||||
echo "web=1" >> $DOKKU_SCALE_FILE
|
||||
else
|
||||
while read line || [[ -n "$line" ]]; do
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
[[ -z "$line" ]] && continue
|
||||
NAME=${line%%:*}
|
||||
NUM_PROCS=0
|
||||
|
||||
8
plugins/ps/post-deploy
Executable file
8
plugins/ps/post-deploy
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/ps/functions"
|
||||
|
||||
APP="$1"
|
||||
|
||||
dokku config:set --no-restart $APP DOKKU_APP_RESTORE=1
|
||||
8
plugins/ps/post-stop
Executable file
8
plugins/ps/post-stop
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/ps/functions"
|
||||
|
||||
APP="$1"
|
||||
|
||||
dokku config:set --no-restart $APP DOKKU_APP_RESTORE=0
|
||||
@@ -18,7 +18,7 @@ case "$1" in
|
||||
|
||||
while true; do
|
||||
trap '' SIGINT
|
||||
read -ep "dokku> " line || {
|
||||
read -rep "dokku> " line || {
|
||||
echo; true; break
|
||||
}
|
||||
trap - SIGINT
|
||||
|
||||
24
tests.mk
24
tests.mk
@@ -1,10 +1,12 @@
|
||||
SYSTEM := $(shell sh -c 'uname -s 2>/dev/null')
|
||||
|
||||
shellcheck:
|
||||
ifeq ($(shell shellcheck > /dev/null 2>&1 ; echo $$?),127)
|
||||
ifeq ($(shell uname),Darwin)
|
||||
brew install shellcheck
|
||||
ifneq ($(shell shellcheck --version > /dev/null 2>&1 ; echo $$?),0)
|
||||
ifeq ($(SYSTEM),Darwin)
|
||||
brew install shellcheck
|
||||
else
|
||||
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse'
|
||||
sudo apt-get update && sudo apt-get install -y shellcheck
|
||||
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse'
|
||||
sudo apt-get update && sudo apt-get install -y shellcheck
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -53,19 +55,23 @@ ifeq ($(shell grep dokku.me /home/dokku/VHOST 2>/dev/null),)
|
||||
endif
|
||||
|
||||
bats:
|
||||
ifneq ($(shell bats --version > /dev/null 2>&1 ; echo $$?),0)
|
||||
ifeq ($(SYSTEM),Darwin)
|
||||
brew install bats
|
||||
else
|
||||
git clone https://github.com/sstephenson/bats.git /tmp/bats
|
||||
cd /tmp/bats && sudo ./install.sh /usr/local
|
||||
rm -rf /tmp/bats
|
||||
endif
|
||||
endif
|
||||
|
||||
lint:
|
||||
# these are disabled due to their expansive existence in the codebase. we should clean it up though
|
||||
# SC2034: VAR appears unused - https://github.com/koalaman/shellcheck/wiki/SC2034
|
||||
# SC2086: Double quote to prevent globbing and word splitting - https://github.com/koalaman/shellcheck/wiki/SC2086
|
||||
# SC2143: Instead of [ -n $(foo | grep bar) ], use foo | grep -q bar - https://github.com/koalaman/shellcheck/wiki/SC2143
|
||||
# SC2001: See if you can use ${variable//search/replace} instead. - https://github.com/koalaman/shellcheck/wiki/SC2001
|
||||
@echo linting...
|
||||
@$(QUIET) shellcheck -e SC2029 ./contrib/dokku_client.sh
|
||||
@$(QUIET) find . -not -path '*/\.*' | xargs file | egrep "shell|bash" | egrep -v "directory|toml" | awk '{ print $$1 }' | sed 's/://g' | grep -v dokku_client.sh | xargs shellcheck -e SC2034,SC2086,SC2143,SC2001
|
||||
@$(QUIET) shellcheck ./contrib/dokku_client.sh
|
||||
@$(QUIET) find . -not -path '*/\.*' | xargs file | egrep "shell|bash" | egrep -v "directory|toml" | awk '{ print $$1 }' | sed 's/://g' | grep -v dokku_client.sh | xargs shellcheck -e SC2034,SC2086
|
||||
|
||||
unit-tests:
|
||||
@echo running unit tests...
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e; sleep 5; output="$(curl -s -S $1)"; echo $output; test "$output" == "Hello World!"
|
||||
|
||||
@@ -19,6 +19,8 @@ flunk() {
|
||||
return 1
|
||||
}
|
||||
|
||||
# ShellCheck doesn't know about $status from Bats
|
||||
# shellcheck disable=SC2154
|
||||
assert_success() {
|
||||
if [[ "$status" -ne 0 ]]; then
|
||||
flunk "command failed with exit status $status"
|
||||
@@ -43,6 +45,8 @@ assert_equal() {
|
||||
fi
|
||||
}
|
||||
|
||||
# ShellCheck doesn't know about $output from Bats
|
||||
# shellcheck disable=SC2154
|
||||
assert_output() {
|
||||
local expected
|
||||
if [[ $# -eq 0 ]]; then
|
||||
@@ -53,6 +57,8 @@ assert_output() {
|
||||
assert_equal "$expected" "$output"
|
||||
}
|
||||
|
||||
# ShellCheck doesn't know about $lines from Bats
|
||||
# shellcheck disable=SC2154
|
||||
assert_line() {
|
||||
if [[ "$1" -ge 0 ]] 2>/dev/null; then
|
||||
assert_equal "$2" "${lines[$1]}"
|
||||
@@ -112,7 +118,7 @@ deploy_app() {
|
||||
GIT_REMOTE="$2"; GIT_REMOTE=${GIT_REMOTE:="dokku@dokku.me:$TEST_APP"}
|
||||
TMP=$(mktemp -d -t "dokku.me.XXXXX")
|
||||
rmdir $TMP && cp -r ./tests/apps/$APP_TYPE $TMP
|
||||
cd $TMP
|
||||
cd $TMP || exit 1
|
||||
git init
|
||||
git config user.email "robot@example.com"
|
||||
git config user.name "Test Robot"
|
||||
@@ -128,7 +134,7 @@ deploy_app() {
|
||||
setup_client_repo() {
|
||||
TMP=$(mktemp -d -t "dokku.me.XXXXX")
|
||||
rmdir $TMP && cp -r ./tests/apps/nodejs-express $TMP
|
||||
cd $TMP
|
||||
cd $TMP || exit 1
|
||||
git init
|
||||
git config user.email "robot@example.com"
|
||||
git config user.name "Test Robot"
|
||||
|
||||
Reference in New Issue
Block a user