수석 고급 프론트 엔드 : 배포의 개발 프로세스의 프런트 엔드

슬래시의 프론트 엔드의 말하기와 구울, 그것은 프런트 엔드 엔지니어링 주제를 확실히 꽉입니다. 부품 / VUE / 각도, 개발 ES6 +, 웹팩, 바벨, 타이프 라이터와 노드 프론트 엔드는 점차이 큰 파도의 프로젝트를 설정하는 방법을 리드 CDN 개발 마지막 스크립트를 대체하고있다 반응한다. 기술 개발 및 생태 오픈 소스 커뮤니티 좋은, 가용성 및 프론트 엔드 애플리케이션의 효율성 덕분에 크게 개선되었습니다.
슬래시의 프런트 엔드를하고 구울 사용하고, 과거에 프론트 엔드 애플리케이션의 배포 슬래시이라고하고 구울 수 있습니다. 무엇 부산물의 프런트 엔드 엔지니어링과 함께, 프런트 엔드 응용 프로그램 배포의 개발 혜택?
이것은 단지 부분과, 더 중요한 이유는 개발 운영 팀의 상승이다.
더 명확하게 두 가지 질문을 고려할 수, 배포의 프론트 엔드의 개발의 역사를 이해할 때마다, 책임 부서 (또는, 더 넓게, 비즈니스 개발자) 변경의 배포의 프런트 엔드를 평화의 재산 프런트 엔드의 배치를 이해하기 위해

캐시에 의해 HTTP 응답 헤더 프런트 엔드 응용 프로그램? 프로젝트의 발전 덕분에, 영구적 인 캐싱을 할 수있는 패키지의 해시 값으로 파일을 얻을 수있는
도메인에 걸쳐으로, / API 프록시 구성 누가? 프런트 엔드에서 개발 환경은 작은 서비스, 웹팩-DEV-서버가 크로스 도메인 구성, 생산 환경을 가능하게하고 있음을 열 수 있습니다

이 두 가지 문제가 인터뷰의 높은 주파수 프론트 엔드의 문제이지만, 프론트 엔드의 손에 거짓말을 말할 수있는 권리 여부를
시간이 바로 올해 개발 반응했다, 이번에는 패키지에 웹팩을 사용하여 응용 프로그램을 개발하는 반응 사용되고있다. 그러나 프런트 엔드의 배치는 여전히 화전입니다

이 문서에서는 특정 부두 노동자, 개발 운영 및 프런트 엔드 엔지니어링 지식 기반이 필요합니다. 되지 않은 경우,이 기사의 시리즈 및 개인 도커 섹션은 서버 당신이 도움의 운영 및 유지 보수를 안내합니다.

