본문 바로가기
스파르타/Web

[Web] 서버에 배포하기 - ( week 5 )

by bakcoding_sparta 2023. 5. 2.

내가 만든 웹페이지를 모든 사람이 접속이 가능하게 하려면 내 컴퓨터에서 배포하고 컴퓨터를 항상 켜놓으면 가능하다.

하지만 컴퓨터를 항시 켜놓을 수 없으며 다른 작업도 해야 하기 때문에 내 컴퓨터 대신 계속 켜놓을 컴퓨터가 필요한데 이를 서버라고 한다.

 

요즘은 실물 컴퓨터를 대여해서 서버를 사용하는 것보다 인터넷 환경에 세팅되어 있는 가상 컴퓨터를 사용하는 방식을 많이 사용하며 이를 클라우드 서버라고 한다.

 

AWS

아마존 웹 서비스는 클라우드 서버 중 가장 유명한 방식으로 그중 가장 편리한 AWS Elastic Beanstalk를 사용해서 페이지를 배포해 본다.

 

AWS Elastic Beanstalk

 

페이지에 접속해서 내 계정을 클릭하고 '보안 자격 증명' 페이지를 연다.

 

그리고 '액세스 키'로 들어가서 키를 새로 생성한다.

생성한 키는 '액세스 키'와 '보안 액세스 키' 모두 복사해서 메모장에 따로 저장해 둔다.

 

배포하는 데 사용할 명령어는 다음과 같다.

- 터미널 준비하기 - 
mkdir deploy
cp app.py deploy/application.py
cp -r templates deploy/templates
pip freeze > deploy/requirements.txt
cd deploy

- appication.py 세팅하기 - 
application = app = Flask(__name__)
app.run()

- 패키지 설치하기 - 
pip install awsebcli

- 보안 자격증명 - 
eb init

- 초기 설정 - 
eb create myweb

- 코드 수정 & 업데이트 - 
eb deploy myweb

 

배포 명령어 실행

작성한 배포 명령어를 하나씩 실행시켜 배포를 진행해 본다.

배포할 파일은 작업한 파일과 구분해서 관리해야 하는 게 기본 규칙으로 별도의 폴더를 생성하고 파일들을 복사해서 저장한다.

 

1. deploy 이름의 폴더를 생성한다.

mkdir deploy

 

2. app.py 파일을 복사하고 application.py로 파일이름을 변경한다.

cp app.py deploy/application.py

 

3. templates 폴더 전체를 복사하고 deploy 폴더에 생성한다.

cp -r templates deploy/templates

 

4. 현재 프로젝트에서 사용한 패키지의 정보를 requirements.txt 파일에 정리한다.

pip freeze > deploy/requirements.txt

 

5. cd deploy를 통해서 현재 명령어를 실행 중인 장소를 deploy 폴더로 이동한다.

 

6. 생성한 파일 중 deploy 폴더의 application.py의 내용을 수정한다.

from flask import Flask, render_template, request, jsonify
application = app = Flask(__name__)
~~~~
if __name__ == '__main__':
    app.run()

 

7. aws에 배포를 위한 패키지를 설치한다.

pip install awsebcli

 

만역 패키지 설치가 실패했을 경우 pip 버전 문제일 수 있다. 이럴 때는 vscode를 종료하고 관리자 권한으로 다시 실행한 다음 명령어를 순서대로 입력한다.

pip uninstall awsebcli
pip install --upgrade pip
pip install awsebcli

 

여기까지 배포를 위한 준비가 끝났고 이제 배포를 시작한다.

 

8. 배포 명령어를 입력하고 설정값을 입력한다.

eb init

 

명령어를 입력하고 나면 값을 입력해야 한다.

 

지역선택

10 보기를 선택했다.

 

아까 메모장에 저장해 둔 액세스 id와 보안 키를 입력해 준다.

 

애플리케이션 이름은 따로 설정하지 않을 것이기 때문에 그대로 enter를 누른다.

 

파이썬을 사용하고 있는지 확인한다. 맞기 때문에 Y를 입력하고 넘어간다.

 

플랫폼을 선택해야 하는데 기본값으로 진행한다. ( python 3.8 사용 중이기 때문에)

 

내 인스턴스에 SSH 셋업을 진행한다. Y

 

그 뒤의 내용은 엔터를 쳐서 넘기면 배포할 서버의 초기화가 진행된다.

 

이제 내가 파일을 올릴 수 있는 서버가 마련되었다.

 

서버에 파일 업로드

