部署django真的是费了我好大力气 😦 只是记录下我是怎么部署
先说各种版本吧,因为版本不一样,所以有的东西不要直接照着做。
服务器:阿里云
系统:Ubuntu16.04
python3.5 django==2.0.1 mysql5.7.23 nginx uwsgi
对啦,就是我发现一篇部署的博客写的很好欧,其实我也是跟着他做的,这篇不像有的,罗嗦,只是到最后有些小问题然后自己解决解决又解决的,是这篇是这篇。
还有就是我脚着最好还是了解了解nginx uwsgi啥的吧,这儿有篇我觉得还是比较好理解的,这篇这篇,虽然说我看了也很懵吧,但是原因在我自己吖。
云服务器
我在服务器这边也出现了不少问题,所以要先说说服务器这边的。
千万千万千万不要忘记配置安全组,比如我们django的8000端口,要打开,像我吧,总是傻fufu的纳闷我为什么访问不了。
安装软件
django要安装:
sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install django
其实pip3安装好了之后一般都要先update一下
sudo pip3 install --upgrade pip
mysql要安装:
sudo apt-get install mysql-server mysql-client
nginx要安装:
sudo apt-get update
sudo apt-get install nginx
uwsgi要安装,pip安装:
sudo pip3 install uwsgi
配置项目
把我们自己的django项目传到我们服务器里
我们可以先用python3 manage.py runserver 0.0.0.0:8000
自己先跑一下,试试。
mysql的话,可能就会有错了。
mysql数据库各种错误
我是把我本地的sql文件导出了,然后又在服务器上导入了一下,因为我做的课表嘛,就数据在我本地上了,不想再在服务器上爬一遍,
那我就写下咋导出导入的吧
出
mysqldump -uroot -p database_name > database_name.sql
入
mysqldump -uroot -p database_name < database_name.sql
大家可以在项目根目录下执行migrate makemigrations命令。
然后还是会有错对吧,可能会有说包的问题,还有mysql本身的字符编码的问题,我之前写过这两个问题,大家可以直接去看一下:django连接mysql和一些错误
主要就是因为python3不支持MySQLdb包,而需要下载pymysql包,还有就是编码问题。
DEBUG=False之后 静态文件404
再有我们自己在写django调试的时候呢,settings里的DEBUG
是true,而部署到服务器上去之后,要修改成false,同时哪,那个ALLOWED_HOSTS
也要修改一下,把自己的ip地址和域名什么的加进去。
在settings里面,改成像这个样子:
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = ['192.168.1.112','www.abc.com']
然后可以再去地址栏输入自己网址试试。
行吧反正我当时是有错,啥错,我自己写的静态文件全都是404……
那就先说静态文件404的问题吧。
这个是因为:DEBUG为 True时django会默认帮我们处理静态文件,而为False的话有些事儿就要我们自己做了。
错误是404,404就是路径错误,路径错误应该考虑路由问题,那仔细想想是不是没有给静态文件设置路由呢,(其实我当时傻fufu的认为,它自己就都知道了,对呀,debug=true的时候知道),那我就在网上四处搜怎样添加路径:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.views import static
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('classquery.urls')),
path('teacher/', include('teacherquery.urls')),
path('course/', include('coursequery.urls')),
path('room/',include('roomquery.urls')),
path('eroom/', include('emptyroom.urls')),
url(r'^static/(?P<path>.*)$', static.serve, {'document_root':settings.STATIC_ROOT}, name='static')
]
看最下面那个路径:
url(r'^static/(?P<path>.*)$', static.serve, {'document_root':settings.STATIC_ROOT}, name='static')
对对对就是这个,大家在输入的时候要注意上面导入包不然会因为找不到XX而启动失败欧。
上面有一个STATIC_ROOT,我在做这个的时候,其实是先做的收集静态文件。
还是在settings中,在静态文件的配置中:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/
STATIC_ROOT = os.path.join('home/pidan/kbquery/static_collect')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
这一行:
STATIC_ROOT = os.path.join('home/pidan/kbquery/static_collect')
这个的大概意思,我理解的大概意思吖,就是把所有的静态文件收集一下,放到统一的一个文件里面,要注意的是这个里面的路径要是绝对路径,(网上是这么说的,我也就乖乖听了,但是我刚刚发现了一个奇怪的事儿,倒也对部署造成什么影响)。
这个改好之后,要在项目目录下执行命令收集静态文件:
python3 manage.py collectstatic
执行成功之后,加上上面的路由的配置,静态文件404的错误就可以解决啦
😃 😃 😃
小小总结下这步做了啥 :
修改settings文件 DEBUG ALLOWED_HOSTS STATIC_ROOT
收集静态文件
在urls里为静态文件添加路由
现在我们的django项目用runserver跑着是没有问题了,我们继续部署。
配置nginx文件:
修改下面路径下的defalut文件
cd /etc/nginx/sites-available
sudo vim default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name 192.168.1.112;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
location /static {
alias /home/pidan/kbquery/static;
}
location /media {
alias /home/pidan/kbquery/media;
}
上面是修改好了的,
下面这个是我们要修改的地方,那个ip地址换成自己的公网ip 路径换成自己的static和media路径,要是没有的话,就不要写那一项了。
server_name 192.168.1.112;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
location /static {
alias /home/pidan/kbquery/static;
}
location /media {
alias /home/pidan/kbquery/media;
}
一定要仔细修改哦,有空格的不要丢,不要写错地方,可以在改之前先备份一份,以防万一。
修改好重启服务:
sudo service nginx restart
唉,路还是比较坎坷的,我也是改了几回才重启成功的,所以吖,一定要仔细认真的改哦。
配置uwsgi
配置好这个就可以成功啦,所以加油吖
在我们的项目根目录下,也就是有manage.py文件的目录下,新建一个uwsgi.ini文件和一个run.log文件,然后编辑uwsgi.ini文件如下:
[uwsgi]
chdir = /home/pidan/kbquery #项目根目录
# 你的入口wsgi模块,项目名换成自己的
module = kbquery.wsgi:application
socket = 127.0.0.1:8000 #通信端口 不用修改
master = true
daemonize = /home/pidan/kbquery/run.log #路径对应修改
disable-logging = true # 只记录错误日志的意思
最后! 我们在我们的项目根目录下,就是刚刚这个目录下输入:
uwsgi --ini uwsgi.ini
启动uwsgi ,大家就可以去地址栏输入自己ip地址了,看看是不是成功了吖。
最后
最后还是要提一下,我的uwsgi是在pip下安装的,我在没有启动uwsgi之前会有502的错误,所以需要在项目根目录启动一下。
还有就是我现在的uwsgi在我更改了代码之后,不知道如何重启uwsgi,网上的方法对我不奏效,为了让我修改的代码生效,我就得重启uwsgi啊!我只能取重启服务器,然后再手动开uwsgi,我刚刚看到了一个东西,现在觉得可能是因为我用pip安装的uwsgi,才这个样子的。
也就是说大家如果照着我这么做,uwsgi肯定会和我一个情况,也可以去网上看一下uwsgi的下载,可能我这儿是个坑。