使用 runserver 启动
$ python3 manage.py runserver 0.0.0.0:8080 &
使用 fastcgi 命令启动 + shell 脚本 + nginx
#!/bin/bash
PROJDIR="/data/github/awesome-platform/app"
PIDFILE="$PROJDIR/app.awesome-platform.pid"
ERRORLOG="/data/logs/cms_app_error.log"
OUTLOG="/data/logs/cms_app_std_out.log"
APP_EXEC="python manage.py runfcgi method=prefork daemonize=true host=127.0.0.1"
NUM_PROC=12000
NUM_PROCS=4
MIN_SPARE=2
MAX_SPARE=4
cd $PROJDIR
function start_server() {
cd $PROJDIR
ulimit -n 65535
$APP_EXEC port=$NUM_PROC minspare=$MIN_SPARE maxspare=$MAX_SPARE maxchildren=$NUM_PROCS outlog=$OUTLOG errlog=$ERRORLOG
}
function stop_server() {
ps aux | grep "$APP_EXEC" | grep "$NUM_PROC" | awk '{print $2}' | xargs kill -9
}
case "$1" in
start)
start_server
;;
stop)
stop_server
;;
restart)
stop_server
start_server
;;
*)
echo 'Usage: app.sh [start|stop|restart]'
esac
- nginx.conf
upstream cms_app {
server 127.0.0.1:12000 fail_timeout=0;
}
server {
listen 8000;
server_name 118.25.81.114;
charset utf-8;
location /static/ {
alias /data/github/awesome-platform/app/statics/;
expires 15m;
}
location / {
fastcgi_pass cms_app;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
}
}
使用 uwsgi 命令启动
$ uwsgi --http :8001 --chdir /data/github/django-cms --module cms.wsgi
uwsgi 命令 + supervisord.conf
[program:cms1]
command=uwsgi --http :8001 --chdir /data/github/django-cms --module cms.wsgi
directory=/data/github/django-cms
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
uwsgi.ini + supervisord.conf + nginx.conf
推荐
- uwsgi.ini
[uwsgi]
socket = /home/ubuntu/cms.sock
chdir = /data/github/django-cms
wsgi-file = cms/wsgi.py
touch-reload = /home/ubuntu/reload
processes = 2
threads = 4
chmod-socket = 664
#chown-socket = ubuntu:www-data
vacuum = true
配置好了,可以测试
$ uwsgi uwsgi.ini --http :8002
- supervisord.conf
[program:cms_app]
command=uwsgi --ini /home/ubuntu/uwsgi.ini
directory=/data/github/django-cms
startsecs=0
- nginx.conf
server {
listen 8080;
server_name 118.25.81.114;
charset utf-8;
client_max_body_size 75M;
location /media {
alias /data/github/django-cms/media;
}
### method1 for static conf
location /static {
alias /data/github/django-cms/static;
}
### method2 for static conf
#location ~/static/ {
# root /data/github/django-cms;
# break;
#}
location / {
uwsgi_pass unix:///home/ubuntu/cms.sock;
include /data/nginx/conf/uwsgi_params;
}
}
参考资料
- CentOS+uWSGI+Nginx 配置Django Web服务器
- python3-django+uwsgi+supervisor+nginx跳坑指南(记录)
- Nginx下Django Admin界面Css、JS丢失问题解决方法
- Managing static files
- Django+Ngnix部署之fastcgi与uwsgi
- CGI、fastcgi、WSGI、uwsgi和uWSGI的关系
- CGI、FastCGI、WSGI、uwsgi、uWSGI
- CGI, FastCGI, WSGI, uWSGI, uwsgi一文搞懂
- python+django+fastcgi+nginx
- flup源码-运行模型剖释 - python的fastcgi
- Python生产环境部署(fastcgi,uwsgi)