• Django项目总结:项目部署


    【部署】

    -- django中自带开发者服务器

      -- runserver

        -- 路由处理功能,具备动态资源处理

        -- 开启debug,具有静态资源处理功能

      -- 功能健壮,性能是比较低的,仅适用于开发

     

    -- 部署不会使用单一服务器

      -- Apache

      -- Nginx

        -- HTTP服务器

          -- 处理静态资源

        -- 反向代理

          -- Nginx + uWSGI HTTP服务器

          -- Nginx + gunicorn HTTP服务器

        -- 邮件服务器

        -- 流媒体服务器

    【Nginx】

     

    Nginx 安装

    -- 下载Nginx公钥:wget http://nginx.org/keys/nginx_signing.key

    -- 添加公钥,添加源,更新源,安装,卸载,查看进程

    # 添加 Nginx 公钥(处于公钥所在目录)
    sudo apt-key add nginx_signing.key
    
    # 打开Linux源文件,添加源
    sudo vim /etc/apt/sources.list
    
    # 将下面两句代码添加到 sources.list 尾部
    deb http://nginx.org/packages/ubuntu/ [你的ubuntu版本名] nginx
    deb-src http://nginx.org/packages/ubuntu/ [你的ubuntu版本名] nginx
    
    # 源添加好后,更新源
    sudo apt update
    
    # 安装 Nginx
    sudo apt install nginx
    
    # 卸载 Nginx
    sudo apt remove nginx
    
    # 查看 Nginx 进程状态
    ps -ef|grep nginx

    Nginx 控制

    报错:nginx: [alert] could not open error log file......
    解决:命令前添加 sudo 权限
    
    # 启动 Nginx
    nginx [-c configpath]
      
    # 信息查看
    nginx -v  # 显示版本信息
    nginx -V  # 显示所有配置信息
      
    # 控制 Nginx
    nginx -s stop    快速关闭
             quit    优雅的关闭
             reload  重新加载配置,原来的
    
    # 通过系统管理
    systemctl status nginx  # 查看nginx状态
    systemctl start nginx  # 启动nginx服务
    systemctl stop nginx  # 关闭nginx服务
    systemctl enable nginx  # 设置开机自启
    systemctl disable nginx  # 禁止开机自启

    Nginx 配置(核心)

    -- Nginx配置文件是包含<指定指令控制>的模块。

      -- 指令分为<简单指令>和<块指令>

      -- 一个简单指令由名称和参数组成,以空格分隔,并以分号结尾

      -- 块指令和简单指令有相同的结构,但不是以分号结束,而是以一个大括号包含的一堆附加指令结束

       -- 如果一个大括号内可以有其他的指令,它就被称为一个上下文,比如(events,http,server,location)

    # 打开Nginx配置文件
    cd /etx/nginx
    vim nginx.conf
    nginx -t  # 不运行,仅测试配置文件
    nginx -c configpath  # 从指定路径加载配置文件
    nginx -t -c configpath  # 测试指定配置文件,使用绝对路径

    Nginx 配置文件结构

    main     # 全局设置
    
    events{  # 工作模式,连接配置
          ...
    }
    
    http{    # http的配置
          ...
          upstream xxx{  # 负载均衡配置
              ...
          }
          server{  # 主机设置
              ...
              location xxx{  # URL匹配
                  ...
              }
          }
    }
    
    user nginx;  # worker进程运行的用户和组
    
    worker_processes 1;  # 指定Nginx开启的子进程数,多核CPU建议设置和CPU数量一样的进程数
    
    error_log xxx level;  # 用来定义全局错误日志文件,通常放在var中,
                          # level有 debug,info,notice,warn,error,crit
    
    pid xxx;  指定进程id的存储文件位置

    # events,指定工作模式和连接上限

    # events,指定工作模式和连接上限
    
    events{
      use epoll;
      worker_connections 1024;
    }
    
    use 指定nginx工作模式
        epoll  高效工作模式,linux
        kqueue  高效工作模式, bsd
        poll  标准模式
        select  标准模式
      
    worker_connections # 定义nginx每个进程的最大连接数
      正向代理  连接数 * 进程数
      反向代理  连接数 * 进程数 / 4
      linux系统限制最多能同时打开65535个文件,默认上限就是65535,
      可解除 ulimit -n 65535
    # 增加连接数,需增加worker_processes,单台设备最高连接50000

    # http,最核心的模块

    # http,最核心的模块
    # 主要负责http服务器相关配置,包含server,upstream子模块
    
    include mime.types;  #设置文件的mime类型
    include xxxconfig;  # 包含其它配置文件,分开规划解耦
    default_type xxx;  # 设置默认类型为二进制流,文件类型未知时就会使用默认
    log_format  # 设置日志格式
    sendfile  # 设置高效文件传输模式
    keepalive_timeout  # 设置客户端连接活跃超时
    gzip  # gzip压缩

    # server,用来指定虚拟主机

    # server,用来指定虚拟主机
    
    listen 80;  # 指定虚拟主机监听的端口
    server_name localhost;  # 指定ip地址或域名,多个域名使用空格隔开
    charset utf-8;  # 指定网页的默认编码格式
    error_page 500 502 /50x.html  #指定错误页面
    access_log xxx main;  # 指定虚拟主机的访问日志存放路径
    error_log xxx main;  # 指定虚拟主机的错误日志存放路径
    root xxx;  # 指定这个虚拟主机的根目录
    index xxx;  # 指定默认首页

    # location 核心中的核心,以后的主要配置都在这

    # location 核心中的核心,以后的主要配置都在这
    # 主要功能:定位url,解析url,支持正则匹配,还能支持条件,实现动静分离
    
    location [modifier] url{
        ...
    }
    
    modifier 修饰符
        =  使用精确匹配并且终止搜索
        ~  区分大小写的正则表达式
        ~*  不区分大小写的正则表达式
        ^~  最佳匹配,不是正则匹配,通常用来匹配目录
     
    常用指令
      alias 别名,定义location的其他名字,在文件系统中能够找到,
      如果location指定了正则表达式,alias将会引用正则表达式中的捕获,
      alias替代lication中匹配的部分,没有匹配的部分将会在文件系统中搜索

    实例配置文件

    # nginx.conf 配置文件
    
    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;  # mime:网络传输中允许的数据类型
        default_type  application/octet-stream;  # 默认流媒体格式
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;  # 访问日志
    
        sendfile        on;  # 高效文件发送模式,对数据进行压缩算法
        #tcp_nopush     on;
    
        keepalive_timeout  65;  # 连接最长时长
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;  # 内含 server
    }
    # *.conf => server
    
    server {
        listen       80;  
        server_name  localhost;  # 服务器域名
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {  # 可指定主页
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ .php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ .php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /.ht {
        #    deny  all;
        #}
    }

    【uwsgi】

    # 安装 uwsgi
    pip install uwsgi
    
    #工程目录下创建uwsgi.ini 配置文件
    #书写配置信息
    #使用uwsgi服务器
      - 启动  uwsgi    --ini    uwsgi.ini # 绝对路径
      - 停止  uwsgi    --stop    uwsgi.pid

    uwsgi.ini 配置文件

    [uwsgi]
    # 使用nginx连接时 使用
    socket=0.0.0.0:8888
    
    # 直接作为web服务器使用
    # http=127.0.0.1:8010
    # http=0.0.0.0:8888
    
    # 配置工程目录
    chdir=/home/dc/GP1/day7/GPAXF
    
    # 配置项目的wsgi目录。相对于工程目录,程序入口
    wsgi-file=GPAXF/wsgi.py
    
    #配置进程,线程信息
    #进程数
    processes=4
    
    #每个进程的线程数
    threads=2
    
    #是否开启多线程
    enable-threads=True
    
    #是否开启主从结构
    master=True
    
    #进程id存储文件,相对路径
    pidfile=uwsgi.pid
    
    daemonize=uwsgi.log

    uwsgi作为web服务器

    nginx + uwsgi 部署

    # 修改uwsgi.ini

     

    # 修改config.conf

     

    # 重启 nginx 和uwsgi

    【部署 => Ali云服务器】

    # 导出项目依赖(处于项目目录)
    pip freeze > requirements.txt

    # 云服务器系统安装

    # 通过公网ip连接服务器

    -- 连接工具

      -- Xshell

      -- ssh root@[公网ip]

        -- 需先在云服务器管理上配置安全组(设置哪些端口允许被访问)

    Xshell 连接和设置服务器

    -- 新建连接

    -- 安装环境

    # pip升级
    pip install --upgrade pip
    pip3 install --upgrade pip
    
    # 安装pip
    apt install python-pip
    apt install python3-pip
    
    # python环境
    python
    python3
    apt update
    apt install python-dev python3-dev python-pip python3-pip
    
    # 安装虚拟环境
    pip install virtualenvwrapper
    pip uninstall virtualenv  # 卸载
    
    # 配置虚拟环境
    mkdir .virtualenvs  # 删除 rm -rf .virtualenvs/
    find / -name virtualenvwrapper.sh  # 得到路径
    vim .bashrc  # 配置变量
    source .bashrc  # 激活环境变量
    
    # 创建虚拟环境
    mkvirtualenv 环境名 -p /usr/bin/python3
    deactivate  # 退出当前环境
    
    # 安装 mysql
    apt install mysql-serve
    
    # 安装redis,https://redis.io
    wgte http://download.redis.io/releases/redis-6.0.6.tar.gz  # 下载redis
    tar -zxvf redis-6.0.6.tar.gz  # 解压
    make  # 进入解压目录执行make命令,构建编译redis
    make test  # 测试
    apt install tcl  # 测试发生错误,安装tcl
    ./install_server.sh  # 安装redis,解压目录 => utils => install_server.sh
    ps -ef|grep redis
    redis-cli  # 测试redis连接,PONG => 连接成功

    项目打包传入服务器

    -- 项目部署在服务器的 var 目录中

    cd /var/
    mkdir 项目目录名
    cd 项目目录名
    apt install lrzsz  # 安装进度显示
    将打包的项目拖入Xshell会话窗口,上传
    tar -zxvf 项目压缩包  # 解压项目

    -- 安装 nginx ,修改配置文件

    wget http://nginx.org/keys/nginx_signing.key  # 下载nginx证书
    apt-key add nginx_signing.key
    vim /etc/apt/sources.list  # 编辑源信息
    apt install nginx  # 安装nginx
    nginx  # 启动nginx
    vim config.conf  # 进入项目目录,编辑配置文件
    nginx -s quite
    nginx -t -c /.../config.conf  # 退出,测试
    nginx -c /.../config.conf  # 开启nginx

    -- 进入虚拟环境,安装依赖

    workon 虚拟环境名
    pip install -r requirements.txt
    pip freeze
    
    vim uwsgi.ini  # 修改 chdir 项目路径
    uwsgi --ini uwsgi.ini  # 启动 uwsgi

    -- 创建数据库,导入数据

    # settings.py => DATABASES,数据库名
    mysql -uroot -p密码  # 进入数据库
    mysql> create database 数据库名 charset=utf8;  # 创建数据库
    python manage.py migrate  # 执行迁移
    
    mysql-workbench  # 连接远端数据库,数据库操作,插入数据

    -- 邮件发送,25端口非安全端口,不允许使用

    -- 使用ssl加密端口465,https://docs.djangoproject.com/en/3.0/topics/email/

    -- 简单压力测试

    ab -n 100 https://www.baidu.com/
  • 相关阅读:
    PHP观察者模式 (转)
    PHP单例模式 (转)
    PHP解决并发问题的几种实现(转)
    php结合redis实现高并发下的抢购、秒杀功能 (转)
    使用 redis 减少 秒杀库存 超卖思路 (转)
    mysql视图学习总结(转)
    mysql 存储过程
    PHP中的魔术方法和关键字
    bzoj3462DZY Loves Math II
    bzoj1453[Wc]Dface双面棋盘
  • 原文地址:https://www.cnblogs.com/dc2019/p/13412336.html
Copyright © 2020-2023  润新知