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.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.mzph.cn/bicheng/7632.shtml

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

相关文章

前端传递list(数组)类型参数,后端接收失败

一顿报错,我之前遇到的list都是Long类型 貌似用GET也是可以的,但是很奇怪一直报错 就是不可以 后来去百度 查询到可以用两种方法解决这个问题 1、拆开 传 以GET方式,后端GetMappingRequestParam接收。 2、以Post方式传,后端创建dto PostMappingReques…

React 之 Effect与事件(event)(八)

Effect(useEffect Hook) 在React中,Effect(或者更具体地说,useEffect Hook)是一个特殊的函数,它允许你在函数组件中执行副作用操作。这些副作用操作可能包括数据获取、手动更改DOM、订阅或取消订…

Open AI API 参数解释

在使用 OpenAI 的 API 发送请求时,temperature、top_p 和 stream 这几个参数具有特定的含义和作用: temperature: 用途:这个参数用于控制模型输出的随机性或多样性。temperature 的值可以从 0 到 1 范围内调整。行为:当…

55. 【Android教程】位图:Bitmap

在上一节学习 Drawable 图像资源的时候我们在很多地方用到了 bitmap,bitmap 其实就是真实图片在 Android 中最直接的表现形式,这一节我们来仔细学习一下 Bitmap 的使用。 1. 什么是 Bitmap Bitmap 在 Android 中对应一张图片文件,它是一个二…

普通人可以做什么兼职副业?推荐7 种卖情怀的生意,小众高利润

一瓶茅台,尽管成本仅为70元,但其建议零售价却高达1499元,而在市场上的流通价格更是突破了2600元大关。同样的一款手提包,在网络上仅售几百元,但一旦贴上了LV的标志,其售价便瞬间飙升至一万多元。这究竟是为…

【超好用的前端表单辅助功能】

前端表单辅助功能 1. 根据模块自动生成目录锚点定位2. 描点定位动态组件3. 隔离组件,组件内部实现校验逻辑,交给提交按钮统一处理4. 选择不同的类型需要重组不同的模块展示,并整合数据传给后端 最近做了一个复杂的表单,涉及到的技…

AI实景自动无人直播软件:引领直播行业智能化革命;提升直播效果,无人直播软件助力智能讲解

随着科技的快速发展,AI实景自动无人直播软件正在引领直播行业迈向智能化革命。它通过智能讲解、一键开播和智能回复等功能,为商家提供了更高效、便捷的直播体验。此外,软件还支持手机拍摄真实场景或搭建虚拟场景,使直播画面更好看…

43.WEB渗透测试-信息收集-域名、指纹收集(5)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:42.WEB渗透测试-信息收集-域名、指纹收集(4) web-架构资产收集&a…

蓝桥杯备赛(填空题)【Python B组】

一、弹珠堆放 问题描述 小蓝有 20230610 颗磁力弹珠,他对金字塔形状尤其感兴趣,如下图所示: (图是盗来的啊,侵权请联系删除) 问题分析 找规律,第一层1个,第二层3个,第…

UE5 audio capture 回声问题 ||在安卓上有爆鸣声

参考视频 0.基本步骤 【UE4_蓝图】录制麦克风声音/系统声音并输出保存WAV文件_ue4录音-CSDN博客 1.步骤 1.创建Sound Submix A 2. 右键新建Sound Submix B 3.把B的两个参数调为-96 4.audio capture的Base Submix,把前面提到的A赋值进去 5.开始录制输出和完成录制…

PXE远程部署CentOS系统

文章目录 在局域网内搭建PXE服务器PXE 启动组件PXE的优点实验一、搭建PXE服务器,实现远程部署CentOS系统环境准备server关闭防火墙安装组件准备 Linux 内核、初始化镜像文件及PXE引导文件配置启用TFTP 服务配置启动DHCP服务准备CentOS 7 安装源配置启动菜单文件 Cli…

突然断电,瀚高数据库启动失败

服务器临时断电后,数据库启动不起来 ps -ef|grep postgres 进到数据库的data目录下看下ls 看下 查看临时文件: ls -la /tmp 把这两个5866的文件改个名字张老师 加个bak就行 改完了pg_ctl start起一下

暗区突围联机不了联机失败无法联机的极速解决方法

暗区突围联机不了/联机失败/无法联机的极速解决方法 《暗区突围》是由腾讯魔方工作室群开发的第一人称射击类手游,于2021年8月17日进行先锋测试,并在2022年7月13日正式公测。《暗区突围》提供了双模式玩法,包括战术行动和伪装潜入&#…

猫咪没精神不吃饭?这招主食冻干喂养教你让猫咪恢复食欲

猫突然不吃东西没精神是生病了吗?当猫咪不吃东西、精神不振时,可能的原因有健康问题、环境因素或食物原因。首先应进行身体检查,观察是否有其他并发症,如无则可排除健康问题。还要给猫咪提供一个舒适的环境,多给它们一…

Cloudera简介和安装部署

ChatGPT Cloudera 是一个基于 Apache Hadoop 的数据管理和分析平台。它是由 Hadoop 的几位创始人及早期贡献者于 2008 年创立的公司,并随着公司的不断发展,Cloudera 开始提供企业级的解决方案,帮助企业更好地利用 Hadoop 生态系统进行大数据…

Qt QLCDNumber详解

1.简介 它提供了一个显示数字的显示屏控件,效果类似于现实世界中的液晶显示屏。它可以显示任何大小的数字。它可以显示十进制、十六进制、八进制或二进制数字。可以用setMode更改基数,用setSmallDecimalPoint更改小数点。 2.常用方法 以下是一些常用的…

基于点灯Blinker的ESP8266远程网络遥控LED

本文介绍基于ESP8266模块实现的远程点灯操作,手机侧APP选用的是点灯-Blinker,完整资料及软件见文末链接 一、ESP8266模块简介 ESP8266是智能家居等物联网场景下常用的数传模块,具有强大的功能,通过串口转WIFI的方式可实现远距离…

ElasticSearch知识点汇总

1、ES中的​​​​​​​倒排索引是什么。 倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典映射表即为倒排索引 2、ES是如何实现master选举的。 选举过程主要包括以下几个步骤: 心跳检测: 每个节点…

wordpress免费主题推荐

当你开始使用WordPress建立你的网站时,选择一个适合你需求的主题是至关重要的一步。幸运的是,WordPress社区提供了大量的免费主题供你选择。这些主题设计精美,功能丰富,适用于各种类型的网站,从个人博客到企业网站&…

避雷!5.3分,新增1区被标记On Hold,共12本SCI/SSCI慎投!

本周投稿推荐 SSCI • 2/4区经管类,2.5-3.0(录用率99%) SCIE(CCF推荐) • 计算机类,2.0-3.0(最快18天录用) SCIE(CCF-C类) • IEEE旗下,1/2…