这次尝试在服务器上使用宝塔,这样不但部署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
老牛博客已更换为新域名:https://naibawu.com(原为:https://xiaohost.com),麻烦老铁修改下友链,谢谢!
已经更新。
已经修改。