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

Django deploy

Aug 31, 2014

Download

Documents

Andy Dai

My talk about Django Deployment
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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⽇日星期⼆二