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

目录

  • 安装相关软件包
    • 安装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.gz
 
cd openssl-1.1.1w
 
./config --prefix=/usr/local/openssl #如果此步骤报错,需要安装perl以及gcc包
 
make && make install
 
mv /usr/bin/openssl /usr/bin/openssl.bak
 
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
 
echo "/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 changed

mysql> 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.mfbz.cn/a/600582.html

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

相关文章

【强训笔记】day13

NO.1 代码实现&#xff1a; #include <iostream>#include<string>using namespace std;int n,k,t; string s;int func() {int ret0;for(int i0;i<n;i){char chs[i];if(chL) ret-1;else{if(i-1>0&&i-2>0&&s[i-1]W&&s[i-2]W) retk…

基于Springboot 的 Excel表格的导入导出

首先 &#xff0c;引入相关依赖EasyPOI <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version></dependency> 编写实体类&#xff1a; Data AllArgs…

Java 框架安全:Struts2 漏洞序列测试.

什么是 Struts2 框架 Struts 2 是一个用于创建企业级 Java 应用程序的开源框架。它是一个 MVC&#xff08;模型-视图-控制器&#xff09;框架&#xff0c;用于开发基于 Java EE&#xff08;Java Platform, Enterprise Edition&#xff09;的 Web 应用程序。Struts 2 主要解决…

ROS机器人实用技术与常见问题解决

问题速查手册&#xff08;时实更新&#xff09;更加全面丰富的问题手册记录 1.机器人使用GPARTED挂载未分配空间 需要在图型界面下操作&#xff0c;建议使用no machine连接 安装gparted磁盘分区工具, sudo apt-get install gparted -y 启动软件 sudo gparted 点击磁盘/内存…

C# OpenCvSharp 图片找茬

C# OpenCvSharp 图片找茬 目录 效果 项目 代码 下载 效果 项目 代码 using OpenCvSharp; using System; using System.Diagnostics; using System.Drawing; using System.Windows.Forms; namespace OpenCvSharp_Demo { public partial class Form1 : Form { …

1688快速获取整店铺列表 采集接口php Python

在电子商务的浪潮中&#xff0c;1688平台作为中国领先的批发交易平台&#xff0c;为广大商家提供了一个展示和销售商品的广阔舞台&#xff1b;然而&#xff0c;要在众多店铺中脱颖而出&#xff0c;快速获取商品列表并进行有效营销是关键。 竞争对手分析 价格比较&#xff1a;…

mysql5.7数据库安装及性能测试

mysql5.7数据库安装及性能测试 记录Centos7.9下安装mysql 5.7并利用benchmark工具简单测试mysql的性能。 测试机&#xff1a;centos7.9 配置&#xff1a;4C8G40G 1. 下安装mysql5.7 安装mysql5.7&#xff1a; # 通过官方镜像源安装$ wget http://dev.mysql.com/get/mysql57-com…

pandas索引

pandas索引 一、索引1.1 建立索引1.2 重置索引1.3 索引类型1.4 索引的属性1.5 索引的操作 一、索引 1.1 建立索引 建立索引可以在数据读取加载中指定索引&#xff1a; import pandas as pd df pd.read_excel(team.xlsx, index_colname) # 将name列设置为索引 df.head()效…

C语言 函数的定义与调用

上文 C语言 函数概述 我们对函数进行了概述 本文 我们来说函数的定义和调用 C语言规定 使用函数之前&#xff0c;首先要对函数进行定义。 根据模块化程序设计思想&#xff0c;C语言的函数定义是互相平行、独立的&#xff0c;即函数定义不能嵌套 C语言函数定义 分为三种 有参函…

Kansformer?变形金刚来自过去的新敌人

​1.前言 多层感知器(MLPs),也被称为全连接前馈神经网络,是当今深度学习模型的基础组成部分。 MLPs在机器学习中扮演着至关重要的角色,因为它们是用于近似非线性函数的默认模型,这得益于通用近似定理所保证的表达能力。然而,MLPs真的是我们能构建的最佳非线性回归器吗?尽管ML…

鸿蒙OpenHarmony南向:【Hi3516标准系统入门(命令行方式)】

