Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Deploying flask with nginx & uWSGI

8,334 views

Published on

for Python Korea 강남 Flask 스터디

Published in: Technology
  • Be the first to comment

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일 화요일

×