공개 SW 솔루션설치 & 활용가이드 미들웨어 > WAS 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide
CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 7. FAQ 8. 용어정리
- 3-1. 개요 소개 WSGI 란 Web Server Gateway Interface 의약자로, 웹서버와웹어플리케이션이어떤방식으로통신하는가에관한인터페이스를의미, 이 WSGI 규격에맞춘코드를실행해주는프로그램이 uwsgi 임. 이외에 Gunicorn 같은프로그램또한 WSGI 규격웹애플리케이션을배포할때쓰임 주요기능 어플리케이션인터페이스 미들웨어인터페이스 대분류 미들웨어소분류 WAS 라이선스형태 GNU General Public License v2.0 with linking exception 사전설치솔루션 N/A 운영제제 Windows, Linux, Unix 버전 2.0.15 (March 30, 2017) 특징 환경변수를적절히변경하여대상 URL 에따라다른애플리케이션개체에요청을라우팅 동일한프로세스에서여러애플리케이션또는프레임워크를나란히실행할수있도록허용 네트워크를통해요청및응답을전달하여로드밸런싱및원격처리 XSLT 스타일을적용하는등의콘텐츠처리수행 보안취약점 N/A 개발회사 / 커뮤니티 Unbit 공식홈페이지 http://uwsgi-docs.readthedocs.io/en/latest/
- 4-2. 기능요약 웹서버게이트웨어인터페이스 (WSGI, Web Server Gateway Interface) 는웹서버와웹애플리케이션의인터페이스를위한파이썬 (Pytion) 프레임워크 WSGI 종류 : Bjoern, uwagi, mod_wsgi, Gunicorn Gunicorn: Unix용 Python WSGI HTTP Server 임 (ruby unicorn 프로젝트에서포크됨 ) uwsgi는 WSGI의한종류로호스팅서버를구축할수있는 Full Stack 지원 Django( 파이썬기반의웹프레임워크 ) 와호환성이좋음 uwsgi는타언어나플랫폼을다룰수있도록 Pluggable architecture 지원 ( 예 : C, C++ 지원 ) Plugin이많을수록프로젝트의규모가커질수있음 < 서비스아키텍처도식도 > 출처 : http://technerd.tistory.com/55
- 5-3. 실행환경 지원가능한플랫폼 / 시스템 지원가능한언어및플랫폼 기술 버젼 Linux 2.6/3.x FreeBSD NetBSD OpenBSD DragonFlyBSD Windows Cygwin Mac OSX Solaris >= 10 NexentaOS SmartOS OpenSolaris OpenIndiana OmniOS Debian/kFreeBSD GNU/Hurd Python 0.9.1 Stable, 100% uwsgi API support Lua 0.9.5 Stable, 60% uwsgi API support Perl 0.9.5 Stable, 60% uwsgi API support Ruby 0.9.7-dev Stable, 80% uwsgi API support Integrating uwsgi with Erlang 0.9.5 Stable, no uwsgi API support Running CGI scripts on uwsgi 1.0-dev Stable, no uwsgi API support Running PHP scripts in uwsgi 1.0-dev Stable from 1.1, 5% uwsgi API support uwsgi Go support (1.4 only) 1.4-dev 15% uwsgi API support JVM in the uwsgi server (updated to 1.9) 1.9-dev Stable The Mono ASP.NET plugin 0.9.7-dev Stable uwsgi V8 support 1.9.4 Early stage of development
- 6-4. 설치및실행 세부목차 4.1 uwsgi 설치 4.2 uwsgi 서버실행 4.3 uwsgi 설정 * 출처 : http://kernel-for-trace-based-systems.readthedocs.io
- 7-4. 설치및실행 4.1 uwsgi 설치 여기서는 Ubuntu 기반에서설치한다. 설치를위해 Python 과 C 컴파일러 (gcc, clang) 가필요하다. Python 은 linux 에기본으로설치되어있기때문에 pip install uwsgi 로설치가능하다.
- 8-4. 설치및실행 4.2 uwsgi 서버실행 서버실행은 uwsgi 명령어를통해실행가능하지만간단한스크립트를만들어 실행해보자. /etc/init 디렉토리에있는선언적구성파일을기반으로실행한다 simple script (/etc/init/uwsgi.conf) # 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 /var/www/myapp.wsgi
- 9-4. 설치및실행 4.3 uwsgi 설정 (1/2) uwsgi 는여러가지포맷 (ini,xml, yaml, json) 을지원한다. uwsgi --ini http://uwsgi.it/configs/myapp.ini # HTTP uwsgi --xml - # standard input uwsgi --yaml fd://0 # file descriptor uwsgi --json 'exec://nc 192.168.11.2:33000' # arbitrary executable
- 10-4. 설치및실행 4.3 uwsgi 설정 (2/2).INI 파일은많은응용프로그램에서사용되는사실상표준구성형식이다. [section] key = value 쌍으로구성된다. [uwsgi] socket = /tmp/uwsgi.sock socket = 127.0.0.1:8000 workers = 3 master = true 기본적으로 uwsgi 는 [uwsgi] 섹션을사용하지만 filename : section 구문과함께 INI 파일을 로드하는동안다른섹션이름을지정할수있다. uwsgi --ini myconf.ini:app1
- 11-5. 기능소개 세부목차 5.1 uwsgi 로깅 5.2 uwsgi 로그포맷 출처 : Ruslan s Blog
- 12-5. 기능소개 5.1 uwsgi 로깅 uwsgi 에서가장기본적인형태의로깅은요청, 오류및정보메시지를 stdout / stderr 으로생성한다. 로그리다이렉션의가장기본적인형태는 --logto / --logto2 / --daemonize 옵션으로, 로그를파일로정할수있다../uwsgi -s :3031 -w simple_app --daemonize /tmp/mylog.log./uwsgi -s :3031 -w simple_app --logto /tmp/mylog.log./uwsgi -s :3031 -w simple_app --uid 1001 --gid 1002 --logto2 /tmp/mylog.log stdout / stderr 대신파일에기록하려면 --logto 를사용하거나 uwsgi, - daemonize 를 동시에데몬을실행하면된다.
- 13-5. 기능소개 5.2 uwsgi 로그포맷 uwsgi 에는사용자정의요청로그라인을작성하기위한 --logformat 옵션이있다. %(uri) -> REQUEST_URI %(method) -> REQUEST_METHOD %(user) -> REMOTE_USER %(addr) -> REMOTE_ADDR %(host) -> HTTP_HOST %(proto) -> SERVER_PROTOCOL %(uagent) -> HTTP_USER_AGENT (starting from 1.4.5) %(referer) -> HTTP_REFERER (starting from 1.4.5) 다음로그형식을사용하면코드정의 logvars 에액세스할수있다. uwsgi --logformat 'worker id = %(worker_id) for request "%(method) %(uri) %(proto)" test = %(foo)'
- 14 - 세부목차 6.1 Python + Apache mod_wsgi 연동 6.2 Apache mode_wsgi + Django 연동
- 15-6.1 Python + Apache mod_wsgi 연동 (1/8) Apache mod_wsgi란? mod_wsgi의목적은 Python WSGI 인터페이스를지원하는 Python 응용프로그램을호스팅할수있는간단한 ApacheModule을구현하는것이다. 이모듈은웹호스팅서비스에서실행되는고성능운영사이트뿐만아니라고성능프로덕션웹사이트호스팅에도사용하기에적합하다. 지원가능한웹프레임워크및어플리케이션 CherryPy Django Pylons TurboGears Pyramid web.py Werkzeug Web2Py and Zope.
- 16-6.1 Python + Apache mod_wsgi 연동 (2/8) 아파치설치 (1/2) # apt-get install apache2
- 17-6.1 Python + Apache mod_wsgi 연동 (3/8) 아파치설치 (2/2) # apt-get install apache2
- 18-6.1 Python + Apache mod_wsgi 연동 (4/8) 아파치 wsgi 설정 vi /etc/apache2/conf-available/wsgi.conf
- 19-6.1 Python + Apache mod_wsgi 연동 (5/8) 아파치 wsgi 설정 vi /etc/apache2/conf-available/wsgi.conf WSGIScriptAlias /test_wsgi /var/www/html/test_wsgi.py
- 20-6.1 Python + Apache mod_wsgi 연동 (6/8) 아파치 wsgi 설정 $ a2enconf wsgi $ systemctl restart apache2
- 21-6.1 Python + Apache mod_wsgi 연동 (7/8) test_wsgi.py 생성 root@www:~# vi /var/www/html/test_wsgi.py # create new def application(environ,start_response): status = '200 OK' html = '<html>\n' \ '<body>\n' \ '<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">\n' \ 'mod_wsgi Test Page\n' \ '</div>\n' \ '</body>\n' \ '</html>\n' response_header = [('Content-type','text/html')] start_response(status,response_header) return [html]
- 22-6.1 Python + Apache mod_wsgi 연동 (8/8) test_wsgi 페이지확인 웹브라우저에서 http://localhost/test_wsgi 접속하여확인한다.
- 23-6.2 Apache mode_wsgi + Django 연동 (1/20) 사전환경구축 virtualenv 설치 django 설치 Apache2 설치 mod_wsgi 설치
- 24-6.2 Apache mode_wsgi + Django 연동 (2/20) Django 란? Django는안전하고유지관리가능한웹사이트를신속하게개발할수있는고차원적인 Python 기반웹프레임워크이다. 경험이풍부한개발자들에의해구축된장고 (Django) 는웹개발의번거로움을해소할수있도록하기위해고안되었다. 자유롭고개방적이며활발한커뮤니티를보유하고있으며, 우수한문서및유료지원을위한다양한옵션을갖추고있다.
- 25-6.2 Apache mode_wsgi + Django 연동 (3/20) virtualenv 설치 가상작업환경인 virtualenv 를설치한다. root@www:~# apt-get -y install python-virtualenv
- 26-6.2 Apache mode_wsgi + Django 연동 (4/20) virtualenv 설정 ubuntu@www:~$ virtualenv venv # virtualenv 생성 ubuntu@www:~$ cd ~/venv ubuntu@www:~/venv$ source bin/activate (venv)ubuntu@www:~/venv$ pip install -U pip (venv)ubuntu@www:~/venv$ pip install django #django 설치
- 27-6.2 Apache mode_wsgi + Django 연동 (5/20) 테스트프로젝트생성 Ubuntu@www:~$ cd ~/venv Ubuntu@www:~/venv$ source bin/activate # create testproject (venv)ubuntu@www:~/venv$ django-admin startproject testproject (venv)ubuntu@www:~/venv$ cd testproject
- 28-6.2 Apache mode_wsgi + Django 연동 (6/20) 데이터베이스설정 (SQLite)(1/2) # configure database (default is SQLite) (venv)ubuntu@www:~/venv/testproject$ python manage.py migrate
- 29-6.2 Apache mode_wsgi + Django 연동 (7/20) 데이터베이스설정 (SQLite)(2/2) # create admin user (venv)ubuntu@www:~/venv/testproject$ python manage.py createsuperuser
- 30-6.2 Apache mode_wsgi + Django 연동 (8/20) 서버실행 # start server venv)ubuntu@www:~/venv/testproject$ python manage.py runserver 0.0.0.0:8000
- 31-6.2 Apache mode_wsgi + Django 연동 (9/20) 서비스확인
- 32-6.2 Apache mode_wsgi + Django 연동 (10/20) 관리자페이지확인
- 33-6.2 Apache mode_wsgi + Django 연동 (11/20) 관리자페이지확인
- 34-6.2 Apache mode_wsgi + Django 연동 (12/20) 테스트프로젝트생성 ubuntu@www:~$ cd ~/venv ubuntu@www:~/venv$ source bin/activate (venv)ubuntu@www:~/venv$ cd testproject (venv)ubuntu@www:~/venv/testproject$ python manage.py startapp testapp
- 35-6.2 Apache mode_wsgi + Django 연동 (13/20) views.py 작성 (venv)ubuntu@www:~/venv/testproject$ vim testapp/views.py
- 36-6.2 Apache mode_wsgi + Django 연동 (14/20) testproject/urls.py 수정 (venv)ubuntu@www:~/venv/testproject$ vim testproject/urls.py
- 37-6.2 Apache mode_wsgi + Django 연동 (15/20) testapp/urls.py 생성 (venv)ubuntu@www:~/venv/testproject$ vim testapp/urls.py
- 38-6.2 Apache mode_wsgi + Django 연동 (16/20) settings.py 작성 (venv)ubuntu@www:~/venv/testproject$ vim testproject/settings.py # add testapp like follows INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'testapp', # 추가 )
- 39-6.2 Apache mode_wsgi + Django 연동 (17/20) 서버실행후, 웹서비스확인 브라우저를통해테스트페이지가확인되었다면 Django 연동준비가완료된것이다. (venv)ubuntu@www:~/venv/testproject$ python manage.py runserver 0.0.0.0:8000
- 40-6.2 Apache mode_wsgi + Django 연동 (18/20) Apache mod_wsgi 설정 Django Test page 까지확인했으면이제 Apache mod_wsgi 와 Django 를연동해본다. 연동을위해 django.conf 파일을생성하여설정한다. root@www:~# vi /etc/apache2/conf-available/django.conf
- 41-6.2 Apache mode_wsgi + Django 연동 (19/20) Apache 재구동 root@www:~# a2enconf wsgi root@www:~# systemctl restart apache2
- 42-6.2 Apache mode_wsgi + Django 연동 (20/20) 브라우저에서서비스확인
- 43-7. FAQ Q 상업서비스에기술지원이가능합니까? & A unbit.it 에서메일답변가능합니다. Q 클러스터환경에서사용할수있습니까? & A uwagi 주요기능중하나로가능합니다. 여러서버에바인딩된여러인스턴스와로드밸런싱을사용하는경우, webserver/proxy aerouter 부하를분산시킬수있습니다. Q 기존서버를 uwsgi 로바꾸면더좋아집니까? & A 대체적으로빠르지만큰병목현상이있는어플리케이션은성능이크게나아지기힘듭니다.
- 44-7. FAQ Q uwsgi 환경에서성능개선에가장중요한옵션은무엇입니까? & A 기본적으로 "almost-all-all" 값으로구성됩니다. 그외에도소켓큐사이즈나쓰레딩, 멀티인터럽트튜닝옵션을고려할수있습니다. Q uwsgi에적합한웹서버핸들러는무엇이있습니까? & A Nginx, Apache, Lighttpd, Twisted, Tomcat 등이있습니다.
- 45-8. 용어정리 용어 WSGI (Web Server Gateway Interface) 장고 (Django) 파이썬 (Python) 엔진엑스 (NginX) Mod_WSGI Gunicorn Bjoern 설명 웹서버와웹애플리케이션의인터페이스를위한파이선프레임워크 파이썬으로만들어진무료공개 SW 웹애플리케이션프레임워크 (web application framework) 네덜란드수학자귀도반로섬에의해개발된프로그램언어로문법이쉽고간결하고무료로사용할수있어널리쓰임 웹서버 (Web Server) 소프트웨어 Graham Dumpleton 이개발된 Apache HTTP Server 모듈로 python web apps 을위한 WSGI 인터페이스지원 Green Unicorn 약어로 Unix 용 WSGI HTTP Server 임. Ruby 프로젝트에서포크됨 비동기 Cpython 의 WSGI serve 로 C 언어로작성되어가볍고속도가빠름
Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.