您的位置:首页 > 运维架构 > Nginx

ubuntu/linux nginx+Gunicorn+django 部署方法详细教程

2017-12-27 15:55 726 查看
项目目录

路径:/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部署
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: