宝塔官网
https://www.bt.cn/new/download.html
枫枫使用的版本:腾讯云专享版 免费版7.6.0
常规流程
宝塔部署
http://www.fengfengzhidao.com/article/50/
命令部署
http://www.fengfengzhidao.com/article/62/
常见问题
上面是常规的流程,在这些流程中,难免会有些问题,可能由于本地开发的环境差异或者宝塔的环境差异
排名不分先后
1. 进不了虚拟环境
这可能是我遇到最多的问题了
我把它归位宝塔版本的问题,例如我创建一个python项目

它给我生成的虚拟环境是这样的

这个虚拟环境中,是没有activate的,也就是说不能用source的命令进入虚拟环境

如果我们要安装模块,就只能这样做了

运行文件也只能这样运行

2. 没有requirements.txt
看看项目根目录下是不是有一个叫requirements.txt的文件
名字必须叫这个
pip freeze > requirements.txt
3. requirements.txt打不开或乱码

大概率是用powershell执行的导出命令

前面有这个PS开头的就是powershell
它导出的文件很多都有编码问题,最好还是换一下
改成cmd或者git中的bash

4. Bad Request (400)
配置中的ALLOWED_HOSTS没有配置
正常来说这里要配置为
ALLOWED_HOSTS = ['*'] # 运行访问的域名
5. 模块没有
这个就是一个很麻烦的问题了
最简单的,就是两边环境不一致,例如本地开发用的是python3.8,而服务器上用的是python3.6
通过看django官网我发现,python3.6只能支持django3.2.15,而django4.0以上得python3.8以上
https://docs.djangoproject.com/zh-hans/4.1/faq/install/#faq-python-version-support

当然,django安装失败之后,后面的模块也不会再安装了,所有你查看模块的时候,就只有几个模块,估计就是这么回事了
如何解决
保证开发环境的一致性,本地用什么版本的python,线上就用什么版本,数据库也是同样的道理
6. admin的静态文件加载不出
一般来说,nginx静态文件配置正确的话,首页的静态文件肯定是可以出来的
如果首页的静态文件没有出来,那就看看服务器上有没有static文件,也可能是打包的时候漏了(概率极低)
但是admin目录下的静态文件不出现就经常发生了
一般来说都是没有执行导出静态文件这个命令
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'feng_static') # 收集的到feng_static目录
# 执行这个命令收集项目中所有的静态文件
python manage.py collectstatic
这个命令执行之后会在项目根目录下生成一个feng_static的目录,这个目录下除了有你的静态文件,还有django-admin的静态文件,把之前的static删掉,然后把feng_static改名为static就OK了
建议这个命令在本地执行,避免后续忘记,如果非要在服务器上执行,记得进虚拟环境
7. 没有表生成
如果导入sql文件之后,没有一张表生成,那多半是sql文件格式有问题
多半是用powershell导出的,换成cmd再次导出再导入试试
还有一个问题就是本地开发的版本过高
8. 部分表没有
如果导入sql文件之后,只有部分表生成,那么很有可能就是开发和线上数据库版本不一致
例如本地mysql版本是8系列,而线上却是5系列
那么很有可能就是在本地的部分表中使用到了5系列没有的字段,例如JSONField
有两种解决方案
- 将线上的mysql版本改成和本地一样的版本,但是如果你有很多应用在运行,那就比较蛋疼了
- 改本地代码,不要用那些高版本才有的字段,代码比较多,改起来也蛋疼,所以啊,保证环境一致是多么的重要
总结
以上就是使用宝塔部署django项目常见问题了,只要这些问题避免了
5分钟部署项目完全不是问题