화전
발판 기계를
프로덕션 서버를
배포 스크립트로
, 첫 번째 백엔드 템플릿의 첫 번째 집합을 생각하지 않고, 프런트 엔드 조정 그의 웹팩, 운영 및 배포 스크립트의 배포와 이메일을 보낼 수있는 유지 보수 행복 프론트 엔드는 독립적으로 전개 될 수있다. 더베이스 플레이트를 확장하는 자신의 생각, 프론트 엔드는 없습니다 도움이되지만 웃었다 수 있습니다
운영 및 계속해서 또 다시 코드를했다, 전자 메일의 배포의 프론트 엔드에 걸쳐 머리를 빛나는 유지 보수의 proxy_pass으로 구성, 작성 try_files을 변경합니다.
이 때, 정적 파일의 선단부 긴 같이 실질적 프로파일의 nginx, nginx를 호스팅하는
서버 {
상기 80 청취
서버 _의 shanyue.tech 단계;

위치 / {
# 피하기 비 루트 경로 (404)
try_files $ $ URI URI / /index.html이;
}

크로스 도메인을 해결하기 위해

위치 / API {
proxy_pass http://api.shanyue.tech;
}

해시 값을 갖는 영구 캐시 구성 파일

위치 ~ * (? CSS | JS) $ {.
try_files $ URI = 404;
1Y 만료;
add_header 캐시 제어 "공공";
}

~ ^ + ... + 오시는 $ {.
try_files $ URI = 404;
}
}
코드를 복사,하지만 때로는 ... 자주 실행하지 않는
좋지 않다 표준의 배포 스크립트 프런트 엔드 노드 버전에 대해 불평 운영 및 유지 보수, 프론트 - 엔드 테스트 환경 문제를 시끄럽게 굴하지
이 시간 운영 및 유지 보수 비용은 배포에 많은 노력을 요구, 또는 테스트 환경을 구축뿐만 아니라 프론트 엔드는 운영 및 유지 보수에 배포하는 방법에 많은 노력을합니다. 늦은 밤에 라인에, 온라인 환경에 영향을 미치는의 두려움 때문에 이번에는 종종 운영 및 프런트 엔드와 소진의 유지 보수를 선택
하지만, 항상
루는 말했다, 항상, 그 반대가 될 것이라고했다.
이 시간에 관계없이 구성 또는 도메인 간 캐시 구성, 운영 및 유지 보수의 프런트 엔드를 이해하지 않는 운영 및 유지 보수를 관리 할 수 있습니다. 프론트 엔드의 nginx에 익숙하지 않은 동안하지만 구성은 프런트 엔드에서 제공되는
미러링을 사용하여 고정 표시기 빌드
도입 고정 표시기를 상당 부분, 배포 스크립트는이 큰 버그를 실행할 수 없습니다 해결했다. dockerfile 즉 배포 스크립트, 배포 스크립트를 dockerfile. 크게는 배포 스크립트 아무 문제가 (웃음없는이 적어도, 더 신뢰할 수있는 프런트 엔드, 운영 및 프론트 엔드의 유지 보수와 마찰을 완화 결국에 이것은
이 시간, 프론트 엔드는 더 이상 사용할 수 정적 자원 만 서비스를 제공하기 위해, HTTP 서비스입니다
프런트 엔드 긴 대략 다음과 같이 dockerfile 썼다
노드 : 고산를

프로덕션 환경의 대표

ENV PROJECT_ENV 생산

많은 패키지가이 환경 변수를 기반으로합니다, 다른 행동을

또한, 패키지는이 환경 변수에 최적화 웹팩하기로한다, 그러나 만들-반응-응용 프로그램을 포장이 환경 변수 죽은 쓰기 때

ENV NODE_ENV 생산
WORKDIR / 코드를
추가합니다. / 코드
RUN 설치 NPM && NPM 실행 빌드를 && 설치 NPM -g HTTP 서버
(80)에 노출

-p 80 ./public CMD HTTP 서버
dockerfile도하지 및 실행이 혼자 코드를 복사, 다른 프런트 엔드 프런트 엔드 응용 프로그램을 시작 -d 업 구성 고정 표시기 명령을 실행하기 위해 고정 표시기 - compose.yaml, 운영 및 유지 보수를 유지하기 시작했다. 전개 과정에서 점점 더 중요한 역할을 기록 dockerfile 및 고정 표시기-compose.yaml, 재생할 제의 선단부. 더베이스 플레이트, 프론트 엔드 수없는 도움을 확장하고 자신의 생각하지만 웃었다
버전 : "3"
서비스 :
shici :
빌드가 :.
에 노출 :
- (80)는
다음과 같이 실질적으로 길게 구성 파일의 코드의 nginx 운영 및 유지 보수를 복사
서버 {
(가) 80 듣고,
서버 _ 산월를 .tech;

위치 / {
proxy_pass http://static.shanyue.tech;
}

위치 / API는 {
proxy_pass http://api.shanyue.tech;
}
}
구성의 nginx에 추가하여 코드 운영 및 유지 보수를 복사 할뿐만 아니라, 명령 실행 : 고정 표시기-작성 업 -d
가장 중요한 기사 숙고에 두 가지 질문이 시간을

캐시 인해 서비스에 대한 정적 파일의 변환, 프런트 엔드 캐시 제어는 처음으로 넘겨 (그러나 거울 HTTP 서버는이 작업을 수행하기에 적합하지 않습니다)
크로스 도메인, 크로스 도메인을 구성 nginx를 여전히 운영 및 유지 보수

앞 부분은 그가에서 무엇을해야 할 수 있습니다, 이것은 매우 행복한 일이
물론, 향상된 dockerfile에 대한 프론트 엔드는 진화의 느린 과정이며,이 시간이 미러링하는 문제는 무엇인가?

너무 큰 거울의 건설은
너무 오래 미러를 구축

미러링 다단계 최적화의 건설
사용 방법 고정 표시기의 배포 프런트 엔드 응용 프로그램 : 과정이 어떻게 내 다른 문서를 참조하는 가운데 실제로 경험 많은 기복을.
상기 한 두 가지 측면에서 최적화 된

미러 체적 + 1G 10M +가된다 구성된
미러 + 1 분 5 분이되는 시간으로 구성 (프로젝트의 복잡성에 따라, 구축 시간과 정적 자원 업로드시에 대부분의 시간)

노드 FROM : 빌더로 고산

ENV PROJECT_ENV 생산
ENV NODE_ENV 생산

WORKDIR / 코드

ADD package.json / 코드
RUN --production를 설치 NPM

ADD. /암호

NPM uploadCdn는 OSS에서 스크립트 파일에 정적 리소스를 업로드하는 것입니다 실행, OSS의 미래는 CDN의 사용을 촉진합니다

RUN NPM 실행 빌드 && uploadCdn을 실행 NPM

기본 이미지를의 작은 볼륨을 선택합니다

Nginx에 사람 : 알파인
COPY 코드 --from = 빌더 / 공공 / index.html을 코드 / 공공 /를의 favicon.ico는 / usr / share / Nginx의 / HTML /
COPY 코드 --from = 빌더 / 공공 / 정적는 / usr / share / Nginx에 / HTML / 정적
을 어떻게 할 것을 코드를 복사

먼저 추가 package.json / 코드, 다음 NPM 후 모든 파일을 추가 --production 설치합니다. 구축 시간 감소 미러링 캐시의 전체 사용,
다단계 빌드는 크게 미러의 볼륨을 감소

또한 다음과 같은 몇 가지 작은 최적화를 할 수 있습니다

캐시 NPM NPM 개인 기본 이미지 또는 창고, 빌드 시간을 단축, 설치 NPM 시간을 단축
--production 만 필요한 패킷을 설치 설치 NPM

프런트 엔드가 dockerfile, 작업을보고 최적화 및 유지 보수가 거울에 자신의 저축 규모 프론트 엔드의 양의 몇 배를 사고, 절반 디스크 공간이 계정의 전면에 반영되는 것을 말하고, 시끄러운 며칠 사고 전에도 있었다,이 회사는 것 디스크를 확장하여 추가로 자신의 재단에 대한 생각, 오버 헤드 서버를 많이 저장하고, 도움이되지 수 있지만, 웃음과 웃음을
가장 중요한 기사 숙고에 두 가지 질문이 시간을

캐시 버퍼 OSS에 배치 된 프론트 엔드에 의해 캐시 제어, OSS는 CDN을 가속하는 데 사용된다. 프런트 엔드 캐시 쓰기 스크립트에 의해 이번에는 제어
크로스 도메인, 크로스 도메인을 구성 nginx를 여전히 운영 및 유지 보수

CI / CD 및 gitlab
이 시간 성과, 운영과 유지 보수의 감 넘치는 전면? 운영 및 접지 라인의 유지 보수 배포에 또 다시 세 이상 행동과 반복, 또 다시 여전히

코드 당겨
고정 표시기-구성까지 -d
재시작의 nginx를

그는 CI를 도입 있도록 운영 및 유지 보수는 더 이상, 그래서 더 이상 생각하지 수 있습니다 기존 코드 저장소 gitlab이 gitlab CI 지원

CI, 지속적인 통합, 지속적인 통합
CD, 연속 배달, 연속 배달

중요한 것은 CI를하지 않습니다 / CD는 이제 운영 및 유지 보수 사업 라인이 사라 따라하지 정면 응시를 배포 할 필요가 없습니다 중요하다. 이러한 것들의 CI / CD의, 그리고 그것은 자동 배포에 사용됩니다. 다음은 CI에 세 가지를 위에서 언급 한 / CD
.gitlab-ci.yml IS gitlab CI를 프로파일, 아마이 긴과 같은
배포 :
단계 : 배포
의 경우 :
- 마스터
스크립트 :
- 도커 작성 업 --build -d
태그 :
- 쉘
코드 CI를 복사 / CD뿐만 아니라 더 배포 비즈니스 프로젝트 해방도 크게 보풀, 테스트, 패키지 보안 검사, 심지어 멀티 멀티 환경 특성에 사용할 수있는 비즈니스 코드의 품질을 향상 배달하기 전에이다 배포, 나는 내 미래의 문서에 나와있는 것은이 부분을 작성합니다
I 서버 프로젝트의 렌더링을 shfshanyue / shici했다 이전에 고정 표시기 고정 표시기-작성 gitlab-CI 방법 / / 내 서버에 배포되어 관심 캔 모양에가 설정 파일

shfshanyue / shici : Dockerfile
shfshanyue / shici : 도커 - compose.yml
shfshanyue / shici : gitlab-ci.yml

당신이 개인 서버가있는 경우, 또한 당신이 그들에 관심이있는 서비스를 지원하고, CI / CD가 자신의 서버에 배포 지원 프런트 엔드 응용 프로그램 및 백엔드 인터페이스 할 제안
하고 원하는 경우 CI / CD 할 GitHub의 결합을 , 당신은 GitHub의 + github의 조치를 시도 할 수 있습니다
지속적인 통합을 무인 항공기의 GitHub의 프로그램 소개 및 배포에 어떻게 배포 내 이전 기사를 참조 할 수 있습니다, 또는 당신이 drone.ci 시도 할 수 있습니다
사용는 Kubernetes 배포
, 비즈니스 성장과 함께 점점 더 많은 미러링, 대처 덜 수 있었다 고정 표시기-작성은 계절 밖으로는 Kubernetes. 그리고 대만 서버는 여러 서버가 문제에게 배포됩니다, 다단계되었다
복잡성을 소개하는 것 이전 문제를 해결하면서 새로운 기술의 출현을.
건강 검진, 롤링 업그레이드, 탄성 확장, 빠른 롤백, 자원 제약, 등, 모니터링 개선 : K8S 배포 혜택은 분명
그것이 우리가 발생할 수 있다는 새로운 어떤 문제입니까?
미러 서버 구축, 서버는 컨테이너 서비스를 제공, 지속적인 통합 서버가 하나 할!
작동 및 물건의 유지 보수하는 고유의 이미지 저장소의 필요성, 곧 항구 좋은 운영 및 유지 보수를 구축,하지만 배포, 복잡성의 프런트 엔드와 증가
이전 과정을 살펴 :

프런트 엔드 구성 dockerfile 및 고정 표시기 - 구성
(이전의 운영 및 유지 보수로 볼 수있다) 생산 환경의 서버 CI 러너 풀에게 코드를 서비스를 시작 -d까지 고정 표시기가-구성한다. 다시 시작의 nginx, 리버스 프록시, 외부 서비스를 할

전 과정에 문제가 : 미러 서버를 구축, 서버는 컨테이너 서비스를 제공, 지속적인 통합 서버가 하나 할! 따라서 고유의 이미지 저장소의 필요성이 클러스터가 액세스 할 수는 지속적인 통합 서버 K8S
절차는 다음과 후 조합 K8S 프로세스 개선을

프런트 엔드 구성 dockerfile, 거울, 푸시 창고에 거울 구축
프런트 엔드 응용 프로그램 구성 K8S 자원 구성 파일에 대한 운영 및 유지 보수를, 다시 풀 미러링, 배포 자원을 -f 적용 kubectl

프런트 엔드 운영 및 유지 보수를 묻는, 당신은 K8S 자원 구성 파일의 프론트 엔드에 대해 쓰기에, 당신의 기초 판에서 확장 할 필요가 있고, 몇 가지 기사를 나열하지 않습니다

사용 K8S 귀하의 첫 번째 응용 프로그램을 배포 : 포드, 배포 및 서비스
를 사용하여 응용 프로그램 도메인에 대한 구성을 K8S : 침투의
사용 K8S를 https로 도메인

프론트 엔드의 후단 이상 다스 K8S 프로필을보고 한 후 고개를 저었다 잊지 잊지 말했다
한 사람의 운영 및 유지 보수 관리에 의해, 거의 오랫동안이 같은이 시간, gitlab - ci.yaml을 권한 프로필을
배포 :
단계 : 배포
의 경우 :
- 마스터
스크립트 :
- 도커 빌드 -t harbor.shanyue.tech/fe/shanyue
- 푸시 harbor.shanyue.tech/fe/shanyue 도커
: //k8s-config.default.svc.cluster.local - kubectl은 -f HTTPS 적용 /shanyue.yaml
태그 :
- 쉘
코드 제일 기사 두 가지 질문을 숙고하는이 시간을 복사

캐시는 캐시가 전면에 의해 제어되는
크로스 도메인, 크로스 도메인 여전히 운영 및 유지 보수 관리, 제어 침투 구성 파일에 백엔드 자원을 K8S

사용 투구 배포
후 운영 및 유지 보수의 프론트 엔드는 운영 및 유지 보수 호의 외부에서 새로운 프로젝트를위한 가끔 필요를 제외하고 연락을 덜 가지고
있지만, 마지막으로 긴, 어느 날 갑자기, 심지어 프론트 엔드 환경 변수가 어떤 법을 통과하지 자신을 발견하지 않았다! 그래서 종종 구성 파일 찾기 작업 및 유지 보수, 운영 및 유지 보수도 싫증 수정
한 문장으로 설명하면, 그래서 지배가를, 그것은 K8S 기능을 가진 자원 프로파일 템플릿입니다. 프런트 엔드, 당신은 단지 매개 변수를 입력해야합니다. 자세한 내용은 지배 K8S 배포 리소스를 사용하여 내 이전 기사를 참조 할 수 있습니다
우리가 사용하는 경우 bitnami / nginx를이 긴 투구 차트 수있는 구성 파일을 작성하는 등의 프론트 엔드로
이미지 :
레지스트리 : harbor.shanyue.tech
저장소 : 철 / 산월의
태그 : 8a9ac0

진입 :
사용 가능 : 사실
호스트 :

  • 이름 : shanyue.tech의
    경로를 /을

TLS :

  • 호스트 :

    • shanyue.tech
      secretName : 산월-TLS

    livenessProbe :

    httpGet :

    경로 : /

    포트 : HTTP

    initialDelaySeconds : 30

    timeoutSeconds : 5

    failureThreshold : 6

    readinessProbe :

    httpGet :

    경로 : /

    포트 : HTTP

    initialDelaySeconds : 5

    timeoutSeconds : 3

    periodSeconds 5

코드를 가장 중요한 기사 두 가지 질문을 숙고하는이 시간을 복사

캐시, 캐시가 전단에 의해 제어되는
도메인 간 및 후단에서 인터 - 제어, 후단 차트 구성 파일에 배치 values.yaml

그런 다음 운영과 유지 보수의 의무 프런트 엔드?
할 수있는 프론트 엔드의 요구는 다음과 같습니다

건물의 전면 dockerfile 쓰기, 이것은 단지 하나의 시간이 필요하지만 참조
투구를 배포 할 때 사용하는 매개 변수를 지정할 수

운영 및 유지 보수는 그것을 할 것을

이 / nginx를 bitnami의 사용에 경우 투구 차트도 제공, 운영 및 게으른 유지 보수없이, 사용 된 모든 항목에 대한 프론트 엔드를 제공합니다. 한 번 작업인가
가 직접 조타 장치를 사용하는 경우에도 제공, 운영 및 게으른 유지 보수없이 지배에 기초한 도구, 과도한 서비스 기관의 금지를 제공합니다

FEC의 자신의 클라우드 네이티브에 집중할 수 사업, 운영 및 유지 보수에 집중할 수, 책임 등의 명확한 구분되지 않았어요
통합 프런트 엔드 배포 플랫폼
나중에 운영 및 프론트 엔드 응용 프로그램의 유지 보수의 성격은 정적 파일의 무리는 통일에 쉽게, 더 하나입니다 기술은, 요철 화질의 각각의 전단을 방지한다. 그래서 통합 운영 및 노드의 기본 이미지의 유지 보수를 준비, 프런트 엔드 통합 배포 플랫폼을,이 플랫폼은 그것을 할 수있는

CI / CD :웨어 하우스에 특정 코드 분기를 누르면 자동으로 배포
HTTP 헤더 : 당신이 할 수있는 HTTP 헤더 자원을 사용자 정의 할 수 있습니다 캐시 최적화
HTTP 리디렉션 / 재 작성하십시오 nginx를하는 경우, 당신이 할 수있는 구성 / API, 해결 크로스 그래서 도메인 문제의
호스트 이름 : 당신은 도메인 설정할 수 있습니다
CDN을 : CDN이 밀어 정적 자원을 넣어
당신을 위해 인증서를 준비 : HTTPS
미리 렌더링이 : SPA 바인딩, 사전 렌더링 않습니다

CDN을 업로드, 전면 거울을 구축하기 위해 더 이상 필요가, 그는 단지 약이 긴처럼, 그 위에 프로필을 작성할 필요가 없습니다
: 빌드
명령 : NPM RUN 빌드
DIST : / DIST를

호스트 :

  • 이름 : shanyue.tech의
    경로를 /을

헤더 :

  • 위치 / *
    값 :
    • 캐시 제어 : 최대 사용 기간 = 7200
  • 위치 : 자산 / *
    값 :
    • 캐시 제어 : 최대 사용 기간 = 31536000

리디렉션 :

  • 에서 : / API
    에 : https://api.shanyue.tech
    상태 : (200)
    이 시점에서 코드 복사, 단지 구성 파일을 작성해야 앞, 당신은 모든 것을 할 수있는 전면에 속하는해야, 프록시를 구성, 캐시를 구성하고 전송 할 수 있습니다 의 배포의 프런트 엔드 대해 걱정 빅토리아도 더 이상 필요
    단지 기록 된 자신의 프로필을 보았다 프런트 엔드는 방법을 보았다 ...
    하지만 당신은 그것을, 당신은 할 수 있습니다 관심이 있다면 대부분의 제조업체는 이러한 완전한 프런트 엔드 배포 플랫폼이 netlify 시도에서, 당신은 나의 기사를 참조 할 수 있습니다 : 사용중인 응용 프로그램 프런트 엔드 배포 netlify
    서버와 백 엔드 렌더링 배포
    대부분의 응용 프로그램에 정적 자원은 기본적으로 프론트 엔드이며, 나머지는 자연의 서버 측 렌더링, 서버 측 렌더링의 작은 부분 백엔드 서비스에 자사의 배포는 배포 백엔드로 볼 수있는
    상황의 백엔드 배포 등, 더 복잡

구성 서비스, 민감한 데이터에 대한 백엔드 필요 액세스,하지만 코드 저장소에 민감한 데이터를 넣을 수 없습니다. 당신은 환경 변수, 영사을 유지하거나 K8S가에 configMap을
당신이 데이터베이스에 의존해야하는, 업 링크 및 다운 링크 서비스, 업스트림 서비스
액세스 제어, IP, 블랙 및 화이트리스트 제한
만 부가

나는 미래 기사에서 백엔드 K8S을 배포하는 방법을 공유합니다

게시 22 개 원래 기사 · 원의 칭찬 0 · 조회수 248

추천

출처blog.csdn.net/A669MM/article/details/104791834