Django项目部署到服务器nginx和uwsgi配置

nginx :
nginx 是一个反向代理服务器,客户端对Web 服务器的访问需要先经过反向代理服务器,
在由代理服务器决定目标服务器,这样可以防止外部程序对web服务器的直接攻击;其次可
根据负载情况去请求不同的目标服务器达到负载均衡;还有可以已知处理客户端对于静态文
件的请求,而不用在去请求目标服务器。
uwsgi:
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule
的作用是与uWSGI服务器进行交换。uwsgi 对动态的处理笔记比较好,nginx对静态页面的处理比较好。
有了nginx做代理,可以实现一个nginx可以代理多台uwsgi实现负载均衡的目的。

ubuntu 18.04 安装方法

安装uwsgi、nginx
Ubuntu 18.04、nginx 1.14.0 、 uwsgi 2.0.16 、python 3.6.7

sudo apt-get install nginx
sudo pip3 install uwsgi

首先找到你的Django项目,以及绝对路径:/home/Medical

Medical
	Medical
		__init__.py
		settings.py
		urls.py
		wsgi.py
	apps
		...
	media
		..
	static
		...
	templates
		...
	db.sqlie3
	manage.py

使用ssh 连接服务器:

ssh root@124.135.665.555

# 创建项目上传目录
mkdir  /home/project

注意:服务器上的项目不能放在root目录下,放root目录里在使用uwsgi的时候写入.socket会出现权限
错误。其他目录没有问题

使用pscp将本地项目复制到服务器:
windows下使用pscp:
pscp -r Meidcal root@124.135.665.555:/home/project

Ubuntu下使用scp:
sudo scp -r Medical root@124.135.665.555:/home/project

详细可见:https://blog.csdn.net/weixin_44313745/article/details/90633205

配置nginx

将nginx目录下的uwsgi_params 拷贝到项目目录下。

cp /etc/nginx/uwsgi_params  /home/project/Medical

修改nginx的配置文件:
vim /etc/nginx/sites-enabled/default

# nginx需要连接的组件
upstream django {
    # server unix:///home/project/Medical/uwsgi.sock; # 文件socket
    server 0.0.0.0:8080; # 网络端口socket(我们先使用这个,8080代表在服务端项目在8080端口运行)
}
# 服务器配置
server {
    # 监听端口,通过域名加这个端口号(192.168.27.110:9999)就可访问项目,而不是8080端口
    listen   9999;
    server_name 192.168.27.110; 
    # 如果你有域名则配置如下,没有域名则配置你的服务器ip(如上)
    # listen   80;
    # server_name www.nginx.netcome.net; 
    charset     utf-8;

    # 最大上传大小
    client_max_body_size 75M;

    # Django的静态media文件路径
    location /media  {
        alias /home/project/Medical/media;
    }
    # Django的静态static文件路径
    location /static {
        alias /home/project/Medical/static;
    }
    # Django的项目配置
    location / {
        # uwsgi的方式使用上面upstream django的配置,先使用服务端口
        uwsgi_pass  django;
        include     /home/project/Medical/uwsgi_params; # 复制的 uwsgi_params路径
    }
}

保存然后开启nginx服务:

service nginx start
配置uwsgi

进入项目目录,创建一个uwsgi.ini

cd /home/project/Medical
vim uwsgi.ini

在创建uwsgi.ini的时候,注意目录问题,不要为自己留下坑

[uwsgi]
# 项目目录
chdir = /home/project/Medical
# 指定项目的wsgi文件,我的项目是bsite所以为bsite.wsgi,你自己的对应改
module = Medical.wsgi:application
# 进程个数
workers = 5
pidfile = /home/project/Medical/uwsgi.pid
# 指定静态文件,指定在那里就使用哪里,必须和nginx的default文件里配置的路径一样(当然这个目录可以是随意的,在项目之外也可以,只要保证和nginx的静态文件路径一样就行)
static-map =/static=/home/project/Medical/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/home/project/Medical/uwsgi.log
# 指定sock的文件路径
socket=/home/project/Medical/uwsgi.sock

