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/