Skip to content

Instantly share code, notes, and snippets.

@crazy-max
Last active March 8, 2021 10:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save crazy-max/dfb8e1114b921956ec95ebc5cf01ac23 to your computer and use it in GitHub Desktop.
Save crazy-max/dfb8e1114b921956ec95ebc5cf01ac23 to your computer and use it in GitHub Desktop.
SysVinit conf for Traefik 2
# /etc/traefik/conf.d/00-dashboard.yml
http:
routers:
dashboard:
rule: "PathPrefix(`/api`) || PathPrefix(`/dashboard`)"
service: "api@internal"
# /etc/traefik/conf.d/00-ping.yml
http:
routers:
ping:
rule: "PathPrefix(`/ping`)"
service: "ping@internal"

SysVinit conf for Traefik 2

Create traefik user and required folders

groupadd -r traefik
useradd -r -g traefik -d /etc/traefik -s /sbin/nologin traefik
mkdir -p /etc/traefik/conf.d /var/log/traefik /var/run/traefik
chown -R traefik:traefik /etc/traefik/conf.d /var/log/traefik

Download

Download the appropriate Traefik binary in /usr/local/bin/traefik.

wget -qO- https://github.com/traefik/traefik/releases/download/v2.4.6/traefik_v2.4.6_linux_amd64.tar.gz | tar -zxvf - traefik
mv traefik /usr/local/bin/
chown traefik:traefik /usr/local/bin/traefik
setcap cap_net_bind_service=+ep /usr/local/bin/traefik

Config

Create a basic Traefik YAML configuration file in /etc/traefik/traefik.yml:

# /etc/traefik/traefik.yml
global:
  checkNewVersion: false
  sendAnonymousUsage: false

api:
  dashboard: true
  debug: true

ping:
  manualRouting: true

log:
  filePath: "/var/log/traefik/traefik.log"
  format: "common"
  level: "INFO"

accessLog:
  filePath: "/var/log/traefik/access.log"
  format: "common"

entryPoints:
  http:
    address: ":80"
  https:
    address: ":443"

providers:
  file:
    directory: "/etc/traefik/conf.d"
    watch: true

And some dynamic configurations like dashboard and ping and others if you want:

# /etc/traefik/conf.d/00-dashboard.yml
http:
  routers:
    dashboard:
      rule: "PathPrefix(`/api`) || PathPrefix(`/dashboard`)"
      service: "api@internal"
# /etc/traefik/conf.d/00-ping.yml
http:
  routers:
    ping:
      rule: "PathPrefix(`/ping`)"
      service: "ping@internal"

SysVinit config file

Create the following SysVinit config file in /etc/init.d/traefik:

#!/bin/bash
#
# chkconfig: 2345 20 80
# description: Traefik

### BEGIN INIT INFO
# Provides: traefik
# Required-Start: $local_fs $remote_fs $network
# Should-Start: $syslog $named
# Short-Description: Traefik
# Description: The Cloud Native Application Proxy
### END INIT INFO

# Source function library.
. /etc/init.d/functions

traefik_name=traefik
traefik_daemon=/usr/local/bin/traefik
traefik_opts="--configfile /etc/traefik/traefik.yml"
traefik_user=traefik

pidfile=/var/run/${traefik_name}.pid
lockfile=/var/lock/subsys/${traefik_name}
RETVAL=0

start() {
  echo -n $"Starting ${traefik_name}: "
  sudo -H -u ${traefik_user} sh -c "${traefik_daemon} ${traefik_opts} &>/dev/null & disown %1"
  RETVAL=$?
  if [ $RETVAL -eq 0 ]; then
    touch ${lockfile}
    ps aux | grep $traefik_daemon | grep -v grep | tr -s " " | cut -d " " -f2 > $pidfile
    success; echo
  else
    failure; echo
  fi
}

stop() {
  if [ ! -f ${pidfile} ]; then
    echo "${traefik_name} is not running."
    RETVAL=1
  else
    echo -n $"Stopping ${traefik_name}: "
    killproc ${traefik_daemon}
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
      rm -f ${lockfile} ${pidfile}
      success; echo
    else
      failure; echo
    fi
  fi
}

