본격적인 설명에 앞서 아직 왜 장고와 아파치를 같이 배포해야되는지 모르겠다면 아래의 글을 한번 읽어보도록 하자
이번 포스트에서는 WAS인 장고와 WS인 아파치를 배포 과정에 대해 설명하도록 하겠다.
1. Python 3.6 설치
먼저 yum 명령어를 이용해 python3.6을 받아주도록 하자. 다른 방법도 있어지만 취소됐다고 한다.
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 권한으로 읽을 수 있는 권한이 없을 경우 발생
- 프로젝트 디렉토리의 권한이 755인가 확인
- 프로젝트 디렉토리 소유권이 해당 유저로 되어 있는가?
- 프로젝트 루트 디렉토리(/home/centos/django_test)권한 711인가 확인
- 프로젝트 디렉토리 소유권이 해당 유저로 되어 있는가?
5. Sqlite 버전 에러
https://sun2day.tistory.com/216
6. No module named site(대부분 mod_wsgi 버전이 맞지 않아서 발생하는 문제)
Solved in CentOS 7 with Apache 2.4.6
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 관련
- 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
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/
'Web Programming > Django' 카테고리의 다른 글
[Django] Django Template 인덱스 사용하기 (0) | 2021.02.22 |
---|---|
[Django] Django에서 DB 엑셀 파일 생성하는 방법 (2) | 2021.02.17 |
[Django] 장고 migrations 명령어 (0) | 2020.12.24 |
[Django] Template Tags and Filters (Filter 편) (0) | 2020.12.10 |
[Django] Trouble Shooting (0) | 2020.12.02 |