Day 38

김정동·2021년 12월 22일
0


(도커)

미리보기과정에서 아이피주소가 아닌 도메인 주소로 보이게 하는법

네트워크서비스 - 부하분산기 - 수정

호스트 경로 및 규칙을 보면 모든 경호는 백엔드 버킷으로 연결되고 있다.
근데 저번시간에 ssr/ssg로 나눠서 접속하게 했음 일단 되게해보자

백엔드 구성으로 돌아가서

백엔드 서비스 만들기 클릭

이론
현재 프런트엔드 서버를 만들고 로드밸런서랑 연결해서 돌아가게 하는중
(디비랑 백엔드는 하고있음)
여기서의 백엔드는
로드밸런서에서 스토리지로갈지, 프런트엔드의 컴퓨터(서버)로 갈지 하는 부분임
프런트는 로드밸런서의 앞부분을 이야기함

근데 여기서 바로 연결이 안됨
로드 밸런서는 컴퓨터에 바로 연결하는게 아니고 일정 공간과 연결되어있음, 이게 인스턴스 그룹임
로드밸런서 자체가 로드(부하)를 분산시켜주는거라
공간을 지정해서 거기 안에 여러개의 프런트를 만들어두고 분산시키는 역할인것
그안에서 이제 라운드로빈인지 리스트 커넥션인지는 로드밸런서 마음

-> 그래서 프런트엔드 서버 한개가 아니고 공간(인스턴스 그룹) 에 연결해야함
-> 그래서 인스턴스 그룹생성+ 그안에 프런트엔드 서버넣고 + 해야됨

그룹 먼저 만들자
compute engine - 인스턴스 그룹 - 그룹만들기


여기서 stateless(상태가없음 복붙으로 서버를 마구늘릴수있음), stateful(메모리, 변수에 담고 있어서 복붙안됨), 비관리형(직접관리, 위에 두개는 구글이 오토스케일링같은거 해줌)

이번엔 기존에 있던 vm을 쓰기 위해서 비관리형 인스턴스로 함

인스턴스 그룹 만들었으니

이제 백엔드 서비스에서 이 인스턴스 그룹을 넣음
https 로드밸런서 - > 백엔드 서비스

위에 프로토콜 은 http로 둔다
설명

주소창에 주소를 입력하고 들어가면(https) https로드밸런서에서 백엔드/스토리지/프런트엔드 어디로보낼지 고민함
그래서 모든 접속을 https? https로 할지 이부분이 프로토콜인것
이건 상황에 따라 다름, 항상 s 붙은 https가 좋은것만은 아님, 보안 알고리즘이 걸렸기 때문에 한둘의 접속은 차이가 없지만 커질수록 차이가 커짐
그래서 로드밸런서의 접속은 https, 그 접속 은 http로 하도록 함, 만약 보안이 리얼 중요하다면 https로 바꿈

여기서 아까 만든 인스턴스 그룹 + 포트번호는 3000 으로 함

상태확인(health checker)

헬스체커는 이 연결이 살아있는지 죽었는지 확인하는 거라고 보면 된다.
실제 프로그램이 작동되고 있어야함

  • 상태확인 생성
    이름은 자유(규칙에 맞게쓰면 좋음)프로토콜은 HTTP- 포트는 3000, 로그는 사용안함
    기준은 기본값으로 하고 저장하면됨

그럼 서비스도 만들어진셈

그럼 둘중에 어디로 가야할지 경로 및 규칙을 다시 지정해야함
호스트 및 경로 규칙으로가서


서버사이드 렌더링 할 것들(보드나 마켓)인경우는 vm으로 보내기, 나머지 정적인 것들은 버켓으로 보내겠다. 이렇게 설정하면된다.

이후 업데이트를 해주면 완료가된다.

이후 서버가 켜져있어야 되므로 vm인스턴스에서 yarn build, yarn start를 해준다

그러고 나서 로드밸런서로 들어와서 봤을 때 정상으로 표시가 되어있어야한다.

이렇게 하면 주소를 입력했을 때 og(미리보기)가 IP주소가 아닌 vm주소(도메인주소)로 나와야함

왜 도커를 쓰는가

저번시간에 배포하면서 못마친게 있음
구글컴퓨터 빌려서 서버를 구동시켰음(yarn build, yarn start)
근데 gcp 끄면 사실 컴퓨터도 꺼졌음 그래서 항상 켜있게해야함.

이걸 위해서 도커가 필요한셈

도커를 설치해보자


도커 검색 - 도커 페이지 - get started - 다운로드 고고

도커는 뭐하는친구?


응애

근데 사람만다 쓰는 운영체제가 다를 수 있음
그래서 회사에 입사하면 버전을 다 맞춰줘야하니까 설치를 해줌 + 근데 os는??

그래서 vm을 썼었음 컴퓨터 안에 가상머신 위에서 공통된 OS, 버전으로 사용해서 함

근데 그렇게하니까 개느림

근데 도커를 쓰면
부팅 등 운영체제의 핵심기능(커널)은 공유하는 가상머신, 더 가볍게 쓸 수 있게됨

  • 버전또한 같게 됨

도커의 장점
가벼운 가상 컴퓨터
개발/배포환경 통일
프로그램 미리 설치

그럼 이제 새로온 사람이 오면 docker를 줌 -> build하면 끝


이제는 도커 또한 dockerhub에서 github마냥 이미지를 공유할 수 있게됨
환경도 같이 맞춰서 오류나 개발을 공유할 수 있는것

docker --version
docker-compose --version 하면 나와야함
docker search ubuntu
우분투 관련된 명령어를 볼 수 있음

