阿里云centos7部署Django项目

一、使用uwsgi服务部署项目
1.将项目所需要的模块生成安装包文件,并将项目压缩和安装包文件都上传到指定的服务器目录下,在运行项目前先执行安装包文件
pip freeze > pip.list(pip.txt)
pip install -r pip.list
2.在项目主目录下创建static_file文件夹,打开项目配置文件进行静态文件的配置,编辑blog/settings.py添加配置目的是收集项目中的所有静态文件

在settings.py添加配置
STATIC_ROOT=’/home/damu/blog/static_file/’(目录为实际项目中的路径目录)
执行收集静态文件命令
python manage.py collectstatic

3.修改数据库配置连接,确定服务器数据库正常、数据库登录账户和密码正常

生成数据模型
python manage.py makemigrations
同步数据库数据
python manage.py migrate

(1)第一次报错:ModuleNotFoundError: No module named 'django.core.urlresolvers'

 File "/usr/local/project/demo03/myblog/author/views.py", line 2, in <module>
    from django.core.urlresolvers import reverse
ModuleNotFoundError: No module named 'django.core.urlresolvers'

检查得知:django2.0 把原来的 django.core.urlresolvers 包 更改为了 django.urls包,所以我们需要把导入的包都修改一下就可以了。
修改:

from django.urls import reverse

(2)第二次报错:数据库IP连接错误

django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 113] No route to host)")

检查:发现在django的settings文件中没有配置连接数据库的ip和端口,于是在DATABASES添加这两项内容

'HOST':'localhost',
'PORT':'3309'

(3)第三次报错:数据库密码错误

django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

检查:发现我在数据库密码的位置多写了个空格,将空格删除后,数据库连接正常。
4.启动Django项目(使用python命令正常启动项目方式)
这是在linux系统下启动Django项目的方式

python manage.py runserver 0.0.0.0:80(0.0.0.0是允许任意主机访问,端口必须为80,据我推测,在没有配置nginx代理的时候,只能是80端口对外开发作为外部访问端口,同时服务器默认配置就会监听80端口)

在windows系统下启动方式为

python manage.py runserver 0.0.0.0:8080(这里可以使用任意端口,如果不使用0.0.0.0就是只允许本机访问)

5.使用uwsgi代理启动项目
安装uwsgi

pip install uwsgi

配置uwsgi.ini文件,在项目的本目录下新建一个uwsgi.ini文件,用来配置uwsgi文件,添加配置如下:

# 指定uwsgi配置
[uwsgi]
# 指定部署项目之后的HTTP访问
http=47.106.218.225:8080(使用uwsgi代理时)
# 指定项目位置
chdir=/usr/local/project/demo03/myblog/
# 指定wsgi文件
wsgi-file=myblog/wsgi.py
# 指定启动进程数量processes/workers
processes=4
# 指定启动线程数量
threads=2
# 指定启动主进程管理
master=true
# 指定存放进程编号的id文件
pidfile=uwsgi.pid
# 指定进程停止时清楚垃圾数据
vacuum=true
# 指定启用日志记录(这里已经指定了输出的日志存放位置)
daemonize=uwsgi.log
# 指定静态文件映射
static-map=/static=static_file(使用uwsgi代理时)

uwsgi启动项目

uwsgi --ini uwsgi.ini       启动项目
uwsgi --stop uwsgi.pid      停止项目
uwsgi --reload uwsgi.pid    重启项目

这里使用uwsgi启动项目的方式我还没有完成整明白,还有待研究

二、使用uwsgi+nginx部署项目
使用uwsgi+nginx部署项目从上传项目到服务器、收集静态文件、连接数据库配置都是和uwsgi启动项目是相同的,但后面的配置uwsgi.ini文件和nginx.conf文件略微有些不同
1.配置uwsgi.ini文件(还是之前uwsgi代理的那个uwsgi.ini文件)

