- Front-end advanced advanced: как сжимается код javascript
- Advanced front-end advanced: как лучше оптимизировать ресурсы упаковки
- Advanced Front-end Advanced: рекомендации и меры предосторожности для стратегии управления кэшем веб-сайта
- Frontend Advanced Advanced: ускорьте работу npm i на 50 %
- Расширенный интерфейс: используйте докер для эффективного развертывания интерфейсных приложений.
- Front-end advanced advanced: развертывание интерфейсной многофункциональной среды филиала в рамках CICD
- Front-end Advanced Advancement: История разработки Front-end Deployment
Еще статьи:Передовая инженерная серия
Я создал новый репозиторий на githubВопрос дня, интервью вопрос каждый день, добро пожаловать в общение.
- Вопросы на фронтенд-интервью
- Полная коллекция передовых крупных заводов
- Итого вопросы на собеседовании по основам работы с компьютером
Когда в интерфейсе говорится о резком сокращении и сжигании, за ним должна следовать тема фронтенд-инжиниринга. вместе сreact
/vue
/angular
,es6+
,webpack
,babel
,typescript
так же какnode
Развитие фронтенда постепенно вытеснило прошлоеscript
Свинецcdn
Путь развития положил начало большой инженерной волне. Благодаря развитию инженерии и хорошей экологии сообщества открытого исходного кода, удобство использования и эффективность фронтенд-приложений значительно улучшились.
Фронтенд раньше работал по принципу «слэш-и-прожиг», и раньше развертывание интерфейсных приложений тоже было «слэш-и-прожиг». Какие преимущества дает разработка развертывания интерфейсных приложений и побочные продукты, получаемые от фронтенд-инжиниринга?
Это только часть, и более важная причина заключается в том,devops
рост.
Для того чтобы более четко понять историю развития клиентского развертывания и понять разделение обязанностей между эксплуатацией и обслуживанием и фронтендом (или, в более широком смысле, бизнес-разработчиками) во время развертывания, когда каждое клиентское развертывание изменяется, два вопросы можно рассмотреть
- Кэш, http во фронтенд приложениях
response header
Кем? Благодаря развитию инженерии файлы со значениями хеш-функции после упаковки могут постоянно кэшироваться - перекрестный домен,
/api
Кто будет настраивать конфигурацию прокси? Вы можете открыть небольшую службу во внешнем интерфейсе среды разработки и включитьwebpack-dev-server
Настройте междоменное взаимодействие, как насчет производственной среды
Эти два вопроса являются часто задаваемыми вопросами на предварительных собеседованиях, но находится ли право говорить в руках фронтенда?
Время пришлоReact
Только что разработан в этом году, это время было использованоReact
разрабатывать приложения, использоватьwebpack
упаковать. Но фронтенд-развертывание по-прежнему носит строгий характер.
Эта статья требует от вас определенных знаний о Docker, DevOps и интерфейсной инженерии. Если нет, то эта серия статей иРуководство по эксплуатации и обслуживанию персонального сервераРаздел Docker в поможет вам.
слешь и гореть
трамплин
Рабочий сервер
сценарий развертывания
Фронт настраивает егоwebpack
, с радостью отправил электронное письмо о развертывании в отдел эксплуатации и обслуживания и приложил сценарий развертывания, думая, что это первый случай, когда шаблон бэкэнда не используется, а фронтэнд может быть впервые развернут независимо. Думая о дальнейшем расширении моего базового диска, передняя часть не может не улыбаться счастливо
Согласно электронному письму о развертывании, отправленному внешним интерфейсом, эксплуатация и техническое обслуживание снова и снова извлекали код, меняли конфигурацию и писалиtry_files
, с участиемproxy_pass
.
В это время внешние статические файлы создаютсяnginx
хостинг,nginx
Файл конфигурации выглядит так
server {
listen 80;
server_name shanyue.tech;
location / {
# 避免非root路径404
try_files $uri $uri/ /index.html;
}
# 解决跨域
location /api {
proxy_pass http://api.shanyue.tech;
}
# 为带 hash 值的文件配置永久缓存
location ~* \.(?:css|js)$ {
try_files $uri =404;
expires 1y;
add_header Cache-Control "public";
}
location ~ ^.+\..+$ {
try_files $uri =404;
}
}
Но... часто я не могу бежать
Эксплуатация и техническое обслуживание жаловались на то, что сценарий внешнего развертывания не был помечен должным образом.node
версия, фронтенд кричит, что в тестовой среде нет проблем
В настоящее время эксплуатация и обслуживание должны затрачивать много усилий на развертывание, даже на развертывание тестовой среды, а передний конец также должен тратить много усилий на то, как развертывать эксплуатацию и обслуживание. В настоящее время из-за боязни повлиять на онлайн-среду запуск часто выбирают поздно ночью, а интерфейс, эксплуатация и обслуживание физически и морально истощены.
Но всегда
Лу Синь сказал: «Это всегда было так, верно?»
В настоящее время как междоменная конфигурация, так и конфигурация кэша управляются эксплуатацией и обслуживанием, а эксплуатация и обслуживание не понимают внешний интерфейс. Но метод настройки предоставляется фронтендом, а фронтенд не знаком с nginx
Создайте образ с помощью докера
docker
Введение , в значительной степени, решило большую ошибку, из-за которой сценарий развертывания не мог запуститься.dockerfile
сценарий развертывания, сценарий развертыванияdockerfile
. Это также снижает трение внешнего интерфейса, эксплуатации и обслуживания.В конце концов, внешний интерфейс становится все более и более надежным, по крайней мере, развертывание скриптов не вызывает проблем (смеется).
В настоящее время внешний интерфейс больше не предоставляет статические ресурсы, а предоставляет услуги,http
Служить
интерфейс написанdockerfile
примерно так
FROM node:alpine
# 代表生产环境
ENV PROJECT_ENV production
# 许多 package 会根据此环境变量,做出不同的行为
# 另外,在 webpack 中打包也会根据此环境变量做出优化,但是 create-react-app 在打包时会写死该环境变量
ENV NODE_ENV production
WORKDIR /code
ADD . /code
RUN npm install && npm run build && npm install -g http-server
EXPOSE 80
CMD http-server ./public -p 80
иметь толькоdockerfile
Он не может работать, и передняя часть также начала поддерживатьdocker-compose.yaml
, и передать его в эксплуатацию и техническое обслуживание для выполнения командыdocker-compose up -d
Запустите интерфейсное приложение. Первая запись в интерфейсеdockerfile
а такжеdocker-compose.yaml
, играя все более важную роль в процессе развертывания. Думая о дальнейшем расширении моего базового диска, передняя часть не может не улыбаться счастливо
version: "3"
services:
shici:
build: .
expose:
- 80
оперативныйnginx
Файл конфигурации выглядит так
server {
listen 80;
server_name shanyue.tech;
location / {
proxy_pass http://static.shanyue.tech;
}
location /api {
proxy_pass http://api.shanyue.tech;
}
}
Эксплуатация и обслуживаниеnginx
Кроме того, выполните команду:docker-compose up -d
В это время подумайте над первыми двумя вопросами в статье
- Кэш, в связи с переходом от статических файлов к отдаче, кеш начинает контролироваться фронтендом (но
http-server
не подходит для этого) - Междоменный, междоменный по-прежнему контролируется эксплуатацией и обслуживанием
nginx
Средняя конфигурация
Внешний интерфейс может делать часть того, что он должен делать, и это радует.
Конечно, передняя часть дляdockerfile
Улучшение также является процессом постепенной эволюции, так в чем проблема с зеркалированием в настоящее время?
- Слишком большой размер образа сборки
- Создание образа занимает слишком много времени
Используйте многоэтапные сборки для оптимизации изображений
На самом деле, в середине было много взлетов и падений.Подробности процесса можно найти в другой моей статье:Как развернуть интерфейсные приложения с помощью Docker.
Основная оптимизация также заключается в двух аспектах, упомянутых выше.
- Объем образа сборки изменен с 1G+ на 10M+
- Время сборки образа изменено с 5мин+ на 1мин (в зависимости от сложности проекта, большая часть времени уходит на сборку и загрузку статических ресурсов)
FROM node:alpine as builder
ENV PROJECT_ENV production
ENV NODE_ENV production
WORKDIR /code
ADD package.json /code
RUN npm install --production
ADD . /code
# npm run uploadCdn 是把静态资源上传至 oss 上的脚本文件,将来会使用 cdn 对 oss 加速
RUN npm run build && npm run uploadCdn
# 选择更小体积的基础镜像
FROM nginx:alpine
COPY --from=builder code/public/index.html code/public/favicon.ico /usr/share/nginx/html/
COPY --from=builder code/public/static /usr/share/nginx/html/static
как это делается
- Первый
ADD package.json /code
, Опять такиnpm install --production
ПозжеAdd
Все файлы. Воспользуйтесь преимуществами кэширования изображений, чтобы сократить время сборки - Многоступенчатая сборка, значительно уменьшающая размер изображения
Кроме того, могут быть некоторые небольшие оптимизации, такие как
-
npm cache
базовое изображение илиnpm
Частные репозитории, уменьшитьnpm install
время, сокращая время сборки -
npm install --production
Пакуйте только необходимые пакеты
Передняя часть выглядит оптимизированной сама по себеdockerfile
, думая об эксплуатации и обслуживании рассуждая несколько дней назад, говоря, что половина дискового пространства занята фронтальным зеркалом, думая, что я сэкономил несколько порядков фронтального зеркала, которое вроде бы спасает компании много серверных накладных расходов. , думая о дальнейшем расширении своего основного диска, он не мог не улыбнуться счастливо.
В это время подумайте над первыми двумя вопросами в статье
- Кэш, кеш контролируется внешним интерфейсом, кеш установлен на oss, и будет использовать cdn для ускорения oss. На данный момент кеш управляется внешним скриптом, написанным
- Междоменный, междоменный по-прежнему контролируется эксплуатацией и обслуживанием
nginx
Средняя конфигурация
CI/CD и gitlab
В настоящее время чувство достижения переднего плана ошеломляет, а как насчет эксплуатации и обслуживания? Эксплуатация и обслуживание по-прежнему выполняются снова и снова, повторяя три действия снова и снова для развертывания.
- вытащить код
docker-compose up -d
- перезапустить nginx
O&M почувствовал, что так больше продолжаться не может, поэтому представилCI
: с существующим репозиторием кодаgitlab
дополнительныйgitlab ci
-
CI
,Continuous Integration
Непрерывная интеграция -
CD
,Continuous Delivery
, постоянная доставка
важно неCI/CD
Что это такое, важно то, что теперь эксплуатация и обслуживание не должны следить за бизнесом в режиме онлайн, и нет необходимости постоянно пялиться на развертывание переднего плана. все этоCI/CD
Дело в том, что он используется для автоматического развертывания. Три вещи, упомянутые выше, передаютсяCI/CD
.gitlab-ci.yml
даgitlab
Файл конфигурации CI, который выглядит так
deploy:
stage: deploy
only:
- master
script:
- docker-compose up --build -d
tags:
- shell
CI/CD
Не только освобождает от развертывания бизнес-проектов, но и значительно повышает качество бизнес-кода перед доставкой, его можно использовать дляlint
,test
,package
Проверки безопасности и даже многофункциональное развертывание в нескольких средах, я напишу об этой части в своих будущих статьях.
Один из моих серверных проектовshfshanyue/shiciНа моем сервере раньше былоdocker
/docker-compose/gitlab-ci
Если вам интересно, вы можете взглянуть на его файл конфигурации.
Если у вас есть личный сервер, также рекомендуется сделать интерфейсное приложение и поддержку интересующих вас серверных интерфейсных сервисов, а также поддержкуCI/CD
Разверните его на своем собственном сервере
и если вы хотите совместитьgithub
ДелатьCI/CD
, тогда можно попробоватьgithub
+ github action
Кроме того, вы можете попробоватьdrone.ci
, как развернуть можете обратиться к моей предыдущей статье:Внедрение и развертывание решения для непрерывной интеграции Drone на github
Развертывание с помощью kubernetes
По мере того, как бизнес становится все больше и больше, появляется все больше и больше зеркал.docker-compose
больше не могу с этим справляться,kubernetes
Выходите вовремя. В это время сервер также изменился с одного на несколько, и у нескольких серверов будут распределенные проблемы.
Появление новой технологии усложняет решение предыдущих проблем.
Преимущества развертывания k8s очевидны: проверка работоспособности, непрерывное обновление, гибкое расширение, быстрый откат, ограничение ресурсов, идеальный мониторинг и т. д.
Итак, какие новые проблемы возникают сейчас?
Сервер для сборки образов, сервер для предоставления контейнерных услуг и сервер для непрерывной интеграции!
Требуется частный репозиторий образов, который является вопросом эксплуатации и обслуживания.harbor
Он был быстро настроен при эксплуатации и обслуживании, но для внешнего развертывания сложность возросла.
Давайте посмотрим на предыдущий процесс:
- Интерфейсная конфигурация
dockerfile
а такжеdocker-compose
- рабочий сервер
CI runner
Код вытягивания (можно рассматривать как предыдущую операцию и техническое обслуживание),docker-compose up -d
Запустите службу. затем перезапуститеnginx
, в качестве обратного прокси для предоставления внешних услуг
Возникла проблема с предыдущим процессом:Сервер для сборки образов, сервер для предоставления контейнерных услуг и сервер для непрерывной интеграции!, поэтому вам нужен частный зеркальный репозиторий, к которому можно получить доступk8s
Кластерный сервер непрерывной интеграции
Объединить после улучшения процессаk8s
Процесс выглядит следующим образом
- Интерфейсная конфигурация
dockerfile
, создайте образ и поместите его в репозиторий образов - Эксплуатация и обслуживание настроены для интерфейсных приложений
k8s
файл конфигурации ресурсов,kubectl apply -f
повторно загрузит образ и развернет ресурсы
Эксплуатация и обслуживание спрашивайте у фронтенда, нужно ли расширять свой основной диск, напишите про фронтендk8s
Файл конфигурации ресурсов и список нескольких статей.
- Разверните свое первое приложение с помощью k8s: Pod, развертывание и обслуживание
- Используйте k8s для настройки доменного имени для вашего приложения: Ingress
- Добавьте https к вашему доменному имени, используя k8s
Посмотрев более дюжины конфигурационных файлов k8s в бэкенде, я покачал головой и сказал, что это все.
В настоящее время,gitlab-ci.yaml
Выглядит так, права доступа к конфигурационному файлу управляются одним оператором и специалистом по обслуживанию.
deploy:
stage: deploy
only:
- master
script:
- docker build -t harbor.shanyue.tech/fe/shanyue
- docker push harbor.shanyue.tech/fe/shanyue
- kubectl apply -f https://k8s-config.default.svc.cluster.local/shanyue.yaml
tags:
- shell
В это время подумайте над первыми двумя вопросами в статье
- Кэш, кеш контролируется внешним интерфейсом
- Междоменный, междоменный по-прежнему контролируется эксплуатацией и обслуживанием в бэкэнде.
k8s
Управление файлом конфигурации ресурсовIngress
Развертывание со штурвалом
В это время передовая и эксплуатация и обслуживание не имели большого контакта, за исключением случаев случайного нового проекта, которая нуждается в помощи эксплуатации и обслуживания.
Но хорошая сцена не длинная, вдруг в один прекрасный день передняя часть обнаруживает, что у вас может быть даже публичная переменная! Поэтому я часто ищу обслуживание и модификацию файла конфигурации, и работа и обслуживание не раздражают.
Так что естьhelm
, если объяснить одним предложением, это шаблонная функция сk8s
Файл конфигурации ресурсов. В качестве внешнего интерфейса вам нужно только заполнить параметры. Для более подробной информации, пожалуйста, обратитесь к моим предыдущим статьямРазвертывание ресурсов k8s с помощью helm
если мы используемbitnami/nginxтак какhelm chart
, конфигурационный файл, который может записать интерфейс, выглядит так
image:
registry: harbor.shanyue.tech
repository: fe/shanyue
tag: 8a9ac0
ingress:
enabled: true
hosts:
- name: shanyue.tech
path: /
tls:
- hosts:
- shanyue.tech
secretName: shanyue-tls
# livenessProbe:
# httpGet:
# path: /
# port: http
# initialDelaySeconds: 30
# timeoutSeconds: 5
# failureThreshold: 6
#
# readinessProbe:
# httpGet:
# path: /
# port: http
# initialDelaySeconds: 5
# timeoutSeconds: 3
# periodSeconds: 5
В это время подумайте над первыми двумя вопросами в статье
- Кэш, кеш контролируется внешним интерфейсом
- Междоменный, междоменный, управляемый бэкендом, настроенный в конфигурационном файле бэкенда Chart
values.yaml
середина
На данный момент, каковы обязанности внешнего интерфейса, эксплуатации и обслуживания?
Вещи, которые должен сделать передний конец:
- Пишите интерфейсные сборки
dockerfile
, это просто разовая работа, и со ссылкой - использовать
helm
Укажите параметры при развертывании
Что с эксплуатацией и обслуживанием?
- Предоставляет тот, который используется всеми интерфейсными проектами.
helm chart
, даже не нужно его предоставлять, если эксплуатация и обслуживание ленивы, используйте егоbitnami/nginxБар. тоже разовая работа - предоставить на основе
helm
Инструмент, запрещающий слишком много разрешений для бизнеса или даже не требующий их предоставления, если эксплуатация и обслуживание относительно ленивы, используйте его напрямуюhelm
В это время внешний интерфейс может сосредоточиться на своем собственном бизнесе, а эксплуатация и обслуживание могут быть сосредоточены на собственном облаке.Распределение обязанностей никогда не было таким четким.
Унифицированная платформа внешнего развертывания
Позже эксплуатация и техническое обслуживание показали, что суть внешнего интерфейса — это куча статических файлов, которые относительно просто и легко унифицировать, чтобы избежать неравномерного качества каждого внешнего изображения. Таким образом, эксплуатация и техническое обслуживание подготовил единыйnode
Базовый образ представляет собой интерфейсную унифицированную платформу развертывания, и что эта платформа может делать?
-
CI/CD
: автоматическое развертывание при отправке кода в определенную ветку репозитория. -
http headers
: вы можете настроить ресурсhttp header
, чтобы это можно было сделатьоптимизация кешаЖдать -
http redirect/rewrite
: еслиnginx
, так что вы можете настроить/api
, для решения междоменных проблем -
hostname
: Вы можете установить доменное имя -
CDN
: отправить ваши статические ресурсы в CDN -
https
: Подготовьте сертификат для вас -
Prerender
: комбинированныйSPA
, сделать предварительный рендеринг
Фронтенду больше не нужно строить зеркала и загружать CDN, ему нужно только написать конфигурационный файл, который примерно выглядит так
build:
command: npm run build
dist: /dist
hosts:
- name: shanyue.tech
path: /
headers:
- location: /*
values:
- cache-control: max-age=7200
- location: assets/*
values:
- cache-control: max-age=31536000
redirects:
- from : /api
to: https://api.shanyue.tech
status: 200
На этом этапе интерфейсу нужно только написать файл конфигурации для настройки кеша, настроитьproxy
, делать все, что должно принадлежать интерфейсу, а при эксплуатации и обслуживании больше не нужно беспокоиться о развертывании интерфейса
Глядя на файл конфигурации, который я только что написал, внешний интерфейс выглядит разочарованным...
Однако, как правило, такая полная платформа для развертывания переднего плана есть только у крупных фабрик, если вам это интересно, вы можете попробовать.netlify
, вы можете обратиться к моей статье:Разверните ваше внешнее приложение с помощью netlify
Рендеринг на стороне сервера и внутреннее развертывание
Большинство интерфейсных приложений по сути являются статическими ресурсами, а оставшиеся несколько — рендеринг на стороне сервера.Рендеринг на стороне сервера — это, по сути, серверная служба, и ее развертывание можно рассматривать как развертывание на стороне сервера.
Бэкенд-развертывания более сложны, например,
- Для настройки служб серверной части необходим доступ к конфиденциальным данным, но он не может помещать конфиденциальные данные в репозиторий кода. ты сможешь
environment variables
,consul
илиk8s configmap
среднее обслуживание - Для восходящих и нисходящих служб вам необходимо полагаться на базы данных, восходящие службы
- Контроль доступа, ограниченный IP, черный и белый список
- RateLimit
- так далее
Я поделюсь, как развернуть бэкенд в k8s, в следующей статье.
резюме
вместе сdevops
разработка, фронтенд-развертывание становится проще и управляемее, всем рекомендуется немного научитьсяdevops
с вещами.
Дорога длинная и длинная, и дорога приближается.
общаться со мной
Отсканируйте код, чтобы добавить моего робота WeChat, это будетавтоматический(Программа автоматического втягивания находится в стадии разработки) Вовлеките вас в группу продвинутого продвинутого обучения переднего плана
Порекомендуйте публичный аккаунт о найме в Дачане [Интернет-рекрутинг в Дачане], автор будет продолжать продвигать вакансии и требования каждой крупной фабрики в общедоступном аккаунте, а также напрямую общаться с интервьюерами и менеджерами по найму в Дачане.Если вы заинтересованы, вы можете Общайтесь напрямую с ответственным лицом.
Кроме того, автор также будет продолжать продвигать высококачественный опыт интервью с крупными заводами, эксклюзивные вопросы интервью с различными крупными заводами и делиться отличными статьями, не ограничиваясь интерфейсом, сервером, эксплуатацией и обслуживанием и дизайном системы.
Я создал новый репозиторий на githubВопрос дня, интервью вопрос каждый день, добро пожаловать в общение.