이후 vs코드/build폴더에서 Dockerfile을 만듬

FROM node:16을 하면 node, npm , yarn 이 이미 깔려있음

사용법

  • vscode 안에 있는 소스를 도커안에 복사를 해야함
    근데 node_modules 가 있음, 이건 도커를 쓰는 의미가 없음왜냐면 yarn install 하면 생기는건데 그럼 버전공유가 안되기 때문 그래서 node_modules는 안가져온다
  • yarn install
  • yarn start

하면 내 운영체제, 내 버전에 상관없이 동일한 환경에서 개발을 할 수 있게 됨 + 백그라운드로도 실행되서 vm을 끄지 않고 실행할 수 있음

FROM node:16

WORKDIR /test_build/
COPY . /test_build/

RUN yarn install
RUN yarn build:ssr

CMD yarn start

COPY . 는 모든 파일들을 가져와서 이런 폴더에 넣는다
WORKDIR 디렉토리를 지정해준다
CMD 명령어는 굽는과정에서 제외한 명령어임


node_modules는 이렇게 .dockerignore로 없앤다
docker-compose.yaml도 하나 만들어보자

version 은 버전
services: 프런트인지, 백엔드인지임, 우리는 프런트엔드 하나(컴퓨터 하나를 뜻함)

test_build: 이런 폴더이름
build: 빌드할것임
context :
dockerfile: 어떤 도커파일? Dockerfile(아까만든거)

이렇게 하고 나서 ls -al
하면 docker-compose.yaml로 Dockerfile을 빌드함
우리는 compose를 build하면 Dockerfile안에 있는 명령어 하나하나를 실행시켜서 이미지를 굽는다
(CD를 굽듯이)

이러고 허브에 올리던지 공유하던지 하면 된다.

명령어

docker-compose build
Succesfully built 하면 성공적으로 됐다는 뜻임
docker-compose up
하면 실행된다

도커에 들어가보자


옆에 터미널에서 하나 더 실행한다.
docker ps
프로세스를 확인하기
컨테이너 아이디, 상태 등등 보여줌

여기서 한거랑 밖에서 한거랑 다르다

docker exec -it 컨테이너 아이디(방금확인함) /bin/bash

이렇게하면 도커안에 접속한것 (이름도다름)
ls 쳐보자
cd .. 해서 상위폴더에서 봐도 뭔가 보인다.

지금 브라우저에서 localhost:3000하면 연결될까? 안된다
local호스트는 지금 내 컴퓨터이기 때문
그래서 도커의 3000번 포트를 열어줘야한다, 이걸 포트포워딩이라고함

version: "3.3"

services:
  test_build:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 3000:3000

ports 부분을 수정하면된다.
내 컴퓨터 3000번을 도커 3000번으로 포워딩해줘

저장하고 원래 있던 터미널을 종료 (ctrl+c)
docker-compose up 만하면 된다.

짜잔 접속 완료

만약 이렇게 앞을 4000번으로 바꾸면?

4000번으로 바꿔야 한다

만약 yarn start -p 3005로 했다면
4000:3005로 바꿔야함

그런데 코드들만 바꿔도 결국리빌드 하더라도 yarn install 부터 다시하게됨

FROM node:16

WORKDIR /test_build/
COPY ./package.json /test_build/
RUN yarn install

COPY . /test_build/
RUN yarn build:ssr

CMD yarn start

이렇게 하면 안바뀐건 하지 않고 copy과정에서 바뀐 파일(코드만 바뀜)을 보고
yarn install은 하지 않고 build를 해줌
(package.json과 yarn.lock은 세트라고 생각)

근데 아직 백그라운드에서 실행되지 않고 그냥 실행되고 있다
docker-compose up -d

이렇게하면 알아서 됨
docker ps 를 쳐서 잘 돌아가는지 확인할 수 있다.
종료는 docker-compose stop으로 종료할 수 있다.

이제 gcp에 적용시켜보자
코드들을 다시 깃에 올리고,
compute engine - vm 인스턴스 고고

인스턴스에서 git pull origin master 파일을 교체

아까 만든게 바뀐걸 볼 수있음
그럼 build 폴더로 이동 (cd test_build)

근데 도커가 없단다
sudo apt install docker.io 시킨대로 설치하자

docker-compose도 없단다
sudo apt install docker-compose

하면 둘다 깔았고 --version 명령어를 통해서 버전을 확인할 수 있다.

이제드디어 빌드할 수 있다


docker-compose.yaml이 있는지 꼭 확인하자

sudo docker-compose build 빌드 고고

warning이 뜨면 정상이다

여기서 sudo vdocker-compose up -d 하면 구글 컴퓨터에서 도커를 실행함

아까 구매한 도메인주소 로 들어가보면 성공이다
언제, 어디서든 된다는것
완전한 배포를 한것이다

알았으면 docker-compose stop
docker-compose logs
하면 로그를 볼 수 있다.

http접속을 이제 막아보자

http로드밸런서 - 호스트 및 경로 규칙 수정 - 고급 호스트 및 경로 규칙- 다른호스트/경로로 클라이언트 리디렉션 - https리디렉션에 체크

이렇게 뜨면 설정완료

www로도 접속할 수 있게 해보자

네트워크 서비스 - DNS - 레코드 모음 만들기 -
dns 이름 www
레코드 유형 cname
표준이름은 내 도메인으로 만들자

이럼 www로 들어가도 할 수 있다.

profile
개발자 새싹🌱 The only constant is change.

0개의 댓글