# 指定uwsgi配置
[uwsgi]
# 指定部署项目之后的HTTP访问
socket = 127.0.0.1:8080(使用uwsgi+nginx代理,和nginx.conf端口一致)
#http=47.106.218.225:8080(使用uwsgi代理时)
# 指定项目位置
chdir=/usr/local/project/demo03/myblog/
# 指定wsgi文件
wsgi-file=myblog/wsgi.py
# 指定启动进程数量processes/workers
processes=4
# 指定启动线程数量
threads=2
# 指定启动主进程管理
master=true
# 指定存放进程编号的id文件
pidfile=uwsgi.pid
# 指定进程停止时清楚垃圾数据
vacuum=true
# 指定启用日志记录(这里已经指定了输出的日志存放位置)
daemonize=uwsgi.log
# 指定静态文件映射
#static-map=/static=static_file(使用uwsgi代理时)

2.安装nginx

pip install nginx -y

nginx的其他操作命令

nginx [options]
-v   查看nginx版本
-V   查看nginx版本及配置信息
-t   测试服务器是否可以正常运行
-T   测试配置选项运行服务器
-c   指定配置文件启动服务器
-s   发送一个选项信号执行操作
nginx   启动服务器
nginx –s stop     停止服务器;不论是否有数据未完成,直接退出
nginx –s quit     停止服务器;如果数据处理未完成,等待完成退出
nginx –s reload   重新加载
nginx –s reopen   重启

3.配置nginx.conf文件(/etc/nginx/nginx.conf)

http {
..
server {    # 配置一个虚拟服务器
 listen 80; # 服务监听端口
    server_name 192.168.1.100;# 配置监听服务(个人服务器IP)

    location / {  # 配置请求反向代理
        include uwsgi_params; # 指定代理数据类型
        uwsgi_pass 127.0.0.1:8080; # 指定代理IP和端口
    }
    location /static { # 配置静态文件服务器
        alias /home/damu/blog/static_file;(项目静态文件绝对路径)
    }
}
..
}
注:这里我使用了8080端口才管用,其他的端口都不行,我想会不会是因为Django的默认端口是8080,所以只能用这个8080端口?

4.配置文件之后,重新加载nginx配置信息

nginx -s reload
注意:在执行此命令之前先保证nginx服务是否已经启动,之前我在执行重新加载nginx配置信息的时候提示没有找到id,我很是懵逼啊,然后去网上查找了半天,
才发现原来是我的nginx服务根本没有启动,所以才导致的,简直是把我气得快吐血了...

5.使用uwsgi+nginx启动服务

uwsgi --ini uwsgi.ini
tailf uwsgi.log # 查看日志
ps -ef|grep uwsgi # 查看uwsgi进程

6.输入服务器IP,访问成功,OK!

三、在网上看到的配置数据库报错,不知道能不能用上:

image.png

四、windows环境下配置Django项目报错总结
1.报错信息为:类型错误,类型'Author'的对象不是JSON可序列化的
image.png

解决过程:这个问题我首先从视图处理函数的返回值开始查起来,首先是确定视图函数的返回值是否正常;然后我在网页视图中查看视图form表单提交的数据类型是否正确;检查这些是有些小问题的,但是并不是主要的问题。然后我又去百度上查看到底是哪出了问题,结果真的被我找到了。
相关问题网址:https://www.cnblogs.com/ljwbook/p/4957841.html
问题:我在写作者模块时用到了session,需要序列化一个对象实例,直接使用request.session['login_user'] = author这样的方式会报无法序列化的错误。
解决:从Django1.6开始session里面的数据都是用json来序列的,json的session只能接受简单的数据结构,如str,list,dict。一种方法是先把cart的数据放在一个dict里面再存到session或者可以换一个SessionSerializer。另外一种方法是还提供一个pickle来序列,可以存放任何一个数据机构。
在settings.py中加入

SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'

问题解决!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容