概述
确保django项目可以正常启动
#项目gitee地址:https://gitee.com/地址/izufang.git
项目上线准备
#控制台输入: python manage.py check --deploy #检查项目上线前的准备
#当前项目有9处可以处理的问题
#settings.py中
DEBUG = False #调试模式
ALLOWED_HOSTS = ['*'] #指定那些主机可以访问,*代表所有,可以指定那些IP地址可以访问
注释掉INSTALL_APPS = #debug_toolbar 这个应用
注释掉MIDDLEWARE = #debug_toolbar.middleware.DebugToolbarMiddleware
注释掉debug_toolbar调试工具栏 #DEBUG_TOOLBAR_CONFIG = {JQUERY_URL:....}
#在urls.py中注释掉debug_toolbar
# if settings.py DEBUG:
# import debug_toolbar
# urlpatterns.insert(0,path('__debug__/',include(debug_toolbar.urls)))
在settings.py中添加跨域访问的配置
#pip install djang-cors-headers
# # 配置允许跨域访问接口数据
CORS_ORIGIN_ALLOW_ALL = True
# # 跨域访问允许的请求头
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'token',
)
# # 跨域访问支持的HTTP请求方法
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
)
# # 避免浏览器自作聪明推断内容类型(避免跨站脚本攻击风险)
SECURE_CONTENT_TYPE_NOSNIFF = True
##避免跨站脚本攻击
SECURE_BROWSER_XSS_FILTER = True
# # 防止点击劫持攻击手段(不允许使用<iframe>标签进行加载)
X_FRAME_OPTIONS = 'DENY'
#同步代码到gitee仓库中
Linux服务器上
#克隆项目到指定文件夹
#注意有git环境 没有的话 yum -y install git
mkdir -p project/{conf,code,static,logs} --新建project父文件/子文件为conf,code,staric,logs
cd code --进入code文件夹
git clone --depth=1 地址 -- 配过免密直接SSH,depth只要最新版本
cd.. 执行两次 --回到project目录下
#给项目创建虚拟环境(在project目录下)
# python -m venv venv -- 使用venv模块创建venv虚拟环境名为venv(这里不用这种方法)
pip3 install virtualenv -- 安装virtualenv模块
pip3 install -U virtualenv --更新这个模块
whereis python3 --查看当前python3解释器路径
virtualenv --python=/usr/local/python3 venv --刚才找到的python3路径,创建venv的文件夹
source venv/bin/activate --激活当前虚拟环境
pip install -r code/izufang/requirements.txt --python装依赖
pip install uwsgi --实现和服务器进行通信
Uwsgi配置
#在虚拟环境中
vim conf/uwsgi.ini - 配置uwsgi
#文件中写入以下内容:
[uwsgi]
#配置前导路径
base=/root/project
#配置项目名称
name=izufang
#守护进程
master=true
#进程个数
processes=4
#虚拟环境
pythonhome=%(base)/venv
#项目地址
chdir=%(base)/code/%(name)
#指定python解释器
pythonpath=%(pythonhome)/bin/python
#指定wsgi文件
module=%(name).wsgi
#通信的地址和端口(自己服务器的IP地址和端口)
http=0.0.0.0:8000
#日志文件地址
#logto=%(base)/logs/uwsgi.log #暂时注释掉
-------------------------------------------------------------------------------
#保存退出后
uwsgi --ini conf/uwsgi.ini --启动项目,可以在浏览器输入服务器地址:8000 访问
#确定可以访问后,修改uwsgi配置文件
vim conf/uwsgi.ini --打开文件
#修改通信的地址和端口(自己服务器的IP地址和端口)
socket=0.0.0.0:8000
-----------------------------------------------------------------------
uwsgi --ini conf/uwsgi.ini & --uwsgi这个进程放在后台运行
或
nohup uwsgi -ini conf/uwsgi.ini & --同上,当这个进程收到中断信号时,它依然要运行
jobs可以看到状态
Nginx的配置
systemctl stop nginx --停止Nginx服务器
vim /etc/nginx/nginx.conf --打开nginx配置文件
#修改server中的配置
...
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
include uwsgi_params;
uwsgi_pass 172.16.101.72:8000; #阿里云本机内网IP,命令为:ifconfig.eth0
}
location /static/ {
alias /root/project/static/;
expires 30d;
}
}
} #底下的配置是配置HTTPS的配置,暂时删除
把静态资源全部放置 project/static目录下
#进入code/izufang/izufang -- 进入项目主文件夹
vim settings.py -- 编辑项目配置文件
-------------------------------------------------------------------
#在配置文件中找到静态资源配置
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
#配置下面这句话 静态资源存放路径
STATIC_ROOT = '/root/project/static'
#改好之后,保存退出
---------------------------------------------------
cd .. -- 回到project/izufang的目录下
python manage.py collectstatic -- 把原来配置的静态资源迁移到刚才配置的文件路径下
----------------------------------------------------------------
修改静态资源static的所有者
systemctl start nginx -- 启动aginx
#这时可以用浏览器访问 服务器IP:80 访问静态资源,出现403错误,因为nginx的配置文件中我们静态资源是放置
在root目录下,nginx没有权限访问, 可以吧root/project/static的所有者修改为nginx就可以,
chown -R nginx static -- 在project目录下,修改static的所有者为nginx
#这是在不考虑https的情况下,项目已经部署成功
解决Nginx请求体最大文件限制:
http{}中加入 client_max_body_size 10m;
重启nginx
用pycharm来连接服务器上传代码
如果有一个项目有多台服务器,那么选择Server group组,来管理多台服务器
Gunicorn配置(附录)
也可以用gunicorn代替uwsgi,根据个人喜好选择;
gunicorn参数详解
pip install gunicorn # 安装
# coding:utf-8
import multiprocessing
# 绑定的ip与端口
bind = "0.0.0.0:8100"
# 进程数 cpu数量*2+1 推荐进程数
workers = multiprocessing.cpu_count() * 2 + 1
# 指定每个进程开启的线程数
threads = 3
# 处理请求的工作线程数,使用指定数量的线程运行每个worker。为正整数,默认为1。
worker_connections = 2000
# 最大客户端并发数量,默认情况下这个值为1000。此设置将影响gevent和eventlet工作模式
max_requests = 2000
# 设置pid文件的文件名,如果不设置将不会创建pid文件
pidfile = '/home/chenxinming/项目名/script/gunicorn.pid'
# 要写入错误日志的文件目录。
errorlog = '/home/chenxinming/项目名/script/gunicorn.error.log'
# 要写入的访问日志目录
accesslog = '/home/chenxinming/项目名/script/gunicorn.access.log'
# 监听队列
backlog = 512
#进程名
proc_name = 'gunicorn_项目名_project'
# 设置超时时间120s,默认为30s。按自己的需求进行设置timeout = 120
timeout = 120
# 超时重启
graceful_timeout = 300
# 使用gevent模式,还可以使用sync 模式,默认的是sync模式
worker_class = 'gevent'
# 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
loglevel = 'info'
# 设置gunicorn访问日志格式,错误日志无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
# 在keep-alive连接上等待请求的秒数,默认情况下值为2。一般设定在1~5秒之间。
keepalive = 3
# HTTP请求行的最大大小,此参数用于限制HTTP请求行的允许大小,默认情况下,这个值为4094。
# 值是0~8190的数字。此参数可以防止任何DDOS攻击
limit_request_line = 5120
# 限制HTTP请求中请求头字段的数量。
# 此字段用于限制请求头字段的数量以防止DDOS攻击,与limit-request-field-size一起使用可以提高安全性。
# 默认情况下,这个值为100,这个值不能超过32768
limit_request_fields=101
# 限制HTTP请求中请求头的大小,默认情况下这个值为8190。
# 值是一个整数或者0,当该值为0时,表示将对请求头大小不做限制
limit_request_field_size= 8190
# 设置gunicorn使用的python虚拟环境
pythonpath='/home/chenxinming/项目名//venv/bin/python3'
# 环境变量
raw_env = 'APE_API_ENV=DEV'
access_log_format
日志常见格式说明:
识别码 说明
h 远程地址
l “-“
u 用户名
t 时间
r 状态行,如:GET /test HTTP/1.1
m 请求方法
U 没有查询字符串的URL
q 查询字符串
H 协议
s 状态码
B response长度
b response长度(CLF格式)
f 参考
a 用户代理
T 请求时间,单位为s
D 请求时间,单位为ms
p 进程id
{Header}i 请求头
{Header}o 相应头
{Variable}e 环境变量
worker_class
要使用的工作模式,默认为sync。可引用以下常见类型“字符串”作为捆绑类:
sync
eventlet:需要下载eventlet>=0.9.7
gevent:需要下载gevent>=0.13
tornado:需要下载tornado>=0.2
gthread
gaiohttp:需要python 3.4和aiohttp>=0.21.5
loglevel支持的级别名称为:
debug(调试)
info(信息)
warning(警告)
error(错误)
critical(危急)
实操:
创建gun_conf.py
import multiprocessing
bind = '127.0.0.1:8001'
workers = multiprocessing.cpu_count() * 2 + 1
backlog = 512 # 服务器中在pending状态的最大连接数,即client处于waiting的数目。超过这个数目, client连接会得到一个error 建议取值64-2048
worker_class = 'gevent'
timeout = 30
limit_request_line = 0 # http request line最大字节数。值范围0-8190, 0表示无限制。
limit_request_field = 32768 # http request中 header字段数的最大值。缺省为100,最大32768。
limit_request_field_size = 0 # http request header字段最大字节数。0表示无限制。
reload = True
直接用gunicorn做api服务器(静态资源配置)
在主项目urls.py中添加如下
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
启动
source /root/project/venv/bin/activate
gunicorn -c gun_conf.py 项目名.wsgi:application
pm2进程管理工具
安装
1.在 root 目录下,下载Node.js安装包
wget https://nodejs.org/dist/v14.15.1/node-v14.15.1-linux-x64.tar.xz
2.解压文件
tar xvf node-v14.15.1-linux-x64.tar.xz
3.创建软链接,以便可以在任意目录下使用 node 和 npm 命令(类似在windows上配置全局环境变量)
ln -s /root/node-v14.15.1-linux-x64/bin/node /usr/local/bin/node
ln -s /root/node-v14.15.1-linux-x64/bin/npm /usr/local/bin/npm
# 软链接(类似windows下的快捷方式) ln -s 原文件名 链接文件名
4. 查看版本(是否安装成功)
node -v
npm -v
5. 安装 cnpm 并创建软链接,至此安装成功!(可选)
npm install -g cnpm --registry=https://registry.npm.taobao.org
ln -s /root/node-v14.15.1-linux-x64/bin/cnpm /usr/local/bin/cnpm
# 配置淘宝镜像(方便我们用超音速的速度去下载这个小小的包)
npm config set registry https://registry.npm.taobao.org
6. 安装pm2
npm install -g pm2
7. 创建软链接
ln -s /root/node-v14.15.1-linux-x64/bin/pm2 /usr/local/bin/pm2
8. 常用命令
pm2 list #查看进程
pm2 stop/reload/restart/delete all #停止/重载/重启/删除 所有进程
pm2 stop/reload/restart/delete 0 #停止/重载/重启/删除 pm2进程列表中进程为0的进程
pm2 logs [--raw] #显示所有进程的日志
pm2 flush #清空所有日志文件
pm2 reloadLogs #重载所有日志
最后
以上就是如意过客为你收集整理的django项目部署上线与性能调优(pm2进程管理)的全部内容,希望文章能够帮你解决django项目部署上线与性能调优(pm2进程管理)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复