클라우드 서비스 공급자는 클라우드 기반 플랫폼, 인프라, 애플리케이션 또는 저장소 서비스를 제공하는 타회사입니다. 집주인이 전기 또는 가스와 같은 공과금을 납부하는 것과 마찬가지로 비즈니스 요구 사항에 따라 회사는 일반적으로 클라우드 서비스 사용량에 대해서만 비용을 지불해야 합니다.
대표적으로 아마존의 AWS(Amazone Web Service), 구글의 GCP(Google Cloud Platform), 마이크로소프트의 Azure등에서 서버컴퓨터를 제공해줍니다.
GCP에 가입후 Compute Engine의 VM(가상머신) 인스턴스를 생성해줍니다.
인스턴스가 생성되면 ssh를 눌러 터미널창으로 들어간뒤 sudo apt update 명령어로 apt(우분투의 패키지 관리툴)을 업데이트해줍니다.
그 다음 sudo apt install docker.io를 실행후 Y를 입력 도커를 컴퓨터에 설치해줍니다.
docker-compose를 설치해주는데 맥북m1칩일 경우 로컬에서 mysql사용을 위해 써주었던 yaml파일의 platform: linux/x86_64 또한 쓸 수 있는 버전을 설치해주어야 합니다.
따라서 apt install docker-compose 대신 다른방법을 사용합니다.
https://docs.docker.com/compose/cli-command/#install-on-linux
mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose
차례대로 한줄씩 입력하면 docker-compose를 사용할 수 있습니다.
cat /etc/group
명령어를 입력해 리눅스 권한 파일을 보면 docker에 사용자가 등록되어있지 않습니다.
sudo usermod -aG docker GCP아이디
명령어로 docker 그룹에 GCP계정을 추가합니다.
이제 쉘을 껐다 키면 sudo없이 docker를 사용할 수 있습니다.
git에서 프로젝트를 clone 합니다.
.env파일들은 git에 업로드 하지 않았기 때문에 새로 만들어주어야 합니다.
해당 폴더에서 vi .env.prod
를 입력하여 파일로 들어갑니다.
i를 눌러 해당내용을 복사해주고 esc -> :wq 저장하고 종료해줍니다.
ls -al
로 생성된 env 파일을 확인할 수 있습니다.
(docker가 실행될때 env파일의 내용을 환경변수로 넣어주기 때문에 따로 추가설정해주지않아도 사용이 가능합니다. - 도커 내부접속후 env 명령어 실행으로 확인가능, 나가기 exit)
해당 프로젝트의 yaml파일이 있는곳으로 이동하여
docker compose -f docker-compose.prod.yaml build
docker compose -f docker-compose.prod.yaml up
도커를 빌드해주고 실행해줍니다.
docker compose -f docker-compose.prod.yaml up -d
포그라운드 방식이아닌 위와같은 백그라운드 방식으로 실행해야 다른 명령을 추가로 입력할 수도있고 쉘을 꺼도 서버가 종료되지않고 돌아갑니다.
소스코드 수정시 git pull 후 다시 빌드해줍니다.
docker logs 컨테이너아이디
도커 로그보기
docker logs 컨테이너아이디 -f
도커 로그 계속 해서 보기
docker logs 컨테이너아이디 -f --tail=3
마지막 3줄보기
(로그보기를 나가도 실제 서버가 종료되진 않습니다.)
배포를하고 서버도 띄웠는데 해당 IP주소로 접속을 해봐도 접속이 되지않는 이유는 방화벽이 막고있기 때문입니다.
해당 서비스의 포트는 방화벽을 뚫어줘야 이용이 가능합니다.
VPC네트워크의 방화벽으로 들어가 방화벽 규칙을 만들어줍니다.
규칙의 이름을 정해주고 (태그 이름과 같아도됨)
태그를 정해줍니다.(태그를 붙이면 규칙적용됨.)
IPv4범위는 모든 이용자를 허용해주고 tcp: 3000번 port를 열어줬습니다.
태그를 붙여주고싶은 해당 인스턴스를 수정해줍니다.