阿里雲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,這個是因為啥,還待研究)
在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
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!
三、在網上看到的配置資料庫報錯,不知道能不能用上:
四、windows環境下配置Django專案報錯總結
1.報錯資訊為:型別錯誤,型別'Author'的物件不是JSON可序列化的
解決過程:這個問題我首先從檢視處理函式的返回值開始查起來,首先是確定檢視函式的返回值是否正常;然後我在網頁檢視中檢視檢視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'
問題解決!
相關文章
- Centos7系統部署django專案CentOSDjango
- 阿里雲部署Django專案(nginx+uWSGI)阿里DjangoNginx
- 阿里雲伺服器部署django專案阿里伺服器Django
- 把django專案部署到阿里雲伺服器流程Django阿里伺服器
- Djang專案部署阿里雲伺服器(四)之執行Django專案阿里伺服器Django
- 【django輕量級框架】django專案部署到阿里雲伺服器流程Django框架阿里伺服器
- 5.Django專案部署Django
- 阿里雲部署Django專案(nginx+uWSGI)-2018.11阿里DjangoNginx
- Vue專案打包到django部署VueDjango
- Linux 下部署Django專案LinuxDjango
- docker 部署 django + mysql + vue 專案DockerDjangoMySqlVue
- centos7部署djangoCentOSDjango
- 阿里雲部署nuxt專案阿里UX
- 使用 uWSGI 和 Nginx 部署 Django 專案NginxDjango
- 使用nginx+uwsgi部署Django專案NginxDjango
- 阿里雲部署Django專案(超詳細圖文教程)—— Part3. Django settings修改、PostgreSQL配置阿里DjangoSQL
- 阿里雲部署Django專案(超詳細圖文教程) —— Part2. 使用Nginx, Gunicorn, virtualenv, supervisor 部署Django應用阿里DjangoNginx
- 寶塔皮膚成功部署Django專案流程Django
- django專案部署到centos,踩的坑DjangoCentOS
- Ubuntu Apache下部署Django2專案UbuntuApacheDjango
- 【轉載】阿里雲ECS centos7配置jdk-tomcat-mysql 並部署javaweb專案阿里CentOSJDKTomcatMySqlJavaWeb
- centos8-django專案部署 nginx+uwsgiCentOSDjangoNginx
- 在centos8使用Docker部署Django專案CentOSDockerDjango
- 伺服器(Aliyun)部署Django專案(Ubunto版)伺服器Django
- 部署Django到阿里雲伺服器教程Django阿里伺服器
- 如何在阿里雲上部署django(番外篇)阿里Django
- vue+express+mysql專案總結(node專案部署阿里雲通用)VueExpressMySql阿里
- CentOS下寶塔部署Django專案的詳細教程CentOSDjango
- django專案在uwsgi+nginx上部署遇到的坑DjangoNginx
- centos+nginx+uwsgi部署django專案上線詳解CentOSNginxDjango
- 專案完成小結 - Django-React-Docker-Swag部署配置DjangoReactDocker
- Windows下使用Apache和mod_wsgi部署django專案WindowsApacheDjango
- 騰訊雲伺服器 Django專案部署 傻瓜式部署全流程 (一)伺服器Django
- 一學就會的django專案伺服器部署nginx-uwsgi-django/buildDjango伺服器NginxUI
- 打造專屬測試平臺4-使用Docker部署Django專案DockerDjango
- 如何在阿里雲上部署 Django 應用程式阿里Django
- mac osx 上面部署Django專案 apache+mysql+mod_wsgiMacDjangoApacheMySql
- django專案使用Django