reload() {
  if [ ! -f ${pidfile} ]; then
    echo "${traefik_name} is not running."
    RETVAL=1
  else
    echo -n $"Reloading ${traefik_name}: "
    kill -USR1 "$(cat $pidfile)" 2>/dev/null
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
      success; echo
    else
      failure; echo
    fi
  fi
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  reload)
    reload
    ;;
  restart)
    stop
    start
    ;;
  status)
    status -p ${pidfile} -l ../../../${lockfile} ${traefik_daemon}
    RETVAL=$?
    ;;
  *)
    echo "Usage: $0 {start|stop|status|reload|restart}"
esac

exit $RETVAL

Add the traefik service to the list of startup and start it:

chkconfig --add traefik
service traefik start

Logrotate

Here is a simple logroate config you can put in /etc/logrotate.d/traefik:

/var/log/traefik/*.log {
  daily
  dateext
  missingok
  rotate 30
  compress
  delaycompress
  notifempty
  postrotate
    service traefik reload
  endscript
}
groupadd -r traefik
useradd -r -g traefik -d /etc/traefik -s /sbin/nologin traefik
mkdir -p /etc/traefik/conf.d /var/log/traefik /var/run/traefik
chown -R traefik:traefik /etc/traefik/conf.d /var/log/traefik
wget -qO- https://github.com/traefik/traefik/releases/download/v2.4.6/traefik_v2.4.6_linux_amd64.tar.gz | tar -zxvf - traefik
mv traefik /usr/local/bin/
chown traefik:traefik /usr/local/bin/traefik
setcap cap_net_bind_service=+ep /usr/local/bin/traefik
#!/bin/bash
#
# chkconfig: 2345 20 80
# description: Traefik
### BEGIN INIT INFO
# Provides: traefik
# Required-Start: $local_fs $remote_fs $network
# Should-Start: $syslog $named
# Short-Description: Traefik
# Description: The Cloud Native Application Proxy
### END INIT INFO
# Source function library.
. /etc/init.d/functions
traefik_name=traefik
traefik_daemon=/usr/local/bin/traefik
traefik_opts="--configfile /etc/traefik/traefik.yml"
traefik_user=traefik
pidfile=/var/run/${traefik_name}.pid
lockfile=/var/lock/subsys/${traefik_name}
RETVAL=0
start() {
echo -n $"Starting ${traefik_name}: "
sudo -H -u ${traefik_user} sh -c "${traefik_daemon} ${traefik_opts} &>/dev/null & disown %1"
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
touch ${lockfile}
ps aux | grep $traefik_daemon | grep -v grep | tr -s " " | cut -d " " -f2 > $pidfile
success; echo
else
failure; echo
fi
}
stop() {
if [ ! -f ${pidfile} ]; then
echo "${traefik_name} is not running."
RETVAL=1
else
echo -n $"Stopping ${traefik_name}: "
killproc ${traefik_daemon}
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
rm -f ${lockfile} ${pidfile}
success; echo
else
failure; echo
fi
fi
}
reload() {
if [ ! -f ${pidfile} ]; then
echo "${traefik_name} is not running."
RETVAL=1
else
echo -n $"Reloading ${traefik_name}: "
kill -USR1 "$(cat $pidfile)" 2>/dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
success; echo
else
failure; echo
fi
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status -p ${pidfile} -l ../../../${lockfile} ${traefik_daemon}
RETVAL=$?
;;
*)
echo "Usage: $0 {start|stop|status|reload|restart}"
esac
exit $RETVAL
# /etc/traefik/traefik.yml
global:
checkNewVersion: false
sendAnonymousUsage: false
api:
dashboard: true
debug: true
ping:
manualRouting: true
log:
filePath: "/var/log/traefik/traefik.log"
format: "common"
level: "INFO"
accessLog:
filePath: "/var/log/traefik/access.log"
format: "common"
entryPoints:
http:
address: ":80"
https:
address: ":443"
providers:
file:
directory: "/etc/traefik/conf.d"
watch: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment