Wissensdatenbank

0. Установка балансировщика Traefik без doker!

Pазвертывание приложения Node.js с PM2 и traefik! 

Данный опус является частью единого цикла заметок o CLI.  Для его написания использовалось множество различных источников (скилы крутых специалистов, статьи с тематических сайтов, техническая документация, комментарии с форумов и социальных сетей и т. д и т. п.).  К сожалению, указать все источники точно не представляется  возможным!  По этому,  в конце заметки,  будет указана ссылка только  на основной источник.  Материалы,  использованные для написания заметки, изменялись автором под конкретную задачу! Вам, скорее всего, тоже  придется поступить аналогичным образом для получения желаемого результата) 

Нужна консультация или помощь в решении IT вопроса? Пожалуйста, в таком случае  заполните форму запроса на Sytes.ru!

В статье предполагается, что сервер терминалов уже прошел предварительную настройку и работает. Все скриншоты соответствуют Windows Server 2016.

Traefik (произносится как трафик) - это современный обратный HTTP-прокси и балансировщик нагрузки, который упрощает развертывание микросервисов. - #traefik.

Все мы знаем классические веб-серверы Apache и Nginx, но попробуйте гораздо более новый и удивительный Traefik! Traefik - это современный обратный HTTP-прокси и балансировщик нагрузки, который упрощает развертывание микросервисов. Изучите базовое развертывание приложения Node.js с использованием конфигурации на основе файлов (без использования какой-либо службы контейнеров, такой как Docker).

 

Traefik интегрируется с существующими компонентами инфраструктуры ( Docker , Swarm , Kubernetes , Marathon , Consul , Etcd , Rancher , File ) и настраивается автоматически и динамически.

Указание Traefik на вашем оркестраторе должно быть единственным шагом настройки, который вам нужен. Но мы начнем со старых способов, аналогичных настройке на основе файлов Nginx (без Docker или Orchestrator) в этом руководстве.

# Почему Traefik?

Traefik встроен в Let's Encrypt и поддерживает автоматическое продление SSL-сертификатов.

Traefik автоматически включает HTTP / 2

Prometheus / Grafana может поддерживаться посредством простой конфигурации Traefik.

В самой версии с открытым исходным кодом есть гораздо больше функций , которые в настоящее время не предлагаются никакими другими веб-серверами с открытым исходным кодом.

# 1. Установите Node.js

sudo apt update
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
nvm -v
nvm install --lts
nvm use --lts
nvm alias default node

node -v
# Results: v14.15.5

В поисках setcap

Я считаю, setcapчто содержится в этом пакете libcap2-bin. Я нашел это, прибегая к помощи "debian setcap"

Просто выполните поиск, чтобы увидеть, есть ли в пакете эта команда, используя

apt-file search setcap

если apt-файл не установлен, сначала установите его, а затем повторите выдачу:

sudo apt install apt-file -y  && sudo apt-file update
apt-file search setcap

запись, которую вы хотите, отображается как

libcap2-bin: / sbin / setcap

Теперь вы знаете, какой пакет у него есть, поэтому установите его

sudo apt-get install libcap2-bin

чтобы увидеть содержание выпуска пакета

dpkg -L some-package
dpkg -L libcap2-bin

где вы увидите setcapи его получите аналогgetcap

# 2. Установите PM2 и настройте приложение:

npm -v
# Results: 6.14.11

npm install -g pm2
pm2 -v
# Results: 4.5.4

# Run Node App
npm install
npm build
pm2 start ecosystem.config.js --env production
# or use  pm2 start index.js
# Далее нужно перелогиниться!

Файл ecosystem.config.js

Если разработанная вами система состоит из множества приложений, которым к тому же при запуске необходимо указывать массу параметров, то при развертывании на разных серверах этот процесс займет немало времени. Чтобы оптимизировать все это, в pm2 имеется поддержка запуска приложений из конфигурационного файла ecosystem.config.js

Чтобы сгенерировать шаблон ecosystem.config.js воспользуйтесь следующей командой.

Теперь в директории, откуда была выполнена команда, должен появиться файл ecosystem.config.js с таким содержимым.

ecosystem.config.js

module.exports = {
  apps: [
    {
      name: 'app',
      script: './app.js',
      env: {
        NODE_ENV: 'development',
      },
      env_production: {
        NODE_ENV: 'production',
      },
    },
  ],
};

В массиве apps каждый элемент является объектом, описывающим конфигурацию для запуска одного приложения набором параметров. Рассмотрим основные из них:

  • name - имя приложения, которое будет отображаться в списке процессов при выполнении команды pm2 list;
  • script - путь к главному файлу приложения, который отвечает за запуск;
  • instances - запускает процесс в кластерном режиме, в качестве значения передается количество дополнительных экземпляров;
  • disable_logs - если задать true, то логи вестись не будут;
  • env - значение переменной среды окружения NODE_ENV в режиме разработки;
  • env_production - значение переменной среды окружения NODE_ENV в режиме эксплуатации.

Для запуска описанных в ecosystem.config.js приложений, выполните команду start с указанием пути к файлу.

pm2 start ecosystem.config.js

 

# 3. Установите Traefik:


