1. 前言
哈喽,大家好,我是jiaoxingk。今天带来的是有关Django项目部署的教程。
当我们完成了一个项目作品之后,我们肯定会迫不及待的就准备上线部署啦,
这篇教程将带你从服务器的配置选购,再通过安装宝塔的形式进行项目部署
请一步一步往下看,中途会出现一些部署过程的问题,后面都有所解决
2. 服务器的选购
在部署之前,服务器是少不了的:
服务器的话,我这里选用的是腾讯云的服务器,腾讯云服务器有新人优惠,100多就能买一台一年的服务器,对于新手来说是非常友好的。
我这里选用的是2H2G,系统为centos7.6的服务器:
查看自己购买的服务器:控制台 -> 服务器
2.1 服务器初始配置
在购买服务器之后,我们需要进行配置的初始化,比如用户名和密码,方便我们后续进行项目部署。
我们开始重置密码,账户默认为root:
重置密码的时候,密码的输入要求会比较高, 需要大写字母和特殊符号。
2.2 登录服务器
现在尝试登录一下服务器:
登陆成功后,出现这种情况,就基本没问题啦:
3. 安装宝塔
我们先来进行宝塔的安装:
宝塔软件:
使用宝塔前: 手工输入命令安装各类软件,操作起来费时费力并且容易出错,而且需要记住很多Linux的命令,非常复杂。
使用宝塔后: 2分钟装好面板,一键管理服务器,鼠标点几下就能替代以前的复杂繁多命令,操作简单,看一眼就会使用。
简单来说,就是方便我们进行服务器部署和管理的一个可视化工具
进入官网:
https://www.bt.cn/new/index.html?btwaf=35568497https://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为%
-
update user set Host='%' where User='root';
-
刷新生效
-
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.settings
daphne -p 8001 zmxapp.asgi:application -b 0.0.0.0
这样你就成功部署好辣!
通过这个地址就能连接通信咯(后面的是我自己的路由地址,websocket连接的开头是ws://就行了)
7.3 通过supervisor进行持久化启动
但是这样就会有一个问题,也就是如果你关闭宝塔了,这个服务就自动关闭了,如果你采用&的形式进行后台运行,也是不行的。
这个时候就需要通过脚本的形式来进行进程守护:
我们进入终端,连续按几次(上键),就会出现这个,我们复制出来:
然后新建一个ws.sh的脚本,放在目录下:
有的地方需要修改,主要是修改成自己的项目文件名:
接着,我们去软件商店搜索:supervisor进行安装
进入设置,添加守护进程:
启动命令为:/bin/bash ./ws.sh
ok,现在就可以了
8. 结尾
本篇文章讲解从选服务器和服务器配置到宝塔部署uwsgi和websocket,让你写的Django项目能够部署在线上并且通过远程访问。