문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| python:django:ubuntu [2025/04/19 03:49] – [Ubuntu 24.04 에서 uWSGI와 아파치] taekgu | python:django:ubuntu [2025/04/20 00:51] (현재) – [Apache2 설정] taekgu | ||
|---|---|---|---|
| 줄 2: | 줄 2: | ||
| 가상환경 | 가상환경 | ||
| + | python3-venv | ||
| <code bash> | <code bash> | ||
| - | python3 -m venv maroenv | + | python3 -m venv marovenv |
| </ | </ | ||
| [[linux: | [[linux: | ||
| 줄 23: | 줄 24: | ||
| <code bash> | <code bash> | ||
| apt install uwsgi | apt install uwsgi | ||
| + | # uwsgi plugins - 잘은 모르겠으나 필요함.ㅠ.ㅠ | ||
| sudo apt-get install uwsgi-plugin-python3 | sudo apt-get install uwsgi-plugin-python3 | ||
| </ | </ | ||
| 줄 31: | 줄 33: | ||
| /etc/init 디렉토리에 있는 선언적 구성 파일을 기반으로 실행한다 | /etc/init 디렉토리에 있는 선언적 구성 파일을 기반으로 실행한다 | ||
| - | === simple script (/etc/init/ | + | === ini파일은 |
| + | |||
| + | <code conf maro_uwsgi.ini> | ||
| + | [uwsgi] | ||
| + | uid=akfd | ||
| + | base=/ | ||
| + | |||
| + | # the virtualenv (full path) | ||
| + | home=/ | ||
| + | chdir=/ | ||
| + | |||
| + | module=conf.wsgi: | ||
| + | env=DJANGO_SETTINGS_MODULE=conf.settings.develop | ||
| + | |||
| + | autoload=true | ||
| + | # process-related settings | ||
| + | # uWSGI 프로세스를 master로 돌아가게 해줍니다. | ||
| + | master=true | ||
| + | |||
| + | # maximum number of worker processes | ||
| + | processes=5 | ||
| + | |||
| + | max-requests=5000 | ||
| + | daemonize=/ | ||
| + | |||
| + | # HTTP-PORT | ||
| + | http-socket=: | ||
| + | # UNIX socket 파일의 위치입니다. socket file의 위치를 잡아줘도 되며 localhost와 port를 명시해줘도 됩니다. | ||
| + | socket=/ | ||
| + | # UNIX socket 소유자 | ||
| + | chown-socket=%(uid):www-data | ||
| + | # UNIX socket에 대한 권한 설정입니다. 666을 해야 실행이 가능합니다. | ||
| + | chmod-socket=660 | ||
| + | # uWSGI를 통해서 생성된 파일들은 삭제하는 옵션입니다. | ||
| + | vacuum=true | ||
| + | |||
| + | # thread 사용을 앱(uWSGI) 내에서 가능하게 해줍니다. | ||
| + | enable-threads = true | ||
| + | # 단일한 python interpreter를 사용하게 하는 옵션입니다. | ||
| + | single-interpreter = true | ||
| + | # master말고 각각의 worker에(master에서 spawn한 자식들) 앱을 로드하는 설정입니다. | ||
| + | lazy-apps | ||
| - | <code bash> | ||
| - | # simple uWSGI script | ||
| - | description "uwsgi tiny instance" | ||
| - | start on runlevel [2345] | ||
| - | stop on runlevel [06] | ||
| - | respawn | ||
| - | exec uwsgi --master --processes 4 --die-on-term --socket :3031 --wsgi-file / | ||
| </ | </ | ||
| ==== uWSGI 설정 ==== | ==== uWSGI 설정 ==== | ||
| 줄 92: | 줄 128: | ||
| </ | </ | ||
| - | ==== Python + Apache mod_wsgi 연동 | + | ===== Apache2 설정 |
| + | Apache에서는 proxy_uwsgi를 이용하여 접속한다. | ||
| - | + | <code conf zaro.conf> | |
| - | === Apache mod_wsgi란? | + | |
| - | + | ||
| - | mod_wsgi의 목적은 Python WSGI 인터페이스를 지원하는 Python 응용 프로그램을 호스팅 할 수 있는 간 | + | |
| - | 단한 ApacheModule을 구현하는 것이다. 이 모듈은 웹 호스팅 서비스에서 실행되는 고성능 운영 사이트뿐 | + | |
| - | 만 아니라 고성능 프로덕션 웹 사이트 호스팅에도 사용하기에 적합하다. | + | |
| - | 지원 가능한 웹프레임워크 및 어플리케이션 | + | |
| - | * CherryPy | + | |
| - | * Django | + | |
| - | * Pylons | + | |
| - | * TurboGears | + | |
| - | * Pyramid | + | |
| - | * web.py | + | |
| - | * Werkzeug | + | |
| - | * Web2Py and Zope. | + | |
| - | + | ||
| - | === 아파치 설치 === | + | |
| - | <code bash> | + | |
| - | # apt-get install apache2 | + | |
| - | # apt-get install libapache2-mod-wsgi-py3 | + | |
| - | </ | + | |
| - | + | ||
| - | === 아파치 wsgi 설정 === | + | |
| - | + | ||
| - | <code conf / | + | |
| - | WSGIScriptAlias /test_wsgi / | + | |
| - | </ | + | |
| - | + | ||
| - | === 아파치 wsgi 설정 === | + | |
| - | + | ||
| - | $ a2enconf wsgi | + | |
| - | $ systemctl restart apache2 | + | |
| - | + | ||
| - | === test_wsgi.py 생성 === | + | |
| - | + | ||
| - | <code pyton / | + | |
| # create new | # create new | ||
| - | def application(environ, | + | ProxyPass /nakkko unix:/var/log/_uwsgi.sock|uwsgi: |
| - | status = '200 OK' | + | |
| - | html = '< | + | |
| - | '< | + | |
| - | '< | + | |
| - | ' | + | |
| - | '</div> | + | |
| - | '</body> | + | |
| - | '</html> | + | |
| - | response_header = [(' | + | |
| - | start_response(status, | + | |
| - | return [html] | + | |
| - | </code> | + | |
| - | === test_wsgi 페이지 확인 === | + | Alias /grrr / |
| + | < | ||
| + | Require all granted | ||
| + | </ | ||
| - | 웹브라우저에서 http://localhost/test_wsgi 접속하여 확인한다. | + | Alias /static |
| - | + | <Directory | |
| - | ==== Apache mode_wsgi + Django 연동 ==== | + | Require all granted |
| - | + | ||
| - | === 사전 환경 구축 === | + | |
| - | + | ||
| - | * virtualenv 설치 | + | |
| - | * django 설치 | + | |
| - | * Apache2 설치 | + | |
| - | * mod_wsgi 설치 | + | |
| - | + | ||
| - | === Django란? === | + | |
| - | + | ||
| - | Django는 안전하고 유지 관리 가능한 웹 사이트를 신속하게 개발할 수 있는 고차원적인 Python 기반 웹 | + | |
| - | 프레임워크이다. 경험이 풍부한 개발자들에 의해 구축된 장고(Django)는 웹 개발의 번거로움을 해소할 수 | + | |
| - | 있도록 하기 위해 고안되었다. 자유롭고 개방적이며 활발한 커뮤니티를 보유하고 있으며, 우수한 문서 및 | + | |
| - | 유료 지원을 위한 다양한 옵션을 갖추고 있다. | + | |
| - | + | ||
| - | === virtualenv 설치 === | + | |
| - | + | ||
| - | 가상 작업환경인 virtualenv를 설치한다. | + | |
| - | <code bash> | + | |
| - | root@www:~# apt-get -y install python-virtualenv | + | |
| - | </code> | + | |
| - | + | ||
| - | === virtualenv 설정 === | + | |
| - | <code bash> | + | |
| - | ubuntu@www: | + | |
| - | ubuntu@www: | + | |
| - | ubuntu@www: | + | |
| - | (venv)ubuntu@www: | + | |
| - | (venv)ubuntu@www: | + | |
| - | </ | + | |
| - | + | ||
| - | === 테스트 프로젝트 생성 === | + | |
| - | <code bash> | + | |
| - | Ubuntu@www: | + | |
| - | Ubuntu@www: | + | |
| - | # create “testproject” | + | |
| - | (venv)ubuntu@www: | + | |
| - | (venv)ubuntu@www: | + | |
| - | </ | + | |
| - | + | ||
| - | === 데이터베이스 설정(SQLite) === | + | |
| - | <code bash> | + | |
| - | # configure database (default is SQLite) | + | |
| - | (venv)ubuntu@www: | + | |
| - | # create admin user | + | |
| - | (venv)ubuntu@www: | + | |
| - | </ | + | |
| - | + | ||
| - | === 서버 실행 === | + | |
| - | <code bash> | + | |
| - | # start server | + | |
| - | venv)ubuntu@www: | + | |
| - | </ | + | |
| - | + | ||
| - | === Apache mode_wsgi + Django 연동 === | + | |
| - | + | ||
| - | views.py 작성 | + | |
| - | <code python testapp/ | + | |
| - | # -*- coding: utf-8 -*- | + | |
| - | from __future__ import unicode_literals | + | |
| - | + | ||
| - | from django.shortcuts import render | + | |
| - | + | ||
| - | from django.http import HttpResponse | + | |
| - | def main(request): | + | |
| - | html = '< | + | |
| - | '< | + | |
| - | '< | + | |
| - | ' | + | |
| - | '< | + | |
| - | '< | + | |
| - | '< | + | |
| - | return HttpRestponse(html) | + | |
| - | + | ||
| - | # Create your views here. | + | |
| - | </ | + | |
| - | + | ||
| - | <code python urls.py> | + | |
| - | """ | + | |
| - | + | ||
| - | The `urlpatterns` list routes URLs to views. For more information please see: | + | |
| - | https:// | + | |
| - | Examples: | + | |
| - | Function views | + | |
| - | 1. Add an import: | + | |
| - | 2. Add a URL to urlpatterns: | + | |
| - | Class-based views | + | |
| - | 1. Add an import: | + | |
| - | 2. Add a URL to urlpatterns: | + | |
| - | Including another URLconf | + | |
| - | 1. Import the include() function: from django.urls import include, path | + | |
| - | 2. Add a URL to urlpatterns: | + | |
| - | """ | + | |
| - | from django.conf.urls import include, url | + | |
| - | from django.contrib import admin | + | |
| - | + | ||
| - | urlpatterns = [ | + | |
| - | url(r' | + | |
| - | url(r'', | + | |
| - | ] | + | |
| - | </ | + | |
| - | + | ||
| - | <code python testapp/ | + | |
| - | from django.conf.urls import url | + | |
| - | from . import views | + | |
| - | + | ||
| - | urlpatterns = [ | + | |
| - | url(r' | + | |
| - | ] | + | |
| - | </ | + | |
| - | + | ||
| - | <code python testproject/ | + | |
| - | # add testapp like follows | + | |
| - | INSTALLED_APPS = ( | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ) | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Apache mod_wsgi 설정 ==== | + | |
| - | + | ||
| - | Django Test page까지 확인했으면 이제 Apache mod_wsgi와 Django를 연동해본다. | + | |
| - | 연동을 위해 django.conf 파일을 생성하여 설정한다. | + | |
| - | <code conf / | + | |
| - | # create new | + | |
| - | WSGIDaemonProcess test app python-path=/ | + | |
| - | WSGIProcessGroup test app | + | |
| - | WSGIScriptAlias /django / | + | |
| - | + | ||
| - | < | + | |
| - | Require all granted | + | |
| </ | </ | ||
| </ | </ | ||
| - | |||
| - | === Apache 재구동 === | ||
| - | <code bash> | ||
| - | root@www:~# a2enconf wsgi | ||
| - | root@www:~# systemctl restart apache2 | ||
| - | </ | ||
| - | |||