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/

 

posted @ 2020-07-31 21:44  颗粒成仓  阅读(249)  评论(0编辑  收藏  举报