Home >  > 宝塔部署Django(Navicat传数据)

宝塔部署Django(Navicat传数据)

3

这次尝试在服务器上使用宝塔,这样不但部署django网站比较简单,还可以同时使用django和wordpress。

一.安装宝塔及插件
(1)安装宝塔
在宝塔官网看到说“务必使用centos7.x 系统”,所以我不得不放弃以前用得比较熟的ubuntu系统。

yum -y install tmux

#美国节点安装
yum install -y wget && wget -O install.sh http://128.1.164.196:5880/install/install_6.0.sh && sh install.sh

大约13分钟就安装好了。

(2)安装其他插件
安装完宝塔之后,进入宝塔的控制面板,安装nginx、mysql、php、Python项目管理工具这几个程序。如果是生产环境推荐使用编译安装,大约需要1小时。

安装好之后注意案例配置:

宝塔教程:https://www.laoyangblog.com/86.html

二、安装Python
备注:如果要合适python3,可以直接安装centos8.

centos7.x 系统只有python2.7,但是自己用的是python3.x,所以首先需要安装python3.x.
宝塔现在支持python3.x,只需要在Python项目管理工具那里,选择python版本安装即可。

三、上传django文件
1.生成requirements.txt
在项目根目录(即manage.py所在的目录)执行以下命令。

pip freeze > requirements.txt

2.修改settings.py
包括修改DEBUG = False,ALLOWED_HOSTS,static文件夹的设定:

DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.925wholesalejewelry.com']

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

静态文件的一般安放位置有两种:一种就是在每个app里面新建一个static文件夹;另一种,就是在所有的app文件外面,建立一个公共的文件夹。

那现在的问题是如何让django知道你把一些静态文件放到app以外的公共文件夹中呢,那就需要配置STATICFILES_DIRS了
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'common_static'),
)

STATICFILES_DIRS告诉django,首先到STATICFILES_DIRS里面寻找静态文件,其次再到各个app的static文件夹里面找(注意, django查找静态文件是惰性查找,查找到第一个,就停止查找了)。当DEBUG设置成False之后,它就失效了。

django利用STATIC_URL来让浏览器可以直接访问静态文件,比如

那么可以在浏览器上输入:
http://192.168.1.2:8000/static/common_static/myapp/photo.png

那么就相当与访问/home/mysite/common_static/myap/photo.png

所以在浏览器上,利用前缀 STATIC_URL的具体内容,来映射STATIC_ROOT,

# 最终浏览器解析后的地址为:http://127.0.0.1:8000/ps/js/jquery-1.8.3.min.js
STATIC_URL = '/ps/'

# 最终浏览器解析后的地址为:http://127.0.0.1:8000/lidysun/js/jquery-1.8.3.min.js
STATIC_URL = '/lidysun/'

这里也有一个坑,我之前弄好之后,访问网站老是提示:Bad Request (400),后来一检查,才发现自己的ALLOWED_HOSTS这里设置有问题。修改之后,在python项目管理器中重启一下就好了。

还有一个坑,如果没有设置DEBUG = False,网站的static是无法访问的。

3.上传django项目文件
将项目文件上传到www/wwwroot/下面,或者其他目录也行,我后来就将django项目放到了其他目录www/server/py。
注意:将django项目的根目录也一起上传。

四、安装环境
1.在python项目管理器添加Python项目
我使用的时候,启动方式选择gunicore无法启动项目,必须选择uwsgi才行。


相关说明:

名称:你想起啥名就起啥名,但最好不要用中文。
路径:选择你的项目(如我的:/www/wwwroot/BlogDj)
启动文件/文件夹:你是django项目的话就选择启动文件夹(如我的:/www/wwwroot/BlogDj/BlogDj)
Python版本:用你刚刚安装的版本
启动方式:nginx或gunicorn
端口:你写一个端口就行,最好是大于6000的端口

2.修改uwsgi.ini
1. 将项目暂停。
2.添加wsgi.py
最新版本的宝塔,只需要在

wsgi-file=/www/server/py/cpsite/cpsite/

这一行的后面加上wsgi.py就可以了。
而且一定要加,不然Internal ser ver error的错误一直在那儿。

下面是以前版本的宝塔操作方法:

这里是宝塔的一个bug,我之前也是按网上的教程来部署,可是部署完成之后,访问网站老是提示:Internal Server Error,折腾了很久没有搞定,后来在宝塔论坛看到别人的提示,才解决了这个问题。
当你在上面的“添加Python项目”这一步添加了项目之后,会在项目文件的根目录生成一个配置文件,比如,你选择的是uwsgi,则会生成uwsgi.ini文件,如果选择gunicore启动方式,则会生成gunicore.conf文件。
你可以直接打开这个文件修改,或者直接在宝塔的项目配置中修改,然后重启项目。

添加如下一行代码:
wsgi-file=/项目路径/项目文件夹/wsgi.py

比如我的就是:

wsgi-file=/www/server/py/cpsite/cpsite/wsgi.py

Updated on Aug-11-2019:
502 Bad Gateway nginx错误的解决方法:

这里有一个坑,改了上面的代码之后,有时会提示端口已经被占用,需要更改端口(将项目暂停,改端口即可)。
有时会造成这里改了端口,而nginx那里没有改,出现上面的错误。

这时只要保证二者的端口一致就可以了。

3.添加域名
在“Python项目管理器”找到你的项目,点击“映射”,设定你的域名(域名前面最好加上www)。
添加完成之后,你会发现宝塔自动在“网站”这里,帮你添加了一个网站,网站的备注就是:Python项目[xxx]的映射站点

小提示:
每次执行“映射”操作之后,宝塔会自动在www/wwwroot文件夹下面建立一个“www.xxx.com”的文件夹。

4.放行端口

五、安装django及其他库
1.进入虚拟环境
宝塔升级后,进入虚拟环境的办法为:

source /www/server/py/izone-1-1/md5命名的文件夹/lib/python3.8/venv/scripts/common/actiovate

然后使用pip和pyton命令的方法为:

/www/server/py/izone-1-1/8bb54ee0d9906c376706f9c75896ba90_venv/bin/pip
/www/server/py/izone-1-1/8bb54ee0d9906c376706f9c75896ba90_venv/bin/python3

下面是以前的宝塔版本进入虚拟环境的办法:

#source 项目路径/项目名_venv/bin/activate

#source /data/python/project1_venv/bin/activate
source /home/server/py/zanhu/caiwulou_venv/bin/activate

2.安装相关的库

pip install -r requirements.txt

六、测试
这时通过你的域名访问,就可以看到网站的内容了,当然静态文件这些还没有弄好的。
如果出现的是Internal Server Error,则应该是uwsgi的配置问题。
如果出现Server Error (500)则表示在其他方面出现了问题。
另外,经测试,如果数据库连接错误也会显示Server Error (500)。

小技巧:
如果发生了Internal Server Error,你的uwsgi的配置也没有问题,这时可以通过运行python manage.py runserver 0.0.0.0:8000 就可以查看出错信息。

如果执行runserver也没有报出错信息,但是网站还是无法访问,可以通过设定settings.py中的debug=true,在浏览器中显示一些出错信息。

这里又有一个天坑:
如果你的项目是使用SQlite数据库,那么到了这一步就可以看到网站显示了。但是如果使用的是MySQL数据库,则到这里还是显示Server Error,所以必须执行下面的数据据migrate,才能看到网站。

七、收集静态文件

执行命令:

# 收集静态文件(把静态文件收集到 STATIC_ROOT中。):
python3 manage.py collectstatic 

执行collectstatic命令后会将项目中的静态文件(包括STATICFILES_DIRS、自带admin的静态文件)收集到该目录下面来。

Copying '/www/wwwroot/the_wedather/weather/static/weather/999.png'
。。。。。

321 static files copied to '/www/wwwroot/the_wedather/static'.

它就是将app下面的static文件夹下面的内容copy到了项目根目录static文件夹。

2.设置反向代理
1.打开反向代理设置窗口
在左边导航栏的“网站”里面,找到你的网站,然后点击“设置——反向代理”,打开如下窗口:

2.修改配置文件
点击“配置文件”,在倒数第二行,添加如下代码(注意更改项目路径):

# 在倒数第二行,上面字典的外面添加
location /static/ {
    alias /www/wwwroot/BlogDj/static/;
}
location /media/ {
    alias /www/wwwroot/BlogDj/media/;
}

小提示:
如果你的网站没有用到media,则上面第二段代码不添加也可以的。

八、访问网站
这时再访问网站,就发现网站已经可以正常访问了。

并且经过测试,php网站与django网站可以共存。

可以参考:
http://106.75.60.224/index/content/1
https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=8889&highlight=python3
https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=23295&highlight=python

九、提示:

由于我的项目使用了是sqlite数据库,所以按上面的操作就可以正常访问网站了。如果你使用的是像mysql等数据库,则还需要进行数据库的迁移。相关代码:

# 迁移数据库:
python3 manage.py makemigrations
python3 manage.py migrate

然后再将原来的数据导入到mysql.

UPdated on Aug-11-2019
今天运行这个迁移命令报错:
django.db.utils.InternalError: (1071, 'Specified key was too long; max key length is 767 bytes')
经过排查,原来是编码的问题,因为我使用的新建用户,再建同名数据库的方法,所以建立的数据库编码是:utf8mb4
后来改用直接建立utf-8 gerneral ci的数据库的方法,这个问题就解决了。

十、建立超级用户

python manage.py createsuperuser

十一、传输数据
执行Navicat的“工具--数据传输”功能,使二者的数据库完全一样。

十二、发送日志
利用宝塔的计划任务发送日志。待测试。

#!/bin/bash
source /home/server/py/zanhu/caiwulou_venv/bin/activate
cd /home/server/py/zanhu/DB_tools/
python import_da.py

十三、附录:
1.如果在宝塔修改了商品,用ftp和secureCRT可能无法登陆。

2.如何用Navicat连接宝塔的数据库?
首先要在宝塔的安全那里给3306端口放行。
然后新建一个账户,将用户的权限设为“【任意主机】”

参考:http://www.bt.cn/bbs/forum.php?mod=viewthread&tid=224&extra=page%3D1

十一.如何手动安装python3.x
如果自己通过命令行安装,可以直接执行以下命令:
方法一:

#依赖包
yum -y groupinstall "Development tools"
 
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
#下载 Python3
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
#创建文件夹
mkdir /usr/local/python3 
#解压编译安装
tar -xvJf  Python-3.6.2.tar.xz
cd Python-3.6.2
./configure --prefix=/usr/local/python3
make && make install
#给个软链
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

展示:

上面的代码经测试可用,安装完可以使用pip3了,参考:https://blog.kieng.cn/848.html

方法二:

sudo yum install yum-utils
sudo yum-builddep python
curl -O https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz
tar xf Python-3.5.0.tgz
cd Python-3.5.0
./configure
make
sudo make install

参考:https://towait.com/blog/how-to-install-python3-on-centos/

不过执行到make这一步的时候报错:

# On Darwin, always use the python version of the script, the shell
# version doesn't use the compiler customizations that are provided
# in python (_osx_support.py).
if test `uname -s` = Darwin; then \
cp python-config.py python-config; \fi

然后直接根据出错提示执行下面的代码:

sed -e "s,@EXENAME@,/usr/local/bin/python3.5m," < ./Misc/python-config.in >python-config.py

最后终于成功了。

3.几个命令:

whereis   python
python -V

暧昧帖

本文暂无标签
Comment (3)
Trackback (0)
  1. 老牛 Google Chrome 98.0.4758.82unknow 沙发 2022/02/28 10:38

    老牛博客已更换为新域名:https://naibawu.com(原为:https://xiaohost.com),麻烦老铁修改下友链,谢谢!

  • 还没有Trackback

发表评论

*

*