Nginx+uwsgi+Django实现本地服务器部署发布

news/2024/5/19 23:26:37

目录

  • 安装相关软件包
    • 安装python3.9
    • Nginx安装
  • 环境准备
  • 部署uwsgi
    • WSGI是什么?
    • 步骤
  • 遇到的问题

安装相关软件包

安装python3.9

安装依赖包

yum install libffi-devel -y
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

安装openssl
这里安装的是1.1.1w的版本

wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz

然后再编译make 安装

tar -zxvf openssl-1.1.1w.tar.gzcd openssl-1.1.1w./config --prefix=/usr/local/openssl #如果此步骤报错,需要安装perl以及gcc包make && make installmv /usr/bin/openssl /usr/bin/openssl.bakln -sf /usr/local/openssl/bin/openssl /usr/bin/opensslecho "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v # 设置生效

查看系统的当前openssl版本

openssl version -a

卸载默认的python3.6

rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps       卸载pyhton3
whereis python3 |xargs rm -frv           删除所有残余文件
或者下载到本地,再上传更快一些。
wget https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz
tar -zxvf Python-3.9.16.tgz
cd Python-3.9.16
./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl 
编译安装
make 
make install
ln -sf /usr/local/python3/bin/python3.9 /usr/bin/python3
python3 
分别检查:
which python
which python3
whereis python 或者whereis python3
也可以检查
同时检查 pip3 和pip
which pip3
which pip
默认没有pip命令,所以还要建立连接一下,yum install pip就有
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
ln -s /usr/local/python3/bin/pip /usr/bin/pip

来源这个小伙伴 linux安装python3.9

Nginx安装

Nginx安装可以看我之前写的博客 Nginx的安装启动和停止

环境准备

1、导出python安装包

pip freeze > requirements.txt

2、关闭生产环境,在settings文件夹设置(后面uwsgi部署的时候关闭)

DEBUG = False
ALLOWED_HOSTS = ['*'] # 设置访问白名单

3、收集静态文件

# settings.py文件配置
STATIC_ROOT = os.path.join(BASE_DIR,"bosszhipin_static")
# 收集静态文件,但媒体文件没有被收集
(myvenv) PS D:\PycharmProjects\code\BossZhiPin> python manage.py collectstatic
2757 static files copied to 'D:\PycharmProjects\code\BossZhiPin\bosszhipin_static'.

4.服务器拉取git项目代码

[root@server bosszhipin]# git clone XX.git

5.创建虚拟环境

# 安装虚拟环境
pip3 install virtualenv
或
pip3 install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple# 链接一下虚拟环境,不然找不到路径
rm /usr/local/bin/virtualenv  
ln -s /usr/local/python3/bin/virtualenv /usr/local/bin/virtualenv# 创建虚拟环境
[root@server bosszhipin]# virtualenv myvenv 或python3 -m venv myenv# 激活虚拟环境
[root@server bosszhipin]# source myvenv/bin/activate
(myvenv) [root@server bosszhipin]# # 退出虚拟环境
(my_venv) [root@server bosszhipin]# deactivate

6.导入三方模块,使用aliyun镜像源加载

(myvenv) [root@server bosszhipin]# pip3 install -i https://mirrors.aliyun.com/pypi/simple -r requirements.txt 
# 安装mysqllient需要安装mysql开发库
yum install mysql-devel

7.数据库导入

禁用mysql8.0

[root@server BossZhiPin]# yum-config-manager --disable mysql80-community

启用mysal5.7

[root@server BossZhiPin]# yum-config-manager --enable mysql57-community
mysql> create database bosszhipin;
Query OK, 1 row affected (0.01 sec)# 关闭InnoDB严格模式
mysql> set global innodb_strict_mode  = 0;
Query OK, 0 rows affected (0.00 sec)mysql> use bosszhipin;
Database changedmysql> source bosszhipin.sql;
Query OK, 0 rows affected (0.00 sec)

8、跳过密码检查

systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

9、启动就可以访问成功

(myvenv) [root@server bosszhipin]# python manage.py runserver 192.168.40.150:9995

部署uwsgi

WSGI是什么?

        WSGI(Web Server Gateway Interface)服务器是一种 Web 服务器,它实现了 WSGI 规范,允许 Python Web 应用程序与服务器进行通信。WSGI 规范定义了一种标准的接口,用于连接 Python Web 应用程序和 Web 服务器之间的通信,使得不同的 Web 框架和 Web 服务器能够互相配合运行

        WSGI 服务器负责接收来自客户端的 HTTP 请求,并将这些请求传递给绑定的 Python Web 应用程序进行处理,然后将处理结果返回给客户端。

步骤

1、安装 uWSGI

(myvenv) [root@server bosszhipin]# pip3 install uwsgi

2、创建 uWSGI 配置文件
        在 Django 项目目录下,创建一个 uWSGI 配置文件。需要指定 Django 应用程序的位置、监听的端口、工作进程数量等信息。

