使用宝塔面板的python项目管理器部署django项目

  • 部署方式
  • 系统环境
  • Django项目结构
  • 前期准备
  • 开始部署
  • 1.至此数据库准备已经完成。接下来上传本地的Django项目,默认上传到/www/wwwroot/目录下
  • 2.上传完成后在settings.py将debug改为False ,database配置为刚才记录的数据库名 用户名和密码可以直接在宝塔面板里编辑。
  • 3.打开宝塔里已经安装好的python项目管理器,在版本管理里先安装所需的python版本,我这用的是3.7.2,注意:python项目管理器所安装的python版本和各种依赖模块都是在虚拟环境中,全局shell里调用不了。
  • 4.安装好python版本后,在项目管理中添加项目,根目录和运行目录都是所上传的项目根目录,项目名和上传的文件夹名字一致![添加项目](https://s2.51cto.com/images/blog/202309/15145136_6503fef8877b924529.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
  • 5.搞定模块后,先暂停正在运行的python项目,还有一些坑在这里。如图在宝塔文件任意位置进入宝塔终端,切换到项目根目录,启用项目虚拟环境
  • 6.回到python项目管理器,点击“配置”,再最下方加上
  • 7.最后开始配置nginx反向代理,宝塔里可以很容易实现。
  • 最后是收尾工作


部署方式

nginx+uwsgi+python3.7.2+django2.2+mysql5.7 -----使用宝塔面板快速部署

系统环境

  1. 腾讯云服务器,1核2g centos7.6 安全组全部放行(按需求,宝塔需要的端口和Django的8000端口一定要放行,部署完后可以再关8000端口);
  2. 宝塔面板7.0.2 LNMP方式 mysql5.7(新版宝塔已经可以安装8.0,根据调试环境的mysql版本选择) nginx1.17.1 python项目管理器1.5 ;
  3. django2.2;

Django项目结构

此次主要是演示宝塔面板部署python项目,所以我只建了一个基本的Django项目 内含一个app,一个html和一些css js文件。

基本结构如图

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_nginx


这里项目名Absolute和app名myblog都是随便取的 无实际意义,templates是自己创建来存放网页文件,static是用来收集静态文件的,具体下文会交代,

前期准备

1.因为用了mysql数据库 所以要将mysql数据表结构导出到sql文件,上传至宝塔,并在宝塔上生成数据库

输入命令:mysqldump -uroot -p test2>test2.sql

输入密码后导出成功 注意这里的test2是当前项目使用的数据库名 根据实际情况填写,导出到同名的sql文件中

2.收集项目的静态文件至项目根目录下的static文件夹中,具体操作步骤请参考

Django收集静态文件 3.在宝塔创建数据库 步骤如图

(1)在宝塔里添加数据库,注意数据库名和用户名不能为root,记录用户名和数据库名和密码(test2,test2,123456)

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_Django_02


(2)从本地上传刚才导出的sql文件

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_nginx_03


(3)导入上传好的文件

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_宝塔面板安装的mongodb无法启动_04

开始部署

1.至此数据库准备已经完成。接下来上传本地的Django项目,默认上传到/www/wwwroot/目录下

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_宝塔面板安装的mongodb无法启动_05


ps:宝塔的上传有时候不太稳定,可以选择用ftp工具上传到同目录下

2.上传完成后在settings.py将debug改为False ,database配置为刚才记录的数据库名 用户名和密码可以直接在宝塔面板里编辑。

3.打开宝塔里已经安装好的python项目管理器,在版本管理里先安装所需的python版本,我这用的是3.7.2,注意:python项目管理器所安装的python版本和各种依赖模块都是在虚拟环境中,全局shell里调用不了。

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_Django_06

4.安装好python版本后,在项目管理中添加项目,根目录和运行目录都是所上传的项目根目录,项目名和上传的文件夹名字一致

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_nginx_07

如果没有requirements.txt 可以在项目页面的“模块”里手动添加所需模块,比如我这个项目只用了Django和pymsql,而在开发环境又没有用虚拟环境,全局环境里很多不必要的包,就没导出requirements,导出requirement.txt参考
python项目导出requirements.txt

5.搞定模块后,先暂停正在运行的python项目,还有一些坑在这里。如图在宝塔文件任意位置进入宝塔终端,切换到项目根目录,启用项目虚拟环境

cd /www/wwwroot/Absolute/
source ./Absolute_venv/bin/activate
python3 manage.py runserver

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_Django_08


此时会报错

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

解决办法:
ctrl+c退出当前运行状态
终端输入

vi /www/wwwroot/Absolute/Absolute_venv/lib/python3.7/site-packages/django/db/backends/mysql/base.py

将代码

if version < (1, 3, 13):
    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

注释掉 esc+:wq 保存退出
再输入

vi /www/wwwroot/Absolute/Absolute_venv/lib/python3.7/site-packages/django/db/backends/mysql/operations.py

将第146行的代码

query = query.decode(errors='replace')

修改为

query = query.encode(errors='replace')

再保存退出 此时执行

python3 manage.py runserver

就正常了,调试完毕,接下来开始配置uwsgi

6.回到python项目管理器,点击“配置”,再最下方加上

static-map = /static=/www/wwwroot/Absolute/static

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_宝塔面板安装的mongodb无法启动_09


保存后点“重启”重启项目

在浏览器地址栏里输入 服务器公网IP:8000 刚才部署的项目已经可以通过ip和端口访问了

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_宝塔面板安装的mongodb无法启动_10


这里如果没有正常访问的同学请检查以下几项配置

(1)是否收集静态文件至static

(2)DEBUG是否关闭

(3)宝塔面板-安全里是否放行了8000端口

(4)云服务器安全组里是否放行了8000端口

(5)静态文件路径是否有错误,包括在html里的引入要以/static/x x x x开头的绝对路径

7.最后开始配置nginx反向代理,宝塔里可以很容易实现。

(1)在项目管理点击“映射”,输入已经提前解析到此服务器的域名

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_python_11


(2)在“网站“里找到刚才生成的项目,在”设置“里找到”反向代理“,点击”配置文件“

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_宝塔面板安装的mongodb无法启动_12


(3)在配置文件里添加如下代码

location /static/
    {
        alias /www/wwwroot/Absolute/static/;
    }

注意路径、缩进和插入位置

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_nginx_13


保存后回到python项目管理器 手动重启项目在浏览器输入刚才映射的域名 项目已经可以正常访问啦

宝塔面板安装的mongodb无法启动 宝塔面板部署django项目_宝塔_14

最后是收尾工作

将宝塔面板-安全里放行的8000端口删除,这样别人只能通过域名访问网站,不能通过IP:端口来访问了。
云服务安全组里的8000端口可以不删,因为一台服务器可能会部署多个Django项目,每次都要重新开很麻烦