保存后,启动uwsgi:

cd /home/project/Medical
uwsgi --ini uwsgi.ini

然后会在/home/project/Medical目录下生成uwsgi.sock\uwsgi.pid\uwsgi.log三个文件,
然后再次修改nginx的default文件。

# nginx需要连接的组件
upstream django {
    server unix:///var/project/bsite/uwsgi.sock; # 文件socket
    # server 0.0.0.0:8080;
}

重新启动项目:

cd /home/project/Medical
uwsgi --reload uwsgi.pid
/etc/init.d/nginx restart 或者 service nginx restart 

Centos 7 部署方法

安装nginx

https://blog.csdn.net/weixin_44313745/article/details/90637903

使用uwsgi.ini 配置文件启动项目

在manage.py 同级目录下,创建一个uwsgi_conf文件夹,用来存放uwsgi.ini 配置文件

vim uwsgi.ini

# uwsig使用配置文件启动
[uwsgi]
# 项目所在的根目录
chdir=/opt/mywebapp/
# 指定项目的application,区别于启动命令--wsgi-filemysite/wsgi.py
module=mysite.wsgi:application
#the local unix socket file than commnuincate to Nginx
# 指定sock的文件路径,这个sock文件会在nginx的uwsgi_pass配置,用来nginx与uwsgi通信       
# 支持ip+port模式以及socket file模式
socket=%(chdir)/uwsgi_conf/uwsgi.sock
# socket=127.0.0.1:9001
# 进程个数       
processes = 8
# 每个进程worker数
workers=5
procname-prefix-spaced=mywebapp                # uwsgi的进程名称前缀
py-autoreload=1                              # py文件修改,自动加载

# 指定IP端口,web访问入口 
# 如果不适用nginx 进行配置,可直接使用一下语句,进行直接启动项目, 如果使用nginx 则将此行注释掉
http=0.0.0.0:9000

# 指定多个静态文件:static目录和media目录,也可以不用指定该静态文件,在nginx中配置静态文件目录
# uwsgi有自己的配置语法,详细可参考官网,无需写绝对路径,可以用循环、判断等高级配置语法
for =static media
static-map=/static=%(chdir)/%(_)
endfor =

# 启动uwsgi的用户名和用户组
uid=root
gid=root

# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true

# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置一个超时,用于中断那些超过服务器请求上限的额外请求
harakiri=30
# 设置缓冲
post-buffering=4096

# 设置日志目录
daemonize=%(chdir)/uwsgi_conf/uwsgi.log
# uWSGI进程号存放
pidfile=%(chdir)/uwsgi_conf/uwsgi.pid
#monitor uwsgi status  通过该端口可以监控 uwsgi 的负载情况
# 支持ip+port模式以及socket file模式
stats=%(chdir)/uwsgi_conf/uwsgi.status 
# stats = 127.0.0.1:9001

使用nginx 启动uwsgi

在 /etc/nginx/conf.d/ 新建一个myblog.conf 文件
vim myblog.conf

upstream blog_app {
   # nginx通过socket在环回接口地址的9001端口与本地的uWSGI进程通信
   # 支持ip:port模式以及socket file模式
   server unix:/opt/mywebapp/uwsgi_conf/uwsgi.sock;
   # server 127.0.0.1:9001;
}

server {

    listen 9090;
    server_name 192.168.100.5;
    
    access_log /var/log/nginx/access.log;
    charset utf-8;
  
    gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;

    location / {
        # nginx转发动态请求到uWSGI
        include uwsgi_params;
        uwsgi_connect_timeout 20; 
        uwsgi_pass blog_app;
    }
    
    # 如果写成/static/,nginx无法找到项目静态文件路径
    location /static {
        alias /opt/mywebapp/static;
    }
    
    # 如果写成/media/,nginx无法找到项目媒体文件路径
    location /media {
        alias /opt/mywebapp/media;
    }


}

重启 nginx :

nginx -s reload  | sevice nginx start
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值