Рубрики
Uncategorized

Развертывайте и автоматически Provision SSL Certs на сервере Node.js с Traefik и Docker.

В этом руководстве мы научились развертывать серверы Node.js с Docker на VPS на основе Linux и … Теги с DevOps, Docker, Node, JavaScript.

В этом руководстве мы научились развертывать серверы Node.js с Docker на VPS на основе Linux и автоматически предоставляют SSL-сертификаты с Traefik.

Предпосылки:

  • Основное знакомство с Node.js, Docker и Docker-Compose.
  • Виртуальный частный сервер с публичным IP-адресом от любого поставщика облачных услуг по вашему выбору.
  • Домен или поддомен и соответствующая запись DNS, указывающая на общедоступный IP-адрес вашего VPS.

Введение

Traefik — это открытый источник, облачный обратный прокси. Обратный прокси по существу сидит на передних серверах и обрабатывает запрос входящих клиентов. Таким образом, вместо этого ваш клиентский запрос напрямую собирается на свой сервер Node.js, запрос сначала проходит через Traefik и Traefik, затем пересылает его на свой сервер. Это позволяет нам делать такие вещи, как SSL шифрование, канареечные развертывания, балансировка нагрузки между другими.

Теперь давайте начнем!

Разорвать VPS Linux

Это может быть экземпляр Amazon EC2, капельку цифрового океана, Linode VMS, и т. Д. или даже машина Linux On-Prom с общедоступным IP-адресом. Для этого демонстрация я использую капельку Ubuntu Digital Ocean.

Установите Docker и Docker Compose.

В этом руководстве ориентировано на этап развертывания. Вы можете прочитать документы Docker о том, как установить Докер и Docker Compose для ваших соответствующих платформ.

Ограничения брандмауэра

В зависимости от вашего VPS и настройки убедитесь, что оба порт 80 и порт 443 доступны снаружи. Это может означать настройку входящих правил вашей группы безопасности в вашу VPC на AWS или открытие портов на UFW.

DNS Records.

Если вы еще этого не сделали, создайте запись DNS для вашего домена или подделки и укажите его на публичный IP-адрес вашего VPS. Вы можете подтвердить размножение DNS, пинговая домен и видим, что он разрешает IP-адрес вашего VPS. Если вы используете поставщик DNS, как CloudFare, который поддерживает прокси, вы можете отключить эту функцию во время тестирования.

ping mydomian.com // should resolve to your VPS IP address

Node.js сервер

В этом примере я буду продемонстрировать, используя простой сервер застегивания.

//server.js file 

const fastify = require("fastify")({ logger: true });
fastify.get("/", async (request, reply) => {
  return { message: "Hello world! I'm using fastify" };
});
const start = async () => {
  try {
    await fastify.listen(3000, "0.0.0.0");
  } catch (err) {
    fastify.log.error(err);
    process.exit(1);
  }
};
start();

Dockerise Node.js Server

Мы контейнерируем наш сервер Node.js с Docker, используя Dockerfile ниже.

FROM node:12-alpine
RUN mkdir home/node-traefik
WORKDIR /home/node-traefik
COPY . .
RUN npm install
EXPOSE 3000
CMD [ "node", "server.js" ]

N/B: Это основной пример о том, как подключить приложение Node.js. Для производства используются случаи, вы, вероятно, должны прочитать руководство лучших практик Node.js и Docker здесь Отказ

Docker Compose

Теперь мы создаем Docker-Compose файл и ссылаться на нашу Dockerfile. На этом этапе мы можем запустить наш Node.js сервер с Docker-Compose up команда.

services:
  node-server:
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "3000:3000"

Настройка Traefik.

Чтобы представить Traefik в наш поток, мы создаем новую услугу для Trafik в нашем файле Docker-Compose.

services:
  reverse-proxy:
    image: traefik:v2.4
    container_name: "traefik"
    command:
      - "--api.insecure=true"
      - "--api.dashboard=true"
      - "--api.debug=true"
      - "--providers.docker=true"
      - "--log.LEVEL=DEBUG"
      - "--entryPoints.web.address=:80"
      - "--entryPoints.websecure.address=:443"
      - "--providers.docker.exposedbydefault=false"
      - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.myresolver.acme.email=hello@paularah.com"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    ports:
      - "443:443"
      - "80:80"
      - "8080:8080"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

