Your SlideShare is downloading. ×
0
Deploying Django
Andy@Django Workshop
2013/8/6
1
13年8月6⽇日星期⼆二
好不容易把網站寫好
了,終於要放上去...
2
13年8月6⽇日星期⼆二
這還不簡單
3
13年8月6⽇日星期⼆二
4
13年8月6⽇日星期⼆二
4
• 買一台VPS 或實體機器
13年8月6⽇日星期⼆二
4
• 買一台VPS 或實體機器
• DNS 指好
13年8月6⽇日星期⼆二
4
• 買一台VPS 或實體機器
• DNS 指好
• python manage.py runserver
13年8月6⽇日星期⼆二
4
• 買一台VPS 或實體機器
• DNS 指好
• python manage.py runserver
• 開啟 http://xxx.com:8000
13年8月6⽇日星期⼆二
5
打完收工!開始賺錢!
13年8月6⽇日星期⼆二
6
13年8月6⽇日星期⼆二
7
13年8月6⽇日星期⼆二
8
來!跟著我做!
13年8月6⽇日星期⼆二
TURN OFF DEBUG
9
13年8月6⽇日星期⼆二
你不會想讓使用者看到這些
10
13年8月6⽇日星期⼆二
也不會想讓使用者看到這些..
11
13年8月6⽇日星期⼆二
IMPLEMENT 404 & 500
否則...
12
13年8月6⽇日星期⼆二
13
報告學長,完全沒有畫面
13年8月6⽇日星期⼆二
SET UP ERROR
ALERTS
14
13年8月6⽇日星期⼆二
DON’T USE SQLITE
15
13年8月6⽇日星期⼆二
Web Server 的選擇
16
• Apache 系
• 務必使用 mod_wsgi
• 不過如果非不得已的話別自找麻煩...
• nginx 系
• nginx + gunicorn
• nginx + uwsgi
13年8月6⽇日星期⼆二
nginx + gunicorn
17
13年8月6⽇日星期⼆二
gunicorn
18
• http://gunicorn.org/
• Gunicorn 'Green Unicorn' is a Python
WSGI HTTP Server for UNIX. It's a pre-
fork work...
• pip install gunicorn
• gunicorn project.wsgi:application -b
0.0.0.0:$PORT -w $NUM_WORKERS
19
13年8月6⽇日星期⼆二
20
#!/bin/bash
set -e
LOGFILE=/home/ubuntu/project/log/gunicorn.log
LOGDIR=$(dirname $LOGFILE)
NUM_WORKERS=5
USER=ubuntu
G...
21
用 supervisor 來管 process
[program:project]
directory = /home/ubuntu/project/
user = ubuntu
command = /home/ubuntu/projec...
Usage
• sudo supervisorctl update
• sudo supervisorctl status project
• sudo supervisorctl stop project
• sudo supervisorc...
NGINX
23
13年8月6⽇日星期⼆二
nginx 是啥...
24
• 基本上是個 light-weight web server
• Serve static/media files
• 記得 python manage.py collectstatic
• 當做 Reversed...
nginx.conf
25
server {
listen 80;
...
location /media/ {
	

 autoindex off ;
	

 root /path/to/your/media/file ;
}
location...
恭喜!結束了...
26
13年8月6⽇日星期⼆二
不過是不是漏了什麼
27
13年8月6⽇日星期⼆二
網站是會更新的!
28
13年8月6⽇日星期⼆二
29
• 重新打包上傳一次
• use git or mercurial
• git pull 搞定一切
• 不過還是得要 ssh 登入之後做一堆事情
13年8月6⽇日星期⼆二
30
USE fabric!
13年8月6⽇日星期⼆二
SCALING
31
13年8月6⽇日星期⼆二
32
13年8月6⽇日星期⼆二
32
13年8月6⽇日星期⼆二
32
13年8月6⽇日星期⼆二
不過其實你可以不用
那麼辛苦
33
13年8月6⽇日星期⼆二
34
• Media Server
• S3
• CDN
• Database Server
• Amazon RDS
• Google Cloud SQL
• Heroku Postgresql
13年8月6⽇日星期⼆二
• Heroku
• Openshift
• dotCloud
• AWS Elastic Beanstalk
35
如果你有 $$,其實你真的不用
那麼辛苦
13年8月6⽇日星期⼆二
Django deploy 有點麻
煩,剛開始學習用
PaaS 就好
36
13年8月6⽇日星期⼆二
如果你 $$ 夠多,那麼
或許你也用 PaaS 就好
37
13年8月6⽇日星期⼆二
Reference
• http://michal.karzynski.pl/blog/2013/06/09/
django-nginx-gunicorn-virtualenv-
supervisor/
• https://devcenter....
一些好用的東西
• Sentry https://getsentry.com/
• Newrelic http://newrelic.com/
• Papertrail https://papertrailapp.com/
• Amazon S...
Upcoming SlideShare
Loading in...5
×

Django deploy

699

Published on

My talk about Django Deployment

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
699
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
17
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Django deploy"

  1. 1. Deploying Django Andy@Django Workshop 2013/8/6 1 13年8月6⽇日星期⼆二
  2. 2. 好不容易把網站寫好 了,終於要放上去... 2 13年8月6⽇日星期⼆二
  3. 3. 這還不簡單 3 13年8月6⽇日星期⼆二
  4. 4. 4 13年8月6⽇日星期⼆二
  5. 5. 4 • 買一台VPS 或實體機器 13年8月6⽇日星期⼆二
  6. 6. 4 • 買一台VPS 或實體機器 • DNS 指好 13年8月6⽇日星期⼆二
  7. 7. 4 • 買一台VPS 或實體機器 • DNS 指好 • python manage.py runserver 13年8月6⽇日星期⼆二
  8. 8. 4 • 買一台VPS 或實體機器 • DNS 指好 • python manage.py runserver • 開啟 http://xxx.com:8000 13年8月6⽇日星期⼆二
  9. 9. 5 打完收工!開始賺錢! 13年8月6⽇日星期⼆二
  10. 10. 6 13年8月6⽇日星期⼆二
  11. 11. 7 13年8月6⽇日星期⼆二
  12. 12. 8 來!跟著我做! 13年8月6⽇日星期⼆二
  13. 13. TURN OFF DEBUG 9 13年8月6⽇日星期⼆二
  14. 14. 你不會想讓使用者看到這些 10 13年8月6⽇日星期⼆二
  15. 15. 也不會想讓使用者看到這些.. 11 13年8月6⽇日星期⼆二
  16. 16. IMPLEMENT 404 & 500 否則... 12 13年8月6⽇日星期⼆二
  17. 17. 13 報告學長,完全沒有畫面 13年8月6⽇日星期⼆二
  18. 18. SET UP ERROR ALERTS 14 13年8月6⽇日星期⼆二
  19. 19. DON’T USE SQLITE 15 13年8月6⽇日星期⼆二
  20. 20. Web Server 的選擇 16 • Apache 系 • 務必使用 mod_wsgi • 不過如果非不得已的話別自找麻煩... • nginx 系 • nginx + gunicorn • nginx + uwsgi 13年8月6⽇日星期⼆二
  21. 21. nginx + gunicorn 17 13年8月6⽇日星期⼆二
  22. 22. gunicorn 18 • http://gunicorn.org/ • Gunicorn 'Green Unicorn' is a Python WSGI HTTP Server for UNIX. It's a pre- fork worker model ported • 總之就是一個效能很好的 wsgi web server 13年8月6⽇日星期⼆二
  23. 23. • pip install gunicorn • gunicorn project.wsgi:application -b 0.0.0.0:$PORT -w $NUM_WORKERS 19 13年8月6⽇日星期⼆二
  24. 24. 20 #!/bin/bash set -e LOGFILE=/home/ubuntu/project/log/gunicorn.log LOGDIR=$(dirname $LOGFILE) NUM_WORKERS=5 USER=ubuntu GROUP=ubuntu cd /home/ubuntu/project source /home/ubuntu/.virtualenvs/project/bin/activate test -d $LOGDIR || mkdir -p $LOGDIR exec /home/ubuntu/.virtualenvs/project/bin/home/ubuntu/.virtualenvs/project/bin/ gunicorn_django -w $NUM_WORKERS --user=$USER --group=$GROUP --log-level=debug --log-file=$LOGFILE 2>>$LOGFILE An example of run.sh 13年8月6⽇日星期⼆二
  25. 25. 21 用 supervisor 來管 process [program:project] directory = /home/ubuntu/project/ user = ubuntu command = /home/ubuntu/project/run.sh stdout_logfile = /home/ubuntu/project/log/logfile_std.log stderr_logfile = /home/ubuntu/project/log/logfile_err.log 13年8月6⽇日星期⼆二
  26. 26. Usage • sudo supervisorctl update • sudo supervisorctl status project • sudo supervisorctl stop project • sudo supervisorctl start project • sudo supervisorctl restart project 22 13年8月6⽇日星期⼆二
  27. 27. NGINX 23 13年8月6⽇日星期⼆二
  28. 28. nginx 是啥... 24 • 基本上是個 light-weight web server • Serve static/media files • 記得 python manage.py collectstatic • 當做 Reversed proxy 用 13年8月6⽇日星期⼆二
  29. 29. nginx.conf 25 server { listen 80; ... location /media/ { autoindex off ; root /path/to/your/media/file ; } location /static/ { autoindex off; root /path/to/your/static/file ; } location / { .... proxy_pass http://0.0.0.0:8000/; } } 13年8月6⽇日星期⼆二
  30. 30. 恭喜!結束了... 26 13年8月6⽇日星期⼆二
  31. 31. 不過是不是漏了什麼 27 13年8月6⽇日星期⼆二
  32. 32. 網站是會更新的! 28 13年8月6⽇日星期⼆二
  33. 33. 29 • 重新打包上傳一次 • use git or mercurial • git pull 搞定一切 • 不過還是得要 ssh 登入之後做一堆事情 13年8月6⽇日星期⼆二
  34. 34. 30 USE fabric! 13年8月6⽇日星期⼆二
  35. 35. SCALING 31 13年8月6⽇日星期⼆二
  36. 36. 32 13年8月6⽇日星期⼆二
  37. 37. 32 13年8月6⽇日星期⼆二
  38. 38. 32 13年8月6⽇日星期⼆二
  39. 39. 不過其實你可以不用 那麼辛苦 33 13年8月6⽇日星期⼆二
  40. 40. 34 • Media Server • S3 • CDN • Database Server • Amazon RDS • Google Cloud SQL • Heroku Postgresql 13年8月6⽇日星期⼆二
  41. 41. • Heroku • Openshift • dotCloud • AWS Elastic Beanstalk 35 如果你有 $$,其實你真的不用 那麼辛苦 13年8月6⽇日星期⼆二
  42. 42. Django deploy 有點麻 煩,剛開始學習用 PaaS 就好 36 13年8月6⽇日星期⼆二
  43. 43. 如果你 $$ 夠多,那麼 或許你也用 PaaS 就好 37 13年8月6⽇日星期⼆二
  44. 44. Reference • http://michal.karzynski.pl/blog/2013/06/09/ django-nginx-gunicorn-virtualenv- supervisor/ • https://devcenter.heroku.com/articles/ django • http://www.google.com 38 13年8月6⽇日星期⼆二
  45. 45. 一些好用的東西 • Sentry https://getsentry.com/ • Newrelic http://newrelic.com/ • Papertrail https://papertrailapp.com/ • Amazon SES http://aws.amazon.com/ses/ 39 13年8月6⽇日星期⼆二
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×