python基础开发篇3——线上环境部署Django项目

文章目录

  • 一、基本了解
  • 二、打包本地项目
  • 三、服务器环境准备
  • 四、安装web服务
    • 4.1 使用uwsgi代理
    • 4.2 使用nginx代理(推荐)
  • 五、部署daphne

一、基本了解

部署思路:

  • Nginx服务接收浏览器的动态请求,再通过uwsgi模块将请求转发给uwsgi服务器,uwsgi服务器通过django处理完后返回给Nginx,Nginx返回用户浏览器展示。
    在这里插入图片描述

使用Nginx代理的优势:

  1. Nginx作为入口可配置安全策略,并且可以为uwsgi提供负载均衡。
  2. Nginx处理静态资源能力强。

二、打包本地项目

1.导出依赖模块列表,只保留本项目需要的模块。

pip3 freeze > requirements.txt##保留模块。
channels==2.4.0
Django==3.0.5
kubernetes==17.17.0
PyMySQL==1.0.2

在这里插入图片描述
2.将项目目录整体压缩打包上传到线上环境,修改数据库地址。

##指定数据库驱动,添加如下内容。
# devops/__init__.py
import pymysql
pymysql.install_as_MySQLdb()##这里是修改成mysql数据库,具体以项目实际情况修改。
# vi devops/settings.py
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'k8s','USER': 'root','PASSWORD': '123456','HOST': '192.168.161.121','PORT': '3306',}
}

3.关闭debug模式和白名单。

# vi devops/settings.py
DEBUG = False   # 调试模式,线上环境不准使用调试模式运行。
ALLOWED_HOSTS = ['*' ]  # 白名单,只允许列表中的ip访问,*代表所有

三、服务器环境准备

1.准备python环境。

yum  -y install zlib-devel libffi-devel mysql-devel openssl-devel gcc gcc-c++ make  python3-devel   pcre-devel
tar zxf Python-3.8.6.tgz 
cd Python-3.8.6/
./configure 
make && make install

2.安装依赖模块列表。

pip3 install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com  --use-feature=2020-resolver

3.准备数据库。

##安装mysql。
docker run -d --name db -p 3306:3306 -v mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 --character-set-server=utf8docker exec -it db bash
root@e2eff2d75dd2:/# mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "create database k8s;"##安装redis,用于websocket存储消息,可选,也可存在内存。
docker run --name redis -d -p 6379:6379 redis:3

4.测试问题,同步数据库。

python3 manage.py migrate

5.启动开发环境,验证依赖模块。

python3 manage.py runserver 0.0.0.0:8080 

四、安装web服务

4.1 使用uwsgi代理

1.uWSGI是一个Web服务器,也是Python的一个模块,直接pip安装即可。

pip3 install uwsgi -i https://mirrors.aliyun.com/pypi/simple

2.创建uwsgi配置文件,路径自定义,这里放在项目目录下。

mkdir  -p /opt/devops/uwsgicat >> /opt/devops/uwsgi/uwsgi.ini  << EOF
[uwsgi]
# 项目目录
chdir = /opt/devops
# 指定sock的文件路径
socket = /opt/devops/uwsgi/uwsgi.sock
# 指定监听端口
http = 0.0.0.0:8080   ##若使用uWSGI作为代理,则开启此项;若使用nginx代理,则关闭此项。
# 静态资源
static-map = /static=/opt/devops/static
# wsgi文件(django入口)
wsgi-file=devops/wsgi.py
# 进程个数
processes = 4 
# 指定项目的应用
# module = devops.wsgi
# 进程pid
pidfile = /opt/devops/uwsgi/uwsgi.pid
# 日志路径
daemonize = /opt/devops/uwsgi/uwsgi.log
EOF

3.设置系统服务。

cat >> /usr/lib/systemd/system/uwsgi.service  <<EOF
[Unit]
Description=HTTP Interface Server[Service]
Type=forking
ExecStart=/usr/local/bin/uwsgi --ini /opt/devops/uwsgi/uwsgi.ini
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always[Install]
WantedBy=multi-user.target
EOF

4.设置开机自启。

systemctl daemon-reload
systemctl start uwsgi
systemctl enable uwsgi

5.确保启用http参数,访问uwsgi服务ip:8080
在这里插入图片描述

4.2 使用nginx代理(推荐)

1.安装。

yum install epel-release –y
yum install nginx –y

2.修改配置文件。

