웹페이지가 떠 있으려면 코드가 계속 돌아가면서 listen을 해줘야 하는데, 이렇게 계속 켜져있는 컴퓨터를 '서버' 라고 한다.
요즘은 인터넷 환경에서 이러한 서버를 대여하여 웹페이지를 배포한다. 이를 '클라우드' 라고 한다. 가장 유명한 예시로는 아마존의 AWS가 있다. AWS의 Beanstalk Service를 이용하면 배포과정을 자동으로 처리할 수 있다.
우측 상단 닉네임 클릭 > 보안 에서 액세스 키를 생성하여 메모장에 액세스 키를 .txt 로 저장한 뒤 작업하고 있던 폴더에 저장해준다.
- 터미널 준비하기 -
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
순서대로 터미널에서 작업해준다.
pip install awsebcli
설치 중 오류가 발생하였다.
error: subprocess-exited-with-error
AttributeError: cython_sources
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.
cython_3.0.0 버전 차이 때문에 일어난 오류 같다.
$ echo "Cython<3" > cython_constraint.txt
$ PIP_CONSTRAINT=cython_constraint.txt pip install "ai-core-sdk[aicore-content]"
cython_constraint.txt 에 Cython 버전을 3 이하로 설치하도록 적어준 뒤 ai-core-sdk를 설치해주었다.
importerror: cannot import name 'mapping' from 'collections'
이런 문제도 발생해 혹시 몰라 기록해둔다.
에러 메세지 중 파일 위치 아래에 import 'mapping' from 'collections' 가 적힌 파일 폴더가 있을 것이다. 나의 경우에는 venv/lib/pip/_internal 의 파이썬 파일이었다. 여기 있는
from collections import Mapping
을
from collections.abc import Mapping
로 바꿔주면 된다.
% eb init
Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) cn-northwest-1 : China (Ningxia)
14) us-east-2 : US East (Ohio)
15) ca-central-1 : Canada (Central)
16) eu-west-2 : EU (London)
17) eu-west-3 : EU (Paris)
18) eu-north-1 : EU (Stockholm)
19) eu-south-1 : EU (Milano)
20) ap-east-1 : Asia Pacific (Hong Kong)
21) me-south-1 : Middle East (Bahrain)
22) af-south-1 : Africa (Cape Town)
23) ap-southeast-3 : Asia Pacific (Jakarta)
24) ap-northeast-3 : Asia Pacific (Osaka)
(default is 3): 10
Enter Application Name
(default is "deploy"):
Application deploy has been created.
It appears you are using Python. Is this correct?
(Y/n): Y
Select a platform branch.
1) Python 3.11 running on 64bit Amazon Linux 2023
2) Python 3.9 running on 64bit Amazon Linux 2023
3) Python 3.8 running on 64bit Amazon Linux 2
4) Python 3.7 running on 64bit Amazon Linux 2
(default is 1):
Cannot setup CodeCommit because there is no Source Control setup, continuing with initialization
Do you want to set up SSH for your instances?
(Y/n): Y
Type a keypair name.
(Default is aws-eb):
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/kyuseung/.ssh/aws-eb
Your public key has been saved in /Users/kyuseung/.ssh/aws-eb.pub
The key fingerprint is:
SHA256:d93qd1QXlqZhLdCkOUKCNwN7J290wg5ykjmHDfwY5do aws-eb
The key's randomart image is:
+---[RSA 3072]----+
| .o+o . .+.. .|
| +O++ o= * |
| O=Oo* =. * .|
| .X.B + .o .o|
| . ES+. . . +|
| .. . ..|
| .. |
| . o|
| ...|
+----[SHA256]-----+
WARNING: Uploaded SSH public key for "aws-eb" into EC2 for region ap-northeast-2.
쭉 따라해준다. 이러면 이제 가상 서버를 산 것이니 이제 웹을 올리면 된다.
% eb create myweb
명령어를 치고 2,3분 정도 기다리면 upload complete 메세지가 나온다. 이후 Elastic Beanstalk 에 가서 우측 메뉴 > 어플리케이션 을 클릭하면 내가 업로드한 웹을 볼 수 있다.
이후 환경에 가서 상태가 Pending > OK 로 바뀌면 url을 클릭해서 내 웹을 들어가볼 수 있다.
% eb 폴더이름 meweb
을 통해 다시 업로드 해준다.http://myweb.eba-aq7mim3w.ap-northeast-2.elasticbeanstalk.com/