django deploy

45
Deploying Django Andy@Django Workshop 2013/8/6 1 13年8月6星期

Upload: andy-dai

Post on 31-Aug-2014

717 views

Category:

Documents


0 download

Tags:

DESCRIPTION

My talk about Django Deployment

TRANSCRIPT

Page 1: Django deploy

Deploying Django

Andy@Django Workshop 2013/8/6

1

13年8月6⽇日星期⼆二

Page 2: Django deploy

好不容易把網站寫好了,終於要放上去...

2

13年8月6⽇日星期⼆二

Page 3: Django deploy

這還不簡單

3

13年8月6⽇日星期⼆二

Page 4: Django deploy

4

13年8月6⽇日星期⼆二

Page 5: Django deploy

4

• 買一台 VPS 或實體機器

13年8月6⽇日星期⼆二

Page 6: Django deploy

4

• 買一台 VPS 或實體機器

• DNS 指好

13年8月6⽇日星期⼆二

Page 7: Django deploy

4

• 買一台 VPS 或實體機器

• DNS 指好

• python manage.py runserver

13年8月6⽇日星期⼆二

Page 8: Django deploy

4

• 買一台 VPS 或實體機器

• DNS 指好

• python manage.py runserver

• 開啟 http://xxx.com:8000

13年8月6⽇日星期⼆二

Page 9: Django deploy

5

打完收工!開始賺錢!

13年8月6⽇日星期⼆二

Page 10: Django deploy

6

13年8月6⽇日星期⼆二

Page 11: Django deploy

7

13年8月6⽇日星期⼆二

Page 12: Django deploy

8

來!跟著我做!

13年8月6⽇日星期⼆二

Page 13: Django deploy

TURN OFF DEBUG

9

13年8月6⽇日星期⼆二

Page 14: Django deploy

你不會想讓使用者看到這些

10

13年8月6⽇日星期⼆二

Page 15: Django deploy

也不會想讓使用者看到這些..

11

13年8月6⽇日星期⼆二

Page 16: Django deploy

IMPLEMENT 404 & 500否則...

12

13年8月6⽇日星期⼆二

Page 17: Django deploy

13

報告學長,完全沒有畫面

13年8月6⽇日星期⼆二

Page 18: Django deploy

SET UP ERROR ALERTS

14

13年8月6⽇日星期⼆二

Page 19: Django deploy

DON’T USE SQLITE

15

13年8月6⽇日星期⼆二

Page 20: Django deploy

Web Server 的選擇

16

• Apache 系

• 務必使用 mod_wsgi

• 不過如果非不得已的話別自找麻煩...

• nginx 系

• nginx + gunicorn

• nginx + uwsgi

13年8月6⽇日星期⼆二

Page 21: Django deploy

nginx + gunicorn

17

13年8月6⽇日星期⼆二

Page 22: Django deploy

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⽇日星期⼆二

Page 23: Django deploy

• pip install gunicorn

• gunicorn project.wsgi:application -b 0.0.0.0:$PORT -w $NUM_WORKERS

19

13年8月6⽇日星期⼆二

Page 24: Django deploy

20

#!/bin/bashset -eLOGFILE=/home/ubuntu/project/log/gunicorn.logLOGDIR=$(dirname $LOGFILE)NUM_WORKERS=5USER=ubuntuGROUP=ubuntucd /home/ubuntu/projectsource /home/ubuntu/.virtualenvs/project/bin/activatetest -d $LOGDIR || mkdir -p $LOGDIRexec /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⽇日星期⼆二

Page 25: Django deploy

21

用 supervisor 來管 process

[program:project]directory = /home/ubuntu/project/user = ubuntucommand = /home/ubuntu/project/run.shstdout_logfile = /home/ubuntu/project/log/logfile_std.logstderr_logfile = /home/ubuntu/project/log/logfile_err.log

13年8月6⽇日星期⼆二

Page 26: Django deploy

Usage

• sudo supervisorctl update

• sudo supervisorctl status project

• sudo supervisorctl stop project

• sudo supervisorctl start project

• sudo supervisorctl restart project

22

13年8月6⽇日星期⼆二

Page 27: Django deploy

NGINX

23

13年8月6⽇日星期⼆二

Page 28: Django deploy

nginx 是啥...

24

• 基本上是個 light-weight web server

• Serve static/media files

• 記得 python manage.py collectstatic

• 當做 Reversed proxy 用

13年8月6⽇日星期⼆二

Page 29: Django deploy

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⽇日星期⼆二

Page 30: Django deploy

恭喜!結束了...

26

13年8月6⽇日星期⼆二

Page 31: Django deploy

不過是不是漏了什麼

27

13年8月6⽇日星期⼆二

Page 32: Django deploy

網站是會更新的!

28

13年8月6⽇日星期⼆二

Page 33: Django deploy

29

• 重新打包上傳一次

• use git or mercurial

• git pull 搞定一切

• 不過還是得要 ssh 登入之後做一堆事情

13年8月6⽇日星期⼆二

Page 34: Django deploy

30

USE fabric!

13年8月6⽇日星期⼆二

Page 35: Django deploy

SCALING

31

13年8月6⽇日星期⼆二

Page 36: Django deploy

32

13年8月6⽇日星期⼆二

Page 37: Django deploy

32

13年8月6⽇日星期⼆二

Page 38: Django deploy

32

13年8月6⽇日星期⼆二

Page 39: Django deploy

不過其實你可以不用那麼辛苦

33

13年8月6⽇日星期⼆二

Page 40: Django deploy

34

• Media Server

• S3

• CDN

• Database Server

• Amazon RDS

• Google Cloud SQL

• Heroku Postgresql

13年8月6⽇日星期⼆二

Page 41: Django deploy

• Heroku

• Openshift

• dotCloud

• AWS Elastic Beanstalk

35

如果你有 $$,其實你真的不用那麼辛苦

13年8月6⽇日星期⼆二

Page 42: Django deploy

Django deploy 有點麻煩,剛開始學習用

PaaS 就好

36

13年8月6⽇日星期⼆二

Page 43: Django deploy

如果你 $$ 夠多,那麼或許你也用 PaaS 就好

37

13年8月6⽇日星期⼆二

Page 45: Django deploy

一些好用的東西

• Sentry https://getsentry.com/

• Newrelic http://newrelic.com/

• Papertrail https://papertrailapp.com/

• Amazon SES http://aws.amazon.com/ses/

39

13年8月6⽇日星期⼆二