Django前后端项目部署

Django前后端分离项目部署

本文采用阿里云服务器,centos7.9操作系统
本文默认服务器已安装nginx,mysql并且可以正常运行

Django + vue + uwsgi + nginx

注意:先部署后端,使用postman测试请求没有问题后在修改vue中的axios文件中baseURL,顺序不要弄错

前置消息

1 服务器安全组端口设置

在这里插入图片描述

2 服务器域名解析

在这里插入图片描述

3 ssl证书申请

在这里插入图片描述

在这里插入图片描述

申请后很快就能通过,下载nginx格式证书,备用

有几个需要用到的二级域名就需要几个ssl证书,用来支持HTTPS请求

后端项目部署

项目规划:

  • 所有项目文件都放在/od/文件夹中
  • 我的项目中,纯前端项目放在/od/qianmo/文件夹中,前后端分离项目中前端项目放在od/front/文件夹中, 后端项目放在/od/backend/文件夹中
  • 所有ssl证书也都上传到/od/文件夹中,并且在此文件夹中解压,每个ssl证书都有一个单独的文件夹
  • 关于python的虚拟环境放在/od/backend/文件夹中,与项目根目录同级;uwsgi的启动脚本放在/od/backend/script/文件夹中;日志文件放在/od/backend/log/文件夹中

1 修改Django配置文件

将Django项目settings.pyDEBUG改为True,ALLOWED_HOSTS写成["*"]

在这里插入图片描述

# 项目目录规划
mkdir -p /od/backend
cd /od/backend


yum install unzip
unzip dahe.zip -d /od/backend/dahe/

# 启动虚拟环境
cd /od/backend
pip3 install virtualenv
virtualenv venv
source /od/backend/venv/bin/activate
# 安装依赖包
pip -V
pip install --upgrade pip
pip install uwsgi==2.0.23
pip install -r /od/backend/dahe/requirements.txt

# 检查是否包依赖安装成功
(venv) [root@iZgc7d0d1szot7fke40ez9Z od]# pip list
Package                 Version
----------------------- ------------
asgiref                 3.7.2
async-timeout           4.0.3
certifi                 2023.7.22
charset-normalizer      3.2.0
Django                  4.2.5
django-redis            5.3.0
djangorestframework     3.14.0
idna                    3.4
pip                     24.0
pycryptodome            3.19.0
PyJWT                   2.8.0
PyMySQL                 1.1.0
pytz                    2023.3.post1
redis                   5.0.0
requests                2.31.0
setuptools              69.1.0
sqlparse                0.4.4
tencentcloud-sdk-python 3.0.986
tzdata                  2023.3
urllib3                 2.0.5
uWSGI                   2.0.23
wheel                   0.42.0

2 数据库迁移

# 云服务器中执行
cd到data.sql文件所在的目录,执行下面的命令
mysql -uroot -p123 <dahe_data.sql

3 测试项目能否运行(重要的一步)

cd /od
source /od/backend/venv/bin/activate
cd /od/backend/dahe/
python3 manage.py  runserver 0.0.0.0:8000

在这里插入图片描述

这里可以使用postman向后端的接口发送请求,看看能否得到正确的返回值

没有问题了再进行下面的部署配置

4 配置uwsgi

创建uwsig.ini文件:

cd /od/backend/
mkdir script
mkdir logs
vim /od/backend/script/uwsgi.ini
[uwsgi]
socket=0.0.0.0:8000
chdir=/od/backend/dahe/
module=dahe.wsgi
processes=3
home=/od/backend/venv/
master=true
vacuum=true
buffer-size=32768
# logto=/od/backend/logs/uwsgi.log

文件内容解释:

[uwsgi]

# 填写订单项目的根目录
chdir=/od/backend/dahe/

# 填写与项目同名的目录,这是个相对路径,主要就是找到其内的wsgi.py这个文件
module=dahe.wsgi

# 虚拟环境的根目录,也就是工作目录
home=/od/backend/venv/

# uwsgi的主进程,其他的uwsgi的进程都是这个主进程的子进程,当你kill时,杀掉的也是这个master主进程
master=true

# uwsgi并发时的工作进程的数量,官网的建议是:2 * cup核数 + 1
# 由这几个进程来分摊并发请求
processes=3

# 临时使用http,实际部署时,通过nginx反向代理,就要把http换成socket,这点别忘了改
http=0.0.0.0:8000
# socket=0.0.0.0:8000

# 当服务器退出时,自动删除unix socket文件和pid文件
vacuum=true

# 默认的请求的大小为4096,如果你接收到了一个更大的请求 (例如,带有大cookies或者查询字符串),那么超过4096的限制就会报错invalid request block size: 4547 (max 4096)...skip,所以我们这里提前调整下
# https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Options.html#buffer-size
buffer-size=32768

# uwsgi的日志文件
logto=/od/logs/uwsgi.log

启动后端项目:

source /od/backend/venv/bin/activate
uwsgi --ini script/uwsgi.ini
# 以后台方式运行(直接回车就行)
uwsgi --ini script/uwsgi.ini &

5 配置nginx和ssl证书

配置流程:

  • 首先我们要明白,我们服务器上一共有3个项目,并且我们会为每个项目都配置ssl证书,所有我们的nginx配置在http{}模块下一共就有6个server模块
  • 这里建议直接删除原本nginx.conf里面的所有内容,在本地编辑完成之后拷贝到文件里
  • 下面将以前后端分离项目的nginx部署为例,纯前端项目类似

在这里插入图片描述

后端项目部署好之后我们需要再次进行postman测试

因为我们这里已经配置了HTTPSuwsgi,所以我们postman测试的URL需要更改为我们的域名

在这里插入图片描述

这里测试没问题之后我们就可以进行前端的配置了

前端项目部署

1 修改axios文件中baseURL

注意:将baseURL改为我们上述在postman中测试的地址,这一点非常重要,不要忘记

在这里插入图片描述

2 项目编译

npm run build

项目根路径下会生成dist文件夹(编译过后的文件),本地压缩成zip(不要压成rar)

将zip文件夹上传到云服务器指定地点,我的上传到云服务器的/od/front//od/qianmo/文件夹中

3 在nginx配置文件中添加前端模块

在这里插入图片描述

添加完成之后重新加载配置文件(重启nginx)

nginx -s reload

最后访问前端路由就可以访问你的项目了

部署成功

我的nginx文件总配置:

worker_processes  2;



events {
    worker_connections  2048;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  qianmo.betterwilson.com;

        charset utf-8;

        location / {
            root /od/qianmo/dist;
            index index.html;
            try_files $uri $uri/ /index.html;   
        }
    }

    server {
        #HTTPS的默认访问端口443。
        #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
        listen 443 ssl;
     
        #填写证书绑定的域名
        server_name qianmo.betterwilson.com;
     
        #填写证书文件绝对路径
        ssl_certificate /od/qianmo.betterwilson.com_nginx/qianmo.betterwilson.com.pem;
        #填写证书私钥文件绝对路径
        ssl_certificate_key /od/qianmo.betterwilson.com_nginx/qianmo.betterwilson.com.key;
     
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 5m;
        #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
        #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

        #表示优先使用服务端加密套件。默认开启
        ssl_prefer_server_ciphers on;
 
 
        location / {
            root /od/qianmo/dist;
            index index.html;
            try_files $uri $uri/ /index.html;
        }
    }

    server {
        listen       80;
        server_name  shipper.betterwilson.com;

        rewrite ^(.*) https://$server_name$1 redirect;
    }

    server {
        #HTTPS的默认访问端口443。
        #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
        listen 443 ssl;
     
        #填写证书绑定的域名
        server_name shipper.betterwilson.com;
     
        #填写证书文件绝对路径
        ssl_certificate /od/shipper.betterwilson.com_nginx/shipper.betterwilson.com.pem;
        #填写证书私钥文件绝对路径
        ssl_certificate_key /od/shipper.betterwilson.com_nginx/shipper.betterwilson.com.key;
     
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 5m;
        #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
        #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

        #表示优先使用服务端加密套件。默认开启
        ssl_prefer_server_ciphers on;
 
 
        location / {
            root /od/front/dist;
            index index.html;
            try_files $uri $uri/ /index.html;
        }
        
        location /media {
            alias /od/backend/dahe/media;
        }
    }

    server {
        listen       8080;
        server_name  dahe.betterwilson.com;

        rewrite ^(.*) https://$server_name$1 redirect;
    }

    server {
        #HTTPS的默认访问端口443。
        #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
        listen 443 ssl;
     
        #填写证书绑定的域名
        server_name dahe.betterwilson.com;
     
        #填写证书文件绝对路径
        ssl_certificate /od/dahe.betterwilson.com_nginx/dahe.betterwilson.com.pem;
        #填写证书私钥文件绝对路径
        ssl_certificate_key /od/dahe.betterwilson.com_nginx/dahe.betterwilson.com.key;
     
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 5m;
        #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
        #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

        #表示优先使用服务端加密套件。默认开启
        ssl_prefer_server_ciphers on;

        location / {
           include uwsgi_params;
           uwsgi_pass 0.0.0.0:8000;  # 端口要和uwsgi里配置的一样
           # uwsgi_param UWSGI_SCRIPT dahe.wsgi;  #wsgi.py所在的目录名+.wsgi
           # uwsgi_param UWSGI_CHDIR /od/backend/dahe; # 项目路径
        }
    }   
}

