【项目部署】手把手带你从零部署项目:宝塔 + uwsgi + Django + 腾讯云 + Websocket

1. 前言

哈喽,大家好,我是jiaoxingk。今天带来的是有关Django项目部署的教程。

当我们完成了一个项目作品之后,我们肯定会迫不及待的就准备上线部署啦,

这篇教程将带你从服务器的配置选购,再通过安装宝塔的形式进行项目部署

请一步一步往下看,中途会出现一些部署过程的问题,后面都有所解决

2. 服务器的选购

在部署之前,服务器是少不了的:

服务器的话,我这里选用的是腾讯云的服务器,腾讯云服务器有新人优惠,100多就能买一台一年的服务器,对于新手来说是非常友好的。

我这里选用的是2H2G,系统为centos7.6的服务器:

查看自己购买的服务器:控制台 ->  服务器

 2.1 服务器初始配置

在购买服务器之后,我们需要进行配置的初始化,比如用户名和密码,方便我们后续进行项目部署。

我们开始重置密码,账户默认为root

 

重置密码的时候,密码的输入要求会比较高, 需要大写字母特殊符号

2.2 登录服务器

现在尝试登录一下服务器:

登陆成功后,出现这种情况,就基本没问题啦:

3. 安装宝塔

我们先来进行宝塔的安装:

宝塔软件:

使用宝塔前: 手工输入命令安装各类软件,操作起来费时费力并且容易出错,而且需要记住很多Linux的命令,非常复杂。

使用宝塔后: 2分钟装好面板,一键管理服务器,鼠标点几下就能替代以前的复杂繁多命令,操作简单,看一眼就会使用。

简单来说,就是方便我们进行服务器部署和管理的一个可视化工具

进入官网:

https://www.bt.cn/new/index.html?btwaf=35568497icon-default.png?t=N7T8https://www.bt.cn/new/index.html?btwaf=35568497

点击下载与安装:

我们这里是linux的系统,所以采用linux面板:

如果不知道公网IP在哪儿的话,可以在腾讯云中查看这里:

点击继续安装,出现这个,这里我只需要这些东西:

ok,现在我们就只需要等待完成啦:

等弹出这个的时候,就代表已经完成了,但是不要着急马上叉掉,先找个地方记下面板信息:

先别急,你肯定迫不及待的想去访问了,结果发现:

这是怎么回事呢,其实是因为宝塔要通过8888端口访问服务器,但是此时服务器默认没有开放8888端口,所以我们需要进入服务器,开放安全组

3.1 端口开放

进入腾讯云,点击防火墙:

ok了,现在我们再去访问看看:

我们输入刚刚的账户密码:

现在我们就算成功安装啦!

4. Python环境安装

我们进入网站部署,开始下载Python环境:

我这里采用的是3.8的版本

等待安装完成。

 

这个时候,就算安装完成了。

5. 拉项目

因为我的项目是放在git上面的,所以这个时候,就通过git的形式拉项目代码:

我们先进入wwwroot文件夹里面,这个地方是专门放项目文件的,然后我们开始拉取项目文件:

git clone 你的项目仓库地址

点击文件,查看项目,这是我的项目文件:

6. 部署项目

开始添加项目:

添加项目:

点击确定后,可能不会弹东西出来,但是我们需要等一下,你点其他地方会出现:

等过段时间之后,我们打开终端,重新安装一次依赖包,确保依赖包都是被安装上的:

如果没有报错的话,那么基本就没啥问题:

安装好之后,我们需要进行数据库配置和迁移:

6.1 数据库安装

安装数据库:

安装好之后,刷新一下

然后重置一下密码:

添加数据库:

这里的用户名貌似并没有用,就随便写了(可能我没用上)

 然后我们回到项目文件:settings.py里面进行修改数据库配置:

(因为我们是通过git拉的代码,所以我这里就在本地改完配置,再上传到git ,所以还需要再服务器里面git pull 一次)

接着,我们重启项目 , 现在可以进行数据库迁移了:

但是在进行数据库迁移的时候,报错啦,大概意思就是连接不上,这是因为数据库默认端口3306并没有在服务器上面开放,包括之前项目启动的8000端口也没有开放。

这个时候,我们要去开放端口了。

但是别忘了,宝塔也要开放哦~,因为宝塔又再一次做了安全组的。

开放之后,发现还是不行,这是因为我在settings.py里面的host是写的服务器的公网IP,相当于远程连接了,但是数据库默认是不允许外部IP访问的,所以我们需要开放数据库远程连接

1 .使用mysql数据库表:

use mysql;

2 . 查看表信息

select Host,User from user;

3 . 修改root的Host为%

  1. update user set Host='%' where User='root';

  2. 刷新生效

  3. flush privileges;

ok,我们现在再试一次:

出现ok,就没问题啦!

6.2 补充

如果你的项目需要redis或者其他服务的话,就需要去软件商城自行下载,记得开放安全组哦

7. websocket部署

有时候,我们需要使用websocket来进行业务开发,但是你会发现,如果只是单纯按照以上的方式去部署的话,是根本访问不了websocket的,所以这个时候,就需要采用另外的形式来进行websocket的部署。

7.1 异步配置文件修改

我采用的是django3.2 + channels3.0.5,这两个版本一般没问题,Django4.2会出现一些不兼容

INSTALLED_APPS = ["daphne",'channels',  # channels# "django.contrib.admin",# "django.contrib.auth",# "django.contrib.contenttypes","django.contrib.sessions",# "django.contrib.messages","django.contrib.staticfiles",'api.apps.ApiConfig','rest_framework',]
ASGI_APPLICATION = 'zmxapp.asgi.application'

这是asgi.py文件配置:主要是处理异步请求的

"""
ASGI config for zmxapp project.It exposes the ASGI callable as a module-level variable named ``application``.For more information on this file, see
https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/
"""import os
import django
django.setup()from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from zmxapp import routing# zmxapp这个地方需要替换成你自己的项目文件名,也就是settings.py的上级目录
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'zmxapp.settings')
# application = get_asgi_application()application = ProtocolTypeRouter({"http": get_asgi_application(),"websocket": URLRouter(routing.urlpatterns)
})

7.2 启动异步服务

开启8001端口用于监听Websocket的访问,zmxapp换成你的项目名(别忘了给8001端口开放哟!!!)

这里的zmxapp是指;

export DJANGO_SETTINGS_MODULE=zmxapp.settingsdaphne -p 8001 zmxapp.asgi:application -b 0.0.0.0

 这样你就成功部署好辣!

