При создании 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»