이제 해당 서버에 파일을 업로드한다.

eb create myweb

 

만약 명령어가 실행되다가 다음 에러가 발생할 경우 ACL가 비활성화되어서 생기는 문제이다.

 

객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 - Amazon Simple Storage Service

객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 S3 객체 소유권은 액세스 제어 목록(ACL)을 사용 중지하고 버킷에 있는 모든 객체의 소유권을 가져오는 데 사용할 수 있는 Amazon S3 버킷 수준 설정으

docs.aws.amazon.com

 

AWS 홈페이지에서 S3을 검색하고 해당 페이지로 접속한다.

 

내 프로젝트 버킷을 찾아서 클릭하고 권한을 클릭한다.

 

ALC을 활성화하고 'ACL이 복원된다는 것을 확인합니다.'에 체크를 해준다.

그리고 다시 명령어를 실행하면 정상적으로 진행된다.

 

서버에 파일이 올라가면 자동으로 컴퓨터가 실행되는데 이 작업이 완료되는데 어느 정도 시간이 필요하기 때문에 시간이 좀 지난 후에 사이트에서 현재 실행된 서버를 확인해 본다.

 

 

서버가 켜지면 도메인이 나오는데 해당 주소로 접속하면 내가 올린 프로젝트가 띄워지는 걸 확인할 수 있다.

호출되는 서버의 주소도 변경이 된 것을 확인할 수 있고 입력한 데이터도 잘 반영되는 걸 볼 수 있다.

 

이제 해당 도메인을 공유해서 og 데이터가 잘 나오는지 검사한다.

 

 

모두 제대로 나오는 것을 확인할 수  있다.

 

 

배포 수정

사이트 배포의 과정은 우선 내 컴퓨터 환경인 localhost:5000에서 실행을 해보고 문제가 없으면 서버에 반영하는 방식으로 진행하는 것이 좋다.

 

deploy 폴더의 파일이 아닌 기존에 작업했던 파일들을 수정하고 deploy 폴더에 수정 내용을 반영한다.

그리고 cd deploy로 명령어 실행 폴더를 이동한 다음 eb deploy myweb 명령어를 실행해 준다.

 

주의할 점

과금

eb create 실행할 때마다 서버를 구매하는 것과 동일한 동작을 하게 된다.

따라서 AWS페이지에 들어가서 애플리케이션에서 생성된 리스트를 확인해 주고 많이 생성되어 있을 경우 과금되는 걸 주의한다.

 

또한 1년이 지나게 된 이후부터 요금이 발생하므로 시기를 고려하여 해당 애플리케이션을 지워주는 게 좋다.

 

계정

AWS 계정을 처음 생성하면 발급되는 루트 계정은 모든 권한이 승인되어 있기 때문에 일상적인 작업을 진행할 때는 해당 계정을 통한 접근을 권장하지 않는다.

 

따라서 IAM계정을 별도로 생성, 관리하면서 큰 과금을 막고, 해킹의 피해를 줄이고 구제받을 수 있는 예방조치가 필요하다.

 

 

IAM이란 무엇입니까? - AWS Identity and Access Management

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

내 계정의 '보안 자격 증명'으로 이동한다.

 

'사용자 그룹'을 선택한다.

 

'그룹 생성'

 

사용자 그룹 이름을 입력하고 권한 정책 연결에서 AdministratorAccess를 검색해서 체크한다.

IAM 사용자를 생성한다.

 

IAM 계정 사용법

보안 자격 증명(IAM) 탭에서 액세스관리 > 사용자를 클릭한다.

 

사용자 추가 탭에서 사용자를 추가한다.

이름 입력 > 암호-AWS 관리 콘솔 액세스 > 사용자 지정비밀 번호 > 비밀번호 재설정 필요 체크 해제 > 다음:권한

 

생성한 그룹에 체크하고 다음을 클릭한다.

 

태그 추가 항목 다음 > 검토, 이름과 그룹 확인 후 다음 > 사용자 생성에 성공 후 링크 복사

 

링크를 들어가면 계정 번호가 입력된 상태이다. 사용자 이름과 비밀번호를 입력하고 로그인을 한다.

 

이제 이 방식으로 로그인을 하면 안전하게 계정을 보호할 수 있다. 해당 링크는 따로 저장해 둔다.

'링크는 보안 자격 증명 > 보안 자격 증명 탭 > 대시보드 > 이 계정의 IAM 사용자를 위한 로그인 URL'에서 확인 가능하다.