Django uwsgi Nginx 部署

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010525694/article/details/82284228

部署前的测试

cd bbs # 进入项目 bbs 目录
python manage.py runserver 0.0.0.0:8000

运行开发服务器测试,确保开发服务器下能正常打开网站。

安装 nginx 和 需要的包

安装 nginx 等软件

ubuntu / Linux Mint 等,下面简写为 (ubuntu):

sudo apt-get install python-dev nginx
centos / Fedora/ redhat 等,下面简写为 (centos)

sudo yum install epel-release
sudo yum install python-devel nginx

安装配置uwsgi

安装uwsgi

    pip3 install uwsgi

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

验证uwsgi

进入到和django项目的manage.py所在的文件夹,运行如下命令:

        uwsgi --http :8000 --module bbs.wsgi

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

配置uwsgi:

a)在/root/project下输入如下命令:

vi uwsgi.ini

b)编辑uwsgi.ini并保存,编辑内容如下:

[uwsgi]
socket = :8000
chdir = /home/lee/bbs/
module = bbs.wsgi

master = true

processes = 10
threads = 4

chmod-socket = 664
#chown-socket = lee:www-data

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配置完成!

使用supervisor来管理进程

安装 supervisor

supervisor是一个专门用来管理进程的工具,我们用它来管理 uwsgi 进程。
注意,supervisor是用python2写的,但也能守护python3d程序,但安装的时候要使用python2的pip安装,否则安装失败。

sudo pip install supervisor

生成 supervisor 默认配置文件,比如我们放在 /etc/supervisord.conf 路径中:

(sudo) echo_supervisord_conf > /etc/supervisord.conf

打开 supervisor.conf 在最底部添加(每一行前面不要有空格,防止报错):

[program:bbs]
command=/usr/local/bin/uwsgi -- ini /home/lee/bbs/uwsgi.ini
directory=/home/lee/bbs/
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

command 中写上对应的命令,这样,就可以用 supervisor 来管理了。
!!!注意:最好修改配置文件前面的file字段,使其不在tmp目录下,我设置的是用户目录。

[unix_http_server]
file=/home/lee/supervisor.sock   ; the path to the socket file

启动 supervisor

(sudo) supervisord -c /etc/supervisord.conf

重启 bbs 程序(项目):

(sudo) supervisorctl -c /etc/supervisord.conf restart bbs

启动,停止,或重启 supervisor 管理的某个程序 或 所有程序:

(sudo) supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]

收集静态文件

这一步将项目的静态文件全部集中到一个文件夹,如果你的工程的所有静态文件都一同一个文件夹下,则跳过此步骤。

首先修改settings.py,添加如下内容:

 STATIC_ROOT = os.path.join(BASE_DIR, 'static')

在/home/lee/bbs/目录下输入如下命令:

 python3 manage.py collectstatic

完成后,会发下目录下多了一个static文件夹。

配置nginx

1)安装nginx:

 sudo apt-get install nginx

注意:在安装之前,要确定你的服务器上已经安装了nginx的依赖库。

nginx的命令如下:

    /etc/init.d/nginx start    --启动
    /etc/init.d/nginx stop    --关闭
    /etc/init.d/nginx restart    --重新启动
    sudo service nginx reload 或 sudo service nginx restart 或 /path/to/nginx -s reload  --重新启动

2)配置nginx.conf:
a)在/root/project目录下输入如下命令:

  vi nginx.conf

b)编辑内容如下:

upstream django{                                        
        server 127.0.0.1:8000;                          
}                                                       


server {                                                
    listen      80;                                     
    server_name 127.0.0.1;                              
    access_log      /var/log/nginx/myblog_access.log;   
    error_log       /var/log/nginx/myblog_error.log;    
    charset     utf-8;                                  

    client_max_body_size 75M;                           

    location /media  {                                  
        alias /home/lee/bbs/media;                      
    }                                                   

    location /static {                                  
        expires 30d;                                    
        autoindex on;                                   
        add_header Cache-Control private;               
        alias /home/lee/bbs/static;                     
    }                                                   

    location / {                                        
        include  /etc/nginx/uwsgi_params;               
        uwsgi_pass django;                              
        uwsgi_read_timeout 2;                           
    }                                                   
}                                                       

/home/lee/bbs/static 和 /home/lee/bbs/media 换成你自己的路径

3)将nginx.conf移动到nginx的配置文件目录下:
a)输入如下命令:

 cd /etc/nginx/sites-enabled

b)再输入如下命令:

ln -s /home/lee/bbs/nginx.conf nginx.conf

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

c)重新启动nginx:

 /etc/init.d/nginx restart

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

d)验证nginx配置:
回到/home/lee/bbs/文件夹下,输入uwsgi –ini uwsgi.ini启动项目,然后在本地电脑登录服务器ip地址即可(不用指定端口,现在是默认访问80端口,而非8000端口)。

!!注意:如果出现静态文件无权访问的情况,vi /etc/nginx/nginx.conf,在第一行添加user root,然后再次重启nginx即可。

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

实现开机自启动

现在每次启动项目,都需要我们手动启动,那么如何实现只要服务器运行,项目自启动呢?

vi /etc/rc.local

在exit 0前加入如下内容:

/usr/local/bin/uwsgi --ini /home/lee/bbs/uwsgi.ini

/usr/local/bin/uwsgi为你安装的uwsgi的绝对路径,/home/lee/bbs/uwsgi.ini换成你自己的路径。

然后重新启动远程服务器,启动完毕后用本地电脑登录验证即可。

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

猜你喜欢

转载自blog.csdn.net/u010525694/article/details/82284228