jiage666原創博客,轉載請申明
原始地址:https://www.cnblogs.com/jiage666/p/9674252.html
概況:ubuntu 16.04下部署django+nginx+uwsig+mysql
1.由於項目在本地開發時采用python3.6,因此需要確認ubuntu下版本,並配置默認版本為python3,參考鏈接
https://www.cnblogs.com/yifugui/p/8649864.html
2.安裝pip3
3.安裝django項目需要的依賴包,注意用pip3(由於virtualenv一直使用不成功,這里不用虛擬環境),
參考django項目打包鏈接
安裝過程中出現當前用戶沒有相關路徑的權限時先將其卸載,再重新安裝,腳本如下:
sudo -H pip3 uninstall xxx
sudo -H pip3 install xxx
后面用manage.py啟動django server時可能出現reload(sys)不存在錯誤,找到相應文件,修改引用,
解決方法參考鏈接
4.本地安裝xshell+xftp,用於向服務器傳輸工程文件,
參考xshell+xftp使用鏈接
工程文件上傳后需要修改settings.py下的靜態文件路徑
STATICFILES_DIRS=[(os.path.join(BASE_DIR,'static'))]
-->
STATIC_ROOT=[(os.path.join(BASE_DIR,'static'))]
5. 安裝mysql,創建與工程setting.py中同名的數據庫,配置訪問權限與端口。創建數據庫過程可以通過navcat實現,訪問權限配置通過腳本,參考mysql安裝及配置
5.1 修改mysql配置文件,允遠程主機訪問,將bind-address 設置為0.0.0.0
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
5.2 配置數據庫用戶、權限、密碼,在mysql命令行下實現,注意命令行格式
2.1 GRANT ALL PRIVILEGES ON *.* TO '用戶名'@'%' IDENTIFIED BY '密碼' WITH GRANT OPTION
2.2 FLUSH PRIVILEGES
5.3 用navcat遠程連接數據庫,並創建與工程setting.py中同名的數據庫,注意編碼選用UTF8,否則在生成有中文字段的數據表時會報錯
5.4 用navcat創建完成后為了安全起見,重新修改mysql配置文件,將bind-address 設置為127.0.0.1,只允許本地主機登錄
6.ubuntu下進入到工程manage.py所在文件夾,運行sudo python manage.py runserver 0.0.0.0:端口號 (端口號及其訪問權限需要在雲服務器控制台安全組中設置,參考鏈接)。本地瀏覽器遠程訪問該工程創建的server,訪問地址:遠程服務器公網IP:端口號。可以看到網頁成功加載。這么順利?當然是不可能的:)
可能遇到的問題:
6.1.由於pipy官網的xadmin版本太老,導致server運行時會報錯,需要從github下載最新版,下載解壓后將名為xadmin的文件夾放置工程目錄下,與manage.py同級,參考xadmin源文件安裝方法
6.2出現任何module not found的問題無腦pip3 install
6.3出現permission denied 的問題無腦sudo
6.4xftp能連接遠程服務器但是文件傳輸錯誤很大可能是文件夾寫權限沒有開通,ubuntu下通過chmod 777 dir(文件夾名)實現
6.5 啟動django server前需要先migrate,sudo python manage.py migrate 把model中的數據模型同步到數據庫中
到此為止,部署的工作已經完成八成左右了,不是還有nginx和uwsgi的安裝配置嗎?
陳獨秀同學,請你坐下,坐下
之所以這么說,是因為nginx和uwsgi的配置和項目的耦合不是很大,只需要把相應的路徑設置正確就行
7.安裝並配置uwsgi,參考鏈接
https://blog.csdn.net/u014615155/article/details/79222096
8.安裝並配置nginx,參考鏈接
https://blog.csdn.net/u014615155/article/details/79222096
9.確保nginx和uwsgi在配置文檔修改后已經重啟,確保nginx的對外端口在服務器的安全策略允許,在本地瀏覽器輸入服務器ip,bingo~
可能出現的問題:
9.1 nginx和uwsgi的安裝配置基本是固化的,除了項目路徑和ip端口需要自己指定
9.2 如果瀏覽器返回不正確,先重啟nginx和uwsgi,沒有什么是重啟一下不能解決的,如果有,重啟兩下:)
9.3 項目文件需要更新的話先關uwsgi 進程,更新完后再重啟nginx和uwsgi,又是重啟:)
相關腳本:
cd /home/ubuntu/imooc //進入uwsgi配置文件目錄
uwsgi --ini imooc_uwsgi.ini //運行配置文件
killall -9 uwsgi //關閉uwsgi進程
sudo service nginx restart //重啟nginx服務
/etc/init.d/nginx start # 啟動 //啟動nginx
kill -QUIT 主進程號 //停止nginx進程
10.玩的開心
一些坑
python3.6解釋器與3.5解釋器對django模板語法處理的區別:
1. 在3.6中,html文件中引用圖片資源方法為src={{MEDIA_URL}}{{XXXX.image}}
在3.5中,為src='{{MEDIA_URL}}{{XXXX.image}}'
在{}兩側多了單引號!
由於本地開發用的解釋器為3.6,而遠程服務器安裝的是3.5,導致部分圖片資源加載失敗
2.工程文件上傳到服務器后需要修改settings.py中的三個地方:
2.1DEBUG模式
DEBUG = True ----> False
2.2.遠程訪問IP設置
ALLOWED_HOSTS = ['127.0.0.1'] ----> ['0']
2.3.靜態資源路徑表示
STATICFILES_DIRS=[(os.path.join(BASE_DIR,'static'))]
-------->STATIC_ROOT=os.path.join(BASE_DIR,'static')
jiage666原創博客,轉載請申明
原始地址:https://www.cnblogs.com/jiage666/p/9674252.html
