Deploying flask with nginx & uWSGI

  • 5,672 views
Uploaded on

for Python Korea 강남 Flask 스터디

for Python Korea 강남 Flask 스터디

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
5,672
On Slideshare
0
From Embeds
0
Number of Embeds
5

Actions

Shares
Downloads
57
Comments
0
Likes
14

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Deploying Flask with nginx & uWSGI Kim Jeong Ju (haje01@gmail.com) 13년 7월 23일 화요일
  • 2. Agenda • Flask Document • Prepare • VirtualEnv(Wrapper) • uWSGI • nginx • Tips & Pitfalls 13년 7월 23일 화요일
  • 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. 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. 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. • 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. 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. 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. 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. nginx • Install • sudo apt-get install nginx • Start • sudo service nginx start 13년 7월 23일 화요일
  • 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. 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. Done! 13년 7월 23일 화요일
  • 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. 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. Tips - Configuration • Best Practice - http://flask.pocoo.org/docs/ config/#configuration-best-practices • make_config.py 13년 7월 23일 화요일
  • 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. 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. 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일 화요일