Установка бинарника traefik в systemd

Описание установки traefik в systemd в изолированной среде.

1. Скачивание бинарника из github в Nexus

  1. Создайте временный каталог:

    mkdir -p ~/tmp
    temp_dir=$(mktemp -d ~/tmp/tmpdir.XXXXXX)
    cd $temp_dir
  2. Скачайте архив с бинарником последней версии и файл с контрольными суммами:

    GITHUB_REPO_NAME="traefik/traefik"
    FILES=("traefik_.*_linux_amd64\.tar\.gz" "traefik_.*_checksums\.txt")
    
    
    for i in ${FILES[@]}; do
      curl -s https://api.github.com/repos/${GITHUB_REPO_NAME}/releases | \
      grep browser_download_url | \
      grep "$i" \
      | head -n1 | cut -d '"' -f 4 | \
      wget -i -
    done
  3. Распакуйте архивный файл и проверьте контрольные суммы:

    tar -xvf traefik_*.tar.gz
    sha256sum -c --ignore-missing traefik_*_checksums.txt
    Пример ожидаемого вывода:
    traefik_v3.4.0_linux_amd64.tar.gz: OK
  4. Задайте адрес загрузки файлов:

    INTERNAL_REPO="https://nexus.example.org/repository/github"
    REPO_FOLDER="${GITHUB_REPO_NAME}"
  5. Задайте учётные данные для доступа к локальному репо:

    set +o history
    USER_PASS='ken:xxxxxxxxxxxxxxxx'
    set -o history
  6. Загрузите файлы в Nexus:

    for i in "$FILES[@]"; do
      curl -v --user "${USER_PASS}" \
      --upload-file ${i} \
      ${INTERNAL_REPO}/${REPO_FOLDER}/
    done
  7. Удалите временный каталог:

    cd
    rm -rf ${temp_dir}

2. Установка traefik в systemd

  1. Добавьте системного пользователя:

    useradd -s /sbin/nologin -M -r -U traefik
  2. Добавьте каталог для конфигурационных файлов traefik:

    CONF_DIR='/etc/traefik'
    mkdir -p ${CONF_DIR}
    chown root:traefik ${CONF_DIR}
    chmod 2750 ${CONF_DIR}
  3. Добавьте systemd-юнит:

    cat << 'EOF' > /etc/systemd/system/traefik.service
    [Unit]
    Description=Traefik Reverse Proxy
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=simple
    User=traefik
    Group=traefik
    WorkingDirectory=/etc/traefik
    ExecStart=/usr/local/bin/traefik --configFile=traefik.yml
    Restart=on-failure
    PrivateTmp=true
    ProtectHome=true
    ProtectSystem=full
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    systemctl daemon-reload