宝塔面板成功部署Django项目流程

宝塔面板部署Django项目完整流程

上线Django项目记录,超简单,避免无意义的踩坑!

第一步:安装python管理器

在宝塔在线面板安装“python项目管理器

安装python项目管理器


第二步:安装适配python版本

因为服务器centos7系统默认的python版本是2.7

而我们项目是基于最新版Django来开发的,本地环境是python3.6.5的,为了尽量保证环境的相似,避免踩无意义的坑。

安装python


第三步:导出项目包到requirments.txt

python的安装时间比较长,所以先做一些别的工作,同时在

在本地项目下执行如下命令导出:

python3 -m pip freeze > requirements.txt

导出的包挺多的,不要怕,虽然似乎自己也没用到那些包,在宝塔环境中,我们会使用虚拟环境运行,所以不用担心

更改settings.py中对应内容如下:

DEBUG = True

ALLOWED_HOSTS = ['*']

STATIC_URL = '/static/'
# STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, "static")
# ]
STATIC_ROOT = os.path.join(BASE_DIR, "static")

第四步:上传本地项目到服务器

上传本地项目到www/wwwroot/目录下

上传项目


第五步:管理器中添加项目

python项目管理器中配置,添加项目

按照如下图类似配置即可

这里勾选“是否安装模块依赖”,会自动帮我们读取项目下的requirements.txt,然后安装响应的模块,所以这里的时间会比较长。

管理器默认使用pip安装项目根目录requirements.txt内的模块,如有其他模块需要安装请手动进入虚拟环境安装
进入虚拟环境方法:
在命令行输入 source 项目路径/项目名_venv/bin/activate
如:source /data/python/project1_venv/bin/activate


第六步:映射域名

映射域名

我们需要一个容易记住的域名,所以给项目绑定一个预留的域名safe.top15.cn

映射域名


第七步:配置站点

配置 Nginx

映射成功后,可在面板侧边栏“网站”中,发现多了我们的 python 项目

网站映射管理

此时,就可以点击scan.top15.cn的绿色字,显示对应项目的一些“站点配置

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

配置

Nginx 的配置按照如下,上图有误:

修正


第八步:重启项目

因为修改了一些东西,所以我们需要在python管理器中重启项目

重启项目

同时还需要重启一下Nginx,这个相信大家都会~

可是!!!竟然没有跑起来,访问域名显示Internet server error

第九步:很不幸,还是踩坑了

版本错误

原因:Centos7 中默认SQLite版本为 3.7.17,但是项目需要3.8.3版本

解决办法:1.降级Django版本;2.升级SQLite版本。

小东采用第二种方式:

在宝塔任意目录下可以打开shell

// 获取源码
cd ~
pwd
wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz

// 解压到当前目录
tar -zxvf sqlite-autoconf-3270200.tar.gz

// 开始构建安装
cd sqlite-autoconf-3270200
./configure --prefix=/usr/local
make && make install

// 查看安装情况
find /usr/ -name sqlite3

cd ~
ls

// 删除文件
rm -rf sqlite-autoconf-3270200.tar.gz
rm -rf sqlite-autoconf-3270200/

// 查看新安装的版本
/usr/local/bin/sqlite3 --version

// 查看旧版本
/usr/bin/sqlite3 --version

//移动旧版本
mv /usr/bin/sqlite3  /usr/bin/sqlite3_old
// 创建软连接
ln -s /usr/local/bin/sqlite3   /usr/bin/sqlite3

sqlite3 --version

// 关联基础库
export LD_LIBRARY_PATH="/usr/local/lib"

// 去虚拟环境
source /www/wwwroot/ThreatScan/ThreatScan_venv/bin/activate

// 关联基础库
export LD_LIBRARY_PATH="/usr/local/lib"

// 测试
python -V
python
import sqlite3
sqlite3.sqlite_version

但是,运行项目还是不行,也没有什么错误提示

陷入僵局~

去宝塔论坛围观了一下,发现大家的gunicorn似乎都不行~

emmm~

uwsgi试试~

更换uwsig

能启动了,可是~

但是

查看各种文章无果,

尝试在虚拟环境下手动执行:

uwsgi -d --ini /www/wwwroot/ThreatScan/uwsgi.ini -w ThreatScan.wsgi.application

OK,搞定~然后映射的 nginx修改一下static反向代理,配置SSL证书,强制HTTP 301跳转HTTPS

成功了

一些注意的地方:

域名映射好了之后,宝塔里可以直接把8000端口关闭掉(之前添加了开放规则),这样别人就无法从8000端口访问应用,而只能通过域名访问,只能说nginx反向代理真的很实用!

在对应站点设置中,开启防跨站攻击,如果有宝塔的nginx防火墙服务,可以直接配置,保证我们上线网站的安全!

成功上线地址:https://scan.top15.cn

发表评论 / Comment

用心评论~

金玉良言 / Appraise
一一二二三三LV 1
2019-12-16 11:17
为什么我部署的django项目本地服务器可以访问,部署到宝塔上面就有一个访问不了,那是为什么啊
头像
KingLV 1
2020-02-03 16:48
@一一二二三三:我也是。想用下面板。搞了一下午一直502。。
你解决了吗?
头像
Void BugLV 1
2020-06-03 19:19
@King:解决了码,哥哥
大木易易LV 1
2019-11-20 10:46
大佬,还是到了最后一步出错了,哈哈~~~python3.6.6,django2.2.7,uwsgi启动起来了:Internal Server Error
头像
大木易易LV 1
2019-11-20 12:14
@大木易易:解决了~uwsgi.ini 加上 这个:wsgi-file=/www/wwwroot/项目目录xxx/应用目录xxx/wsgi.py
头像
DYBOY站长已认证
2019-12-05 22:59
@大木易易:棒棒的!
艾塔LV 2
2019-10-25 11:29
看看?https://www.cnblogs.com/gdsblog/p/8025092.html
温暖的苔藓LV 1
2019-10-11 17:18
楼主你好,我现在卡在最后一步,在虚拟环境手动执行那条代码后,提示: getting INI configuration from /www/wwwroot/ssrht/uwsgi.ini,但是访问域名还是显示,Internal Server Error. 所以能麻烦楼主指点下吗,十分感谢
头像
黎明LV 1
2019-11-22 10:25
@温暖的苔藓:最后一步能贴下代码吗 按照他的出错
嘿嘿LV 1
2019-09-28 15:04
你好 , 我用的7.4 ,  没找到python项目管理器