Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
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 worker model ported
• 總之就是一個效能很好的 wsgi web
server
13年8月6⽇日星期⼆二
• 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
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⽇日星期⼆二
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⽇日星期⼆二
Usage
• sudo supervisorctl update
• sudo supervisorctl status project
• sudo supervisorctl stop project
• sudo supervisorctl start project
• sudo supervisorctl restart project
22
13年8月6⽇日星期⼆二
NGINX
23
13年8月6⽇日星期⼆二
nginx 是啥...
24
• 基本上是個 light-weight web server
• Serve static/media files
• 記得 python manage.py collectstatic
• 當做 Reversed proxy 用
13年8月6⽇日星期⼆二
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⽇日星期⼆二
恭喜!結束了...
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.heroku.com/articles/
django
• http://www.google.com
38
13年8月6⽇日星期⼆二
一些好用的東西
• Sentry https://getsentry.com/
• Newrelic http://newrelic.com/
• Papertrail https://papertrailapp.com/
• Amazon SES http://aws.amazon.com/ses/
39
13年8月6⽇日星期⼆二

More Related Content

Django deploy