一、服务器安装宝塔面板并进行基础设置
宝塔面板有很多实用的功能,具体可以去宝塔官网查看。我们的服务器使用的是 centos8 的系统,所以安装 linux 免费版的宝塔。
安装方法很简单,远程到服务器,输入命令进行安装即可
1 |
|
中途会有一次确认,按照操作提示输入 y 即可。
安装成功后,控制台会显示出宝塔面板的登录地址、用户名、密码。如下图所示,将内容记录好。
进行登录后,会提示推荐安装套件,直接关闭即可。然后点击左侧菜单栏中的面板设置,调整面板的 端口、安全入口、用户名及密码。修改完成后,记得点击最下方的保存。
注:安全入口:是拼接在登录地址之后的。之前系统会自动设置一个随机字符,更改安全入口后,将登录地址中的随机字符换成你更改后的内容。例如:安装后的登录地址为: http://10.10.10.10:8888/f5165b61 修改安全入口的内容为: /btmb 以后宝塔面板的登录地址变为:http://10.10.10.10:8888/btmb
二、安装环境包
宝塔的基础设置搞完了,接下来我们安装环境部署的一些必要软件程序:python、nginx、mysql(如果用到了就安装)
注意:这里我们用的是Django3的版本,从Django2.0起就不支持mysql5.5了,所以这里要安装高版本的mysql,推荐mysql5.6
在宝塔左侧菜单栏 点击 软件商店,第一页我们就可以看到nginx,点击安装选择急速安装即可。
与此同时,我们选择 宝塔插件 类别,在该类别下 选择 Python项目管理器 进行安装
安装成功后,会有一个 首页显示 的开关,我们打开这个开关,记得nginx也要打开这个哦。这个时候 我们在首页就可以看到了,因为后面我们会经常使用,所以最好要展示在首页。
接下来,我们该安装 python 了,在首页点击 python项目管理器,会出现一个弹窗,点击版本管理,选择一下你项目开发时使用的 python 版本。我使用的是 python 3.6.5 所以我安装这个版本。
注:python 2.7.5 显示已安装,这是系统自带的,我们不用管他。
三、上传项目文件并创建python项目
在上传项目文件的时候,我们需要先配置好项目所有的环境依赖包,所以,在本地开发的时候建议使用虚拟环境,这样我们创建依赖文件的时候,能减少引入一些不必要的包。在本地项目环境目录中(如果是虚拟环境,需要激活虚拟环境再进入项目目录)【django项目目录,即是在manage.py文件所处的路径】输入下方命令
1 | pip freeze > requirements.txt |
会生成一个 requirements.txt 文件,里面就会包含我们当前环境下所有的python包。
接下来,打开宝塔面板,点击 文件 ,
此时注意路径需要在/www/wwwroot/下
点击上传按钮,选择目录,将我们项目的整个目录都上传上来(可以不用上传venv目录,这个是虚拟环境目录,会自动生成)。 我的项目在电脑路径为D:/xzbcx_1.11,此时上传就选择django_test目录。上传弹窗需要加载一会才能展示出文件,之后点击弹窗底部的开始上传,在右上角有一个进度条,等上传完成后就可以关闭该弹窗。
项目文件大的话上传时间就会比较长,是的,我上传了三十多分钟。
好了,现在我们开始创建 python 项目。打开首页的 python 项目管理器,点击 添加项目。填充数据:
- 项目名称: 自定义就行,你开心就好
- 路径: 定位到项目目录即可
- Python 版本: 选择你项目对应的 python 版本
- 框架: 选择 django
- 启动方式: uswgi(自测了一下只有uswgi启动方式可行,其他的都没用,添加后服务启动不起来,除非自己去服务器手动启动)
- 启动文件/文件加: 定位到 wsgi.py 所在的路径
- 端口: 自定义就行,你开心就好,注意不要和系统端口冲突,设置1024端口号之后的,不然就算你开心也没用。
- 勾选上 是否安装模块依赖 与 开机启动
点击确定,然后等待创建。
设置配置文件
注意: 选择的框架是 django 的时候,不需要设置
创建成功后,点击配置,增加一行wsgi.py的位置(注意此步必做,否则会爆 Internal Server Error
如果出现的是Internal Server Error,则应该是uwsgi的配置问题。
如果出现Server Error (500)则表示在其他方面出现了问题。
另外,经测试,如果数据库连接错误也会显示Server Error (500)。 )
1 | wsgi-file = 你的文件路径 |
502 Bad Gateway nginx错误的解决方法:
这里有一个坑,改了上面的代码之后,有时会提示端口已经被占用,需要更改端口。
有时会造成这里改了端口,而nginx那里没有改,出现上面的错误。
这时只要保证二者的端口一致就可以了。
四、创建并同步数据库
4.1 MYSQL 数据库
在宝塔面板左边菜单选择数据库,然后添加一个数据库:
创建完数据库后,把你项目中的数据库导出然后上传。如果你不从本地同步数据库导入,也可以直接在服务器上根据django规则来重新生成数据库。生成数据库步骤如下:
- 打开宝塔SSH终端
- 定位到项目目录
1 | cd /var/www/wwwroot/xxx |
- 进入虚拟环境
1 | source xxx_venv/bin/activate |
- 同步数据库
1 | python manage.py makemigrations |
创建完数据库之后,宝塔会自动生成用户名和一个随机密码
为了能连接数据库,这个时候需要把项目中的数据库配置修改一下。进入setting.py文件进行编辑,将下面的NAME
、USER
和PASSWORD
修改成上图中的对应值之后保存。
1 | DATABASES = { |
4.2.sqlite3数据库
发现服务器本身的sqlite3数据库版本较低,为3.7 但django2.2版本以上的最低sqlite3版本为3.8以上,所以有两种方法解决
4.2.1 降django版本(最简单的方法)
1 | 卸载django: pip uninstall django |
4.2.2 更新sqlite3版本
1 | #更新SQLite 3 |
五、检查项目是否运行成功
经过上面的操作之后,项目已经在本地服务器运行起来了,这个时候先检查一下项目运行的状况,是否有报错。
在面板中Python项目管理器 ,点击右侧的日志选项,查看你项目的运行状况,我这边项目的日志如下:
发现有报错,查阅资料发现是Django2.2之后内部的一个版本限制在作怪,相关文章在这里查看,解决方案如下:
- 找到
venv(虚拟环境路径)/lib/python/site-packages/django/db/backends/mysql/base.py
- 注释掉下面两行代码
1 | version = Database.version_info |
- 重启python项目
继续观察日志,直到没有新的报错日志出现就说明项目运行成功了!
六、关闭DEBUG模式,调整静态设置
现在我们通过 侧边栏 文件 菜单 进入项目文件,找到 setting.py 文件,进行编辑。
DEBUG模式设置为False,ALLOWED_HOST 添加 ‘*’
1 | DEBUG = False |
配置静态文件地址为/home/xxx_static/static/
,后面会统一把静态文件移至该目录
1 | STATIC_URL = '/static/' |
这里也有一个坑,我之前弄好之后,访问网站老是提示:Bad Request (400),后来一检查,才发现自己的ALLOWED_HOSTS这里设置有问题。修改之后,在python项目管理器中重启一下就好了。
七、设置网站服务,并配置nginx代理
上述操作,我们已经在内部启动了,接下来就是设置成网站服务,提供外部访问,并设置 nginx 代理加载静态文件。
在 python 项目管理器 中点击 映射,设置域名 或者外网IP(注意端口号要与之前的管理器上的端口号一致否则会爆400error)
。映射成功后在面板侧边栏 网站 菜单中查看。(此时已经可以在外部访问了。但是是没有静态文件的)
在网站中点击我们刚才映射出的域名或ip,会出现一个弹窗,选择 反向代理-》配置文件
找个缝隙,来添加静态文件和媒体资源的配置。
关于静态文件:就是存放css,js文件的位置。django框架中以static命名的。
关于媒体资源:比如用户上传图片的存放位置,一般命名有 media。 你设置的什么名字就写什么名字。
1 | location /static/ { |
按照文件路径设置即可,只需要替换红色框内的,换成你的路径,其他的不用动。如果保存的时候出现报错,就把空格啥的删除一下。
完成之后需要在项目中执行以下如下命名收集admin后台的静态文件,不然通过uwsgi
服务启动的django服务,会找不到admin的样式文件导致样式失效。
- 进入项目根目录
1 | cd /var/www/wwwroot/xxx |
- 进入虚拟环境
1 | source xxx_venv/bin/activate |
- 执行如下命令(该命令将收集项目中所有静态资源,转移到上面配置的
/home/xxx_static/static/
目录)
1 | python manage.py collectstatic |
- 重启python项目和nginx服务
到此,万事大吉!可以通过你设置的域名或ip进行访问了。
如果不行尝试在虚拟环境下手动执行:
1 | newsgirl-d --ini /www/wwwroot/boxdata/uwsgi.ini -w boxdata.wsgi.application |