centos 7.9 部署django项目

1、部署框架

主要组件:nginx、uwsgi、django项目

访问页面流程:nginx---》uwsgi---》django---》uwsgi---》nginx

2、部署过程

操作系统:centos 7.9

配置信息:4核4G  50G

内网 eip :10.241.103.216

部署过程:

步骤

命令

备注

1、安装依赖包

yum  update   -y

yum -y groupinstall "Development tools"

yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

2、搭建python3和pip3环境参考连接:https://www.cnblogs.com/minglee/p/9227191.html以下安装步骤需要绑定公网eip
3、安装django项目依赖包

pip freeze > requirements.txt                                                                                                                                     # 将当前项目依赖包导入到requirements.txt中

将django项目源码压缩上传到vm,并解压

pip3 install django   -i Simple Index --trusted-host mirrors.aliyun.com

pip3 install -r requirements.txt   -i Simple Index --trusted-host mirrors.aliyun.com          # 使用国内源

检查django项目是否可以正常启动

python3 manage.py runserver   

若能正常启动,则进行下一步,不能运行的话,检查以上步骤是否有遗漏                                                               # 多数报 缺失依赖包或者依赖包的版本不符合要求信息 

4、安装并配置uwsgi

pip3 install uwsgi    -i Simple Index --trusted-host mirrors.aliyun.com 

在项目根目录创建uwsgi.ini 文件 

[uwsgi]                                                                         #添加配置选择

socket=127.0.0.1:8997                                                 #配置和nginx连接的socket连接

chdir=/root/mysite/                                                     #配置项目路径,项目的所在目录

wsgi-file=/root/mysite/mysite/wsgi.py                       #配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名

processes=4                                                                #配置启动的进程数

threads=2                                                                    #配置每个进程的线程数

master=True                                                                #配置启动管理主进程

pidfile=uwsgi.pid                                                         #配置存放主进程的进程号文件

daemonize=uwsgi.log                                                 #配置dump日志记录

运行uwsgi服务    

uwsgi  --ini  uwsgi.ini                                                  # 若显示  [uWSGI] getting INI configuration from uwsgi.ini  信息,则表示uwsgi服务运行成功

5、 安装并配置nginx 
安装nginxcd /home/
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -zxvf nginx-1.13.7.tar.gz
cd nginx-1.13.7/
./configure
make
make install
配置nginx
cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bak
vim nginx.conf                                                                            # 清空原文件内容

nginx.conf文件添加内容

events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
       listen 8002;
server_name 127.0.0.1:8002;                                                      #改为自己的域名,没域名修改为127.0.0.1:80
charset utf-8;
access_log /var/log/nginx/MyProject_access.log;
error_log /var/log/nginx/MyProject_error.log;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8997;                                                       #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT mysite.wsgi;                               #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /root/mysite/;                             #项目路径

}
location /static {
alias /root/mysite/static/;                                                         #静态资源路径
}
}
}
检验配置文件是否有错误
cd /usr/local/nginx/sbin/
./nginx -t                                      # 若没错,则执行下一条命令
./nginx
6、修改项目中setting.py文件

ALLOWED_HOSTS = ['*']                                                          # 允许所有主机进行连接访问网站

7、依次启动相关服务

在项目根目录下,运行 django项目

python3 manage.py runserver 0.0.0.0:8000                            # 与本地运行不同,新增0.0.0.0:8000 

运行uwsgi 服务

uwsgi  --ini  uwsgi.ini

运行nginx服务

cd /usr/local/nginx/sbin
./nginx
# 查看Uwsgi进程
ps -ef|grep uwsgi # 用kill方法把uwsgi进程杀死,然后启动uwsgi
killall -9 uwsgi# Nginx平滑重启方法
/usr/local/nginx/sbin/nginx -s reload

3、部署效果

浏览器输入 内网eip:8000/home/ 即可访问平台网页

4、部署中遇到的问题总结

1、运行django项目时,报 "django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher" 错误信息

      参考链接:关于django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3错误的处理办法_AAquiloo的博客-CSDN博客

      解决办法:使用第三方包运行SQLite

      pip install pysqlite3

      pip install pysqlite3-binary

      vim  /usr/local/python3/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py

      #from sqlite3 import dbapi2 as Database           #注释

      from pysqlite3 import dbapi2 as Database         #新加

2、运行django项目时,报 ”urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with OpenSSL 1.0.2k-fips“

     解决办法1: 降低urllib3包的版本                        # 本文采用的方法

                          pip3   uninstall   urllib3

                          pip3   install       urllib3==1.26.6       

     解决办法2: 升级openSSL 版本

                          yum  install   openssl-devel             # 经测试后,安装后 版本依然是1.0.2  ,没用

3、运行django项目时,报 “ModuleNotFoundError: No module named ‘_ctypes‘  错误

     解决办法:yum install libffi-devel

                       重新编译python3.8

4、部署django项目后,浏览器访问网址,提示:DISALLOWEDHOST AT / INVALID HTTP_HOST HEADER. YOU MAY NEED TO ADD TO ALLOWED_HOSTS

    解决办法 :进入项目后,找到并编辑setting.py

                       ALLOWED_HOSTS = ['*'] 

5、部署django项目后,页面样式未生效,提示静态文件404  not found错误

    参考链接:usgi+nginx部署Django样式丢失问题处理 - CodeAntenna 

                      Django项目部署上线解决样式丢失的问题-ry-代码改变世界博客

    原因说明:对于本地运行django,setting.py中debug默认为true, 静态文件则从static_dir中访问;部署上线后,一般设置debug=False,这是就是生产环境,静态文件不会从static_dir中访问了,而是从static_root 中访问;

    备注信息:部署后,其实仍可使用debug为true,从static_dir中访问      (本文使用的方法)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小素数,大智慧

小素数,大智慧 定义判断方法方法1方法2方法3方法4方法5方法6方法7 定义 素数(质数):在大于 1 的自然数中,只有 1 和该数本身两个因数的数 素数(质数):在大于1的自然数中,…

K8S用户管理体系介绍

1 K8S账户体系介绍 在k8s中,有两类用户,service account和user,我们可以通过创建role或clusterrole,再将账户和role或clusterrole进行绑定来给账号赋予权限,实现权限控制,两类账户的作用如下。 server acc…

ListNode相关

目录 2. 链表相关题目 2.1 合并两个有序链表(简单):递归 2.2 删除排序链表中的重复元素(简单):一次遍历 2.3 两链表相加(中等):递归 2.4 删除链表倒数第N个节点&…

ARM--day4(电灯实验、分析RCC、GPIO控制器,PMOS管、NMOS管的基本原理)

电灯实验代码: .text .global _start _start: /**********LED1点灯**************/RCC_INIT:1.使能GPIOE组控制器,通过RCC_AHB4ENSETR寄存器设置第[5:4]位写1---->0x50000A28[4]1ldr r0,0x50000A28ldr r1,[r0]orr…

京东门详一码多端探索与实践 | 京东云技术团队

本文主要讲述京东门详业务在支撑过程中遇到的困境,面对问题我们在效率提升、质量保障等方向的探索和实践,在此将实践过程中问题解决的思路和方案与大家一起分享,也希望能给大家带来一些新的启发 一、背景 1.1、京东门详介绍 1.1.1、京东门…

【MySQL】索引

本期我们好好唠唠索引 目录 一、索引的概念 二、索引的重要性 三、对于索引的理解 3.1 MySQL与磁盘交互的基本单位page 3.2 MySQL中的数据交互过程 3.3 索引建立的过程 3.3.1 page的存储形式 3.3.2 B树的形成 3.4 为什么不用其他数据结构来建立索引 四、聚簇索引和非…

Python tkinter Notebook标签添加关闭按钮元素,及左侧添加存储状态提示图标案例,类似Notepad++页面

