본문 바로가기
Django/나만의 웹사이트 만들기

django) 아파치 서버에 장고 연동하여 배포하기

by 빈스터디 2023. 3. 2.

나만의 웹 사이트를 만들었으면, 사용자가 접속할 수 있도록 배포해야 한다.

아파치 서버를 이용해서 배포하는 방법을 알아보려 한다.

 

1. 서버) 서버로 만들 가상머신에 필요한 프로그램들을 설치한다.

 

yum install -y httpd httpd-devel python39 python39-devel mysql-devel gcc redhat-rpm-config

 

 

 

 

2. 서버) 가상 환경 도구를 설치한다.

 

pip3 install virtualenv

 

 

virtualenv를 사용하는 이유는 다음 글에서 좀 더 자세히 알 수 있다.

https://www.lesstif.com/python/python-virtual-env-virtualenv-125305004.html

 

 

python Virtual Env(virtualenv) 로 가상 환경 구성하기

activate 는 가상 환경에 설치한 python 과 library 를 시스템에 설치된 것보다 먼저 사용하도록 PATH 와 PYTHONHOME 환경 변수를 잡아주는 역할을 하므로 꼭 실행해야 합니다.

www.lesstif.com

 

 

파이썬 웹 사이트에서 이러한 이유로 virtualenv의 사용을 추천한다.

따라서 기존 프로젝트 생성 시에 사용되는 venv를 삭제하고 virtualenv를 설치하여 사용한다.

 

 

 

 

3. 개발환경) 장고 개발환경 터미널에서 다음의 명령어를 입력한다.

프로젝트에 필요한 프로그램과 버전이 텍스트의 형태로 담겨져 있는 파일을 생성한다.

 

pip freeze > requirements.txt

 

개발환경에서 생성된 파일의 모습

 

requirements.txt.에 담긴 내용확인

 

 

 

 

4. 서버) 개발환경에서 만든 프로젝트를 압축하고 서버에 파일을 옮긴 후, 서버에서 해당 파일을 압축 해제한다.

 

 

4-1. 프로젝트를 담을 디렉토리를 하나 만든다. (루트에 그냥 풀었다가 프로젝트 경로 지정할 때 접근이 안됐음)

 

mkdir /django

 

4-2. 4-1번에서 만든 디렉토리 밑에 서버에 업로드 한 프로젝트 폴더를 압축해제 한다.

*/django라는 디렉토리 밑에 압축 해제한 폴더를 저장했는데, 압축 해제한 파일들을 바로 저장해도 접근만 잘 할 수 있으면 무관하다.

fireilla 에서 확인한 모습

 

리눅스 서버에서 확인한 모습

 

 

 

5. 서버) 2번에서 설치한 virtualenv를 사용하기 위해 기존의 venv를 삭제하고 재생성한다.

 

 

5-1. 기존의 venv 삭제

rm -rf /django/web_db/venv     # rm -rf [프로젝트 폴더]/venv

 

 

5-2. 프로젝트 폴더에 들어간다.

cd /django/web_db     # cd [프로젝트 폴더]

 

 

5-3. 새로운 venv 생성

virtualenv venv

 

 

 

 

6. 서버) venv를 활성화한다.

 

source /django/web_db/venv/bin/activate    # source [프로젝트 폴더]/venv/bin/activate

 

 

 

 

7. 서버) requirements.txt(프로젝트에 사용된 라이브러리들)에 적혀있는 라이브러리들을 설치한다.

 

pip install -r requirements.txt

 

성공적으로 설치되면 아래와 같이 Successfully installed하고, 설치된 목록이 뜬다.

 

 

 

 

8. 서버) 아파치와 장고를 연동하기 위해 wsgi를 사용한다.

 

 

8-1. 필요한 모듈 설치

 

pip install mod_wsgi

 

 

8-2. 웹 서버 설정 파일을 생성한다. (vi 편집기로 작성)

 

vi /etc/httpd/conf.d/django.conf

 

 

설정파일 내용은 아래 '더보기' 참고

더보기

LoadModule wsgi_module "/django/venv/lib64/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-x86_64-linux-gnu.so"
WSGIPythonHome "/django/venv"
# 위에 두 줄은  mod_wsgi-express module-config 입력 후 출력 결과 붙여넣기 한 것

WSGIScriptAlias / "/[Project 폴더]/[Project 안의 설정 폴더]/wsgi.py"

WSGIPythonPath "/[Project 폴더]"


<Directory "/[Project 폴더]/[Project 안의 설정 폴더]">
<Files wsgi.py>
Require all granted
</Files>
</Directory>



Alias /static/ /[Project 폴더]/static/

<Directory /[Project 폴더]/static/>
Require all granted
</Directory>



Alias /media/ /[Project 폴더]/media/

<Directory /[Project 폴더]/media/>
Require all granted
</Directory>

 

 

 

 

9. 서버) 방화벽을 해제한다.

 

setenforce  0
systemctl disable firewalld
systemctl stop firewalld

 

 

 

 

10. 서버) 배포용 설정을 한다.

프로젝트의 config > settings.py의 내용에 ALLOWED_HOST = [ ] 을 ALLOWED_HOST = ['*', ]으로 수정한다.

(모든 호스트가 접속할 수 있도록 허용)

 

ALLOWED_HOSTS = ['*', ]

 

11. 서버) 아파치 서버 재시작을 한다.

 

systemctl restart httpd

 

 

확인. 아파치 서버의 IP(포트번호는 80)를 입력하면, 프로젝트에서 생성한 웹 페이지에 접속이 가능하다.

*프로젝트와 연동되어 있는 DB가 꺼져있다면, 켜줘야 접속이 제대로 이루어진다.

접속 확인

 

'Django > 나만의 웹사이트 만들기' 카테고리의 다른 글

django) 좋아요 버튼 구현하기  (0) 2023.02.27