django+nginx+uwsgi部署 详细

Django + Nginx + Uwsgi部署服务器

摘要

写这篇博客主要是为了记录一下自己部署的历程(太艰辛了),同时也为了让其他人能够在看了本博文后能够少走弯路。希望这篇博文能够对大家有所帮助。

环境

本人所使用的环境如下

Ubuntu 18.04.4(腾讯云服务器)
python 3.6(服务器自带)
mysql

环境搭建

在上述环境的基础上进行部署django所需的环境的配置和搭建

首先是pip3的安装,这一步就不再赘述了。

然后是git的安装,直接apt-get install git就行了,主要是为了后面能够从github上clone源码。也可以通过wget 项目地址.zip 下载地址的方式下载项目zip包然后解压。

然后是django所需环境的安装,可以通过虚拟环境的方式安装,也可以直接安装,因为本人是只用在服务器上部署这一个django项目,所以本人直接安装并没有通过虚拟环境,先导出requirements.txt然后在这里安装就可以了

pip install -r requirements.txt

mysql的安装也不在这里说了,因为不是重点,大家度娘都能够解决。并且mysql的安装对部署的影响并不大。

然后则是uwsgi的安装了,uwsgi大家可以直接通过pip install uwsgi的方式完成安装,不过请确定是最新版,否则容易出现bug,安装完成后可以测试一下

首先在manage.py同一级目录下创建test.py

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return b"Hello World"

然后运行

wsgi --http :8000 --wsgi-file test.py

打开<公网ip:8000>看能否访问并看到hello world,如果能看到则没问题

然后是对nginx的安装,同理apt-get install nginx,安装完后,可以通过service --status-all查看niginx前面是否有+号,如果没问题,再访问公网ip,如果出现nginx的欢迎界面,则nginx安装成功

配置

环境安装好了,接下来就是最重要的配置环节了。

首先是对uwsgi的配置,首先在manage.py同级目录下创建uwsgi.ini文件用于配置,配置内容如下

#对应是注释,复制的时候最好把中文删去,省去编码问题

[uwsgi]
# Django-related settings
socket = 127.0.0.1:8888

# the base directory (full path) 项目根地址 即manage.py所在目录
chdir = /root/myblog

# Django s wsgi file
module = blog.wsgi:application

# process-related settings
# master 主进程
master = true

# maximum number of worker processes
processes = 4
# buffer-size 这个需要设置一下
buffer-size = 30000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
# 日志文件
daemonize = /root/myblog/mysite.log	
vacuum = true

然后是对nginx的配置

首先了解一下nginx的配置文件

主配置文件:/etc/nginx/nginx.conf一般不用动
可用配置文件:/etc/nginx/sites-available我们一般更改这里的配置文件
已用配置文件:/etc/nginx/sites-enabled,已经启用的配置文件 我们在可用配置文件目录,新建一个xxx.conf此文件用于配置我们的项目。xxx可写自己的项目名称
cd /etc/nginx/sites-available
vim xxx.conf
// 如果不是root用户,可能需要先sudo创建文件然后chmod然后再进行vim修改

然后在xxx.conf文件中写入以下内容

upstream django {
    server 127.0.0.1:8888; # for a web port socket (we'll use this first)
}

server{
    listen 80;
    server_name 公网ip;
    charset utf-8;
    client_max_body_size 75M;  #上传文件大小限制

    # 网站静态文件所在目录
    location /static{
        alias /root/myblog/static;
    }
    
    # 上传文件所在目录
    location /media{
        alias /root/myblog/media;
    }
    
    # 动态文件交给uwsgi处理
    location / {
        uwsgi_pass 127.0.0.1:8888;
        include /etc/nginx/uwsgi_params;
    }
}

然后将此文件再sites-enabled中创建一个软连接,表示此配置文件已经启用:

ln -s /etc/nginx/sites-available/xxx.conf   /etc/nginx/sites-enabled/xxx.conf

另外我们还需要将启动nginx的用户改为root,要不然会出现403 forbidden的错误。打开/etc/nginx/nginx.conf文件,将第一行中user后面的用户改为root即可。

然后需要对django进行一下小修改

首先是对settings.py中的debug改为false,allowed_host改为[’*’]或者[‘公网ip’],这样才能访问到。

然后在最后加入STATIC_ROOT = os.path.join(BASE_DIR,'static'),之后再进入项目执行python3 manage.py collectstatic执行之后就能看到项目中新增了一个static目录,这样nginx就能访问到了,才能正确加载项目的静态文件,否则访问的就是缺失css样式的项目

重启

然后就是将nginx重启服务并且将uwsgi启动的阶段了

sudo service nginx restart 
sudo uwsgi uwsgi.ini
sudo killall -9 uwsgi

第一行是nginx的重启,第二行则是启动uwsgi服务,最后一行是需要关闭uwsgi服务所需要执行的命令

启动uwsgi系统提示

[uWSGI] getting INI configuration from uwsgi.ini

则代表启动成功了,现在就可以访问公网ip:8000访问你的项目了

如果出现问题,可查看uwsgi的日志文件,也就是前面所配置的daemonize = /root/myblog/mysite.log,从而帮助找到错误,进而解决。

注意

需要注意的点是,uwsgi的socket和nginx里的配置一定要一样,同时不要使用8000端口(不要问我怎么知道的),上文使用的是8888端口,同时需要查看相应端口的防火墙是否已经打开,如果出现问题可以在服务器上通过curl进行本地访问测试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值