效果图展示 粉色框是当前页面,橙色框是鼠标经过,红色框是按下按钮,灰色按钮是其他页面的效果; 存储标识可以用来识别页面是否存储:例如当前页面已经保存用蓝色,未保存用红色,其他页面已经保存用…

【力扣】42. 接雨水 <模拟、双指针、单调栈>

【力扣】42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 目录 【力扣】42. 接雨水题解暴力双指针单调栈 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…

数据结构<树和二叉树>顺序表存储二叉树实现堆排

✨Blog:🥰不会敲代码的小张:)🥰 🉑推荐专栏:C语言🤪、Cpp😶‍🌫️、数据结构初阶💀 💽座右铭:“記住,每一天都是一個新的開始&#x1…

c语言实现MD5算法

MD5加密 文章目录 MD5加密MD5介绍应用场景代码分析 (基于qt5.14.2)测试记录 MD5介绍 1。 一种单向加密算法,即对明文加密,而不能通过密文得到明文。对原数据的任何改动,哪怕是1字节,得到的MD5值都有很大的区…

vue路由及打包部署

vue路由(前端路由):URL中的hash(#号)与组件之间的对应关系。 一、安装vue路由 npm install vue-router3.5.1 二、定义路由表 路由表主要记录hash(#号)与组件之间的对应关系。主要定义在route…

FPGA:uart原理+tx发送模块+rx接收模块

文章目录 一、串口通信二、UART通信三、tx发送模块四、rx模块接收 一、串口通信 处理器与外部设备通信的两种方式: 串行通信: 指数据的各个位使用多条数据线同时进行传输。 并行通信: 将数据分成一位一位的形式在一条数据线上逐个传输。 串…

SQL Injection

SQL Injection 就是通过把恶意的sql命令插入web表单递交给服务器,或者输入域名或页面请求的查询字符串递交到服务器,达到欺骗服务器,让服务器执行这些恶意的sql命令,从而让攻击者,可以绕过一些机制,达到直…

sql server安装报错 合成活动模板库(ATL) 失败

错误 “合成活动模板库(ATL) 规则失败“ 解决办法: 进入SQL Server 2008R2安装包目录找到文件:sqlsupport_msi,安装此文件之后,再安装SQL Server,便可解决该问题。C:\SQL Server 2008R2\new\SQL Server 2008R2\2052_CH…

Java虚拟机(JVM):虚拟机栈溢出

一、概念 Java虚拟机栈溢出(Java Virtual Machine Stack Overflow)是指在Java程序中,当线程调用的方法层级过深,导致栈空间溢出的情况。 Java虚拟机栈是每个线程私有的,用于存储方法的调用和局部变量的内存空间。每当…

如何学习专业的学术用语01

问题的提出——凭啥人家写的词汇这么专业 做法一 做法二:做一个专业数据库 专门做教育技术类的

Android Ble蓝牙App(六)请求MTU与显示设备信息

前言 在上一篇文章中已经了解了数据操作的方式,而数据交互的字节长度取决于我们手机与蓝牙设备的最大支持长度。 目录 Ble蓝牙App(一)扫描Ble蓝牙App(二)连接与发现服务Ble蓝牙App(三)特性和属…

unity 之 Vector 数据类型

文章目录 Vector 1Vector 2Vector 3Vector 4 Vector 1 在Unity中,Vector1 并不是一个常见的向量类型。 如果您需要表示标量(单个值)或者只需要一维的数据,通常会直接使用浮点数(float)或整数(in…

Linux命令200例:tail用来显示文件的末尾内容(常用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…

【ARM】Day4 点亮LED灯

1. 思维导图 2. 自己编写代码实现三盏灯点亮 .text .global _start _start: /**********LED1,LED2,LED3点灯:PE10,PF10,PE8**************/ RCC_INIT:使能GPIOE组/GPIOF组控制器,通过RXCC_MP_AHB4ENSETR设置第[5:4]位写1,地址:0x50000A28[5:4]1ldr r0,0x50000A28 …