Deploying flask with nginx & uWSGI

7,647 views
7,204 views

Published on

for Python Korea 강남 Flask 스터디

Published in: Technology
0 Comments
19 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,647
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
73
Comments
0
Likes
19
Embeds 0
No embeds

No notes for slide

Deploying flask with nginx & uWSGI

  1. 1. Deploying Flask with nginx & uWSGI Kim Jeong Ju (haje01@gmail.com) 13년 7월 23일 화요일
  2. 2. Agenda • Flask Document • Prepare • VirtualEnv(Wrapper) • uWSGI • nginx • Tips & Pitfalls 13년 7월 23일 화요일
  3. 3. Flask Documents • Deploying to a Web Server • http://flask.pocoo.org/docs/quickstart/#deploying- to-a-web-server • Deploying with Distribute • http://flask.pocoo.org/docs/patterns/distribute/ • Deployment Options • http://flask.pocoo.org/docs/deploying/ 13년 7월 23일 화요일
  4. 4. Prepare • gcc & python-dev • sudo apt-get update • sudo apt-get install build-essential python-dev python-pip • Make User (Don’t use ‘root’ user) • sudo useradd -r -g www-data -s /bin/false uwsgi • Make dir • sudo mkdir -p /var/www/myapp 13년 7월 23일 화요일
  5. 5. Prepare -VirtualEnv • Install • sudo pip install virtualenvwrapper • Config • export WORKON_HOME=~/VirtualEnvs • mkdir -p $WORKON_HOME • source /usr/local/bin/virtualenvwrapper.sh 13년 7월 23일 화요일
  6. 6. • Shell Script (~/.profile) • export WORKON_HOME=~/VirtualEnvs • source /usr/local/bin/virtualenvwrapper.sh • Make Env. & Enter • mkvirtualenv myapp • workon myapp Prepare -VirtualEnv 13년 7월 23일 화요일
  7. 7. Prepare - Cont. • Install Flask • Do(or Clone) your app • Permission • sudo chown uwsgi:www-data /var/www/myapp -R • sudo chmod 775 application.py • Add group • sudo usermod -a -G www-data myuser 13년 7월 23일 화요일
  8. 8. uWSGI • Install • pip install uwsgi • Make log file • sudo mkdir -p /var/log/uwsgi • sudo touch /var/log/uwsgi/myapp.log • Config & Run • sudo /home/ubuntu/VirtualEnvs/myapp/bin/uwsgi -x uwsgi.xml 13년 7월 23일 화요일
  9. 9. uwsgi.xml <?xml version="1.0"?> <uwsgi id="myapp"> <module>application:app</module> <virtualenv>/home/myuser/VirtualEnvs/myapp</virtualenv> <socket>/tmp/myapp.sock</socket> <processes>4</processes> <chdir>/var/www/myapp</chdir> <pidfile>/tmp/myapp.pid</pidfile> <daemonize>/var/log/uwsgi/myapp.log</daemonize> <stats>/tmp/myapp.stats</stats> <log-format>``%(addr) - %(user) [%(ltime)] "%(method) %(uri) %(proto)" %(status) %(size)`` "%(referer)" "%(uagent)"</log- format> <uid>uwsgi</uid> <gid>www-data</gid> <chmod-socket>775</chmod-socket> </uwsgi> 13년 7월 23일 화요일
  10. 10. nginx • Install • sudo apt-get install nginx • Start • sudo service nginx start 13년 7월 23일 화요일
  11. 11. nginx config server { listen 8080; server_name myapp; root /var/www/myapp; try_files $uri @uwsgi; location @uwsgi { include uwsgi_params; uwsgi_pass unix:/tmp/myapp.sock; } } 13년 7월 23일 화요일
  12. 12. nginx • Write config file • sudo vi /etc/nginx/sites-available/www • Symbolic link • sudo ln -s /etc/nginx/sites-available/www /etc/ nginx/sites-enabled/ • remove default from sites-enabled/ • Restart • sudo service nginx restart 13년 7월 23일 화요일
  13. 13. Done! 13년 7월 23일 화요일
  14. 14. Tips - Scripts • start • sudo /home/myuser/VirtualEnvs/myapp/bin/uwsgi - x ./uwsgi.xml • stop • sudo /home/myuser/VirtualEnvs/myapp/bin/uwsgi -- stop /tmp/myapp.pid • reload • sudo /home/myuser/VirtualEnvs/myapp/bin/uwsgi -- reload /tmp/myapp.pid 13년 7월 23일 화요일
  15. 15. Tips - Logging Errors • In production, you won’t see log messages • Send Error Mails! • Install Mail Server • sudo apt-get install postfix ADMINS = ['yourname@example.com'] if not app.debug: import logging from logging.handlers import SMTPHandler mail_handler = SMTPHandler('127.0.0.1', 'server-error@example.com', ADMINS, 'YourApplication Failed') mail_handler.setLevel(logging.ERROR) app.logger.addHandler(mail_handler) 13년 7월 23일 화요일
  16. 16. Tips - Configuration • Best Practice - http://flask.pocoo.org/docs/ config/#configuration-best-practices • make_config.py 13년 7월 23일 화요일
  17. 17. Pitfall - ‘print’ • Unicode Encode Error • No Daemon - OK, Daemon - Error! • msg = u”한글”; print msg • -> msg = u”한글”; print msg.encode(‘utf-8’) 13년 7월 23일 화요일
  18. 18. Pitfall - Pass EnvVars • nginx UWSGI_SETENV not work (Bug!) • uwsgi_param UWSGI_SETENV DJANGO_SETTINGS_MODULE=myapp.settings; • Use uwsgi ‘env’ • <env>MYAPP_DEBUG=False</env> 13년 7월 23일 화요일
  19. 19. References • http://blog.naver.com/PostView.nhn? blogId=ez_&logNo=140138625021&parentCategoryNo=1&view Date=&currentPage=1&listtype=0 • http://blog.kramerapps.com/post/22551999777/flask-uwsgi-nginx- ubuntu • http://blog.naver.com/PostView.nhn? blogId=ez_&logNo=140138625021&parentCategoryNo=1&view Date=&currentPage=1&listtype=0 • http://flask.pocoo.org/docs/errorhandling/ 13년 7월 23일 화요일

×