项目优化

1 修改云服务器安全组的端口

在部署和测试完成后关闭云服务器mysql和redis的端口,增加云服务器的安全性

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/585409.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PLC通过Modbus转Profinet网关连接变频器与电机通讯

Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;是一种能够实现Modbus协议和Profinet协议之间转换的设备。Modbus转Profinet网关可提供单个或多个RS485接口&#xff0c;PLC作为控制中枢&#xff0c;变频器作为控制电机转速&#xff0c;通过Modbus转Profinet网关&#…

美国站群服务器的定义、功能以及在网站运营中的应用

美国站群服务器的定义、功能以及在网站运营中的应用 在当今互联网的蓬勃发展中&#xff0c;站群服务器已成为网站运营和SEO优化中不可或缺的重要工具之一。尤其是美国站群服务器&#xff0c;在全球范围内备受关注。本文将深入探讨美国站群服务器的定义、功能以及在网站运营中的…

【城市】应届生第一次打工需要知道的常识(薪资结构,社保,五险二金,个税,专项扣除)

【城市】应届生第一次打工需要知道的常识&#xff08;薪资结构&#xff0c;社保&#xff0c;五险二金&#xff0c;个税&#xff0c;专项扣除&#xff09; 文章目录 1、什么是应届生 & 如何界定应届生2、社保&#xff0c;五险一金&#xff0c;五险二金3、薪资结构&#xff0…

运存与内存?内存与存储? 傻傻分不清

主页: 元存储博客 图片来源: Blackblaze 文章目录 名词为何“内存”的含义混乱内存和存储含义内存和存储作用RAM 与 存储差异速度和性能容量和尺寸易失性和持久性常见问题:总结名词 内存: Memory,如内存条 存储器: Storage, 包括硬盘等 为何“内存”的含义混乱 <

class089 贪心经典题目专题1【左程云算法】

class089 贪心经典题目专题1【左程云算法】 前言版权推荐class089 贪心经典题目专题1code1 179. 最大数code2 1029. 两地调度code3 1553. 吃掉 N 个橘子的最少天数code4 253. 会议室IIcode5 630. 课程表 IIIcode6 1167. 连接棒材的最低费用(leetcode测试)code6 P1090 连接棒材的…

C进阶-数据的存储

文章目录 1. 数据类型介绍类型的基本归类 2. 整型在内存中的存储:原码,反码,补码2.1. 原码,反码,补码 2.2. 大小端介绍大端字节序存储小端字节序存储例:设计程序判断是大端还是小端? 2.3. 练习练习1练习2练习3练习4 3. 浮点型在内存中的存储 1. 数据类型介绍 数据类型数据类型…

YARN详解

YARN 简介 YARN 是Yet Another Resource Negotiator的缩写。 YARN是第二代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的;通俗讲就是资源管理器. YARN核心思想: 将 MR1 中资源管理和作业调度两个功能分…

node.js 解析post请求 方法二

前提&#xff1a;以前面发的node.js解析post请求方法一为模板&#xff0c;具体见 http://t.csdnimg.cn/ABaIn 此文我们运用第二种方法&#xff1a;使用第三方模块formidable对post请求进行解析。 1》代码难点 *** 在Node.js中使用formidable模块来解析POST请求主要涉及到处理…

读(用知云翻译)gaitedge论文

文章目录 前言摘要一、介绍二、相关工作2.1步态识别2.2端到端学习 三、跨域问题四、我们的框架4.1步法合成4.2步态对准模块 五、实验5.1设置5.2性能比较5.3消融实验5.4可视化 六、结论 前言 本篇博客仅为个人学习&#xff0c;全文均为知云翻译&#xff0c;如有翻译不当&#x…

Android中的屏幕刷新机制(动画视频形象说明机制)

一&#xff0c;刷新率和帧率&#xff0c;60hz和60fps的区别 在Android系统中&#xff0c;刷新率和帧率是两个不同的概念&#xff0c;它们各自在显示过程中扮演着不同的角色。以下是对它们的详细解释&#xff1a; 刷新率&#xff0c;单位是Hz&#xff0c;是指屏幕在一秒内刷新…

Python来计算 1,2,3,4 能组成多少个不相同且不重复的三位数?

我们今天的例子是 有 1&#xff0c;2&#xff0c;3&#xff0c;4 四个数字&#xff0c;它们能组成多省个互不相同且无重复的三位数&#xff1f;都分别是多少&#xff1f; 话不多说&#xff0c;我们先上代码 num 0 # 我们写了三个for循环&#xff0c;表示生成的三位数 for i…

ROS 2边学边练(41)-- 使用基于tf2_ros::MessageFilter带标记(位姿、时间...)的数据类型

前言 此篇将介绍如何利用tf2来使用传感器数据&#xff08;如单声道和立体声摄像机以及雷达&#xff09;。 假设我们创建了一只海龟叫turtle3&#xff0c;它的里程计不大好用&#xff0c;为了监视turtle3的活动轨迹&#xff0c;有台头顶摄像机被安装到该海龟的背上&#xff08;负…

arp欺骗详解

目录 arp攻击原理 arp协议简介 arp攻击原理 arp实验 实验环境 实验步骤 1、使用ipconfig命令查看靶机&#xff08;window10&#xff09;的IP地址为下一步攻击做好准备&#xff0c;这一步是模拟你获取对方IP的过程 2、使用ifconfig查询查看攻击者&#xff08;kali&#x…

【华为 ICT HCIA eNSP 习题汇总】——题目集19

1、&#xff08;多选&#xff09;以下选项中&#xff0c;FTP 常用文件传输类型有&#xff08;&#xff09;。 A、ASCII 码类型 B、二进制类型 C、EBCDIC 类型 D、本地类型 考点&#xff1a;应用层 解析&#xff1a;&#xff08;AB&#xff09; 文件传输协议&#xff08;FTP&…

Win10无法合并分区?尝试以下2种解决方法吧

若Win10无法合并分区&#xff0c;导致C盘无法扩容&#xff0c;该如何解决呢&#xff1f;本文将介绍如何利用磁盘管理工具和傲梅分区助手轻松解决这个问题&#xff01; 为什么要合并硬盘分区&#xff1f; 合并硬盘分区是指将同一硬盘上的两个分区合并成一个&#xff0c;或者将…

K8S controller编写之Informer的原理+使用[drift]

概念 核心思想&#xff08;重点&#xff09;watch-list 机制 Watch 通过 HTTP 协议与 Kubernetes API Server 建立长连接&#xff0c;接收 Kubernetes API Server 发来的资源变更事件。Watch 操作的实现机制使用 HTTP 协议的分块传输编码——当 client-go 调用 Kubernetes API…

物联网D1——建工程,配环境,注意事项

1.STLink、JLink、USB等驱动配置keil环境配置——下载芯片对应型号的包——导入库函数源文件、Core内核文件、对应芯片系统文件。 2.学会看芯片手册 3.在STM32微控制器中&#xff0c;CRH通常指的是控制寄存器高位&#xff08;Control Register High&#xff09;。 在这种情况下…

OMG 一个方法的调用改动居然优化了一倍性能!!! ConcurrentHashMap.computeIfAbsent 学习

背景 前提&#xff1a;抖音小程序有qps的监控&#xff0c;如果说qps过低就会导致小程序被下架掉。 业务代码非常的简单 一个easy的查询 但是当并非达到 20就 会发现qps降低了10倍 业务需求实现大概这么一个链路 ok 那么此前我们在认识一下 computeIfAbsent 方法&#xff08;大…

Windows使用SSH登录本机Linux虚拟机

SSH&#xff08;Secure Shell&#xff09;&#xff0c;一种网络协议&#xff0c;可以在安全外壳下实现数据传输通信&#xff0c;所以主要用于计算机间加密登录&#xff0c;可以简单理解为远程控制。除了计算机间直接互联&#xff0c;在git中也可以看到&#xff0c;常见的协议有…

opencv基础篇 ——(十一)常用照片处理函数

改善图像的亮度(illuminationChange) 用于改善光照条件不佳导致的图像对比度低下或局部过暗/过亮的问题。该函数通过模拟全局和局部光照变化&#xff0c;旨在提高图像的整体视觉质量&#xff0c;特别是在低光照条件下&#xff0c;使得图像中的重要细节更加清晰可见。 函数原型…