티스토리 뷰
출처: https://nerogarret.tistory.com/45
인덱스
인스턴스 생성
키페어 설정 (pem 키)
AWS EC2 서버 원격 접속
AWS EC2 서버 기본 세팅
Github repository로 프로젝트 업로드
uWSGI 연결
환경: windows git bash 사용
Part1 AWS 서버 대여 프로젝트 준비
인스턴스 생성

1-7 단계에서 1,2,7 단계만 선택. 보안 그룹 등 나머지는 추후에 설정 변경 예정

키페어 설정 (pem 키)
컴퓨터에 저장하는 키, 잃어버리면 재발급 불가
홈폴더의 .ssh 를 만들고 pem키 이동
ssh는 외부 컴퓨터와 원격 통신을 할 때 쓰는 명령어
$ mkdir ~/.ssh/
or 이동
cd ~/.ssh/
키페어 파일의 권한을 소유주만 읽을 수 있도록 변경.
chmod는 파일 읽기 쓰기 실행 권한 변경 명령어
(처음에만 설정해주면 됨)
$ chmod 400 ~/.ssh/deploy_test.pem
AWS EC2 서버 원격 접속
서버에 접속하기
ssh -i [키 페어 경로] [유저 이름]@[퍼블릭 DNS 주소]
ssh -i ~/.ssh/tutorial_base.pem ubuntu@ec2-13-125-55-179.ap-northeast-2.compute.amazonaws.com
유저이름은 ubuntu 퍼블릭 DNS 주소는 퍼블릭 IPv4 DNS 에서 확인가능
The authenticity of host '---' can't be established. 하면서 권한 확인 yes

이 화면은 접속 성공한 화면!
AWS EC2 서버 기본 세팅
EC2 컴퓨터의 기본 패키지 설치
패키지 정보 업데이트
sudo apt-get update
패키지 의존성 검사 및 업그레이드
sudo apt-get dist-upgrade
Python3 패키지 매니저 (pip3) 설치
sudo apt-get install python3-pip
60 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 75.1 MB of archives.
After this operation, 174 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
물어보면 YES
Part2: Github repository로 프로젝트 업로드
프로젝트 배포를위해 서버에 파일 옮기는 과정
장고 [배포 체크리스트](https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/)를 보고 알맞은 설정한 뒤 git clone
시크릿키와 각종 설정
https://grape-blog.tistory.com/17?category=473970
AWS EC2 서버에서 git clone 하기
프로젝트 파일들은 모두 /srv/ 폴더에 다운로드 받을 것입니다. 따라서 이 폴더를 현재 유저인 ubuntu의 폴더로 소유권을 바꾸어 줍니다.
sudo는 관리자 권한으로 명령함을 의미하고, chown은 change owner의 줄임말로 폴더의 소유권을 변경할 때 사용
sudo chown -R ubuntu:ubuntu /srv/
소유권이 잘 바뀌었는지 확인하려면 루트 폴더(/) 로 이동 -> cd /
파일 리스트를 자세히 표시 (ls -al)하면 srv 폴더의 소유자가 ubuntu로 변경 확인

/srv/ 폴더로 이동하여 github 리모트 리포지토리 파일 서버에 다운
$ cd /srv
$ git clone [레포지토리 주소]
ls 명령어를 사용했을 때 레포지토리 이름과 동일한 폴더가 생겼으면 업로드 성공

Part3: uWSGI 연결
Django 앱은 웹 서버와 직접 통신을 할 수 없어서 중간에서 이어줄 WSGI(Web Server Gateway Interface) server가 필요하다. uWSGI라는 Python 패키지를 설치하고 Django와 연결해 주는 과정.
runserver 해보기
지금 서버 컴퓨터에는 프로젝트를 실행하기 위한 패키지들이 깔려 있지 않으니, 로컬 컴퓨터에서와 동일하게 가상환경을 만들어 주고 패키지 버전들을 저장한 requirements.txt를 통해 패키지를 깔아보도록 하겠습니다.
가상환경을 만들기 전에 python3-venv를 설치
sudo apt-get install python3-venv
가상환경 위치는 유저 ubuntu의 홈 폴더에
cd ~
python3 -m venv myvenv
가상환경 활성화
source myvenv/bin/activate

프로젝트에 필요한 패키지 설치: requirements.txt
cd /srv//2021_Tutorial_Base
pip3 install -r requirements.txt
프로젝트에 필요한 패키지 설치: requirements.txt
이슈1:
requirment 설치중 다음과 같은 에러 발생
해결
heroku 관련 /psycopg2 에러 나는 듯. 헤로쿠 관련은 일단 코멘트 아웃.
rm -r 2021tutorial~ 로 전체 삭제후 다시 푸시
Complete output from command python setup.py egg_info:
running egg_info
creating pip-egg-info/psycopg2.egg-info
writing pip-egg-info/psycopg2.egg-info/PKG-INFO
writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt'
Error: pg_config executable not found.
pg_config is required to build psycopg2 from source. Please add the directory
containing pg_config to the $PATH or specify the full executable path with the
option:
python setup.py build_ext --pg-config /path/to/pg_config build ...
or with the pg_config option in 'setup.cfg'.
If you prefer to avoid building psycopg2 from source, please install the PyPI
'psycopg2-binary' package instead.
For further information please check the 'doc/src/install.rst' file (also at
<https://www.psycopg.org/docs/install.html>).
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-1eyjw54u/psycopg2/
이슈2: 시크릿키 문제
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
해결
runserver하면 로딩만 하고 페이지가 뜨지 않는 이유는 포트가 열려있지 않기 때문. 보안 그룹 설정에서 변경
로컬 컴퓨터 settings.py에서 ALLOWED_HOSTS 주소 추가 하고 remote로 push - 개발용이기 때문에 배포용은 nginx라는 웹서버를 이용해야한다.
uWSGI 서버 연결하기
https://velog.io/@daylee/Deploy-webapp-using-Heroku
헤로쿠에서 에러들 정리한 뒤 aws 배포하자
헤로쿠에서 마이그레이션 실패했었음.. 모델 설정에서 에러날까봐 흠.. 뷰랑 이것저것 충돌 났던 것으로 기억
secretkey config?
검색어: AWS RDS 생성
https://zamezzz.tistory.com/302
DB : https://velog.io/@hyunju-song/AWS%EB%A1%9C-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0RDSDB
PART 2 아랫부분 따라하기 이전에 시크릿키나 각종설정 궁금
Part4: nginx 와 uwsgi를 연결
클라이언트 요청은 웹 서버가 받아야지 uwsgi가 받아 처리하는 것은 적절하지 않음. 웹서버 어플리케이션인
nginx를 사용할 것임.
Django 와 연결해둔 uWsgi서버와 nginx로 1차 배포하기
nginx 와 uwsgi를 연결하기
nginx는 대표적인 웹 서버 어플리케이션. nginx와 django app을 연결하면 request를 받아 response를 해줄 수 있음
서버 컴퓨터에서 nginx를 설치
Static 파일 연결
정적인 파일 로드
'Django' 카테고리의 다른 글
django url routing (0) | 2021.07.14 |
---|---|
Tutorial Base Feedback and Learning: 버그와 개발자의 의도 사이 (0) | 2021.07.12 |
장고 리다이렉트 #앵커태그(anchor tag )로 페이지의 특정 위치로 이동하기 (0) | 2021.07.12 |
DEBUG True / False 차이점 (0) | 2021.07.12 |
Django (0) | 2021.06.07 |