Traefik имеет концепцию статических и динамических конфигураций. Статическая конфигурация необходима Trafik при запуске запуска, и если изменения внесены изменения в статические конфигурации, TRAEFIK должен быть перезапущен для этих изменений в силу. При использовании Traefik с Docker-Compose мы определяем статические конфигурации в качестве команд в файле Compose Docker.

Давайте пройдем через каждую команду в статической конфигурации индивидуально.

  • - « », рассказывает Trafik, что Docker является нашей ключевой инфраструктурой компонентов и, таким образом, Traefik запрашивает API Docker для соответствующей информации им.
  • --api.insecure Включает панель инструментов Traefik в небезопасном режиме. Для производства используются случаи, вы хотите использовать базовую аутентификацию и TLS на приборной панели.
  • - « говорит Trafik, чтобы не разоблачить сервис, если не будет явно сделать это.

  • Установленный объем с - "/var/run/docker.sock:/var/run/docker.sock:ro" позволяет Traefik общаться с докером.

  • - "--entrypoints.web.address =: 80" и - "--entrypoints.websecure.address =: 443" Линия объявляет сеть и соответствующие пункты входа в порт в Traefik.

  • «- CertificatesResolvers.myresolver.acme.email=hello@paularah.com создает сертификат Resolver по имени MyResolver . Resolver сертификата отвечает за генерирование, обновление и распоряжение сертификаты.

  • - «-КертифиндируетResolvers.myresolver.acme.Storage =/leteSensrypt/acme.json» Сообщает нашему сертификату Resolver для сохранения наших сертификатов в файле ACME.JSON в объеме летесец.

  • -" Рассказывает сертификат Resolver использовать HTTP-задачу.

На этом этапе, если мы запускаем наши контейнеры, приборная панель Traefik будет доступна на порту 8080 http://: 8080 Отказ

Наши серверные услуги Node.js еще не связаны с Traefik. Вот где приходит концепция динамической конфигурации. В отличие от статических конфигураций, динамические конфигурации могут быть обновлены после начала Trafik. Трафик наблюдает за изменениями в динамических конфигурациях и применяет его без необходимости перезапустить Traefik. При использовании Traefik с Docker мы добавляем динамические конфигурации с помощью меток. Traefik читает эти мета-данные и применяет его к соответствующему обслуживанию.

 node-server:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: node-server
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.node-server.rule=Host(`play.paularah.com`)"
      - "traefik.http.routers.node-server.entrypoints=websecure"
      - "traefik.http.routers.node-server.tls.certresolver=myresolver"
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
      - "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"
      - "traefik.http.routers.redirs.entrypoints=web"
      - "traefik.http.routers.redirs.middlewares=redirect-to-https"
  • С тех пор, как мы настроили Traefik, чтобы не разоблачить услуги, за исключением того, чтобы быть восприимчивым, чтобы сделать это, то - « Этикетка теперь выставляет наш серверный контейнер Node.js в Traefik.

  • - (Play.paularah.com) " Создает роутер, который маршрутирует сетевой запрос от домена Play.paularah.com на контейнер сервера Node.js.

  • - « » рассказывает маршрутизатору использовать Resolver сертификата, который мы создали ранее.

  • - « Создает промежуточное программное обеспечение для принудительного перенаправления сетевого запроса HTTP HTTPS.

Следующие три ярлыка создают маршрутизатор, который соответствует каждому запросу к хосту в порту 80, а затем использует перенаправление на промежуточное программное обеспечение HTTPS, которое мы создали ранее.

Перезапустить контейнеры сейчас и вуаля! Наш сервер Node.js теперь доступен от play.paularah.com использует SSL и Force Redirects к HTTPS.

Резюме

Traefik делает развертывание HTTP-серверов с Docker очень легко. Мы можем развернуть несколько проектов на одном и том же хосте, просто добавив больше сервисов на наш файл Compose Docker. Одним из основных преимуществ этой настройки является все наши конфигурации в одном месте и в одной команде Docker-Compose up Все работает и работает. Это также делает всю нашу настройку легко воспроизводимой и позволяет нам легко перемещать проект от одного поставщика услуг облаков к другому.

Исходный код для этого blogpost можно найти в https://github.com/paularah/node-trefik.

Оригинал: «https://dev.to/paularah/deploy-and-automatically-provision-ssl-certs-on-a-node-js-server-with-traefik-and-docker-2j0e»