앵 귤 러 용기 배치
다음은 g - alain 의 전체 과정 을 논술 하 겠 습 니 다. 그 중에서 Docker, Nginx, Let 's Sencrypt 인증서 등 범 타 오 를 포함 합 니 다. 초보 자 들 이 그녀 를 잘 읽 을 수 있 을 것 이 라 고 장담 할 수 는 없 지만 일부 글 키 워드 를 통 해 검색엔진 에서 더 많은 자 료 를 얻 을 수 있 습 니 다.
우 리 는 Docker 가 미 러, 용기 라 는 두 가지 중요 한 개념 을 가지 고 있다 는 것 을 안다.한편, Anguar 용기 배 치 는 Angular 가 구축 한 생산 환경 (예 를 들 어
ng build -prod
에서 생 성 된 디 렉 터 리 dist
를 정적 서버 미 러 (예 를 들 어 Nginx) 에 기록 하고 마지막 으로 이 미 러 를 인 스 턴 스 해 야 합 니 다.1. 각도 미 러 구축
1. 각도 컴 파일
일반적으로 Angular 구축 도 하나의 용기 에서 이 루어 집 니 다. Angular 프로젝트 루트 디 렉 터 리 에 파일 을 만 듭 니 다
Dockerfile.compile
.FROM node:8
LABEL authors="cipchk "
WORKDIR /usr/src/app
COPY package.json package.json
RUN npm config set registry https://registry.npm.taobao.org \
&& npm i
COPY . .
RUN ng build --prod
FROM
하나의 node
기초 미 러 를 지정 하 는데 이것 은 Angular 프로젝트 를 구축 하 는 가장 간단 한 기본 LABEL
미 러 메타 데이터, 예 를 들 어 authors
작가 정보 WORKDIR
미 러 내 작업 디 렉 터 리 지정 COPY
프로젝트 package. json 을 복사 하고 의존 패키지 설치 RUN
프로젝트 파일 을 복사 한 후 실행 ng build
명령 docker build -f Dockerfile.build -t ng-app-build .
그 중에서
ng-app-build
미 러 이름 을 나타 낸다.2. Angular 운영 환경
저 희 는 Angular 미 러 를 컴 파일 하 는 토대 에서 Angualr 운영 환경 미 러 를 구축 하지 않 기 때문에 의미 없 는 파일 이 많이 포함 되 어 있 습 니 다. 예 를 들 어
npm i
에서 발생 한 node_modules
입 니 다.상기 미 러 에서 dist
디 렉 터 리 를 추출 하고 새로운 미 러 를 만 듭 니 다.Angular 운영 환경 은 깨끗 하고 간단 해 야 합 니 다.따라서 컴 파일 된 Angular 미 러 에서 추출
dist
:# Angular
docker run --name ng-app-build ng-app-build
# `dist`
docker cp ng-app-build:/usr/src/app/dist ./dist/
# Angular
docker rm -f ng-app-build
메모: 용기 경 로 는 이전 Angular 컴 파일
WORKDIR
경로 가 필요 합 니 다.마지막 으로 Angular 프로젝트 루트 디 렉 터 리 에 파일 만 들 기
Dockerfile.package
:FROM nginx
COPY _nginx/default.conf /etc/nginx/conf.d/
RUN rm -rf /usr/share/nginx/html/*
COPY /dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
인 자 는 이전 절 과 약간 같 습 니 다. 추출 한
dist
을 미 러 에 있 는 Nginx 기본 실행 디 렉 터 리 에 기록 할 뿐 입 니 다.이 동시에 Angular 프로젝트
_nginx/default.conf
를 Nginx 의 설정 파일 로 하고 프로젝트 에 Nginx 설정 을 포함 합 니 다. 예 를 들 어 HTML 5 경로 정책 을 사용 할 때 404 문제, GZip 등 을 처리 해 야 합 니 다.그러나 저 는 이곳 의 Nginx 설정 을 비교적 간단하게 해 야 합 니 다. 일부 GZip, SSL 을 역방향 대리 층 에 통일 시 켜 완성 해 야 합 니 다. 용기 화 된 응용 은 한 기계 에 하나의 응용 만 배치 할 수 없 기 때 문 입 니 다.
다음은 Angular 응용 에서 가장 간단 한 설정 정보 입 니 다.
server {
listen 80;
server_name localhost;
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;
}
}
try_files
접근 경로 가 파일 을 찾 지 못 했 을 때 index.html
파일 로 대체 할 수 있 습 니 다. 이것 이 바로 Angular HTML 5 경로 정책 의 중요 한 일환 입 니 다.마지막 으로 생산 환경 미 러 구축:
docker build -f Dockerfile -t ng-app .
물론 이때 의 컴 파일 Angular 미 러 는 이미 존재 하 는 의미 가 없다.
docker rmi -f ng-app-build
2. 앵 귤 러 실행
우 리 는 이미 존재 하 는 미 러 를 볼 수 있 습 니 다:
docker images
물론 상기 Nginx 설정 은 하나의
80
포트 를 사용 하기 때문에 직접 사용 할 수 있 습 니 다.docker run -d -p 80:80 \
--name web \
ng-app
도 메 인 이름 이 호스트 에 연결 되 어 있 으 면 직접 접근 할 수 있 습 니 다.이로써 Angular 용기 화 된 모든 내용 입 니 다. 다음은 Nginx 역방향 에이전트 Docker 응용 부분 입 니 다. 만약 에 이렇게 했다 면 다음 장 을 무시 하 십시오.
Nginx 역방향 에이전트
절대 다수의 경우 하나의 프 록 시 용 기 를 이용 하여 여러 사이트 에 전송 하기 때문에 한 Angular 사이트 에서 직접
80
포트 를 사용 하지 않 고 다른 프 록 시 층 을 통 해 전송 하 는 경 우 는 드물다.이전에 저 는 jwilder / nginx - proxy 미 러 를 사용 하여 처리 하려 고 했 습 니 다. 정말 편리 합 니 다. 그러나 SSL 부분 에서 저 는 많은 고생 을 했 습 니 다. 마지막 으로 포기 하고 호스트 에 Nginx 를 직접 설치 하 는 것 으로 바 꾸 었 습 니 다.
Angular 용기 화 과정 에서 저 희 는 SSL, GZip 등 을 설정 하지 않 았 습 니 다. Nginx 서비스 에 필요 한 설정 항목 만 유지 할 뿐 이 부분 은 역방향 프 록 시 층 에 두 고 완성 할 수 있 습 니 다.
이 과정 은 Nginx 를 설치 하고 acme. sh 를 설치 하여 Let 's Sencrypt 인증 서 를 발급 하 며 Nginx 를 설정 하고 실행 하 는 세 가지 절 차 를 포함한다.
1. Nginx 설치
CenOS 7 을 예 로 들 면, 더 많은 시스템 은 자체 구 글 을 사용 하 세 요:
sudo yum install epel-release
sudo yum install nginx
# Nginx
sudo systemctl start nginx
2. acme. sh 를 통 해 인증서 발급
acme. sh 는 국내 에서 큰 소 가 Let 's Sencrypt 인증 서 를 간소화 하고 자동 으로 인증 서 를 갱신 하 는 데 사용 하 는 것 으로 거의 처음 설치 한 후에 후속 적 으로 인공 적 으로 관여 할 필요 가 없다.
Let 's Sencrypt 는 얼마 전 지원 범 역 을 발 표 했 기 때문에 이번에 도 *. ng - alain. com 범 역 인증 서 를 신청 했다.
acem. sh 설치:
curl https://get.acme.sh | sh
여기 서 저 는 DNS 를 사용 하여 증 서 를 발급 합 니 다. 현재 몇 십 가지 서비스 업 체 를 지원 합 니 다. 물론 아 리 클 라 우 드 를 포함 합 니 다.
export Ali_Key="aaaaaaaaaaa"
export Ali_Secret="xxxxxxxxxxxxxxxx"
acme.sh --issue --dns dns_ali -d ng-alain.com -d *.ng-alain.com
Ali_Key
와 Ali_Secret
는 대응 하 는 알 리 클 라 우 드 의 Access key 로 DNS 권한 을 부여 해 야 합 니 다.마지막 으로
--installcert
를 이용 하여 Nginx 에 필요 한 인증서 파일 을 추출 합 니 다.acme.sh --installcert \
-d ng-alain.com \
--key-file $(pwd)/proxy/certs/ng-alain.com.key \
--fullchain-file $(pwd)/proxy/certs/fullchain.cer \
--reloadcmd "service nginx force-reload"
acme. sh 는 이 명령 의 모든 세부 사항 을 기록 하고 자동 재계약 이 실 행 된 후에 다시 실행 합 니 다.이 중
service nginx force-reload
은 명령 집행 이 완료 되면 재 부팅 nginx
을 통 해 인증 서 를 즉시 효력 을 발생 시 키 는 것 을 말한다.전체 과정 에서 저 는 매우 순 조 롭 고 오류 가 없습니다. acme. sh 도 많은 설명 문서 가 있 습 니 다. 중국 어 를 포함 하고 더 많은 세부 사항 은 스스로 읽 으 십시오.
3. Nginx 실행
이전에 Nginx 를 설치 할 때 우 리 는 이미 시작 되 었 습 니 다. 그러면 우 리 는
/etc/nginx/nginx.conf
에 Nginx 설정 을 작성 하면 됩 니 다.두 가지 주요 세부 사항 이 있 습 니 다. SSL 설정 과 프 록 시 전환 Angular 용기 인 스 턴 스 포트 설정 입 니 다.
전자 에 대해 상기 명령 을 실행 할 때 경 로 를 유지 하면:
ssl_certificate /root/proxy/certs/fullchain.cer;
ssl_certificate_key /root/proxy/certs/ng-alain.com.key;
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
ssl_session_cache shared:SSL:10m;
ssl_prefer_server_ciphers on;
프 록 시 전환 에 대해 서 는 Angular 용기 의 포트 를 표시 합 니 다. 예 를 들 어 용 기 를 실행 하 는 명령 은 다음 과 같 습 니 다.
docker run -d -p 80:80 \
--name web \
ng-app
우 리 는 다른 맵 포트 를 다시 바 꿀 수 있 습 니 다. 예 를 들 어
8001
.docker kill web
docker run -d -p 8001:80 \
--name web \
ng-app
그리고 Nginx 에 해당 하 는 프 록 시 전환 설정:
server {
listen 80;
server_name ng-alain.com www.ng-alain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name ng-alain.com www.ng-alain.com;
location / {
proxy_pass http://127.0.0.1:8001/;
}
}
server
여기 에는 두 개의 쌍 80
과 443
이 있 습 니 다. 전 자 는 강제로 이동 https
합 니 다. 사용자 가 http
사 이 트 를 방문 하 는 것 을 원 하지 않 을 때.server_name
감청 할 도 메 인 이름 지정 proxy_pass
프 록 시 전송 영역 을 지정 합 니 다. 8001
포트 는 상기 Angular 응용 이 처 한 용기 에 비 친 포트 설정 파일 이 유지 되면 설정 파일 이 올 바른 지 확인 하기 위해 서 먼저 실행
nginx -t
할 수 있 습 니 다.마지막 으로 Nginx 를 다시 시작 합 니 다.
service nginx force-reload
3. 지속 적 인 배치
상기 일련의 Docker 명령 은 매우 번 거 롭 습 니 다. 이 모든 것 을 자동화 해 야 합 니 다. 전문 적 인 이름 은 지속 적 인 배치 (약칭: cd) 입 니 다.ng - alain. com 은 현재 DaoCloud 를 사용 하여 이 일 을 완성 하고 있 습 니 다.
DaoCloud 는 [안전 미 러] 라 는 구축 기능 을 제공 하고 세 가지 절차 로 나 뉜 다. 컴 파일, 추출, 포장 이다.상기 Angular 프로젝트 의 컴 파일, 제공, 발표 와 같 습 니 다.
프로젝트 에서 만 들 기
daocloud.yml
;이것 은 DaoCloud 가 제공 하 는 사용자 정의 프로젝트 프로 세 스 의 정의 파일 입 니 다. 위 에서 알 고 있다 면 다시 보면 낯 설 지 않 을 것 입 니 다.다음은 ng - alain. com 의 완전한 daocloud.yml
내용 입 니 다.version: 3
stages:
- compile
- deploy
release:
stage: compile
job_type: lite_image_build
only:
branches:
- master
allow_failure: false
compile:
build_dir: /
cache: false
dockerfile_path: /Dockerfile.compile
extract:
- /usr/src/app/dist
- /usr/src/app/_nginx/default.conf
package:
build_dir: /
cache: false
dockerfile_path: /Dockerfile.package
self:
stage: deploy
job_type: DCS_deploy
only:
branches:
- master
allow_failure: false
dependencies:
- release
app_name: web
cluster_id: ""
주의: 그 중
extract
반드시 전체 경 로 를 포함해 야 한다.총화
생산 환경 을 용기 화 하 는 것 은 이미 구조 기준 이다. 상기 한 것 은 ng - alain. com 을 배치 하 는 일부 정리 일 뿐 실제 발생 할 수 있 는 문제 가 더 많 을 것 이다. 여러분 은 다음 과 같은 답 을 찾 을 수 있다.
이상 의 모든 코드 는 delon 에서 찾 을 수 있 습 니 다. 개인 경로 가 다 를 수 있 습 니 다.
(끝)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Access Denied 오류에서 AWS amplify angular 앱 오류 수정AWS amplify에 angular 응용 프로그램을 배치할 때 첫 번째 로그인 페이지를 불러올 수 있습니다.그러나 라우터에서 경로를 정의하고 액세스하려고 하면 액세스가 거부되는 오류가 발생합니다. 솔루션은 AWS ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.