웹 서비스 배포 (AWS Elastic Beanstalk)
0.준비
-
AWS 계정 생성
-
해외 결제 가능 카드 결제정보 등록, 무료
-
내 계정, console login
1.프로젝트 설정
-
git ignore설정
1.gitignore 파일 생성
- gitignore.io 에서 python 가져오기, gitignore파일에 복붙 저장
-
pip 설정
-
1
pip freeze > requirements.txt
-
-
루트페이지 설정, 경로 잡아주기
-
최상단 urls.py 에서 코드 수정 (main인 페이지를 기본 페이지로 설정)
1
path('', views.list), => path('', views.main),
-
2.AWS IAM 설정 ; 권한 만들기
AWS 서비스 - 서비스 찾기 - 왼쪽의 사용자 - 맨위의 사용자 추가
-
사용자 이름 : ebAdmin (엘라스틱빈스톡,이름은 임의로 설정가능)
-
프로그래밍 방식 엑세스
-
기존정책직접연결: AWSElasticBeanstalkFullAccess검색,ElasticLoadBalance 검색, 체크박스 클릭 (aws서비스의 모든 권한중에 이것만 사용할수 있는 새끼 계정을 만드는 것임)- 다음 - 다음
-
사용자 이름. 프로그래밍 방식, 정책 다 확인
-
액세스 키 복사해서 항상 기억하기….필기해두기 …담에 다시 볼 기회가 없다…
3.AWS 계정 설정
-
awscil 설치
-
pip install awscli
1
pip install awscli
-
설치 확인
1
aws --version
-
계정 설정
1 2 3 4
AWS Access Key ID: 본인 KEY ID 입력 AWS Secret Access Key: 본인 Secret Access 입력 Default region name: ap-northeast-2 # 한국 Default output format: json
-
확인
1 2
vi ~/.aws/config vi ~/.aws/credentials
-
4.EB 실행
-
ec cli 설치
1
pip install awsebcli
-
프로젝트로 이동
-
설정
1
eb init
-
어플리케이션 default, python3.6,commit No,
에러가 나옴… => ascii code 때문임…
1 2 3 4 5 6 7 8 9
eb init --debug No 선택 에러확인 - sourcecontol.py 클릭해서 오픈 - 294번째에 with open 부분 수정 'r'-> 'r', encoding='utf-8' - 다시 console 열기 eb init --debug N 선택 N 선택
왼쪽에 폴더 생성이 된 것을 확인
5.Django 설정
-
admin을 위한 계정 설정
1 2 3
python manage.py createsuperuser id: dongsik password : 1
-
유저 정보 담긴 json 생성
- 수퍼유저 만들기
- 유저 확장한 경우
1
python manage.py dumpdata accounts.User --indent 4 > users.json
- 유저 확장 안한 경우 (기본 model사용) => 우리 이렇게 했음
1 2
python manage.py dumpdata auth --indent 4 > users.json 파일 생성 확인, 맨아래에 username : 'dongsik'확인
- 만들어진 파일은 accounts/fixtures 폴더로 이동
-
static 루트에 있음
- staticfile설정
- settings.py 설정
1 2 3 4 5 6 7
STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles") # 얘는 프로젝트마다 선택사항 (없는 경로를 쓰면 deploy 시 에러) STATICFILES_DIRS = [ STATIC_DIR = os.path.join(BASE_DIR, 'static'), ]
-
프로젝트 루트에 폴더 생성
1
mkdir .ebextensions
-
.ebextensions/default.config
폴더 안에 들어가기, 파일 생성 후 작성1 2 3 4 5 6 7 8
default.config option_settings: aws:elasticbeanstalk:application:environment: DJANGO_SETTINGS_MODULR: <프로젝트명>.settings aws:elasticbeanstalk:container:python: WSGIPath: <프로젝트명>/wsgi.py aws:elasticbeanstalk:container:python:staticfiles: /static/: staticfiles/
settings.py가 어디있는지
장고 어플리케이션이 서버와 통신하기 위한 규칙은 wsgi.py을 그대로 사용하겠다.
스태틱 파일 이거야
-
배포 후 실행할 명령어
ebextensions/migrate.config
파일 생성 후 작성1 2 3 4 5 6 7 8 9 10 11 12 13
# .ebextensions/db-migrate.config container_commands: 01_migrate: command: "python manage.py migrate" leader_only: true 02_chown_sqlitedb: command: "sudo chown wsgi db.sqlite3" leader_only: true 03_createsuperuser: command: "python manage.py loaddata users.json" leader_only: true 04_collectstatic: command: "python manage.py collectstatic"
- staticfile설정
6.EB create
-
eb create생성
1 2 3 4 5 6 7 8
eb create Enter En~~ : 엔터 -dev로 사용 : 엔터 type : 2 엔터
git is in a detached head state. Using brach “default”에러가 난다면 git commit을 한다.
1 2 3 4 5 6 7 8 9 10
다시 같은 작업 실행 eb create Enter En~~ : 엔터 -dev로 사용 : 엔터 type : 2 엔터 기다리기
기도를 성실히 할것
Error your WSGIPath ~~ 이거 경로 설정 다시해준다.
AWS 들어가서 맨 왼쪽에 서비스 - elasticbeanstalk 검색 후 클릭
- 우측 상단에 오하이요 서울로 바꿔주기
AWS 들어가서 맨 왼쪽에 서비스 밑에 프로젝트명 클릭
-
심각 확인
-
구성 - 소프트웨어 수정
WSGIPath : <프로젝트명>/WSGI.py프로젝트명>
적용, 아직 심각.. 하지만
구성 - 수정 - 바꼈는지 확인
7.환경변수 설정
-
사용한 환경변수 적용. aws사이트에서도 가능
1
eb setenv SECRET_KEY='your_key' AWS_ACCESS_KEY_ID='your_id'
8.ALLOWED_HOST 설정
-
CNAME 확인
1
eb status
-
settings.py 에 ALLOWED_HOST 추가
settings.py 에서 allowedhost -> ‘*’ 이면 넘어감
9.Deploy
- 커밋 남기기
- 중요한 작업….. 커밋을 남긴 후
deploy
해야 변경사항이 적용됨….!!
1 2
git add . git commit -m "deploy"
- 중요한 작업….. 커밋을 남긴 후
-
배포하기
1
eb deploy
-
기도하기
- 아까 사이트로 들어가보기, admin도 들어가보기
10.API 환경변수에서 사용한 경우
-
구성 - 소프트웨어 수정 - 맨아래 환경변수 설정 가능
-
TMD_KEY , 값 입력
-
적용
참고
- 우리반 은솔님이 정리해주신 문서
- 은솔github