[Django] Apache 연동

2018. 7. 5. 11:01Programming/Django

반응형

Apache 의 mod_wsgi 서버 설치

uwsgi 구동원리 전개도

정식 Document 설정 blog 설정 blog 설정 Blog nginx 와 Django

Apache 의 mod_wsgi 서버를 설치한다

$ sudo apt-get install apache2                  # apache2 설치
$ sudo apt-get install libapache2-mod-wsgi-py3  # 파이썬 연결 모듈
(Django) $ pip install uwsgi                    # 파이썬 모듈 

mod_wsgi 및 apache2 설치확인

  1. $ uwsgi 로 설치를 확인한다
  2. apache2 는 https://localhost:80 로 접속하여 apache2 설치를 확인한다


django 사용 port를 연다

  1. $ sudo ufw allow 8000 로 ufw 방화벽에서 해당포트를 개방한다
  2. $ sudo iptables -I INPUT -p tcp --dport 8000 -j ACCEPT 로 iptables의 해당포트를 개방한다
  3. $ python manage.py runserver 0.0.0.0:8000 로 해당포트가 열린걸 확인한다


apache2에서 설정을 추가한다

/etc/apache2/ports.conf 설정변경

`$ sudo nano /etc/apache2/ports.conf` 파일의 port 설정값을 추가한다 (80 포트는 기본 포트 이므로 **django 포트주소를 추가**한다)

localhost 에서는, 위의 설정값이 django 실행시 해당포트가 이미 작동중이라는 오류가 발생했다. 지정이 없어야 제대로 작동하는 결과를 보여줬다

#Listen 추가포트
Listen 80
Listen 8000

/etc/apache2/sites-available/000-default.conf 설정변경 (새로운 conf 파일을 만든다. ex) myproject.conf )

$ sudo vi /etc/apache2/sites-available/000-default.conf(or myproject.conf) 여기도 포트 80번은 기본값이므로, django 포트 주소를 추가한다.
( 새로운 conf 파일 생성 시, 추가 명령어가 필요하다.
sudo a2dissite 000-default.conf    
sudo a2ensite myproject.conf       
위 명령어를 수행하면 .conf 파일이 sites-enabled 에 추가 된다.)

WSGIDaemonProcess   프로젝트   python-home=/home/가상경로/env   python-path=/home/프로젝트경로 
WSGIProcessGroup localhost
WSGIScriptAlias   /   /home/wsgi.py가 있는 경로/wsgi.py 

<VirtualHost *:8080>
    ServerName localhost
    ServerAlias localhost

    Alias /static /my/static/path/static

    <Directory /my/static/path/static>
        Require all granted
    </Directory>

    <Directory /my/log/path/logs>
        Require all granted
    </Directory>

    Alias /uploads /my/media/or/upload/path/uploads
    <Directory /my/media/or/upload/path/uploads>
        Require all granted
    </Directory>

    <Directory /home/user/django/myProject/myProject>
        <Files wsgi.py>
              Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess localhost python-path=/home/user/django/myProject
    WSGIProcessGroup localhost
    WSGIScriptAlias / /home/user/django/myProject/myProject/wsgi.py
</VirtualHost>

django_server : 웹에서 접속시 연결되는 Domain 주소 값으로 localhost 에서 접속을 사용하려면 $ sudo nano /etc/hosts 에 127.0.0.1 django_server 값을 추가해야한다

WSGIDaemonProcess : 비 윈도우 환경에서 데몬모드(백그라운드 실행하면서 별도 인터페이스를 필요로 하지 않는 실행) 설정을 할때에는 외부도메인과 python 외부 경로를 추가적으로 설정해야 한다

Alias 로 외부 경로를 url에 추가하기

Alias 경로추가 설명 

# 리눅스의 경우
Alias /static /my/static/path/static
# 윈도우의 경우; 폴더 구분 기호가 슬래시(/)임에 주의 Alias /aliastest/ "C:/my/static/path/static"

위 설정은 /my/static/path/static 디렉토리에 있는 콘텐츠에 웹 브라우저에서 http://서버의 IP 주소/static/ 경로를 통해서 접근할 수 있다.

<Directory /home/사용자/프로젝트/wsgi.py 경로> 
    < Files wsgi.py > 
        Require all granted 
    < / Files >     
</Directory> 

서버를 재가동 한다

$ sudo service apache2 restart 로 새로운 설정값이 적용된 서버를 재가동한다

Trouble shooting

1. 아파치 구동 시, ImportError: No module named 'django'
- django가 lib 경로에 설치 되어 있는지 확인한다. ( pip install django )
- lib 소유권을 변경한다. ( venv를 사용하면 myvenv/lib/site-packages/ 의 소유권을 www-data로 변경해주어야한다.)
   ex.)  sudo chown -R user:www-data ...../myvenv/lib/
- 다른 방법으로는 apache 프로세스의 소유권을 변경하면 된다.
   /etc/apache2/apache2.conf 내의 User 와 Group 을 원하는 계정으로 변경하고 재기동한다.

2. django admin 화면 css not found.
- 여러가지 방법이 있겠지만, 간단하게 django lib 폴더에 admin static 파일을 alias를 설정해준 static 폴더에 복사하면 해결됨
ex) ...../python3.5/site-packages/django/contrib/admin/static 안에 admin 폴더를 /static/ 폴더 안에 복사하면 된다.



출처 : https://yongbeomkim.github.io/django/mdc-wsgi-server/

반응형

'Programming > Django' 카테고리의 다른 글

[Django] Nginx설치  (0) 2020.02.21
[QuerySet]쿼리셋 수정을 통한 웹서비스 성능 개선  (0) 2018.02.23