项目目录
路径:/opt/project_teacher
├── teacher │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── app01 │ ├── urls.py │ ├── views.py └── script │ ├── uwsgi.ini # 该文件是uwsgi配置文件 └── manage.py
一、Nginx
1. 安装
$ sudo apt-get install nginx #安装
2. 检查nginx是否安装成功
$ /etc/init.d/nginx start [ ok ] Starting nginx (via systemctl): nginx.service.
检查nginx是否启动成功
$ ps -ef|grep -i nginx root 6961 1 0 03:56 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; www-data 6962 6961 0 03:56 ? 00:00:00 nginx: worker process pala 6985 2090 0 03:57 pts/0 00:00:00 grep --color=auto -i nginx
然后打开浏览器,访问ip地址,出现如下页面即代表nginx安装完成且可以正常启动。
Nginx常用命令
$ /etc/init.d/nginx start #启动 $ /etc/init.d/nginx stop #关闭 $ /etc/init.d/nginx restart #重启 $ killall nginx 杀死所有nginx # 如果是生产环境的话Nginx正在运行,就不要直接stop start 或者 restart 直接reload就行了 # 对线上影响最低 $ /etc/init.d/nginx reload
二、Gunicorn
Gunicorn 一般用来管理多个进程,有进程挂了Gunicorn 可以把它拉起来,防止服务器长时间停止服务,还可以动态调整 worker 的数量,请求多的时候增加 worker 的数量,请求少的时候减少。
安装
pip install gunicorn
快速启动
gunicorn myproject.wsgi # 实际启动 gunicorn teacher.wsgi
命令启动
gunicorn -w 进程数量 -b ip:端口 项目名.wsgi:application # 样例 gunicorn -w 2 -b 192.168.3.99:9998 teacher.wsgi:application
上述命令启动方法等同于下面文件配置启动
# vim gunicorn.conf.py # coding:utf-8 import multiprocessing bind = "127.0.0.1:8000" #绑定的ip与端口 workers = multiprocessing.cpu_count() * 2 + 1 #进程数 errorlog = '/home/xxx/xxx/gunicorn.error.log' #发生错误时log的路径 accesslog = '/home/xxx/xxx/gunicorn.access.log' #正常时的log路径 backlog = 512 #监听队列 proc_name = 'gunicorn_project' #进程名 timeout = 30 #超时 worker_class = 'gevent' #使用gevent模式,还可以使用sync 模式,默认的是sync模式 threads = 2 #指定每个进程开启的线程数 loglevel = 'info' #日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置 #设置gunicorn访问日志格式,错误日志无法设置 access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"' """ 其每个选项的含义如下: h remote address l '-' u currently '-', may be user name in future releases t date of the request r status line (e.g. ``GET / HTTP/1.1``) s status b response length or '-' f referer a user agent T request time in seconds D request time in microseconds L request time in decimal seconds p process ID """
配置文件启动命令(使用该方法启动程序是没有任何反应,除非触发请求才有反应)
gunicorn 项目名.wsgi:application -c /home/xxx/xxx/gunicorn.conf.py 样例 gunicorn teacher.wsgi:application -c /home/chenxinming/teacher/gunicorn.conf.py
gunicorn参考文献:
https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/gunicorn/
http://docs.gunicorn.org/en/latest/deploy.html
使用使用supervistor进程管理器
配置文件:
[program:x508server] command=gunicorn x508server.wsgi:application -b 0.0.0.0:8000 ; 被监控的进程路径 directory=/home/webserver/web/WebServer/ ; 执行前要不要先cd到目录$ autostart=true ; 随着supervisord的启动而启动 autorestart=true ; 自动重启。。当然要选上了 startretries=10 ; 启动失败时的最多重试次数 exitcodes=0 ; 正常退出代码 stopsignal=KILL ; 用来杀死进程的信号 stopwaitsecs=10 ; 发送SIGKILL前的等待时间 redirect_stderr=true ; 重定向stderr到stdout stdout_logfile=/home/webserver/web/logfile.log ; 指定日志文件 ; 默认为 false,如果设置为 true,当进程收到 stop 信号时,会自动将该信号发给该进$ stopasgroup=true ; send stop signal to the UNIX process ; 默认为 false,如果设置为 true,当进程收到 kill 信号时,会自动将该信号发给该进$ killasgroup=true ; SIGKILL the UNIX process group (def false)
nginx配置
配置信息
server { listen 9999; server_name 192.168.3.99; location / { proxy_pass http://192.168.3.99:9998; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static { alias /home/chenxinming/teacher/static; } }
检查nginx语法问题
$ nginx -t # 检查nginx语法问题 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
重启nginx
$ /etc/init.d/nginx restart #重启
三、django静态文件收集
1.setting.py设置
DEBUG = False STATIC_ROOT = os.path.join(BASE_DIR, 'statics')
2. 执行collectstatic命令:
python manage.py collectstatic原文网址:
ubuntu/linux nginx+Gunicorn+django 部署方法详细教程
Liunx之Ubuntu下Django+uWSGI+nginx部署