김묭의 자기개발

배포 관련 자료 본문

내일배움캠프/최종 프로젝트

배포 관련 자료

포령 2023. 7. 4. 22:13

배포 순서

도메인 등록 >> 결제

등록 승인 후 → 호스팅 영역

manager 검색으로

AWS Certificate Manager

SSL/TLS 인증서를 손쉽게 프로비저닝, 관리, 배포 및 갱신

인증요청 >

버지니아 북부, 서울 인증서 등록

1. 도메인

*2. .도메인 * = 모두 (와일드 카드)

각나라에서 2개씩

라우터 53 도메인 아이디 클릭후 레코드 생성하기

S3 버킷 만들기

객체 - 파일 업로드 되는 공간

속성 -

속성 → 정적 웹 사이트 호스팅 편집 = 활성화

인덱스 문서(index.html), 오류문서 입력

버킷 객체에서 업로드 → 프론트 파일과 폴더 업로드하기

권한 - 버킷 정책

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "AllowAllAccess",
			"Effect": "Allow",
			"Principal": "*",
			"Action": [
				"s3:PutObject",
				"s3:PutObjectAcl",
				"s3:GetObject",
				"s3:GetObjectAcl",
				"s3:DeleteObject"
		],
		"Resource": "arn:aws:s3:::(버킷이름)/*"
		}
	]
}

버킷 정책은 정책 생성기가 있어서 이용 가능

정책 사용해서 입력하는 것으로 권한의 권한 개요가 퍼블릭으로 변경되는 것을 확인

확인후

클라우드 프론트 검색 → 배포생성

대체 도메인 이름 (도메인 이름 입력)

엔드포인트 설정 클릭

SSL 인증서 선택 * 없는 것

기본값 루트 객체 - index.html

웹 어플리케이션 방화벽 = 비활성화

생성

원본탭 클릭 후 편집

라우터 53 → 레코드 생성

트래픽 라우팅 대상 >> 클라우드 프론트 배포에 대한 정책

배포선택

front 배포 완료

인증서 받고 버지니아 북부 (프론트)

S3 (프론트 파일 전체 올리기)

정책 정하기

클라우드 프론트 S3와 연결

라우터 53에서 A레코드 생성

백엔드 배포

인스턴스 시작

<예지>

백 엔드 베포

  1. 인스턴스 우분투로 생성 -> 보안그룹 클릭 -> 인바운드 규칙-> http 80. Https 443, ssh 22, 사용자지정 tcp 8080,8000으로 보안규칙 수정
  2. ec2로 돌아와서 인스턴스 클릭 후 연결 -> 연결 -> 까만화면(리눅스 터미널)으로 이동 -> 깃허브 레포지토리 클론-> venv생성 -> requirements 다운
  3. mysql이 안깔리는 오류가 있기 때문에 sudo apt-get install mysql-client -> sudo apt-get install libmysqlclient-dev -> sudo apt-get install libssl-dev 하고 pip install mysqlclient 해서 되는지 확인
  4. 안되면 sudo apt update -> sudo apt install build-essential -> sudo apt install python3-dev libmysqlclient-dev -> sudo apt install pkg-config -> pip install mysqlclient 해서 되는지 확인
  5. 안되면(error: subprograms-exited-with-error오류) sudo apt install pkg-config 하고 다시 pip install mysqlclient로 확인
  6. .env 파일 설정하기 -> sudo vi .env 해서 vi편집기로 접속 -> i로 insert모드로 접속 -> 장고 secretkey 넣어주기! -> esc :wq해서 편집기 나가기 -> sudo cat .env로 잘 들어갔는지 확인!
  7. sudo vi mysettings.py 로 vi 편집기 진입 -> i 눌러서 Insert 모드 진입 -> 내용 넣어주기! -> esc :wq 해서 편집기 나가기
  8. 다시 sudo vi .env 해서 소셜 로그인 내용 넣어주기 내용 동일
  9. 다 되면 python manage.py makemigrations -> python manage.py migrate로 마이그레이션, migrate 해주기 -> python manage.py runserver로 잘 되는지 확인
  10. Gunicorn 깔아주기 -> pip install unicorn -> sudo vim /etc/systemd/system/gunicorn.service 해주기 -> 안에 내용 넣어주기
