방화벽은 AWS에서 만든 보안그룹과 WINDOW에서 실행중인 방화벽이 있다. 이 두 가지 방화벽에서 80번 포트에 접속 가능하게 해줘야 한다
WINDOW 방화벽을 설정할 수 있지만, 이번에는 그냥 OFF한다
인스턴스 세부 내용 확인
IP 주소가 PRIVATE, PUBLIC 두 가지가 있는데, AWS에서 내부/외부 통신을 하므로 두 가지로 존재한다
보안 - 보안그룹 클릭
- INBOUND : 외부에서 내 컴퓨터로
- OUTBOUND : 내 컴퓨터에서 외부로
INBOUND를 수정해준다
RDP 프로토콜을 사용하며 포트번호가 3389이다. 7계층은 RDP이고, 4계층은 TCP이다
Apache의 HTTP를 사용할 수 있게 설정해야한다
포트를 열어주자
바인딩 Ip : 포트를 바인딩하는 Ip이다. 해당 IP가 PRIVATE IP ( ex. 192.168.0.58 )로 설정되있으면 같은 네트워크 대역은 접속은 가능하지만, 다른 네트워크 대역은 접속이 불가능하다. 이를 0.0.0.0으로 설정하면 외부 네트워크 대역에서도 접속 가능하다 ( 바인딩 : 프로그램의 어떤 기본 단위가 가질 수 있는 구성요소의 구체적인 값, 성격을 확정하는 것 )
PUBLIC IP로 접속 가능하다
웹 서버란? 하드웨어적으로 웹 서버는 웹 서버의 소프트웨어와 웹 사이트의 컴포넌트를 저장하는 컴퓨터이고, 소프트웨어적으로 웹 서버는 사용자가 어떻게 호스트 파일에 접근하는지 관리하는 서버다
- 동적 웹 서버? 서버가 존재하는 컴퓨터로 서버에 저장된 파일을 클라이언트에게 전송한다
- 정적 웹 서버? 정적 웹 서버와 웹 서버에서 대응하지 못하는 동적 데이터에 대응하기 위한 하나의 프로토콜과 같은 어플리케이션 서버로 구성되어 있다
- 기본적으로 웹 서버로 부터 웹 어플리케이션 서버가 요청을 받으면 프로그램을 수행하여 해당 결과를 웹 서버에 전달하고, 이 결과를 클라이언트에게 전달한다
인터페이스란? 상호 간의 소통을 위해 만들어진 물리적 매개체나 프로토콜
프로토콜이란? : 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계
- CGI : Common Gateway Interface로 웹 서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약. 즉, 웹 서버와 DB와 같은 프로그램 사이에서 일어나는 통신에 대한 규약이다
- WSGI : Web Server Gateway Interface로 웹 서버 프로그램이 웹 어플리케이션과 통신할때 사용하는 표준 인터페이스로 WSGI가 Callable Object을 통해 Data를 받으면 프로그램을 실행해 Callback Function으로 반환한다. 이 역시 웹 서버와 외부 어플리케이션이 통신할때 사이에서 작동한다
Apache에서 Django 프로그램을 실행시키게 해보자
WINDOW 환경에서 일반 PIP INSTALL이 안되므로, 직접 파일을 가져와서 INSTALL 해준다
cp39는 python 3.9 vertion이기 때문이다
위 경로는 wsgi로 python 프로그램을 실행할 것 인데, 이 wsgi가 python의 경로를 찾을 수 있는 경로이다
개발 환경이랑 배포 환경이랑 따로 설치해야한다
접속하는 사람이 해당 프로그램의 오류 메세지를 볼 수 없게 False로 설정
Django는 기본적으로 접속을 허가하지 않으므로, 허가할 호스트를 설정해야한다. 모두 접속 가능하게 할 것이므로 '*'로 설정한다
설치한 라이브러리의 목록을 확인하는 명령어
이 출력된 라이브러리 목록명을 txt 파일에 저장한다
배포할 Django 프로젝트 폴더를 가져온다
venv는 옮기지 않아도 된다. 이는 설치된 라이브러리들의 폴더인데, 클라우드에서는 이 라이브러리들을 사용하지 않는다
httpd.conf는 Apache의 서버 설정이다. 이를 메모장으로 열면 된다
아까 찾은 경로를 작성해준다. 이는 Apache 웹 서버와 Django 애플리케이션이 서로 통신할때 wsgi를 이용해 사용할건데, wsgi가 python 파일에 대한 경로를 찾아야 하기 때문이다. 따라서 Apache에서 wsgi module과 python에 대한 경로를 남긴다
위 사진은 process를 간단히 나타냈다
- WSGIScriptAlias : WSGI한테 WSGI 파일 경로를 알려준다
- pythonpath : python 경로 - project 폴더 이름을 써준다
- DIRECTORY : APACHE한테 WSGI 파일 위치를 알려준다
- STATIC과 MEDIA 경로도 설정
프로젝트 폴더로 이동해 아까 만든 requirements.txt를 통해 라이브러리들을 설치한다
현재 프로젝트는 DB 서버를 본 컴퓨터의 가상 사용한다. AWS 서버는 외부 서버이므로 본 컴퓨터의 가상 서버에 접속이 불가능하다. 따라서 원격 데스크톱에 옮긴 프로젝트의 settings.py의 DB_HOST를 설정해준다
해당 프로젝트에는 DB가 없으므로 migrate 해준다
설정 후 Apache 서버를 재실행하고, public ip로 다시 접속하면, 본 프로젝트가 실행된다. 아직 기능 실행은 안된다
이번에는 Apache 프로그램으로 서버를 실행하므로, python 명령어가 아닌 httpd 파일을 통해 실행한다
인스턴스 종료는 인스턴스를 삭제한다