summarylogtreecommitdiffstats
path: root/dokku.install
blob: fc2a0ae0b3f8992fe6a455388a99c19bcd8a95a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/sh
post_install() {
  DOKKU_ROOT="/home/dokku"
  DOKKU_LIB_ROOT="/var/lib/dokku"

  echo "Create dokku user"
  sshcommand create dokku /usr/bin/dokku &>/dev/null

  echo "Add dokku user to docker group"
  (egrep -i "^docker" /etc/group || groupadd docker) &>/dev/null
  usermod -aG docker dokku

  echo "Setting up storage directories"
  mkdir -p "$DOKKU_LIB_ROOT/data/storage"
  chown dokku:dokku "$DOKKU_LIB_ROOT/data" "$DOKKU_LIB_ROOT/data/storage"

  echo "Setting up plugin directories"
  # should be replaced by `plugn init`
  mkdir -p "$DOKKU_LIB_ROOT/core-plugins/available"
  mkdir -p "$DOKKU_LIB_ROOT/plugins/available"
  mkdir -p "$DOKKU_LIB_ROOT/core-plugins/enabled"
  mkdir -p "$DOKKU_LIB_ROOT/plugins/enabled"
  touch "$DOKKU_LIB_ROOT/core-plugins/config.toml"
  touch "$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

  echo "Install all core plugins"
  dokku plugin:install --core
  chown dokku:dokku -R "$DOKKU_LIB_ROOT/plugins" "$DOKKU_LIB_ROOT/core-plugins"

  echo "Ensure proper sshcommand path"
  echo /usr/bin/dokku > "$DOKKU_ROOT/.sshcommand"
  mkdir -p "$DOKKU_ROOT/.ssh"
  touch "$DOKKU_ROOT/.ssh/authorized_keys"
  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

  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 "Create nginx config folder"
  mkdir -p /etc/nginx/conf.d

  echo "Add sudoers rule for dokku control over nginx"
  echo "%dokku ALL=(ALL) NOPASSWD:/usr/bin/systemctl reload nginx, /usr/sbin/nginx -t" > /etc/sudoers.d/dokku-nginx

  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
}

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/update-motd.d/99-dokku
  rm -f /etc/logrotate.d/dokku

  rm -f /etc/nginx/conf.d/dokku.conf
  systemctl reload nginx &>/dev/null

  rm -rf /var/lib/dokku
  rm -rf /var/log/dokku

  userdel -r dokku &>/dev/null
  rm -rf /home/dokku

  groupdel dokku &>/dev/null
}