Django + nginx + uswgi 的部署总结

一.引言

自己小组内写了一个网站,需要部署到远程服务器,搜索了好多资料,但是大部分资料都比较繁琐,并且没有一个教程能够直接从头到尾适合,在部署过程中,我是按照很多教程然后综合试验着逐渐部署成功,其中有不少的bug是自己费劲心思才搞定,所以在这里把我的部署方法介绍一下。

二.远程服务器的选取

首先,你可以把你的网站部署在你自己的电脑上,但是自己的电脑又不可能一直运行,所以还是建议部署在服务器上,如果是个人网站的话,自己花钱租一个远程的服务器即可,但是说到服务器租什么的比较好呢?我在部署的时候一共租了三个服务器,一个是腾讯云服务器,一个是阿里云服务器,一个是vultr服务器。
我最终选择了vultr的服务器,但是这个服务器缺点是稍微有点慢(可接受),因为是最近的架设点在日本……也有架设的新加坡的。为啥不选腾讯云和阿里云的服务器呢?原因就是不支持ipv6!我是需要ipv6来连接校内网站的,自己配置ipv6也可以,网上也有教程,搜索“阿里云配置ipv6”应该可以搜索的到。

三.开始远程服务器的部署

语言环境:python3或者python2,都可以!下面我以python3为例。

系统:ubuntu16.04

项目目录:

--root
 --project
  --Sport
    --Sport
      --settings.py
      --urls.py
      --wsgi.py
    --app
    --manage.py
  --uwsgi.ini(这个在后面才配置)
  --nginx.conf(这个也是在后面配置)
1234567891011

1.第一步是连接远程服务器:

首先,要修改服务器的防火墙设置,刚刚租的服务器是拒绝任何地址任何端口对它访问的,所以你要开放你的服务器的ssh、http等端口,修改直接在vultr官网服务器管理的settings选项的防火墙设置那添加规则即可。

2.第二步是安装pip3:

    命令为 sudo apt-get install python3-pip
1

3.第三步是验证django项目可以运行:

    在服务器端运行如下命令:
        python3 manage.py runserver 0.0.0.0:8000

    在本地电脑输入远程服务器公网ip:8000,(确保你的服务器的8000端口已经开放),来验证是否可以访问网站。
1234

4.第四步配置uwsgi:

1)首先安装uwsgi:
    pip3 install uwsgi
1

!!注意:在uwsgi安装之前要确定是否安装uwsgi的依赖库,如g++等,如果不知道如何确定是否安装,可以在之后运行uwsgi出错时看错误信息来确定哪个依赖库未安装。

2)验证uwsgi:
    进入到和django项目的manage.py所在的文件夹,运行如下命令:
        uwsgi --http :8000 --module Sport.wsgi
12

!!注意:http和:之间有空格,Sport换成你自己项目的名字。
用本地电脑浏览器登录服务器ip:8000来确定是否运行成功。

3)配置uwsgi:
a)在/root/project下输入如下命令:

vi uwsgi.ini

b)编辑uwsgi.ini并保存(vi的使用方法自行学习…),编辑内容如下:

[uwsgi]
socket = :8000
chdir = /root/project/Sport
module = Sport.wsgi
master = true
processes = 10
chmod-socket = 664
vacuum = true

c)验证uwsgi,在本目录下输入如下命令:

uwsgi –ini uwsgi.ini

d)正确运行如下所示:

……
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 7158)
spawned uWSGI worker 1 (pid: 7160, cores: 1)
spawned uWSGI worker 2 (pid: 7161, cores: 1)
spawned uWSGI worker 3 (pid: 7162, cores: 1)
spawned uWSGI worker 4 (pid: 7163, cores: 1)
……

e)用本地电脑登录远程服务器8000端口

这个是用来验证其他电脑能不能登录服务器运行的项目,如果不能登录,将uwsgi.ini里面的socket改为http,若这样登录成功就证明没问题。然后记得把http改回socket。

至此,uwsgi配置完成!

5.第五步生成将项目的静态文件全部集中到一个文件夹:

如果你的工程的所有静态文件都一同一个文件夹下,则跳过此步骤。

首先修改settings.py,添加如下内容:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
1
在/root/project/Sport目录下输入如下命令:
    python3 manage.py collectstatic
    完成后,会发下目录下多了一个static文件夹。
12

6.第六步配置nginx:

1)安装nginx:
    命令为 sudo apt-get install nginx
    注意:在安装之前,要确定你的服务器上已经安装了nginx的依赖库。
12
nginx的命令如下:
    /etc/init.d/nginx start    --启动
    /etc/init.d/nginx stop    --关闭
    /etc/init.d/nginx restart    --重新启动
123

现在可以用自己的电脑的浏览器登录远程服务器,如果出现若下图所示,则代表nginx配置成功:Django + nginx + uswgi 的部署总结

2)配置nginx.conf:
a)在/root/project目录下输入如下命令:
    vi nginx.conf
1
b)编辑内容如下:
    upstream django {
        server 127.0.0.1:8000;
    }

    server {
        listen 80;
        server_name localhost;
        charset utf-8;

        client_max_body_size 75M;

        location /static {
            alias /root/project/Sportsys/static;
        }

        location / {
            uwsgi_pass django;
            include /etc/nginx/uwsgi_params;
        }
    }
1234567891011121314151617181920

/root/project/Sportsys/static换成你自己的路径

3)将nginx.conf移动到nginx的配置文件目录下:
a)输入如下命令:
    cd /etc/nginx/sites-enabled
    进入此文件夹
12
b)再输入如下命令:
    ln -s /root/project/nginx.conf nginx.conf
1

将刚才的nginx.conf复制到此文件夹下并且也命名为nginx.conf
同时将此文件夹下的defaule文件删除(rm -f default)
此外,也将这个文件复制到/etc/nginx/sites-available文件夹下并删除default文件。

c)重新启动nginx:
    /etc/init.d/nginx restart
1

如果failed,则输入nginx -t查看错误信息,找到nginx.conf哪一行出错修改即可。

d)验证nginx配置:

回到/root/project文件夹下,输入uwsgi –ini uwsgi.ini启动项目,然后在本地电脑登录服务器ip地址即可(不用指定端口,现在是默认访问80端口,而非8000端口)。
!!注意:如果出现静态文件无权访问的情况,vi /etc/nginx/nginx.conf,在第一行添加user root,然后再次重启nginx即可。

至此,整个项目部署完毕。

7.完成最后一步:

现在每次启动项目,都需要我们手动启动,那么如何实现只要服务器运行,项目自启动呢?
vi /etc/rc.local
1
在exit 0前加入如下内容:
/usr/local/bin/uwsgi --ini /root/project/uwsgi.ini

/usr/local/bin/uwsgi为你安装的uwsgi的绝对路径,/root/project/uwsgi.ini换成你自己的路径。
123
然后重新启动远程服务器,启动完毕后用本地电脑登录验证即可。

至此,整个项目已经完全部署成功!

每个人在部署过程中可能产生不同的bug,多问多google即可。

相关文章:

  • 2021-08-07
  • 2021-06-20
  • 2021-12-15
  • 2021-10-23
  • 2021-11-14
  • 2021-06-10
  • 2021-07-14
  • 2022-01-12
猜你喜欢
  • 2021-11-18
  • 2022-01-12
  • 2022-02-07
  • 2022-01-12
  • 2022-12-23
相关资源
相似解决方案