vi /etc/nginx/nginx.conf
......server {listen       80 default_server;server_name  _;location / {include     uwsgi_params;  # 导入模块用于与uwsgi通信uwsgi_pass unix:/opt/devops/uwsgi/uwsgi.sock; }# 静态文件目录location /static {alias /opt/devops/static;}
}

3.启动服务。

systemctl start nginx
systemctl enable nginx##若存在端口占用问题,进入/usr/sbin,使用./nginx命令启动。

4.直接访问Nginx ip。
在这里插入图片描述

五、部署daphne

  • uwsgi和nginx都不能处理websocket请求,需要asgi服务器来处理websocket请求。
  • 官方推荐的asgi服务器是daphne。

1.安装daphne。

pip3 install daphne -i https://mirrors.aliyun.com/pypi/simple

2.在项目配置文件(settings.py)同级配置asgi.py文件内容如下。

import os
import django
from channels.routing import get_default_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'devops.settings')
django.setup()
application = get_default_application()

3.启动daphne服务。

cat >> /usr/lib/systemd/system/daphne.service  << EOF
[Unit]
Description=Django Websocket Server[Service]
WorkingDirectory=/opt/devops
ExecStart=/usr/local/bin/daphne devops.asgi:application -b 127.0.0.1 -p 8000
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl start daphne
systemctl enable daphne

4.Nginx配置文件增加代理。

