AWS를 사용해서 실제서비스 배포하기
1. AWS EC2 인스턴스 생성
- Amazon Linux 2 AMI 선택
- 인스턴스 유형 선택 - t2.micro
- 보안그룹 규칙 추가 - HTTP 유형으로 포트 80번, 0.0.0.0/0
- 키페어 생성
2. AWS EC2 인스턴스 접속하기
- PuTTy 사용
- PuTTy 다운로드 링크 : https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
Download PuTTY: latest release (0.77)
This page contains download links for the latest released version of PuTTY. Currently this is 0.77, released on 2022-05-27. When new releases come out, this page will update to contain the latest, so this is a good page to bookmark or link to. Alternativel
www.chiark.greenend.org.uk
- PuTTYgen 으로 키페어 확장자 변환
- PuTTY를 사용하여 서버에 접속하기 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/putty.html
PuTTY를 사용하여 Windows에서 Linux 인스턴스에 연결 - Amazon Elastic Compute Cloud
프라이빗 키의 암호는 추가 보호 계층입니다. 프라이빗 키가 노출되더라도 암호 없이 사용할 수 없습니다. 암호문 사용의 단점은 인스턴스에 로그온하거나 인스턴스에 파일을 복사하기 위해 사
docs.aws.amazon.com
3. Amazon linux docker 설치
Amazon ECS에서 사용할 컨테이너 이미지 생성 - Amazon Elastic Container Service
Amazon ECS에서 사용할 컨테이너 이미지 생성 Amazon ECS는 작업 정의에 Docker 이미지를 사용하여 컨테이너를 시작합니다. Docker는 사용자가 컨테이너에서 분산 애플리케이션을 구축, 실행, 테스트 및
docs.aws.amazon.com
- docker 설치하기
- sudo yum update -y
sudo amazon-linux-extras install docker -y
- sudo yum update -y
- Docker 서비스 실행하기
- sudo service docker start
- Docker 상태 확인하기
- service docker status
- sudo 없이 docker를 사용하기
- sudo usermod -a -G docker ec2-user
- PuTTy exit 후 다시접속
4. Docker-compose 를 사용하여 배포하기
- docker-compose 실행파일 설치
- docker-compose.yaml 만들기
- yaml 을 만들때 vi docker-compose.yaml 입력 후 a 눌러서 끼워넣기가 뜨면 yaml 코드 입력한다.
- vi 는 파일을 생성하거나 수정하는 커맨드이다.
- vi 에서 코드 입력 후 esc 누르고 :wq 입력하여 빠져나온다.
- 비정상적으로 종료했을때 vi -r docker-compose.yaml 로 다시 복구할 수 있다.
- 또한 ls -all 로 임시파일을 확인한 후에
- rm .docker-compose.yaml.swp 로 임시파일을 삭제해준다
- docker-compose.yaml 실행하기
- ERROR: manifest for dnwnmin/docker-memo:version3 not found: manifest unknown: manifest unknown
- .yaml 코드의 image 를 dnwnmin/docker-memo:version1 (레포지토리 네임) 으로 변경하였더니 실행.
- EC2 public_ip 로 접근해보기
*** PuTTy 에서 vi docker-compose.yaml 입력후 a 눌러서 수정
* CI / CD
Continuous Integration : 여러 개발자들이 함께 개발을 하는 과정에서 코드가 잘 작동 하는지를 확인하는 것
- 배포를 하기 전에 이 배포를 해도 괜찮은 상태인지 확인하기 위해서 CI를 사용
- 테스트 코드 작성
- 자동화된 테스트 실행
Continuous Deployment : 반영된 소스코드가 실제 서비스에도 자동으로 반영이 되게 하는 것
- 도커를 사용하면 Continuous Deployment 과정이 더 쉽고 빠르게 진행
- Events 특정이벤트 발생했을때
- ex) on: push
- Workflows 어떤 작업
- ex) Job: run unit tests (Job 끼리 순차적으로)
- ex) action check out (Job 안에서 action 사용가능)
- Runner : Job들은 독립적으로 Runner 라는 컨테이너에서 실행된다.
- ex) Job: run unit tests (Job 끼리 순차적으로)
- .gitgub/workflows/workflow.yaml 생성
github action 구조
- Workflows: 자동화 하려고 하는 과정들
- 한개 또는 여러개의 job으로 구성되며, event에 의해서 시작됩니다.
- 빌드, 테스트, 릴리즈, 배포 등의 작업이라고 생각하면 됩니다.
- Events : workflow를 trigger되는 행동들
- push, pull request, cronjob 등이 있음.
- Jobs: 동일한 runner에서 실행하려고하는 여러개의 step의 모임
- Steps: job을 구성하는 한개의 커맨드로 action이거나 shell command로 구성됩니다.
- Actions: 다른 곳에서 정의된 커맨드의 모음
- Runner: Job이 실행되는 환경
github action을 사용하여 CI 파이프라인 구축하기
1. pip install pytest
2. app.py 의 기능 분리 (flask API코드 와 기능 코드)
3. 기능 test 코드 작성
4. 테스트코드 실행
pytest
5. github 에 레포지토리 생성하고 푸쉬
6. github action 사용
- github에서 제공하는 자동화 툴
- github action은 yaml로 작업을 정의한다.
- https://docs.github.com/en/actions/learn-github-actions
Learn GitHub Actions - GitHub Docs
Managing issues and pull requests
docs.github.com
7. main branch에 push할 때 test를 하게 만들기
.github/workflows/ 하위에 yaml 파일을 만들기
name: ci-pipeline
on:
push:
branches:
- main
jobs:
run-test-code:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: "3.8"
- run: pip install -r requirements.dev.txt
- run: pytest
- 깃 커밋 푸쉬 하고 레포지토리 Actions 에서 확인
8. main branch에 push할 때 docker image를 빌드하고 push 하게만들기
도커 Access token 받기
https://hub.docker.com/settings/security
Access token을 생성한 뒤 클립보드에 복사
github repository에서 settings를 누른 뒤, 왼쪽 메뉴에서 secret
- DOCKERHUB_TOKEN : dockerhub에서 생성한 token
- DOCKERHUB_USERNAME: docker hub username
9. github action을 사용하여 CD 구축하기
서버 접속에 필요한 ssh key 등록
서버에 접속할 수 있는 주소 Private IP 등록
3주차 숙제
1. AWS EC2 인스턴스 생성
2. Docker hub에서 Repository 생성
3. git hub 에서 repository 생성 후에 push
4. git hub repository - settings - secrets 추가
- DOCKERHUB_USERNAME
- DOCKERHUB_TOKEN (dockerhub - Account Settings - security - New Access Token)
- HOST (ec2 인스턴스 퍼블릭 ipv4 주소)
- PRIVATE_KEY (.pem | pbcopy)
5. 서버에 접속
- ssh -i ~/Downloads/sparta-docker.pem ec2-user@퍼블릭 ipv4 주소
6. docker 설치
- install docker amazon linux 2
- install docker-compose amazon linux 2
7. docker-compose.yaml 파일 수정
services:
my-favorite-star:
image: dnwnmin/my-favorite-star:latest
port:
- 80:5000
8. 서버에 docker-compose.yaml 코드 넣기
- vi docker-compose.yaml
- docker-compose up -d
- dnwnmin/my-favorite-star:latest 이미지가 없으므로 에러발생
9. (venv)이미지 생성 후 dockerhub 에 push
- docker build . -t dnwnmin/my-favorite-star:latest
- docker push dnwnmin/my-favorite-star:latest
- dockerhub repository 에서 확인
10. docker-compose up -d 실행
11. 퍼블릭 ipv4 주소 로 진입해서 서비스 확인
12. mongo DB의 데이터를 넣어주기 (09:33)
'AI 웹 개발 과정 > Docker' 카테고리의 다른 글
django - docker - postgreSQL (0) | 2022.08.09 |
---|---|
docker 명령어 (0) | 2022.08.08 |
django 프로젝트 docker 사용하여 ec2 배포까지 (0) | 2022.07.29 |
Docker 실무 - 2주차 (0) | 2022.07.10 |
Docker 실무 - 1주차 [image, container, registry, 실행, 공유] (0) | 2022.07.09 |