오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

Web Programming/Django

[Django] django apache (CentOS) 배포

junha6316 2021. 1. 26. 09:38

 

본격적인 설명에 앞서 아직 왜 장고와 아파치를 같이 배포해야되는지 모르겠다면 아래의 글을 한번 읽어보도록 하자

cocook.tistory.com/87

 

[Web] WAS와 Web Server 차이

장고 배포와 관련된 글을 보면 WS(Web Server, 웹서버)와 WAS(Web Application Server, 웹어플리케이션서버)에 대해서 많이 볼 수 있다. 이름도 비슷해서 예전에는 사람마다 같은 걸 다르게 부르는 건가 싶었

cocook.tistory.com

이번 포스트에서는 WAS인 장고와 WS인 아파치를 배포 과정에 대해 설명하도록 하겠다.

1. Python 3.6 설치

먼저 yum 명령어를 이용해 python3.6을 받아주도록 하자. 다른 방법도 있어지만 취소됐다고 한다.

어떤 천사... Angel..

sudo yum install -y https://repo.ius.io/ius-release-el7.rpm
yum install -y python36u python36u-lib python36u-devel python36-pip

 

2. Apache 및 mod_wsgi 설치

yum -y install httpd
yum install -y python36u-mod_wsgi

mod_wsgi는 장고와 아파치를 연결해주는 일종의 인터페이스로 꼭  python36u-mod_wsgi를 다운받아주도록 하자

그렇지 않으면 No module named site 저주에 걸리게 된다.

 

3. Django 다운로드 및 프로젝트 생성

pip3.6 install --upgrade pip
pip3.6 install django
django-admin startproject web

이때 프로젝트 생성한 경로를 기억해두는게 좋다.

 

4. Apache 설정

# /etc/httpd/conf.d/vhost.conf

<VirtualHost *:80>
    WSGIScriptAlias / /home/centos/web/web/wsgi.py # wsgi.py의 경로
    WSGIDaemonProcess web python-path=/home/centos/web/web/ #설정 파일(Settings.py) 경로
    
    <Directory /home/centos/web/web>
    	<Files wsgi.py>
        	AllowOverride none
            Require all granted
        </Files>
    </Directory>
</VirtualHost>
# /etc/httpd/conf/httpd.conf

<Directory / >
	AllowOverride none
    Require all granted
</Directory>

5. WSGI.py 와 Settings.py수정

wsgi.py

#/home/centos/web/web/wsgi.py

import python
import sys


from django.core import get_wsgi_application

#추가해야되는 부분
path = '/home/centos/web'  
if path not in sys.path:
    sys.path.append(path)
    
    
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'web.settings')

application = get_wsgi_application()

settings.py

#/home/centos/web/web/settings.py

ALLOWED_HOSTS = ["*"]

6. Django 시작

sudo systemctl restart httpd

이후 해당 아이피로 들어가서 창이 정상적으로 뜨는지 확인한다.

 

 

 

7. Trouble Shooting

다만 500 Server Internal Error에 대해서 조언을 하나 하자면

1.  mod_wsgi의 버전을 확인해야한다!!

 mod_wsgi는 아파치(Web Server)와 장고(Web Application Server)를 연결해주는 인터페이스로 python2, pyrhon3 에 대해 다른 프로그램이 존재한다. 아래 Trouble Shooting에 No module named site 항목으로 내려가 확인해 보길 추천한다.

2. 에러 로그를 꼭 보라!!

 물론 이런 실수를 하는 사람은 없겠지만 500 에러가 뜨기 시작하면서 /etc/httpd/logs/error_log /etc/httpd/access_log에  확인해봤지만 로그가 남아있는게 없는 처럼 보였다. 알고보니 방향키 아래로 가는 버튼을 누르면 로그가 계속해서 있었다...(정말로 놀라운 사실....) 만약 vi 편집기를 사용한다면 shift + g를 눌러 로그의 맨 아래로 이동해보는 것도 좋은 방법이다. 

3. Forbidden You don't have permission to access / on this server

  • 권한이 없어서 발생하는 문제
#/etc/httpd/conf/httpd.conf 
<Directory />      
	AllowOverride none Require all granted 
</Directory>

4. Permission denied : access to / failed because search permissions are missing on a component of the path

아파치 웹 서버에서 해당 경로를 읽어오려고 하나 nobody 권한으로 읽을 수 있는 권한이 없을 경우 발생

  1. 프로젝트 디렉토리의 권한이 755인가 확인
  2. 프로젝트 디렉토리 소유권이 해당 유저로 되어 있는가?
  3. 프로젝트 루트 디렉토리(/home/centos/django_test)권한 711인가 확인
  4. 프로젝트 디렉토리 소유권이 해당 유저로 되어 있는가?

5. Sqlite 버전 에러

https://sun2day.tistory.com/216

ossian.tistory.com/109

6. No module named site(대부분 mod_wsgi 버전이 맞지 않아서 발생하는 문제)

Solved in CentOS 7 with Apache 2.4.6

https://stackoverflow.com/questions/41005030/django-apache-and-virtualenv-importerror-no-module-named-site

7. Permission denied : mod_mine_magic:can't read (Selinux)

https://www.tek-tips.com/viewthread.cfm?qid=1622303

https://www.lesstif.com/system-admin/centos-selinux-6979732.html

8. mod_wsgi unable to connect WSGI daemon process

https://stackoverflow.com/questions/39346586/mod-wsgi-unable-to-connect-wsgi-daemon-process

9. Caught SIGWINCH error

https://stackoverflow.com/questions/780853/what-is-in-apache-2-a-caught-sigwinch-error

파이썬, httpd 관련

  1. RuntimeError: The 'apxs' command appears not to be installed or is not executable https://github.com/GrahamDumpleton/mod_wsgi/issues/136

  2. error: command 'gcc' failed with exit status 1 while installing eventlet

https://stackoverflow.com/questions/11094718/error-command-gcc-failed-with-exit-status-1-while-installing-eventlet

 

10. 기타 자료

아파치 Trouble shooting 정리되어 있는 것

https://hiseon.me/server/apache-error/

mod-wsgi document

https://pypi.org/project/mod-wsgi/

파이썬버전-장고 버전 호환성

https://docs.djangoproject.com/en/3.1/faq/install/

apache httpd 설정

https://opentutorials.org/course/3647/23838

ubuntu20.04 pip 다운로드

https://linuxize.com/post/how-to-install-pip-on-ubuntu-20.04/