(myvenv) [root@server bosszhipin]# cat uwsgi.ini 
[uwsgi]
# 开启主进程
master = true
# 指定工作进程数
processes = 2
# 指定线程数
threads = 2
# 指定项目目录
dir = /root/tools/boss/bosszhipin
# wsgi.py文件位置
wsgi-file = %(dir)/BossZhiPin/wsgi.py
# socket 任意IP地址
socket = 0.0.0.0:8000
# 测试访问
#http = 0:9995
# 日志
log = %(dir)/logs/error.log
chmod-socket = 660
# 退出后清理程序
vaccum = true
max-requests = 1000
# uwsgi的运行状态
status = %(dir)/uwsgi.status
# uwsgi的进程
pidfile = %(dir)/uwsgi.pid                        

3、启动 uWSGI 服务器
使用创建的 uWSGI 配置文件来启动 uWSGI 服务器。

(myvenv) [root@server bosszhipin]# uwsgi --ini uwsgi.ini 
停止
uwsgi --stop uwsgi.pid

4、配置 Web 服务器
        配置一个 Web 服务器来充当反向代理,将请求从 Web 服务器传递到 uWSGI 服务器,以Nginx为例。

nginx中配置一个server块

# 需要以root用户启用,不然收集的静态文件访问不了server {listen       80;server_name  192.168.40.150;location / {uwsgi_pass 127.0.0.1:8000; # uwsgi运行端口一样include uwsgi_params;}# 静态文件路径location /static/ {alias /root/tools/boss/bosszhipin/bosszhipin_static/; # 收集静态文件的位置}# 媒体资源路径   该路径的资源是不会收集的,需要映射到资源的真实路径location /bossApp/media/ {alias /root/tools/boss/bosszhipin/media/;}}

windows配置域名解析(C:\Windows\System32\drivers\etc)

192.168.40.150 bosszhipin.dataanalysis.com

可以访问,部署成功

遇到的问题

