SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
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⽇日星期⼆二

Mais conteúdo relacionado

Semelhante a Django deploy

Web basic develop mode - Node.js
Web basic develop mode - Node.jsWeb basic develop mode - Node.js
Web basic develop mode - Node.jsCaesar Chi
 
快快樂樂學 Scrapy
快快樂樂學 Scrapy快快樂樂學 Scrapy
快快樂樂學 Scrapyrecast203
 
JavaScript for backend
JavaScript for backendJavaScript for backend
JavaScript for backendCaesar Chi
 
Tainan.py, Experience about package
Tainan.py, Experience about packageTainan.py, Experience about package
Tainan.py, Experience about packageTim (文昌)
 
Less
LessLess
Lesspswho
 
初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法Joe Wu
 
Qcon beijing-2013-04-27-tianyongqiang
Qcon beijing-2013-04-27-tianyongqiangQcon beijing-2013-04-27-tianyongqiang
Qcon beijing-2013-04-27-tianyongqiangdrewz lin
 
2013 輔大資工 暑期宅學營 PhoneGap 跨平台任我玩,HTML5 無痛開發 App
2013 輔大資工 暑期宅學營  PhoneGap  跨平台任我玩,HTML5 無痛開發 App2013 輔大資工 暑期宅學營  PhoneGap  跨平台任我玩,HTML5 無痛開發 App
2013 輔大資工 暑期宅學營 PhoneGap 跨平台任我玩,HTML5 無痛開發 AppHuang-I Yang
 

Semelhante a Django deploy (8)

Web basic develop mode - Node.js
Web basic develop mode - Node.jsWeb basic develop mode - Node.js
Web basic develop mode - Node.js
 
快快樂樂學 Scrapy
快快樂樂學 Scrapy快快樂樂學 Scrapy
快快樂樂學 Scrapy
 
JavaScript for backend
JavaScript for backendJavaScript for backend
JavaScript for backend
 
Tainan.py, Experience about package
Tainan.py, Experience about packageTainan.py, Experience about package
Tainan.py, Experience about package
 
Less
LessLess
Less
 
初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法
 
Qcon beijing-2013-04-27-tianyongqiang
Qcon beijing-2013-04-27-tianyongqiangQcon beijing-2013-04-27-tianyongqiang
Qcon beijing-2013-04-27-tianyongqiang
 
2013 輔大資工 暑期宅學營 PhoneGap 跨平台任我玩,HTML5 無痛開發 App
2013 輔大資工 暑期宅學營  PhoneGap  跨平台任我玩,HTML5 無痛開發 App2013 輔大資工 暑期宅學營  PhoneGap  跨平台任我玩,HTML5 無痛開發 App
2013 輔大資工 暑期宅學營 PhoneGap 跨平台任我玩,HTML5 無痛開發 App
 

Mais de Andy Dai

Grpc + python.key
Grpc + python.keyGrpc + python.key
Grpc + python.keyAndy Dai
 
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?Andy Dai
 
Power UP your CLI
Power UP your CLIPower UP your CLI
Power UP your CLIAndy Dai
 
Search search search
Search search searchSearch search search
Search search searchAndy Dai
 
Django channels
Django channelsDjango channels
Django channelsAndy Dai
 
Django Third party packages
Django Third party packagesDjango Third party packages
Django Third party packagesAndy Dai
 
Practical django secuirty
Practical django secuirtyPractical django secuirty
Practical django secuirtyAndy Dai
 
總之來講講 Search
總之來講講 Search總之來講講 Search
總之來講講 SearchAndy Dai
 
Python web meetup 11 18
Python web meetup 11 18Python web meetup 11 18
Python web meetup 11 18Andy Dai
 
Django in heavy load environment
Django in heavy load environmentDjango in heavy load environment
Django in heavy load environmentAndy Dai
 
電腦不只會幫你選土豆,還會幫你選新聞
電腦不只會幫你選土豆,還會幫你選新聞電腦不只會幫你選土豆,還會幫你選新聞
電腦不只會幫你選土豆,還會幫你選新聞Andy Dai
 
用 Python 打造你自己的 summly
用 Python 打造你自己的 summly用 Python 打造你自己的 summly
用 Python 打造你自己的 summlyAndy Dai
 
Tradeoffs of replacing core components
Tradeoffs of replacing core componentsTradeoffs of replacing core components
Tradeoffs of replacing core componentsAndy Dai
 
ElastiCache
ElastiCacheElastiCache
ElastiCacheAndy Dai
 
Build your own trello witihin 100 LOC (with Meteor)
Build your own trello witihin 100 LOC (with Meteor)Build your own trello witihin 100 LOC (with Meteor)
Build your own trello witihin 100 LOC (with Meteor)Andy Dai
 
Boost your django admin with Grappelli
Boost your django admin with GrappelliBoost your django admin with Grappelli
Boost your django admin with GrappelliAndy Dai
 

Mais de Andy Dai (17)

Grpc + python.key
Grpc + python.keyGrpc + python.key
Grpc + python.key
 
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?
 
Power UP your CLI
Power UP your CLIPower UP your CLI
Power UP your CLI
 
Search search search
Search search searchSearch search search
Search search search
 
Django channels
Django channelsDjango channels
Django channels
 
Django Third party packages
Django Third party packagesDjango Third party packages
Django Third party packages
 
Practical django secuirty
Practical django secuirtyPractical django secuirty
Practical django secuirty
 
總之來講講 Search
總之來講講 Search總之來講講 Search
總之來講講 Search
 
Python web meetup 11 18
Python web meetup 11 18Python web meetup 11 18
Python web meetup 11 18
 
Django in heavy load environment
Django in heavy load environmentDjango in heavy load environment
Django in heavy load environment
 
電腦不只會幫你選土豆,還會幫你選新聞
電腦不只會幫你選土豆,還會幫你選新聞電腦不只會幫你選土豆,還會幫你選新聞
電腦不只會幫你選土豆,還會幫你選新聞
 
用 Python 打造你自己的 summly
用 Python 打造你自己的 summly用 Python 打造你自己的 summly
用 Python 打造你自己的 summly
 
Tradeoffs of replacing core components
Tradeoffs of replacing core componentsTradeoffs of replacing core components
Tradeoffs of replacing core components
 
ElastiCache
ElastiCacheElastiCache
ElastiCache
 
Dynamo db
Dynamo dbDynamo db
Dynamo db
 
Build your own trello witihin 100 LOC (with Meteor)
Build your own trello witihin 100 LOC (with Meteor)Build your own trello witihin 100 LOC (with Meteor)
Build your own trello witihin 100 LOC (with Meteor)
 
Boost your django admin with Grappelli
Boost your django admin with GrappelliBoost your django admin with Grappelli
Boost your django admin with Grappelli
 

Django deploy