ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS 배포하기
    Web 2019. 7. 25. 13:37

     

    0. 준비

    • 반드시 오류가 없이 돌아가는 코드 준비!

    • aws 가입(해외 결제 가능 카드 필요)

    • 내 계정, console login

     

    1. 프로젝트 설정

    • .gitignore

      • gitignore.io 통해서 생성

     

    • pip 설정

      • pip freeze > requirements.txt

     

    • 루트페이지 설정

      • path('', views.list), 경로 잡아주기

     

    2. AWS IAM 설정

    • 권한추가

      • AWSElasticBeanstalkFullAccess

     

    • key 저장

    ---

    • AWS 서비스 -> 서비스 찾기 -> 왼쪽의 사용자 -> 맨위의 사용자 추가

    • 사용자 이름: ebAdmin(ElasticBeanstalk, 이름은 임의로 설정 가능)

    • 프로그래밍 방식 엑세스

    • 기존정책직접연결: AWSElasticBeanstalkFullAccess검색, ElasticLoadBalance 검색, 체크박스 클릭 (aws서비스의 모든 권한중에 이것만 사용할수 있는 새끼 계정을 만드는 것임)

      -> 다음 -> 다음

    • 사용자 이름, 프로그래밍 방식, 정책 확인

    • 엑세스 키를 별도의 장소에 저장 및 기억해두기(나중에 다시 볼 수 없다)

     

    3. WS 계정 설정

    • awscli 설치

      • pip install awscli

       

    • 설치 확인

      • aws --version

       

    • 계정 설정

      • aws configure

      AWS Access Key ID: 본인 KEY ID 입력
      AWS Secret Access Key: 본인 Secret Access 입력
      Default region name: ap-northeast-2 # 한국
      Default output format: json
      

     

    • 확인

      • vi ~/.aws/config

      • vi ~/.aws/credentials

     

    4. EB

    • eb cli 설치

      • pip install awsebcli

     

    • 프로젝트 폴더로 이동

    • 설정

      • eb init

     

    • 어플리케이션 default, python3.6, commit No, 에러가 발생

    이유: ASCII Code 때문..

    해결: 

    eb init --debug
    
    No 선택
    에러확인 
    - sourcecontol.py 클릭해서 오픈 
    - 294번째에 with open 부분 수정
    	'r'-> 'r', encoding='utf-8' 
    - 다시 console 열기
    
    eb init --debug
    N 선택
    N 선택
    

     

    • 완료 확인

      • 프로젝트 폴더 아래 .elasticbeanstalk/ 폴더 생성

     

    5. Django 설정

    • admin을 위한 계정 생성

      • python manage.py createsuperuser

      • ex)

        id: todal
        password: todal
        

         

    • 유저 정보 담긴 json 생성

      1. superuser 만들기

      • 유저 확장한 경우

      python manage.py dumpdata accounts.User --indent 4 > users.json
      
      • 유저 확장 안한 경우 (기본 model사용) => 이전 프로젝트에서 사용한 방법

      python manage.py dumpdata auth --indent 4 > users.json
      파일 생성 확인, 맨아래에 username : 'todal'확인
      

       

      1. 만들어진 파일은 accounts/fixtures 폴더로 이동

     

    • staticfile 설정

      • settings.py 수정(static 루트에 있음)

    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
    
    # 얘는 프로젝트마다 선택사항 (없는 경로를 쓰면 deploy 시 에러)
    STATICFILES_DIRS = [
        STATIC_DIR = os.path.join(BASE_DIR, 'static'),
    ]
    

     

    • 프로젝트 루트에 폴더 생성

      • mkdir .ebextensions

       

    • .ebextensions/default.config 파일 생성후 작성

    # default.config
    option_settings:
        aws:elasticbeanstalk:application:environment:
            DJANGO_SETTINGS_MODULR: insta.settings
        aws:elasticbeanstalk:container:python:
            WSGIPath: insta/wsgi.py
        aws:elasticbeanstalk:container:python:staticfiles:
            /static/: staticfiles/
    

    위 코드의 의미: settings.py가 어디 있는지, Django가 서버와 통신하기 위한 규칙은 wsgi.py를 사용, 사용하는 static파일이 무엇인지

     

    • 배포 후 실행할 명령어 ebextensions/migrate.config 파일 생성후 작성

    # .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"
    

     

    6. EB create

    • 생성

      • eb create

     

    7. 환경변수 설정

    • 사용한 환경변수 적용, aws 사이트에서도 가능

      • eb setenv SECRET_KEY='your_key' AWS_ACCESS_KEY_ID='your_id'

     

    8. ALLOWED_HOST 설정

    • CNAME 확인

      • eb status

       

    • settings.py 에 ALLOWED_HOST 추가

      settings.py 에서 allowedhost -> '*' 이면 넘어감

     

    9. Deploy!

    • 커밋남기기

      • git add .

      • git commit -m "deploy"

       

    • 배포하기

      • eb deploy

       

    • 마지막 기도하기

     


    출처

    프로젝트 팀원 윤은솔님의 Github, Blog

    'Web' 카테고리의 다른 글

    AWS with PuTTY  (0) 2019.09.05
    PWA - Push Notification  (0) 2019.08.02
    Service Worker  (0) 2019.08.01
    Firebase deploy  (0) 2019.07.30
    [Vue] 페이지 최상단 이동 버튼 만들기  (0) 2019.07.29

    댓글

© 2019 All rights reserved.