通过这个地址就能连接通信咯(后面的是我自己的路由地址websocket连接的开头是ws://就行了)

 7.3 通过supervisor进行持久化启动

但是这样就会有一个问题,也就是如果你关闭宝塔了,这个服务就自动关闭了,如果你采用&的形式进行后台运行,也是不行的。

这个时候就需要通过脚本的形式来进行进程守护:

我们进入终端,连续按几次(上键),就会出现这个,我们复制出来:

然后新建一个ws.sh的脚本,放在目录下:

有的地方需要修改,主要是修改成自己的项目文件名:

 接着,我们去软件商店搜索:supervisor进行安装

进入设置,添加守护进程:

启动命令为:/bin/bash ./ws.sh

 

ok,现在就可以了

8. 结尾

本篇文章讲解从选服务器和服务器配置到宝塔部署uwsgiwebsocket,让你写的Django项目能够部署在线上并且通过远程访问。

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

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

相关文章

QT程序通过GPIB-USB-HS转接线控制数字万用表

1、硬件准备 1.1、数字万用表 型号 :Agilent 34401A 前面图示: 后面图示:有GPIB接口 1.2、GPIB-USB-HS转接线 2、GPIB协议基础了解 2.1、引脚 8条数据线:DIO1 ~ DIO8 5条管理线:IFC、ATN、REN、EOI、SRQ 3条交握线…

拆单算法交易(Algorithmic Trading)

TWAP TWAP交易时间加权平均价格Time Weighted Average Price 模型,是把一个母单的数量平均地分配到一个交易时段上。该模型将交易时间进行均匀分割,并在每个分割节点上将拆分的订单进行提交。例如,可以将某个交易日的交易时间平均分为N 段&am…

【云原生】Pod 的生命周期(一)

【云原生】Pod 的生命周期(一)【云原生】Pod 的生命周期(二) Pod 的生命周期(一) 1.Pod 生命期2.Pod 阶段3.容器状态3.1 Waiting (等待)3.2 Running(运行中)3…

鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据

基本概念 队列又称消息队列,是一种常用于任务间通信的数据结构。队列接收来自任务或中断的不固定长度消息,并根据不同的接口确定传递的消息是否存放在队列空间中。 任务能够从队列里面读取消息,当队列中的消息为空时,挂起读取任务…

Discourse 清理存储空间的方法

Discourse 使用一段时间以后会发现硬盘空间占用非常多。 主要是因为 Docker Image 的问题,如果升级次数越多,空间占用越多。 运行下面的命令: ./launcher cleanup 能够帮助你清理 Discourse 占用的空间。 如下面代码所示: […

牛客热题:单链表排序

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:单链表排序题目链接方法一&…

Windows php 安装 Memcached扩展、php缺失 Memcached扩展、Class ‘Memcached‘ not found

在Windows系统下如何安装 php Memcached 扩展 下载dll文件 pecl地址:https://pecl.php.net/package/memcached 根据版本进行选择 : 解压下载的文件后得到了这么样的文件结构: 配置 移动dll文件到相应文件位置 重点: libme…

jdk环境安装

jdk安装 创建软件安装的目录 mkdir -p /bigdata/{soft,server} /bigdata/soft 安装文件的存放目录 /bigdata/server 软件安装的目录 把安装的软件上传到/bigdata/soft 目录 解压到指定目录 -C :指定解压到指定目录 tar -zxvf /bigdata/soft/jdk-8u241-linux-x64.tar.gz -C /b…

【Osek网络管理测试】[TG3_TC3]tSleepRequestMin_L

🙋‍♂️ 【Osek网络管理测试】系列💁‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件:VN1630 软件:CANoe 2.测试目的 验证DUT进入NMLimpHome状态后请求睡眠的最短时间是否正确…

Android --- 消息机制与异步任务

在Android中,只有在UIThread(主线程)中才能直接更新界面, 在Android中,长时间的工作联网都需要在workThread(分线程)中执行 在分线程中获取服务器数据后,需要立即到主线程中去更新UI来显示数据, 所以,如…

NI CRIO 9045 LABVIEW2020

1.labview工程如果要访问CRIO,需要设置以下,否则在项目中连接失败。 2.项目中如果要传文件,需要安装WebDEV 3.使用WebDAV将文件传输到实时(RT)目标 https://knowledge.ni.com/KnowledgeArticleDetails?idkA03q000000YGytCAG&lzh-CN

Mars3d实现用一个button控制一个map.control的显示与隐藏

原生js,想做一个button,控制比如compass的显示与隐藏 点一下显示 再次单击的时候就隐藏掉 写了一个function控制显示隐藏 function addCompass(){ if(compass.showtrue) { compass.showfalse; } else{ compass.showtrue; } } 功能示例(Vue版) | Mars3D三维可视化平台 | 火星…

深入了解C/C++的内存区域划分

🔥个人主页:北辰水墨 🔥专栏:C学习仓 本节我们来讲解C/C的内存区域划分,文末会附加一道题目来检验成果(有参考答案) 一、大体有哪些区域?分别存放什么变量开辟的空间? …

【微服务】网关(详细知识以及登录验证)

微服务网关 网关网关路由快速入门路由属性 路由断言网关登录校验自定义过滤器实现登录校验网关传递用户OpenFeign传递用户 网关 网络的关口,负责请求的路由,转发,身份校验 当我们把一个单体项目分成多个微服务并部署在多台服务器中&#xff…

Redis__数据类型

文章目录 😊 作者:Lion J 💖 主页: https://blog.csdn.net/weixin_69252724 🎉 主题:Redis__数据类型 ⏱️ 创作时间:2024年04月28日 ———————————————— 这里写目录标题 文…

大模型争霸的下一站:不仅是超越GPT-4,更是寻求模型之间的平衡应用

文 | 智能相对论 作者 | 沈浪 知名科学杂志《Nature》发表了一篇关于大模型规模参数大小争议的文章《In Al, is bigger always better?》——AI大模型,越大越好吗?随着大模型应用走向实践,这一问题不可避免地成为了当前AI行业发展的焦点与…

迅雷永久破解

链接:https://pan.baidu.com/s/1ZGb1ljTPPG3NFsI8ghhWbA?pwdok7s 下载后解压 以管理员身份运行绿化.bat,会自动生成快捷方式,如果没有可以在program中运行Thunder.exe

【python】条件语句与循环语句

目录 一.条件语句 1.定义 2.条件语句格式 (1)if (2)if-else (3)elif功能 (4)if嵌套使用 3.猜拳游戏 二.循环语句 1. while循环 2.while嵌套 3.for循环 4.break和conti…

AI图书推荐:AI在语言学习教育领域的应用和挑战

这本书《AI在语言学习教育领域的应用和挑战》(AI in Language Teaching, Learning, and Assessment)由Fang Pan编辑,出版于IGI Global,主要探讨了人工智能(AI)在语言教育领域的应用、挑战以及潜在的益处。 …

JS基础:JS语法规范详解(最全!)

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端基础路线”,可获取完整web基础…