......server {listen       80 default_server;server_name  _;location / {include     uwsgi_params;  # 导入模块用于与uwsgi通信uwsgi_pass unix:/opt/devops/uwsgi/uwsgi.sock;}location ~ /workload/(terminal|container_log) {    ##容器终端、实时日志功能。proxy_pass http://127.0.0.1:8000;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}# 静态文件目录location /static {alias /opt/devops/static;}
}systemctl restart nginx

5.web查看。
在这里插入图片描述

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

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

相关文章

利用html+css+js实现回到顶部小功能

本章教程&#xff0c;主要是实现一个网站中比较常见的小功能&#xff0c;这个功能就是回到顶部。 功能描述&#xff1a;当浏览器右侧的滚动条&#xff0c;滑动到某个位置的时候&#xff0c;显示回到顶部图标&#xff0c;回到顶部之后&#xff0c;图标作隐藏处理&#xff0c;本文…

c++数据类型

基本数据类型简介 位、字节和内存寻址 最小的内存单位是二进制数字&#xff08;也称为位&#xff09;&#xff0c;它可以保存 0 或 1 的值。你在现代计算机体系结构中&#xff0c;每个位都没有自己唯一的内存地址。这是因为内存地址的数量有限&#xff0c;并且很少需要逐位访…

目标检测笔记(十四): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

文章目录 一、目标检测介绍二、YOLOv8介绍三、源码获取四、环境搭建4.1 环境检测 五、数据集准备六、 模型训练6.1 方式一6.2 方式二6.3 针对其他任务 七、模型验证八、模型测试九、模型转换9.1 转onnx9.1.1 方式一 9.2 转tensorRT9.2.1 trtexec9.2.2 代码转换9.2.3 推理代码 一…

《JDK17新特性和代码案例演示》

《JDK17新特性和代码案例演示》 &#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全…

酷开系统音乐频道,用音乐治愈你!

音乐作为娱乐生活中的一部分&#xff0c;它可以起到调节心情让身体放松的作用&#xff0c;同时还可以舒缓压力&#xff0c;给大脑一个休息的时间。有句话说得好&#xff1a;“耳机是人类的避难所&#xff0c;音乐是心脏的救命丸”。音乐是一种疗愈身心的存在&#xff0c;耳机线…

最新版WPS 2023 加载Zotero方法

安装wps2019vba.exe&#xff0c;获取链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1eeoc6Tmwyzxh3n1MFQTVeA 提取码&#xff1a;6431 –来自百度网盘超级会员V8的分享 打开WPS的工具的加载项 添加文件路径&#xff0c;我的在&#xff1a; C:\Users\Administrat…

Vue3+Ts中使用Jquery

1、安装jquery&#xff1a;npm i jquery --save 2、在vue.config.js文件中添加如下代码&#xff1a; const { defineConfig } require(vue/cli-service) const webpack require(webpack)module.exports defineConfig({configureWebpack: {plugins: [// 配置jQuerynew webp…

【C++ 学习 ㉑】- 详解 map 和 set(上)

目录 一、C STL 关联式容器 二、pair 类模板 三、set 3.1 - set 的基本介绍 3.2 - set 的成员函数 3.1.1 - 构造函数 3.1.2 - 迭代器 3.1.3 - 修改操作 3.1.4 - 其他操作 四、map 4.1 - map 的基本介绍 4.2 - map 的成员函数 4.2.1 - 迭代器 4.2.2 - operator[] …

解决出现的java: 无法访问org.springframework.boot.SpringApplication问题~

错误描述如下所示&#xff1a; 错误原因&#xff1a;版本号匹配不一致导致的&#xff0c;61.0对应jdk17&#xff0c;52.0对应jdk8。 而我本地的java为java8&#xff0c;因此需要降低版本&#xff0c;即可解决该问题 <groupId>org.springframework.boot</groupId>…

EndNote21 | 安装及库的创建

EndNote21 | 安装及库的创建 一、EndNote21安装二、EndNote21库的创建 一、EndNote21安装 软件安装界面&#xff0c;双击“EndNote 21.exe”程序&#xff1b; 图1 安装软件界面点击next&#xff0c;选择30天试用&#xff0c;点击next&#xff1b; 图2 安装过程点击next&…

深入理解Linux网络笔记(一):内核是如何接收网络包的

本文为《深入理解Linux网络》学习笔记&#xff0c;使用的Linux源码版本是3.10&#xff0c;网卡驱动是Intel的igb网卡驱动 Linux源码在线阅读&#xff1a;https://elixir.bootlin.com/linux/v3.10/source 1、内核是如何接收网络包的 1&#xff09;、Linux网络收包总览 在TCP/I…

腾讯mini项目-【指标监控服务重构】2023-08-20

今日已办 PPT制作 答辩流程 概述&#xff1a;对项目背景、架构进行介绍&#xff08;体现我们分组的区别和需求&#xff09;人员&#xff1a;小组成员进行简短的自我介绍和在项目中的定位&#xff0c;分工进展&#xff1a;对项目进展介绍&#xff0c;其中a、b两组的区别和工作…

Azure + React + ASP.NET Core 项目笔记一:项目环境搭建(二)

有意义的标题 pnpm 安装umi4 脚手架搭建打包语句变更Visual Studio调试Azure 设置变更发布 pnpm 安装 参考官网&#xff0c;或者直接使用npm安装 npm install -g pnpmumi4 脚手架搭建 我这里用的umi4&#xff0c;官网已附上 这里需要把clientapp清空&#xff0c;之后 cd Cl…

YUVToRGB(CUDA Conversion)库的学习

目录 前言1. YUVToRGB1.1 Supported Feature1.2 Performance1.2.1 Performance Table1.2.2 How to Benchmark1.2.3 How to Verify the Accuracy 1.3 User Integration1.4 Summary 2. YUVToRGB案例2.1 环境配置2.2 run案例 3. YUVToRGB浅析4. 补充知识4.1 YUV不同格式区别4.2 Lu…

代码随想录算法训练营Day60 | 84. 柱状图中最大的矩形

文章目录 84. 柱状图中最大的矩形首尾加 0双指针 84. 柱状图中最大的矩形 题目链接 | 解题思路 本题和接雨水的题目相互呼应&#xff0c;但是难度略有提升&#xff0c;同样是一道非常棒的题&#xff01; 在接雨水中&#xff0c;需要找到每一列的左侧最大值和右侧最大值&…

Mybatis基础知识(一)

Mybatis基础知识(一) Mybatis基础知识 Mybatis基础知识(一)一、MyBatis特性二、和其它持久化层技术对比三、MyBatis的简单使用1、创建maven工程2、创建pojo对象3、创建MyBatis的核心配置文件①properties②typeAliases③environments:④mappers:引入映射文件 4、创建mapper接口…

fabic如何将绘图原点移到画布中心

情况说明&#xff1a; fabic默认绘图原点为left&#xff1a;0&#xff0c;top&#xff1a;0 后端给我的内容是按照x&#xff0c;y返回的&#xff0c;需要将坐标系移到fabic画布的中心位置&#xff0c;找了下网上合适的砖&#xff0c;想一句命令直接设置&#xff0c;结果没有。…

C++QT day7

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std;template<typename T> class my_vector {int size;//可存储的容量大小int num;//当前存储的元素个数T* data;//存储数据的空间地址public://无参构造…

zabbix 钉钉微信企微告警(动作操作消息内容模板)

一、环境配置 1、配置zabbix服务端 2、配置监控主机&监控项&监控模板 zabbix配置安装_this page is used to test the proper operation of _疯飙的蜗牛的博客-CSDN博客 二、触发器 触发器的本质就是一个条件判断&#xff0c;对于不同的监控数据来说&#xff0c;我…

uniapp H5生成画布,插入网络图片。下载画布

因为网络图片不能直接使用ctx.drawImage(&#xff09;插入。得使用uni.getImageInfo()方法下载后插入。 但是当画布中存在多张网络图片时&#xff0c;必须等待uni.getImageInfo()下载完成后才行。这样得下载套下载。太过于繁琐。所以定义了一个递归下载方法。同时避免下载图片异…