Source: infrastructure/container-server/caddy.service.js

const systemdServiceFile = `
# caddy-api.service
#
# For using Caddy with its API.
#
# This unit is "durable" in that it will automatically resume
# the last active configuration if the service is restarted.
#
# See https://caddyserver.com/docs/install for instructions.

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy.route53 run --environ --resume
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target cloud-init.target
`

/**
  * @class
*/
class CaddyService {

  static install() {
    return [
      `sudo echo "${systemdServiceFile}" >> /etc/systemd/system/caddy-route53.service`,
      'sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https',
      'sudo curl -1sLf \'https://dl.cloudsmith.io/public/caddy/stable/gpg.key\' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg',
      'sudo curl -1sLf \'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt\' | sudo tee /etc/apt/sources.list.d/caddy-stable.list',
      'sudo curl -1sLf \'https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key\' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-xcaddy-archive-keyring.gpg',
      'sudo curl -1sLf \'https://dl.cloudsmith.io/public/caddy/xcaddy/debian.deb.txt\' | sudo tee /etc/apt/sources.list.d/caddy-xcaddy.list',
      'sudo add-apt-repository ppa:longsleep/golang-backports -y',
      'sudo apt update',
      'sudo apt install caddy xcaddy golang-go -y',
      'sudo xcaddy build --with github.com/caddy-dns/route53',
      'sudo mv ./caddy /usr/bin/caddy.route53'
    ]
  }

  static enable() {
    return [
      'sudo systemctl disable caddy.service',
      'sudo systemctl enable caddy-route53.service'
    ]
  }

  static start() {
    return [
      'sudo systemctl stop caddy.service',
      'sudo systemctl start caddy-route53.service'
    ]
  }

}

module.exports = {
  CaddyService
}