Рубрики
Uncategorized

Докереные приложения React Apps

При создании AIDJS Apps вас, вероятно, не нужно слишком много думать о том, как их развернуть. ReaC … Теги от реагирования, докера, WebApp, Devops.

При создании AIDJS Apps вас, вероятно, не нужно слишком много думать о том, как их развернуть. Приложения ReactJS могут быть легко в комплекте в папке, состоящей из обычных HTML, CSS и файлов JavaScript. Это должно быть достаточно простым, чтобы загрузить его в ведро S3, принимая его на Страницы GitHub или даже интеграция отличных услуг, как NetLify или Zeit для быстрого и автоматического развертывания.

Но на этой неделе у меня была задача развертывания приложения React, созданное с Create-raction-app на VPS под поддоменом. Я не хотел использовать Coney-Age FTP, я хотел иметь автоматический контейнер докера с моим приложением, где я мог бы развернуть в любом месте без особой конфигурации.

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

Подготовка нашего докерафила

Мы начинаем, создавая Dockerfile В нашей корневой папке проекта со следующим контентом:

# This image won't be shipped with our final container
# we only use it to compile our app.
FROM node:12.2.0-alpine as build
ENV PATH /app/node_modules/.bin:$PATH
WORKDIR /app
COPY . /app
RUN npm install
RUN npm run build

# production image using nginx and including our
# compiled app only. This is called multi-stage builds
FROM nginx:1.16.0-alpine
COPY --from=build /app/build /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/nginx.conf /etc/nginx/conf.d
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

На фрагменте кода выше мы используем функцию под названием Многоступенчатые сборки Отказ Это требует докера 17.05 или выше, но преимущество этой функции огромна, которую я объясню дальше. На первой половине скрипта мы строим изображение докера на основе Узел: 12.2.0 - альпий который является очень крошечным изображением Linux с узлом. Теперь обратите внимание на Как построить в конце первой строки. Это создает посредственное изображение с нашими зависимостями, которые могут быть выброшены после сборки. Вскоре после этого мы устанавливаем все зависимости от моего приложения React с NPM установить а потом мы выполняем NPM запустить сборку Чтобы скомпилировать приложение React, оптимизированное для производства.

Во второй половине кода мы создаем новое изображение докера на основе Nginx: 1.16.0-Alpine который также является крошечным Linux, включая nginx , высокопроизводительный веб-сервер для обслуживания нашего приложения RACT. Мы используем команду Скопировать Чтобы извлечь содержание от нашего предыдущего изображения под названием построить и скопировать его в /usr/share/nginx/html Отказ Затем мы удаляем файл конфигурации Nginx по умолчанию и добавьте нашу пользовательскую настройку под nginx/nginx.conf Со следующим контентом:

# To support react-router, we must configure nginx
# to route the user to the index.html file for all initial requests
# e.g. landing on /users/1 should render index.html
# then React takes care of mouting the correct routes
server {

  listen 80;

  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }

  error_page   500 502 503 504  /50x.html;

  location = /50x.html {
    root   /usr/share/nginx/html;
  }

}

Эта конфигурация очень важна для приложений, использующих React Router Отказ Всякий раз, когда вы делитесь ссылкой на ваше приложение React, давайте скажем, ссылку на /пользователи/1/Профиль Эта ссылка сообщает браузеру запросить этот путь с веб-сервера. Если веб-сервер не настроен правильно, наше приложение React не сможет рендер начать index.html Файл, содержащий наше приложение React. Используя нашу настраиваемую конфигурацию, мы говорим Nginx направить все запросы к корневой папке /usr/share/nginx/html Какой каталог, который мы ранее скопировали наше приложение raction во время сборки изображения. Мы не должны забывать, что приложения React представляют собой приложения для одной страницы, что означает, что в первом запросе есть только одна страница, остальная часть задания позаботится, реагирующая на браузер.

Создание нашего образа докера

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

# Make sure to be on the same folder of your React app
# replace 'my-react-app' with whatever name you find appropriate
# this is the image tag you will push to your Docker registry
docker build -t my-react-app .

Когда изображение будет построено, давайте проверим размер изображения, которое мы только что сгенерировали со следующей командой:

# List all the images on your machine
docker images
# You should see something like this:
REPOSITORY     TAG       IMAGE ID        CREATED          SIZE
my-react-app   latest    c35c322d4c37    20 seconds ago   22.5MB

Хорошо, наше изображение Docker готово к реестре докера где-то. Одна интересная вещь об этом изображении состоит в том, что размер всего 22,5 МБ. Это действительно отлично подходит для развертывания, потому что небольшие изображения делают автоматические трубопроводы намного быстрее во время загрузки, здания изображений и загрузки.

Запуск нашего приложения React с Docker-Compose

Теперь нам нужно, — это способ запуска этого образа докера. Для тестирования его локально давайте создадим файл под названием Docker-Compose.yml Со следующим контентом:

version: '3.7'

services:
  my_react_app:
    build:
      context: .
    ports:
      - '8000:80'

Docker Compose Позаботится о создании изображения в случае, если он не существует, а также связывает порт 8000 с нашей местной машины к порту 80 на контейнере.

Давайте раскрутим наш контейнер со следующей командой:

docker-compose up

Теперь откройте свой браузер на localhost: 8000 И проверить, работает ли наше приложение React React. Вы должны увидеть что-то вроде этого:

Заключение

Запуск App App с Docker не может быть лучшей развертыванием, но если вам нужно запустить Docker, как в моем случае, он может быть очень простым и эффективным. Это открывает дверь для многих трубопроводов автоматизации, которые вы можете подключить к проекту, как Действия GitHub или Gitlab CI/CD автоматизировать процесс развертывания. Вы можете найти код этого поста здесь.

Оригинал: «https://dev.to/bpaulino0/dockerizing-react-apps-591l»