项目部署(Python3 + ubuntu 16.04(ali server) + Nginx + uWSGI + Django 1.11)

提前知识

Runserver是一个单进程单线程的服务器,是一个非常基础非常low的服务器,常用于测试,和开发。并发性非常差,可以说是完全高并发废物的服务器。

Nginx

负责静态文件的服务和反向代理。其实也就是一个中间件。 

正向代理客户端(类似VPN),反向代理服务器。

生动介绍:

同学1为客户端     同学2 为nginx      同学3为服务端uwsgi

同学1  同学2  同学3

同学1问同学3借钱,同学1让同学2向同学3借钱给同学1,同学2问同学3有没有100。  说白了就是同学2转发,帮同学1(客户端)转发消息给同学3,消息传到同学2再回去同学1。这个是正向代理。

同学1打电话叫同学3出来打球,同学二给了同学3的电话号码给同学1知道,就是代理的同学3.。这个是反向代理,

 

Uwsgi、gunicorn

提供动态页面的服务。

一个是协议wsgi   一个是服务器Uwsgi  都不一样的

Uwsgi完美解决runserver的不足,支持高并发。

Django的主要部署平台就是WSGI,它也是Python的标准web服务器和应用。 

uWSGI是实现了WSGI的工具,我们需要下载和安装它。

uWSGI的官网地址:https://uwsgi-docs.readthedocs.io/en/latest/index.html

版本最好是最新版本的。

Settings里面的debug提供静态服务功能(图片,等等等)

settings:

Debug=True

Debug=False // 真实部署 只做擅长的事情,已经有很多开源的服务器阿帕奇,nginx等等 runserver只是做测试

 

如果没有设置为False,django就不会为我们提供静态文件的服务

 

 则会暴露接口,接下来的漏洞你懂的。别人会利用你这个接口进行恶心操作,密钥,数据库配置信息全部暴露出来。所以404页面要自己定义。(为了安全着想)

生成requirements.txt文件

在xshell里面生成requirements.txt 文件(将项目里面的包,存放到requirements.txt文件中)

pip freeze > requirements.txt

上传到服务器

方法一:

可以使用xshell连接阿里云服务器,通过rz命令将本地项目目录压缩为zip后,上传到服务器

在阿里云服务器上,使用uzip解压项目压缩文件

uzip你的项目压缩文件.zip

方法二:

可以使用提供的ssh连接工具,将项目目录发送到服务器家目录中

scp -r 你的项目目录 服务器用户名@服务器ip: ~/ -p  ssh服务端口

安装python3以及虚拟环境

安装python3、virtuawrapper 都可以查看官方文档安装,这里省略

创建虚拟环境

mkvirtualenv   虚拟环境的名字

安装项目相关包

workon   虚拟环境名字

需要重新对requirements.txt文件中每一个版本仔细检查是否版本不对等等问题,再去修改

pip install -r requirments.txt

UWSGI安装以及测试

# 安装uwsgi
pip install uwsgi

#  测试uwsgi是否安装成功:
# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2
    
# 运行uwsgi: 
uwsgi --http :8000 --wsgi-file test.py
    
# 测试uwsgi运行是否正常: 
curl 127.0.0.1:8000
    
    
测试访问
http://192.168.216.137:8000/     

1uwsgi 配置

在项目根目录中创建deploy目录,新建uwsgi_conf.ini文件。

[uwsgi]

使用nginx连接时使用,Django程序所在服务器地址

选择阿里内网IP和端口

    socket=192.168.216.137:8001

项目根目录

    chdir=  阿里云上的项目

项目中wsgi.py文件的相对目录

    wsgi-file= django里面wsgi文件  (是nginx和wsgi沟通桥梁)

进程数

processes=2

线程数

threads=2

uwsgi服务器的角色

master=True

存放进程编号的文件

pidfile=   uwsgi.pid

日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。以前的runserver是依赖终端的

daemonize=    要自己设置log   目录紧跟着chdir
 指定虚拟环境所在目录,不能填相对目录 virtualenv=   找出配置本次项目的虚拟环境地址

2启动uwsgi

换到deploy目录中,创建logs文件夹,用于存放日志文件

启动uwsgi

uwsgi --ini uwsgi_conf.ini &

停止uwsgi

uwsgi --stop uwsgi.pid

nginx配置

1、安装nginx

sudo apt install nginx

2,启动nginx,查看启动状态,如果启动状态未active,则代表启动成功

sudo systemctl start nginx && sudo systemctl status nginx

3,默认开启80端口,可以查看一下是否提供web服务

curl -I 192.168.216.137

4,管理命令

 

项目配置

创建/etc/nginx/conf.d/nginx_conf.conf文件:

upstream pro_mysite {
    # 此处为uwsgi运行的ip地址和端口号
    server 192.168.216.137:8005;
}

server {
    # 监听端口
    listen      80;

    # 服务器域名或者ip地址
    server_name 192.168.216.137;

    # 编码
    charset     utf-8;

    # 文件最大上传大小
    client_max_body_size 75M;

    # 媒体文件
    location /media  {
        alias /home/pyvip/pro_mysite/media;
    }

    # 静态文件
    location /static {
        alias /home/pyvip/pro_mysite/static;
    }

    # 主目录
    location / {
        uwsgi_pass  pro_mysite;
        include    /etc/nginx/uwsgi_params;
    }
}




# 修改sudo vim /etc/nginx/nginx.conf
# 第一行开头修改用户,将www-data改为你当前的用户 创建 Nginx 运行使用的用户 www:

user pyvip;

etc /nginx /conf.d /   把配置的nginx配置文件放进去  

    # 测试nginx配置文件是否正确,
    sudo nginx -t -c /etc/nginx/nginx.conf
    # 打印如下内容,则没问题
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
    # 重新加载配置
    sudo nginx -s reload -c /etc/nginx/nginx.conf

查看nginx 进程

ps -e | grep nginx

# 杀进程PID
sudo pkill -9 nginx

# 查端口
netstat -a

# 查看指定端口
netstat -ap | grep 8000

 

posted @ 2020-04-21 23:35  我和姚明一样高  阅读(291)  评论(0编辑  收藏  举报