项目部署、单架构、集群搭建

项目部署(阿里云)

项目部署、单架构、集群搭建_第1张图片
image.png
项目部署、单架构、集群搭建_第2张图片
image.png

一、阿里云服务器

  1. 创建实例—控制台
  2. 给安全组配置规则,添加5000端口
  3. 利用命令行进行远程服务器的登陆,搭建信息
ssh 用户名@ip地址

二、相关环境配置(单架构)

  1. 根据远程服务器系统的选择更新源文件

    sudo apt-get update
    
  2. 对于数据库MySQL与Redis的安装—针对单架构部署

    • mysql
    apt-get install mysql-server
    apt-get install libmysqlclient-dev
    
    • redis
    sudo apt-get install redis-server
    
    • 虚拟环境配置
    pip install virtualenv
    pip install virtualenvwrapper
    # 使安装的virtualenvwrapper生效,编辑~/.bashrc文件
    export WORKON_HOME=$HOME/.virtualenvs
    export PROJECT_HOME=$HOME/workspace
    source /usr/local/bin/virtualenvwrapper.sh
    # 运行文件生效
    source ~/.bashrc
    
    • requirements文件
    pip install -r requirements.txt
    
  3. 拷贝本地代码到远程

    scp -r 本地文件路径 [email protected]:远程保存路径
    

三、Nginx(集群搭建)

Nginx

nginx 具备优秀的静态内容处理能力,然后将动态内容转发给 uWSGI 服务器, 这样可以达到很好的客户端响应。

  • 安装

    sudo apt-get install nginx
    
  • 运行及停止

    /etc/init.d/nginx start #启动
    /etc/init.d/nginx stop  #停止
    
项目部署、单架构、集群搭建_第3张图片
image.png
  • 如果是集群搭建、则上面的相关配置信息需要配置在业务服务器中
  • 实现分流、转发、负载均衡
  1. 作用:提交静态文件、反向代理

    一、

    静态文件配置

    Django运行在生产模式时,不再提供静态文件支持。需要静态文件交给静态文件服务器。

    Nginx服务器作为静态文件服务器

    # 打开Nginx的配置文件
    sudo vim /usr/local/nginx/conf/nginx.conf
    # 在server 部分中配置
    server {
             listen       80;
             server_name  www.meiduo.site; # 请求IP的地址信息
    
            location / {
                 root   /home/python/Desktop/front_end_pc;   # 储存在Nginx服务器静态文件路径
                 index  index.html index.htm;
             }
            # 余下省略
    }
    

    重新启动Nginx服务器

    sudo /usr/local/nginx/sbin/nginx -s reload   # 重新启动
    sudo /usr/local/nginx/sbin/nginx # 首次启动
    sudo /usr/local/nginx/sbin/nginx -s stop # 停止
    

    二、

    反向代理

    项目部署、单架构、集群搭建_第4张图片
    image.png

    1. 用户请求,不再请求业务服务器,请求Nginx服务器,Nginx接收请求,做请求分流,并转发请求路由。
    2. Nginx在配置中提供一个公网IP,业务服务器配置了公网的IP,转发接收业务服务器

    修改Nginx配置文件,让Nginx接收到请求,转发给uwsgi服务器

     upstream meiduo {
             server 10.211.55.2:8001;  # 此处为uwsgi运行的ip地址和端口号
            
             # 如果有多台服务器,可以在此处继续添加服务器地址
         }
        
     #gzip  on;
        server {
            listen  8000;
            server_name api.meiduo.site;
    
            location / {
                include uwsgi_params;
                uwsgi_pass meiduo;
            }
    
        }
    
    
         server {
             listen       80;
             server_name  www.meiduo.site;
    
             #charset koi8-r;
    
             #access_log  logs/host.access.log  main;
             location /xadmin {
                 include uwsgi_params;
                 uwsgi_pass meiduo;
             }
    
             location /ckeditor {
                 include uwsgi_params;
                 uwsgi_pass meiduo;
             }
    
             location / {
                 root   /home/python/Desktop/front_end_pc;
                 index  index.html index.htm;
             }
    
    
             error_page   500 502 503 504  /50x.html;
             location = /50x.html {
                 root   html;
             }
    
         }
    

    重启Nginx

    sudo /usr/local/nginx/sbin/nginx -s reload
    