[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/back_test
EnvironmentFile=/home/ubuntu/back_test/.env
ExecStart=/home/ubuntu/back_test/venv/bin/gunicorn \\
        --workers 2 \\
        --bind unix:/tmp/gunicorn.sock \\
        Recipe_Soup.wsgi:application

[Install]
WantedBy=multi-user.target
  1. nginx 깔아주기 -> sudo apt install nginx -> sudo vim /etc/nginx/sites-available/back_test -> 안에 내용 넣어주기
server {
        listen 80;
        server_name miyeong.net;

        location = /favicon.ico { access_log off; log_not_found off; }

        location /static {
                alias /home/ubuntu/back_test/static;
        }

        location / {
                include proxy_params;
                proxy_pass <http://unix>:/tmp/gunicorn.sock;
        }
}
  1. cd /etc/nginx/sites-enabled/ 로 파일 들어가주기 -> ls 로 파일 확인하고 default 있으면 sudo rm default 해서 지워주기 -> sudo ln -s /etc/nginx/sites-available/back_test 로 back_test 만들어주기
  2. sudo systemctl restart gunicorn ,sudo systemctl restart nginx 해서 gunicorn, nginx 다시 시작해주기
  3. sudo systemctl status gunicorn , sudo systemctl status nginx 로 status 확인해서 active 인지 확인해주기 →public ip로 접속해서 잘 되늕지 확인!(page not found)
  4. 로드벨런서 만들어주기 -> create load balancer -> application load balancer 클릭 -> 원하는 로드벨런서 이름 넣어주기 -> mapping에서 다 선택해주기 -> security groups 에서 인스턴스 만들때 설정해주었던 보안그룹 (http, https, 사용자지정 tcp: 8080, 8000에 추가로 mysql넣어주고)선택해주기
  5. listener에서 add listener로 https 추가해주기 -> create target group 만들어주기 -> 인스턴스 선택해주고 대상그룹 이름 원하는데로 정해주기 -> 다음 누르기 -> 사용가능한 인스턴스 체크 후 아래로 이동(아래에 보류중이 것으로 포함) -> 대상 그룹 생성
  6. 만든 타겟 그룹 listener에 추가해주기
  7. Default ssl/tls certificate 에서 -> from acm : *붙은 도메인 인증서 넣어주기 -> create load balancer
  8. Route 53으로 가서 도메인 연결해주기 -> 원하는 도메인에 가서 레코드 생성 눌러주기 -> 레코드 이름에 api 적어주기 -> 별칭 선택후 엔드포인트 :application/classic load balancer에 대한 별칭 선택 -> 리전: 서울 선택 -> 로드 밸런서에 만들어둔 항목 선택 -> 레코드 생성
  9. 만든 레코드 체크 하고 레코드 편집 -> 만들어둔 load balancer에 dns name 복사해서 돋보기 부분에 붙여넣어주기 -> 저장
  10. api.도메인네임 으로 접속해 보기 -> page not found 뜨면 성공!

Git action으로 front 자동 배포 해보기

  1. AWS에서 IAM 사용자로 접속
  2. IAM -> 사용자 -> 만들어둔 사용자 클릭 -> 권한 -> 권한추가 탭에서 권한추가 클릭 -> 직접 정책 연결 선택 ->AdministratorAccess, AmazonS3FullAccess, CloudFrontFullAccess 추가해주기 -> 다음 -> 권한 추가

보안 자격 증명 -> 액세스 키 -> 액세스 키 만들기 -> CLI 선택 -> 아래에 체크박스 선택 -> 다음 -> 엑세스키 만들기 -> CSV파일 다운로드(나중에 찾기 힘듬)

  1. 깃허브 레포지토리로 이동 -> 만들어둔 레포지토리에 settings로 들어가기 -> security탭에 Secrets and variables 클릭 -> Actions 클릭 -> New repository secret 클릭 -> 총 4개 (원래 5개인데 슬렉 알림 빠져서 4개)
    • name: AWS_ACCESS_KEY_ID -> secret: 다운받은 csv파일에 access key id 내용 넣어주기
    • name: AWS_SECRET_ACCESS_KEY_ID -> secret: 다운받은 csv파일에 secret access key id 내용 넣어주기
    -  name: AWS_S3_BUCKET -> secret: S3에서 만든 버킷 이름 넣어주기
  2. -  name: DISTRIBUTION_ID -> secret: CloudFront의 배포 ID 넣어주기
  3. vscode 에서 만든 폴더 열어주기 -> .github 폴더 만들어주기 -> .github폴더 안에 workflows 폴더 만들어주기 -> workflows 폴더 안에 main.yml 파일 만들어주기 -> 미영님이 주신 파일 붙여넣기 -> git add . / git commit -m “내용” / git push origin main 해서 깃허브에 올려주기 -> 깃허브로 돌아가서 actions탭에 가서 파일이 만들어지는지 확인! -> 배포한 url 들어가서 확인하기 -> index.html에 적힌 내용이 잘 들어가있으면 완성!

슬랙 api 이후로 빼고

<예린>

이제 프론트 배포를 시작하지!

  • 도메인을 구매하고 등록하는 과정
  1. 도메인을 구매 - 구매 후에 터미널에서 nslookup 도메인 하면 내 도메인 볼 수 있음
  2. AWS Certificate Manager(ACM)에서

버지니아 북부, 서울 인증서 등록 (그 위에 리전 위치를 변경하면 됨)

1. 도메인

2. *.도메인

각나라에서 2개씩

서울에 있는거는 백엔드 버지니아는 클라우드 프론트? 여기서는 버지니아꺼밖에 안해준대

이거하고 빨리 인증서 발급을 받고싶으면 서울에서 별이 없는 그냥 도메인 아이디를 누르고 들어가서 라우트53 레코드 생성을 눌러서 레코드 생성을 한다! 그러면 순식간에 발급 완료됨

(가비아에서 산 도메인은 네임서버를 등록해야한다? 암튼 그렇대여)

  1. s3 버킷만들기

모든 액세스 풀고 동의하고 만들기

설정을 해야함

만든 버킷에 들어가서 속성탭에 들어가서 정적 웹사이트 호스팅에 들어가서 활성화하고 인덱스/오류 문서에 index.html 넣고 저장

설정했으면 객체댑으로 돌아가서 프론트 파일 올리기 - 파일 형태는 파일추가로 폴더형태는 폴더추가로 추가하고 업로드!

업로드가 완료되면 권한탭에 들어가서 버킷 정책 편집에 들어가서 아래 코드가 되도록 정책편집기에서 정책을 만들고 그거를 버킷 ARN에 추가 하기

{
  "Id": "Policy1688437957564",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1688437932080",
      "Action": [
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::e-elinbucket/*",
      "Principal": "*"
    }
  ]
}

그 다음에는 속성에 들어가서 정적 호스팅 주소 들어가면 프론트화면이 뜬다! 근데 주의요함이 뜸 그거는 지금 주소가 http라서 그런거라 이제 그거를 바꿔줄거임

  • -> 근데 여기서 버킷이 퍼블릭이라고 떠야하나본데 안뜸. 그래서 그 오류 잡는 중 -- 아하 그냥 정책을 복사해서 그렇다고복사 안하고 만들어서 추가

이거를 완료하면 내 버킷에 액세스가 퍼블릭으로 뜸.

  1. CloudFront로 가서 배포 생성(s3와 연동)

배포 생성하기 클릭하고 들어가서 원본도메인 버킷어쩌구 s3붙은 내꺼 선택을 하고 엔드포인트 활성화? 누르고 웹 사이트 방화벽인가 그거는 비활성하고

대체도메인에 내 도메인 주소 넣고 개체?에 index.html 넣고

그 다음에 동작탭으로 들어가서 편집해서 뷰어 프로토콜 정책을 리다이렉트 http와 https로 바꿈 그러면 이제 주의요함이 안뜸

  1. Route53 (내 도메인과 연결)

호스팅 영역에서 레코드 생성하기를 클릭 별칭을 클릭하고 엔드포인트를 CloudFront 배포에 대한 별칭을 선택하고 배포 선택에서 내 도메인 선택하고 레코드 생성하기 그러면 이제 내 도메인주소로 들어가면 프론트 화면을 볼 수 있음!

프론트 수동 배포 완료!

이제 백엔드 배포 시작!

  • http로 배포
  1. EC2

먼저 인스턴스를 시작해서 이름을 설정하고 우분투 선택, 보안키페어 선택(지금은 있어서 있는거 선택했는데 새로 만들어도 됨.), 기존 보안 그룹 선택 그러면 완료 그리고 나서 인스턴스 체크해서 들어가서 보안탭에서 보안그룹에 들어가서 인바운드 규칙 편집 사용자 지정 TCP 8080, 8000  추가해서 총 5개로 만들면 됨. + MYSQL/Aurora도 추가 총 6개여야한다

그 다음으로는 연결 버튼을 눌러서 인스턴스에 연결

  1. 연결이 되면 검은 화면이 뜸. 약간 터미널같은? 터미널인건가?

먼저, ls로 아무것도 없는지 확인 그리고 약간 처음 코딩 프로젝트 시작과 비슷한데

git clone https://github.com/kmy9810/back_test.git

그리고 가상환경을 만들고 여기서 오류가 좀 났는데 파이썬 다시깔고 다시 파이썬 가상환경을 만들고 가상환경을 실행시킴 그리고 리콰이얼먼츠 파일에 있는것들 설치 근데 여기서 mysql때문에 오류가 나서 이것저것 하다가

sudo apt install pkg-config

이거해서 해결하고 다시 mysql깔고 다시 리콰이얼먼츠 깔아서 오류 해결

다하고 구니콘을 깔아 에러노트에 있음 pip install gunicorn

거기 나와있는데로 편집기로 들어가 안에 내용 넣어주기 에러노트 있는거 정리하기

그리고 엔진엑스 그것도 깔기 sudo apt install nginx

이것도 똑같이 안에 내용 바꾸기 그리고 거기서 서버이름 내꺼로 변경

이렇게해서 내 검은 화면 아래에 PublicIPs: 13.125.23.152 로 들어갔을 때 페이지 낫 파운드가 뜨면 성공

  • https로 배포

3) EC2 - 로드 밸러싱

  • 대상그룹 생성

대상그룹 탭에 들어가서 대상그룹 생성하기, 대상 그룹 이름을 설정하고 다음으로 넘어가서 인스턴스 선택, 아래에 보류중인 것으로 포함 버튼 클릭, 대상 그룹 생성

  • 로드밸런서 생성

일단, 로드밸런서 생성하기를 클릭, Application Load Balancer를 생성. 로드 밸런서 이름을 설정해주고 매핑에서는 거기 있는 4가지를 모두 선택하고, 보안 그룹을 디폴트가 아닌 launch-wizard-1를 선택, 리스너에서는 기존에 있는 http 거기서 아까 생성한 대상그룹 선택해서 추가, 그리고 리스너 추가에 https 추가 대상그룹도 동일하게 선택하고 로드밸런서 생성

  1. Route53 (내 도메인과 연결)

아까처럼 호스팅영역에 들어가서 호스팅 선택해서 들어가서 레코드 생성 이번에는 서브네임에 api적고 별칭 사용하고, 엔드포인터에 로드밸런서에 대한 별칭 선택, 리전은 서울 선택, 로드밸런서 선택에 내 로드밸런서 dns이름 복사해서 붙여넣기. 이렇게 하고 api.e-elin.net에 들어가서 낫파운드 뜨면 성공!

'내일배움캠프 > 최종 프로젝트' 카테고리의 다른 글

🔫 트러블슈팅 💥  (0) 2023.07.03
최종프로젝트 - 중간점검  (0) 2023.06.26
최종프로젝트 - 9일차  (0) 2023.06.19
최종프로젝트 - 8일차  (0) 2023.06.16
최종프로젝트 - 5일차  (0) 2023.06.12