mirror of
https://github.com/dokku/dokku.git
synced 2025-12-15 19:47:42 +01:00
This will help users have more seamless upgrades in the future in cases where docker is restarted.
182 lines
5.5 KiB
Bash
Executable File
182 lines
5.5 KiB
Bash
Executable File
#!/bin/bash
|
|
set -eo pipefail
|
|
[[ $TRACE ]] && set -x
|
|
|
|
if [[ -e /usr/share/debconf/confmodule ]]; then
|
|
. /usr/share/debconf/confmodule
|
|
fi
|
|
|
|
if [[ -r /etc/default/dokku ]]; then
|
|
source /etc/default/dokku
|
|
fi
|
|
|
|
readonly DOKKU_ROOT="${DOKKU_ROOT:-/home/dokku}"
|
|
readonly DOKKU_LIB_ROOT="${DOKKU_LIB_PATH:-/var/lib/dokku}"
|
|
|
|
call-sshcommand() {
|
|
if [[ -x /usr/local/bin/sshcommand ]]; then
|
|
/usr/local/bin/sshcommand "$@"
|
|
elif [[ -x /usr/bin/sshcommand ]]; then
|
|
/usr/bin/sshcommand "$@"
|
|
else
|
|
echo "Unable to find sshcommand binary" 1>&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
setup-docker-live-restore() {
|
|
# skip if running in docker-based installation
|
|
if [[ "$DOKKU_INIT_SYSTEM" == "sv" ]]; then
|
|
return
|
|
fi
|
|
|
|
# allow disabling via /etc/default/dokku
|
|
if [[ "$DOKKU_LIVE_RESTORE" == "false" ]]; then
|
|
return
|
|
fi
|
|
|
|
live_restore="$(docker info --format '{{ .LiveRestoreEnabled }}' || true)"
|
|
if [ "$live_restore" = "true" ]; then
|
|
echo "Docker live-restore is already enabled"
|
|
return
|
|
fi
|
|
|
|
echo "Enabling docker live-restore"
|
|
if [[ ! -f /etc/docker/daemon.json ]]; then
|
|
echo "{}" >/etc/docker/daemon.json
|
|
fi
|
|
|
|
config="$(jq '. + {"live-restore": true}' /etc/docker/daemon.json)"
|
|
echo "$config" >/etc/docker/daemon.json
|
|
if command -v systemctl &>/dev/null; then
|
|
if ! systemctl reload docker; then
|
|
echo "Unable to reload docker, please reload manually" 1>&2
|
|
fi
|
|
else
|
|
echo "Unable to reload docker, please reload manually" 1>&2
|
|
fi
|
|
}
|
|
|
|
setup-user() {
|
|
echo "Setting up dokku user"
|
|
call-sshcommand create dokku /usr/bin/dokku
|
|
grep -i -E "^docker" /etc/group || groupadd docker
|
|
usermod -aG docker dokku
|
|
mkdir -p "$DOKKU_ROOT/.ssh" "$DOKKU_ROOT/.dokkurc"
|
|
touch "$DOKKU_ROOT/.ssh/authorized_keys"
|
|
chown -R dokku:dokku "$DOKKU_ROOT/.ssh" "${DOKKU_ROOT}/.dokkurc"
|
|
}
|
|
|
|
setup-storage() {
|
|
echo "Setting up storage directories"
|
|
mkdir -p "${DOKKU_LIB_ROOT}/data" "${DOKKU_LIB_ROOT}/data/storage"
|
|
chown dokku:dokku "${DOKKU_LIB_ROOT}/data"
|
|
}
|
|
|
|
setup-plugins() {
|
|
echo "Deleting invalid plugins"
|
|
if [ -f "${DOKKU_LIB_ROOT}/core-plugins/available/" ]; then
|
|
find "${DOKKU_LIB_ROOT}/core-plugins/available/" -type d -empty -delete
|
|
fi
|
|
if [ -f "${DOKKU_LIB_ROOT}/core-plugins/enabled/" ]; then
|
|
find "${DOKKU_LIB_ROOT}/core-plugins/enabled/" -type d -empty -delete
|
|
fi
|
|
if [ -f "${DOKKU_LIB_ROOT}/plugins/available/" ]; then
|
|
find "${DOKKU_LIB_ROOT}/plugins/available/" -type d -empty -delete
|
|
fi
|
|
if [ -f "${DOKKU_LIB_ROOT}/plugins/enabled/" ]; then
|
|
find "${DOKKU_LIB_ROOT}/plugins/enabled/" -type d -empty -delete
|
|
fi
|
|
|
|
echo "Setting up plugin directories"
|
|
# should be replaced by `plugn init`
|
|
mkdir -p "${DOKKU_LIB_ROOT}/core-plugins/available" "${DOKKU_LIB_ROOT}/plugins/available"
|
|
mkdir -p "${DOKKU_LIB_ROOT}/core-plugins/enabled" "${DOKKU_LIB_ROOT}/plugins/enabled"
|
|
touch "${DOKKU_LIB_ROOT}/core-plugins/config.toml" "${DOKKU_LIB_ROOT}/plugins/config.toml"
|
|
|
|
echo "Migrating old plugins"
|
|
find ${DOKKU_LIB_ROOT}/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
|
if [ "$plugin" = "available" ] || [ "$plugin" = "enabled" ]; then
|
|
continue
|
|
elif [ -f ${DOKKU_LIB_ROOT}/plugins/$plugin/.core ]; then
|
|
rm -rf ${DOKKU_LIB_ROOT}/plugins/$plugin
|
|
elif [ ! -d ${DOKKU_LIB_ROOT}/plugins/available/$plugin ]; then
|
|
mv ${DOKKU_LIB_ROOT}/plugins/$plugin ${DOKKU_LIB_ROOT}/plugins/available
|
|
fi
|
|
done
|
|
|
|
db_get "dokku/nginx_enable"
|
|
echo "Enabling all core plugins"
|
|
find "${DOKKU_LIB_ROOT}/core-plugins/available" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
|
if [ "$plugin" = "nginx-vhosts" ] && [ "$RET" = "false" ]; then
|
|
echo "Skipping enable of nginx-vhosts plugin"
|
|
continue
|
|
elif [ ! -d "${DOKKU_LIB_ROOT}/plugins/available/$plugin" ]; then
|
|
ln -s "${DOKKU_LIB_ROOT}/core-plugins/available/$plugin" "${DOKKU_LIB_ROOT}/plugins/available/$plugin"
|
|
PLUGIN_PATH="${DOKKU_LIB_ROOT}/core-plugins" plugn enable "$plugin"
|
|
PLUGIN_PATH="${DOKKU_LIB_ROOT}/plugins" plugn enable "$plugin"
|
|
fi
|
|
done
|
|
find -L "${DOKKU_LIB_ROOT}/core-plugins" -type l -delete
|
|
find -L "${DOKKU_LIB_ROOT}/plugins" -type l -delete
|
|
chown dokku:dokku -R "${DOKKU_LIB_ROOT}/plugins" "${DOKKU_LIB_ROOT}/core-plugins"
|
|
|
|
echo "Install all core plugins"
|
|
dokku plugin:install --core
|
|
}
|
|
|
|
setup-sshcommand() {
|
|
echo "Ensure proper sshcommand path"
|
|
echo '/usr/bin/dokku' >"${DOKKU_ROOT}/.sshcommand"
|
|
if [[ -f .ssh/authorized_keys ]]; then
|
|
sed -i.bak 's#/usr/local/bin/dokku#/usr/bin/dokku#' "${DOKKU_ROOT}/.ssh/authorized_keys"
|
|
rm "${DOKKU_ROOT}/.ssh/authorized_keys"
|
|
fi
|
|
}
|
|
|
|
dpkg-handling() {
|
|
if [ -f "${DOKKU_ROOT}/VHOST" ]; then
|
|
echo "VHOST file detected, skipping modification"
|
|
else
|
|
db_get "dokku/vhost_enable"
|
|
if [ "$RET" = "true" ]; then
|
|
db_get "dokku/hostname"
|
|
echo "Setting VHOST contents to $RET"
|
|
echo "$RET" >"${DOKKU_ROOT}/VHOST"
|
|
chown dokku:dokku "${DOKKU_ROOT}/VHOST"
|
|
fi
|
|
fi
|
|
|
|
if [ -z "${DEBCONF_RECONFIGURE}" ]; then
|
|
db_get "dokku/key_file"
|
|
if [ -f "$RET" ]; then
|
|
call-sshcommand acl-add dokku default <"$RET" || true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
abort-upgrade | abort-remove | abort-deconfigure) ;;
|
|
|
|
configure)
|
|
mandb
|
|
[ ! -x /usr/bin/docker.io ] || ln -sf /usr/bin/docker.io /usr/local/bin/docker
|
|
|
|
setup-user
|
|
setup-storage
|
|
|
|
dpkg-handling
|
|
setup-plugins
|
|
setup-sshcommand
|
|
setup-docker-live-restore
|
|
;;
|
|
|
|
*)
|
|
echo "postinst called with unknown argument \`$1'" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
db_stop
|
|
exit 0
|