# go to https://github.com/containous/traefik/releases and download the latest binary. # downloading using v2.4.5 wget https://github.com/traefik/traefik/releases/download/v2.4.5/traefik_v2.4.5_linux_amd64.tar.gz # extract the binary tar -zxvf traefik_${traefik_version}_linux_${arch}.tar.gz tar -zxvf traefik_v2.4.5_linux_amd64.tar.gz # check help ./traefik --help # make executable and move to /usr/local/bin sudo chmod +x traefik sudo cp /home/$USER/traefik /usr/local/bin sudo chown root:root /usr/local/bin/traefik sudo chmod 755 /usr/local/bin/traefik # give the traefik binary the ability to bind to privileged ports (80, 443) as non-root sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/traefik # setup traefik user and group and permissions sudo groupadd -g 321 traefik sudo useradd -g traefik --no-user-group --home-dir /var/www --no-create-home --shell /usr/sbin/nologin --system --uid 321 traefik sudo usermod -aG traefik sudo mkdir /etc/traefik sudo mkdir /etc/traefik/acme sudo mkdir /etc/traefik/dynamic sudo chown -R root:root /etc/traefik sudo chown -R traefik:traefik /etc/traefik/dynamic /etc/traefik/acme sudo mkdir /var/log/traefik sudo touch /var/log/traefik/debug.log sudo touch /var/log/traefik/access.log sudo chown traefik:traefik /var/log/traefik/ /var/log/traefik/access.log /var/log/traefik/debug.log

4. Настройка Traefik:

Traefik поддерживает несколько поставщиков конфигураций .

Самый простой способ - начать с поставщика конфигурации файлов, как мы это делаем в Nginx.

Конфигурация файлов может быть выполнена в 2-х форматах: tomlиyaml

Создайте файл /etc/traefik/traefik.toml(основной файл conf, похожий на /etc/nginx/nginx.confnginx) со следующим содержимым:


# /etc/traefik/traefik.toml [log] level = "DEBUG" filePath = "/var/log/traefik/debug.log" [accessLog] filePath = "/var/log/traefik/access.log" bufferingSize = 100 [providers] [providers.file] filename = "/etc/traefik/traefik-dynamic.toml" [api] dashboard = true debug = true [entryPoints] [entryPoints.web] address = ":80" [entryPoints.web-secure] address = ":443" [entryPoints.dashboard] address = ":8080" [certificatesResolvers.sample.acme] email = "mymail@example.com" storage = "/etc/traefik/acme/acme.json" [certificatesResolvers.sample.acme.httpChallenge] # used during the challenge entryPoint = "web"

 

Создайте файл /etc/traefik/traefik-dynamic.toml ( файл конфигурации веб-сайта, похожий на /etc/nginx/sites-enabled/example.conf в nginx) со следующим содержимым:


# /etc/traefik/traefik-dynamic.toml [http] # Redirect to https [http.middlewares] [http.middlewares.test-redirectscheme.redirectScheme] scheme = "https" [http.middlewares.auth.basicAuth] # generate password hash form cli or online generators like https://www.web2generators.com/apache-tools/htpasswd-generator users = ["admin:$apr1$npasswordhash"] [http.routers] # node app [http.routers.my-router] rule = "Host(`www.example.com`)" service = "node-pm2" entryPoints = ["web-secure"] [http.routers.my-router.tls] certResolver = "sample" # traefik dashboard [http.routers.dashboard] rule = "Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))" entryPoints = ["web-secure"] service = "api@internal" middlewares = ["auth"] [http.routers.dashboard.tls] certResolver = "sample" # similar to proxy_pass in nginx, traefik maps services [http.services] [http.services.node-pm2.loadbalancer] [[http.services.node-pm2.loadbalancer.servers]] url = "http://127.0.0.1:1337"



 

# 5. Служба настройки

Создайте файл /etc/systemd/system/traefik.service  со следующим содержимым:

[Unit]
Description=traefik proxy
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

[Service]
Restart=on-abnormal
; User and group the process will run as.
User=traefik
Group=traefik
; Always set "-root" to something safe in case it gets forgotten in the traefikfile.
ExecStart=/usr/local/bin/traefik --configfile=/etc/traefik/traefik.toml
; Limit the number of file descriptors; see `man systemd.exec` for more limit settings.
LimitNOFILE=1048576
; Use private /tmp and /var/tmp, which are discarded after traefik stops.
PrivateTmp=true
; Use a minimal /dev (May bring additional security if switched to 'true', but it may not work on Raspberry Pi's or other devices, so it has been disabled in this dist.)
PrivateDevices=false
; Hide /home, /root, and /run/user. Nobody will steal your SSH-keys.
ProtectHome=true
; Make /usr, /boot, /etc and possibly some more folders read-only.
ProtectSystem=full
; … except /etc/ssl/traefik, because we want Letsencrypt-certificates there.
;   This merely retains r/w access rights, it does not add any new. Must still be writable on the host!
ReadWriteDirectories=/etc/traefik/acme
; The following additional security directives only work with systemd v229 or later.
; They further restrict privileges that can be gained by traefik. Uncomment if you like.
; Note that you may have to add capabilities required by any plugins in use.
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

 

Затем выполните следующие команды:

sudo chown root:root /etc/systemd/system/traefik.service

sudo chmod 644 /etc/systemd/system/traefik.service

sudo systemctl daemon-reload

sudo systemctl start traefik.service

#чтобы включить автозагрузку, используйте эту команду

sudo systemctl enable traefik.service

 

 

Управление сервисом:

# to restart

sudo systemctl restart traefik.service

 

 

используйте эту команду для исследования и проверки журналов

journalctl --boot -u traefik.service

 

Спасибо автору! 

Предупреждение : Заметка распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

 Источник: https://adapttive.com/blog/deploying-node-js-app-with-pm-2-and-traefik/

  • Traefik, traefik
  • 0 Benutzer fanden dies hilfreich
War diese Antwort hilfreich?