caddy/dist/init/linux-systemd
W-Mark Kubacki f1c1ea9905 Service file for systemd starts after all networks have gotten IP addresses
Unlike network.target the network-online.target guarantees that the network
devices are online.

If you bind to 0.0.0.0, [::], [::1], and/or 127.0.0.1 only that is enough to
proceed. But in case a particular IP is needed, like ${COREOS_PUBLIC_IPV4},
we require any IP assignments to have completed before Caddy's start. That
is achieved by depending on systemd-networkd-wait-online.service (which is
scheduled before network-online.target, then, automatically).
2016-03-18 12:36:54 +01:00
..
caddy@.service Service file for systemd starts after all networks have gotten IP addresses 2016-03-18 12:36:54 +01:00
README.md Add systemd unit file and some usage instructions 2016-03-17 17:39:50 +01:00

systemd unit for caddy

Please do not hesitate to ask me if you've any questions.

Quickstart

  • install the unit configuration file: cp caddy@.service /etc/systemd/system
  • reload the systemd daemon: systemctl deamon-reload
  • make sure to configure the service unit before starting caddy
  • start caddy: systemctl start caddy@someuser
  • enable the service (automatically start on boot): systemctl enable caddy@someuser
  • the .caddy folder will be created inside the users home directory that runs caddy, i.e. /home/someuser/.caddy for systemctl start caddy@someuser

Configuration

  • do not edit the systemd unit directly, use systemd's builtin tools:
    • systemctl edit caddy@ to make user local modifications to the service unit
    • systemctl edit --full caddy@ to make system-wide modifications
  • in most cases it's enough to adapt the ExecStart directive:
    • systemctl edit caddy@
    • systemd needs absolute paths, therefore make sure that the path to caddy is correct
    • example:
[Service]
; reset the original setting
ExecStart=
ExecStart=/usr/bin/caddy -conf="/etc/caddy/myCaddy.conf" -agree -email="my@mail.address"
  • to view your configuration use systemctl cat caddy@
  • double check the permissions of your web root path to make sure that caddy can access it as its run user and group

Tips

  • use log stdout and errors stderr in your Caddyfile to make use of journalctl
  • journalctl is systemd's log query tool
  • lets say you want all the log entries for caddy since the last boot beginning from the last entry: journalctl --reverse --boot --unit caddy@someuser
  • maybe you want to follow caddys log output: journalctl -fu caddy@someuser
  • to send a signal to a service units main PID, e.g. let caddy reload its config: systemctl kill --signal=USR1 caddy@someuser