uWSGI
  1. 提供解析请求的功能,调用Django中的路由,解决高并发的请求。
  2. uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi 协议、http 等协 议 .
  3. WSGI 是一种通信协议,它用于定义传输信息的类型,而 uWSGI 是实现 uwsgi 协议和 WSGI 协议的 Web 服务器。
  4. uWSGI 具有超快的性能、低内存占用和多 app 管理等优点,并且搭配着 Nginx 就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署 。相比来讲,支持的并发量更高方便管理多进程发挥多核的优势, 升性能。
  • django的程序通常使用uwsgi服务器来运行。(Django业务代码和业务服务器在一起)
  • 可以业务服务器配置为单架构。

安装uWSGI

pip install uwsgi

修改项目代码配置文件

# 在项目中复制开发配置文件dev.py 到生产配置prod.py
DEBUG = True
ALLOWED_HOSTS = [...,  'www.meiduo.site']  # 添加www.meiduo.site
# 跨站伪造请求的域名、IP的修改---->现在以本机为例
CORS_ORIGIN_WHITELIST = (
    '127.0.0.1:8080',
    'localhost:8080',
    'www.meiduo.site:8080',
    'api.meiduo.site:8000',
    'www.meiduo.site',  # 添加
)

修改项目的wsgi.py文件

# 修改默认的Django配置, 及开发模式下的配置文件信息路径
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meiduo_mall.settings.prod")

在项目目录的同名目录下创建uwsgi配置文件 uwsgi.ini

[uwsgi]
#使用nginx连接时使用
socket=10.211.55.2:8001
#直接做web服务器使用,Django程序所在服务器地址
#http=10.211.55.2:8001
#项目目录
chdir=/Users/delron/Desktop/meiduo/meiduo_mall
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=meiduo_mall/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。以前的runserver是依赖终端的
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/Users/delron/.virtualenv/meiduo

启动uwsgi

uwsgi --ini uwsgi.ini    # 启动
uwsgi --stop uwsgi.pid   # 停止

四、项目部署浏览过程

  1. nginx收到client请求,根据nginx配置的路由,将其转发给WSGI(默认绑定本机的IP,监听80端口)(nginx接收到请求包,URL分析,判断访问资源类型,静态资源直接读取返回浏览器,动态资源,转交uwsgi服务器)

  2. ngix提供了一个反向代理的作用(用户请求,nginx接收,并转发请求路由,提供一个公网IP,业务服务器配置局域网IP)

  3. uwsgi服务器根据wsgi协议请求解析,配置好环境变量,调用application函数,调用start_response方法呼叫web框架

  4. web框架根据环境变量,请求参数,路径找到相应的处理函数,生成响应,返回给UWSGI在组织响应

五、浏览器访问、wsgi做了什么

  1. 浏览器发送一个IP地址,

  2. 服务器收到地址以后把地址通过WSGI协议发送给WEB框架

  3. (服务端)地址是通过字典来保存的

    3.1 先定义一个字典(访问的IP地址)

    3.2 定义函数(接收响应头)

    3.3 WSGI接口函数的引用(接收响应体)

  4. WSGI协议是一个字典和一个函数的引用

    4.1WSGI协议里面的API(函数)接口返回响应头和响应体(服务端接收到的数据)

  5. 服务器接收到数据以后

    5.1响应头+空行+响应体(渲染页面)

六、部署方案

环境部署方案
一、django环境部署
1.1 python虚拟环境
1.2 django环境部署
1.2.1 django软件安装
1.2.2 项目基本操作
1.2.3 应用基本操作
1.2.4 view和url配置

二、nginx代理django
2.1 nginx软件安装
2.1.1 pcre软件安装
2.1.2 nginx软件安装
2.1.3 nginx基本操作
2.2 nginx代理配置
2.2.1 目录结构查看
2.2.2 配置文件查看
2.2.3 编辑代理配置项
三、项目调试
3.1 启动软件
3.1.1 启动django
3.1.2 启动nginx
3.2 整个项目调试

你可能感兴趣的:(项目部署、单架构、集群搭建)