Hi3516标准系统入门&#xff08;命令行方式&#xff09; 注意&#xff1a; 从3.2版本起&#xff0c;标准系统不再针对Hi3516DV300进行适配验证&#xff0c;建议您使用RK3568进行标准系统的设备开发。 如您仍然需要使用Hi3516DV300进行标准系统相关开发操作&#xff0c;则可能会…

人工智能编程的创新探索 卧龙与凤雏的畅想

在一间宽敞明亮的办公室内&#xff0c;阳光透过窗户洒在地上&#xff0c;形成一片片光斑。卧龙和凤雏正坐在舒适的办公椅上休息&#xff0c;享受着这片刻的宁静。 卧龙微微皱眉&#xff0c;一只手托着下巴&#xff0c;略显苦恼地说道&#xff1a;“现在的人工智能&#xff0c;也…

vue2人力资源项目5组织架构的增删改查

编辑表单回显 父组件&#xff1a;这里用到了父亲调子组件的方法和同步异步先后方法的处理 //methods里else if (type edit) {this.showDialog true// 显示弹层this.currentNodeId id// 记录id&#xff0c;要用它获取数据// 在子组件中获取数据// 父组件调用子组件的方法来获…

【力扣】203、环形链表 II

142. 环形链表 II 要解决这道题&#xff0c;首先需要对问题进行拆解&#xff1a; 确定链表是否存在环确定环的入口点 如何判断是否存在环呢&#xff1f;这个比较容易想到&#xff0c;使用快慢指针即可判断链表是否存在环。我们定义两个指针&#xff1a; ListNode slow head…

Redis学习4——Redis应用之限流

引言 Redis作为一个内存数据库其读写速度非常快&#xff0c;并且支持原子操作&#xff0c;这使得它非常适合处理频繁的请求&#xff0c;一般情况下&#xff0c;我们会使用Redis作为缓存数据库&#xff0c;但处理做缓存数据库之外&#xff0c;Redis的应用还十分广泛&#xff0c…

远程服务器 docker XRDP 桌面访问 记录

需求描述: 我现在在远程连接 一台服务器&#xff0c;由于需要实验环境需要GUI 和 桌面系统&#xff0c;但是又想在 docker 中运行。因此&#xff0c;我现在首先需要通过 ssh 连接服务器&#xff0c;然后再服务器中连接 docker. REF: https://github.com/danielguerra69/ubuntu-…

代码随想录day19day20打卡

二叉树 1 二叉树的最大深度和最小深度 最大深度已经学习过了&#xff0c;实质就是递归的去判断左右子节点的深度&#xff0c;然后对其进行返回。 附加两个学习的部分&#xff1a; &#xff08;1&#xff09;使用前序遍历的方法求解 int result; void getdepth(TreeNode* nod…

NXP i.MX8系列平台开发讲解 - 3.11 Linux PCIe设备调试(WIFI模块)

专栏文章目录传送门&#xff1a;返回专栏目录 文章目录 目录 1. WIFI 模块简单介绍 2. 设备驱动原理介绍 3. PCIE WIFI驱动实例分析 3.1 查看设备树 3.2 wifi 设备驱动代码分析 3.3 内核配置选项 4. WIFI驱动调试相关 根据前面对PCIe的讲解&#xff0c;对PCIe的整体都有…

Ansible --- playbook 脚本+inventory 主机清单

一 inventory 主机清单 Inventory支持对主机进行分组&#xff0c;每个组内可以定义多个主机&#xff0c;每个主机都可以定义在任何一个或 多个主机组内。 如果是名称类似的主机&#xff0c;可以使用列表的方式标识各个主机。vim /etc/ansible/hosts[webservers]192.168.10.1…

Flutter弹窗链-顺序弹出对话框

效果 前言 弹窗的顺序执行在App中是一个比较常见的应用场景。比如进入App首页&#xff0c;一系列的弹窗就会弹出。如果不做处理就会导致弹窗堆积的全部弹出&#xff0c;严重影响用户体验。 如果多个弹窗中又有判断逻辑&#xff0c;根据点击后需要弹出另一个弹窗&#xff0c;这…
最新文章