当前位置: 代码迷 >> 综合 >> Django部署到阿里云-nginx+uwsgi+mysql
  详细解决方案

Django部署到阿里云-nginx+uwsgi+mysql

热度:91   发布时间:2023-12-23 16:05:03.0

部署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 = FalseALLOWED_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 urlurlpatterns = [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 PHPindex 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的下载,可能我这儿是个坑。

  相关解决方案