1、sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, “Access denied for user ‘root’@‘localhost’ (using password: YES)”) (Background on this error at: https://sqlalche.me/e/20/e3q8)

        这个问题提示数据库密码错误,第一台本地服务器的MySQL版本是8,按道理我可以直接用mysql -uroot -p密码直接登录,应该是没有问题的。看了很多网上很多答案是说密码、权限、django配置其它的,这些操作也都做了,但还是没有解决。

        于是换一台安装MySQL5.7版本的服务器,因为我的django配置的数据库也是5.7。但还是出现同样的问题,可能大概率是配置的问题,只能用下面这种方法先执行一下,跳过数据库检查,可以连接成功。

systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

2、配置Nginx和UWSGI时要注意细节,要保证它们通信的端口一致,服务是否启动

3、访问Nginx出现403Forbidden错误

        这种情况就是权限不够导致的,解决方法为将配置文件的用户更改为root,然后重启nginx即可解决:

user root
nginx -s reload

4、保证本地的python环境和服务器的python环境一致,也避免踩坑


http://www.mrgr.cn/p/61800610

相关文章

页面嵌套,界面套娃,除了用iframe,还有其他方式吗?

​UIOTOS可以了解下,uiotos.net,通过连线来代替脚本逻辑开发,复杂的交互界面,通过页面嵌套轻松解决,是个很新颖的思路,前端零代码! 蓝图连线尤其是独创的页面嵌套和属性继承技术,好家伙相当于把vue的组件化、增量式面向对象开发,直接搬到前端拖拽工具上,无代码编程了…

SwiftUI ZStack、HStack、VStack 布局

代码 // // ContentView.swift // SwiftUIStacks // // Created by CHEN Hao on 2024/5/6. //import SwiftUIstruct ContentView: View {var body: some View {VStack(spacing:15) {HeaderView()HStack(spacing: 15) {PricingView(title: "Basic", price: "$…

特征提取(Feature Extraction)常见统计特征笔记(三)

统计特征是描述数据集中值的一组量,通常用于了解数据的分布、集中趋势和变异程度。常见的统计特征包括均值、中位数、众数、标准差、方差等。下面会详细解释每个统计特征,并给出相应的Python代码。 1、均值(Mean):所有…

[智能网联汽车] 解读理想汽车的整车EEA电子电气架构 | 2020 [转]

0 序本文首发于华夏EV网、2020年。时至今日,这篇文章虽已过去了2年,今天的我们,对了解当前整车电子电气架构(EEA)的技术演进仍有一定的参考意义。 关键词:整车电子电气架构(EEA) 分布式架构 域集中式架构 中央集中式架构中央计算平台(CCU)导读 2020年,当我们谈论整车电子电…

DeepFilterNet复现

大概框架 有两路特征,一个ERB特征,另外一个是STFT之后的复数特征。 整体时延最低可达5ms。 这里提到的DeepFilter,其实就是说用神经网络对TF谱进行操作。因为这篇文章比较早,所以叫这么一个名字。ERB特征 ERB(Equivalent Rectangular Bandwidth)是一个与人耳听觉敏感性密…

geojson文件规格

geojson文件示例, {"type": "FeatureCollection","features": [{"type": "Feature","geometry": {"type": "Point","coordinates": [102.0, 0.5]},"properties&q…

【负载均衡在线OJ项目日记】项目简介

目录 前言 什么是负载均衡 所用的技术和开发环境 所用技术 开发环境 项目的宏观结构 leetcode 结构 结构 编写思路 前言 从C语言的文章到现在Linux网络部分,我已经涉猎了很多知识;终于在今天我要开始搞项目了,通过项目我也可以开始…

使用 docker-compose 部署 nexus

本篇博客主要介绍如何通过 docker-compose 快速搭建 nexus 服务,毕竟目前采用容器化部署是一件更加快速轻松的方案。 之前的博客已经介绍过 nexus 的搭建,以及为 IDEA 和 Visual Studio 提供代理服务,这里就不详细介绍了,提供出之前博客的链接。 nexus 在 windows 上的搭建…

简述Linux系统内核的作用

本文简述了Linux内核的5个子系统:进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)V 1.0 2024年5月7日 发布于博客园目录Linux内核的组成部分进程调度(SCHED)内存管理(MM)虚拟文件系统(VFS)网络接口(NET)进程间通信(IPC…

vue 实现项目进度甘特图

项目需求: 实现以1天、7天、30天为周期(周期根据筛选条件选择),展示每个项目不同里程碑任务进度。 项目在Vue-Gantt-chart: 使用Vue做数据控制的Gantt图表基础上进行了改造。 有需要的小伙伴也可以直接引入插件,自己…

Linux下GraspNet复现流程

Linux,Ubuntu中GraspNet复现流程 文章目录 Linux,Ubuntu中GraspNet复现流程1.安装cuda和cudnn2.安装pytorch3.编译graspnetAPIReference 🚀非常重要的环境配置🚀 ubuntu 20.04cuda 11.0.1cudnn v8.9.7python 3.8.19pytorch 1.7.0…

Spring SpringMVC概述

SpringMVC框架主要用于跟客户端交互,包括请求和响应。前端控制器的作用就是把一些功能封装,我们在开发时就不用再写一些繁杂的代码了 SpringMVC使用DispatcherServlet作为前端控制器,DispatcherServlet本质其实是一个Servlet原先我们在访问时,客户端发起请求直接找Servlet。…

做题速度太慢了,面不上

没办法,之前练了一个月的sql。两个月不写,现在差不多忘干净了。工作空窗期,或者休息期不能太久,不然学再多的内容都可能会忘完的。 sql题,腾讯四道sql题,限时45分钟完成。我只做了一道,还没做完…

Scanner中next()、nextInt()、nextLine()、hasNext()、hasNextInt()的使用方法及注意事项

目录 1、next()、nextInt()、nextLine()的使用方法及区分 2、循环时如何使用hasNext方法 3、用hasNextInt()作为判断下一个输入是否为数字需要配合next()方法使用 1、next()、nextInt()、nextLine()的使用方法及区分 三者简单定义 next():此方法遇见第一个有效字符…

物流行业新篇章:数字孪生系统助力仓储物流园区升级

在数字化浪潮的推动下,物流行业正迎来前所未有的变革,现代化仓储物流园区数字孪生系统正以其独特的魅力引领着物流行业迈向更加智能、高效的新时代。在数字化浪潮的推动下,物流行业正迎来前所未有的变革,现代化仓储物流园区数字孪生系统正以其独特的魅力引领着物流行业迈向…

IO一些基础必备知识点

IO编程 IO一些必备知识点 目录IO编程IO一些必备知识点①了解FAT32以及NTFS区别②了解MMU如何将虚拟地址与物理地址转换③请简述Linux内核的作用Linux内核是链接硬件和上层应用的桥梁,通过这个桥梁我们可以直接在上层完成对硬件的操作④Linux系统目录和文件夹的区别⑤库函数与系…

uniapp-ios支付

uniapp安卓包中的微信,支付宝逻辑放在iOS测试包中也能使用. 但询问iOS开发者后得知,有支付相关功能的app要上架苹果,必须先有苹果支付,不然苹果审核不给过.甚至没有支付逻辑,但打包时有支付相关的SDK也不行,苹果会认为你偷偷做了支付逻辑,想要绕开他. 一. 去苹果开发者后台把…

5.7总结

今天完成了五一极限测试最后一部分------将政策的分类用树状结构展示出来,执行对应的查询(其本质就是在条件查询的基础上,通过该组件按钮,多加了一个条件进行查询,其中还需要在分页功能上有所体现) 代码量:300 遇到的困难: ①不懂如何获取树形控件对应的key值(也就是在…

上传文件至linux服务器失败

目录 前言异常排查使用df -h命令查看磁盘使用情况使用du -h --max-depth1命令查找占用空间最大的文件夹 原因解决补充:删除文件后,磁盘空间无法得到释放 前言 使用XFTP工具上传文件至CentOS服务器失败 异常 排查 使用df -h命令查看磁盘使用情况 发现磁盘…

Tomcat简介

也就是说,将来我们在服务器端要安装一个Web服务器的软件,然后我们把我们自己写的Web项目放到服务器软件里边。服务器软件一启动起来,我们写的Web页面就可以被浏览器访问到