#!/bin/bash readonly DOKKU_ROOT="${DOKKU_ROOT:-/home/dokku}" readonly DOKKU_LIB_ROOT="${DOKKU_LIB_PATH:-/var/lib/dokku}" readonly DOKKU_LOGS_DIR="${DOKKU_LOGS_DIR:-/var/log/dokku}" setup-user() { echo "Setting up dokku user" /usr/bin/sshcommand create dokku /usr/bin/dokku (grep -i -E "^docker" /etc/group || groupadd docker) &>/dev/null 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 "Setting up plugin directories" 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 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 [ ! -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}" -type l -delete chown dokku:dokku -R "${DOKKU_LIB_ROOT}/plugins" "${DOKKU_LIB_ROOT}/core-plugins" echo "Install all core plugins" # dokku plugin:install-dependencies --core # Disabled since not usefull and pacman lock error dokku plugin:install --core rm -f /etc/update-motd.d/99-dokku sed -i 's/ syslog dokku$/ root dokku/g' /etc/logrotate.d/dokku } 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 } post_install() { setup-user setup-storage setup-plugins setup-sshcommand echo "Update version file" rm -f "${DOKKU_ROOT}/VERSION" cp "${DOKKU_LIB_ROOT}/VERSION" "${DOKKU_ROOT}/VERSION" echo "Update hostname" hostname -f > "${DOKKU_ROOT}/HOSTNAME" echo " Please add your ssh pubkey like: $ cat ~/.ssh/id_rsa.pub | sudo sshcommand acl-add dokku default To enable nginx autoconfiguration, add to your /etc/nginx/nginx.conf in http section: include /etc/nginx/conf.d/*.conf; And reload nginx: $ sudo systemctl reload nginx " } post_upgrade() { post_install "$1" } pre_remove() { echo "Destroying deployed applications" for app in $(DOKKU_QUIET_OUTPUT=1 dokku apps); do dokku --force apps:destroy "${app}" done dokku cleanup } post_remove() { rm -f /var/cache/dokku-completion rm -f /etc/systemd/system/dokku-redeploy.service rm -f /etc/systemd/system/dokku-retire.timer rm -f /etc/systemd/system/dokku-retire.service rm -f /etc/logrotate.d/dokku # Remove nginx configuration rm -f /etc/nginx/conf.d/dokku.conf # Remove data and logs rm -rf "${DOKKU_LIB_ROOT}" rm -rf "${DOKKU_LOGS_DIR}" # Remove dokku user and group userdel -r dokku &>/dev/null groupdel dokku &>/dev/null echo " Please remove to your /etc/nginx/nginx.conf in http section: include /etc/nginx/conf.d/*.conf; And reload nginx: $ sudo systemctl reload nginx " }