Рубрики
Uncategorized

Создание Buggy App (Plus Docker)

Почему вы собираетесь создавать багги приложение намеренно? Ну, вот как мы можем … Теги за новичками, JavaScript, Devops.

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

Требования

Это руководство предполагает,

  • Вы промежуточный новичок.
  • Вы знаете немного Docker/Docker-Compose, например, как установить Docker-Compose.
  • Вы знаете немного Nodejs (или любой язык, подходящий для Backend API).
  • Вы хотите, чтобы сервер до автоматического перезапуска в случае, если что-то пойдет не так.

Если вы не знаете, с чего начать о Docker, Docker составляют для узла JS, или если вы хотите обновить свой разум, проверьте этот удивительный пост по Томми Май О Пошаговое руководство по настройке узла с Docker Отказ

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

Сначала мы создаем очень простое экспресс-приложение. Вы можете сделать это без Express или любой рамки. Но давайте удержим это простым.

Инициализировать проект и установить Express,

yarn init -y && yarn add express

Создать минимальный index.js С

const os = require('os');
const express = require("express");
const app = express();
const port = process.env.PORT || 3000;

app.get("/", (req, res) => res.send({ hostname: os.hostname() }));

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

Теперь запустите приложение Узел index.js , позвоните Curl localhost: 3000 и вы увидите так, как это,

➜  curl localhost:3000
{"hostname":"my-pc"}

До этого сейчас должен быть очень простой, и кто-то должен быть в состоянии следовать.

Поддельная ошибка

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

// Fake bug
let shouldError = false;
setTimeout(() => (shouldError = true), 30000);

И изменить маршрут к этому,

app
  .get("/", (req, res) => {
    if (shouldError) return res.sendStatus(500);
    res.send({ hostname: os.hostname() });
  });

В основном, если Дермер верно, то сервер должен исчерпать 500 ошибка.

Теперь, если вы перезагрузите и попытаетесь получить ответ, он бросит эту ошибку через 30 секунд. 30 секунд — довольно долгое время, чтобы ждать учебника, пожалуйста, нести со мной.

➜  curl localhost:3000
Internal Server Error

Мы хотим быстро перезапустить это, если какая-либо из таких проблем появляется, а не говоря уже о сервере, должно быть легко развертываемым.

Давайте создадим наше минимальное Dockerfile Отказ

FROM node:8

# cd into /app
WORKDIR /app

# copy package.json into app folder
COPY package.json /app

# Install dependencies
RUN npm install

COPY . /app

CMD node index.js

Давайте создадим наше минимальное Docker-Compose.yml файл.

version: "3"

services:
  express:
    build: .
    ports:
      - "3000:3000" # so we can access it from our host

Да, просто это! Теперь мы можем запустить и повеселиться с Docker, давайте запустим Docker-Compose в фоновом режиме.

docker-compose up --build -d

а также Если мы хотим проверить статус,

➜  docker ps --format="table {{.Names}}\t{{.Status}}"
NAMES                STATUS
tutorial_express   Up 5 seconds

О, подожди, что это за - ФОРМАТ предмет?

Это скажет нам показать только имя и статус, как указано в коде.

Если мы сделаем запрос скручиваемости, мы увидим странный ответ, имя хоста контейнера довольно случайно.

➜  curl localhost:3000
{"hostname":"75ed41a4ac5e"}

Это все равно даст нам Ошибка внутреннего сервера после ~ 30 секунд. Нам нужно разместить врачу на здоровье прямо там, давайте добавим следующее прямо рядом с портами,

healthcheck:
  test: curl http://127.0.0.1:3000 -s -f -o /dev/null || exit 1
  interval: 10s
  timeout: 10s
  retries: 3

Это проверит сервер с определенным портом и пометить контейнер как нездоровый, если сервер не возвращает Хорошо код состояния.

Давайте проверим статус около 50 секунд спустя. Это сделает проверку каждые 10 секунд и не более 10 секунд, чтобы пометить контейнер как здоровый или нездоровый.

NAMES                 STATUS
tutorial_express_1    Up 57 seconds (unhealthy)

Получается довольно скучно, чтобы набрать Docker PS каждый раз, чтобы увидеть состояние. Мы можем использовать Смотреть Чтобы он продолжал работать на другом терминале. Просто заверните команду в цитаты.

watch 'docker ps --format="table {{.Names}}\t{{.Status}}"'

Вы поймете, что он проверяет здоровье, но не перезапускает процесс. Хм!

Давайте сделаем его перезапустить, если он становится нездоровым. Мы добавим WillFarrell/Autoheheal изображение.

version: "3"

services:
  express:
    build: .
    ports:
      - "3000:3000"
    restart: always # <-- add a pretty restart here
    healthcheck:
      test: curl http://127.0.0.1:3000 -s -f -o /dev/null || exit 1
      interval: 10s
      timeout: 10s
      retries: 3
  autoheal: # <-- Our healing expert
    restart: always
    image: willfarrell/autoheal
    environment:
      - AUTOHEAL_CONTAINER_LABEL=all
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

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

# re start the container
docker-compose up -d --build

# watch the changes if you are not doing already
watch 'docker ps --format="table {{.Names}}\t{{.Status}}"'

Вот здравоохранение в процессе, пожалуйста, подождите некоторое время,

Это было долгое путешествие для новичка. Теперь у вас могут быть такие вопросы, как, Почему мы возвращаем имя хоста ? Мы скоро увидим об этой части 2. Мы пойдем на простейший пример ТРАФИК и Развертывание сделать это веселее.

Следите за обновлениями!

Оригинал: «https://dev.to/entrptaher/part-1-creating-a-buggy-app-plus-docker-5h2o»