Django專案上線:雲伺服器+Django+nginx+uwsgi
問題:在本地專案已經完成,現在我們部署到雲伺服器上,筆者因為是學生黨,所以使用了免費的華為雲,當然網上還有很多其他的可以選擇
一、雲伺服器的使用
1,連線雲伺服器,雲伺服器自帶遠端連線(不好用)
使用者名稱root,密碼是自己申請時候建立的
3,安裝xftp,方便往雲伺服器上傳輸必要檔案
二,往雲伺服器上安裝必要的環境
(1) 華為雲參考
需要安裝以下服務:
1,JDK
2,mysql(安裝你需要的資料庫,這裡使用5.7)
3,
(2)我們先將mysql資料庫整個遷移到雲伺服器
注意:在雲伺服器的mysql使用者名稱,密碼與你在本地伺服器的一致
mysqldump -u username -p --all-databases > all.sql #備份 #然後找到這個備份檔案將它通過xftp複製到雲伺服器上 #然後在xshell上登入後,恢復資料庫 mysql -u username -p < all.sql #恢復
登入之後就可以看到資料了
(3)切換到虛擬環境之下,安裝專案需要的module
以下是我的專案需要的模組,供參考
Package Version -------------- -------- asn1crypto 0.24.0 cffi 1.11.5 cryptography 2.3.1 Django 1.11.7 django-tinymce 2.7.0 idna 2.7 Pillow 5.2.0 pip 18.0 pycparser 2.19 PyMySQL 0.9.2 pytz 2018.5 setuptools 40.4.3 six 1.11.0 uWSGI 2.0.17.1 wheel 0.31.1
三,專案操作
Django專案結構如下:
此專案使用Django1.11.7,python3.5
axfhz1805/
├── app
├── axfhz1805
│ ├── __init__.py
│ ├── __pycache__
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static
|── templates
├── manage.py
├── uwsgi.ini #uwsgi配置檔案
├── uwsgi.log #uwsgi日誌檔案
└── uwsgi.pid #uwsgi程序檔案
(1)uwsgi.ini——自己建立的uwsgi配置檔案(當然還可以是其他格式的)參考uwsgi配置
[uwsgi]
# 使用nginx連線時 使用
socket=127.0.0.1:8010
# 直接作為web伺服器使用
#http=127.0.0.1:8010
# 配置工程目錄
chdir=/home/jgh/project/axfhz1805
# 配置專案的wsgi目錄。相對於工程目錄
wsgi-file=axfhz1805/wsgi.py
#virtualenv =/home/jgh/vir/py3.5/bin/python #設定虛擬環境路徑,不設定的話在會找不到django
#配置程序,執行緒資訊
processes=4
threads=2
enable-threads=True
master=True
#程序記錄
pidfile=uwsgi.pid
#日誌檔案
daemonize=uwsgi.log
(2)切換到虛擬環境下,啟動uwsgi
uwsgi --ini /home/jgh/project/axfhz1805/uwsgi.ini
以下結果:說明成功
[uWSGI] getting INI configuration from /home/jgh/project/axfhz1805/uwsgi.ini
(3)新建nginx配置檔案
(他有自己預設的配置檔案,直接修改容易出錯,為了不直接修改他的預設配置檔案,我們可以自己建立配置檔案)
配置檔案放在:/usr/share/nginx/之下,不然找不到
配置內容如下:
user root;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#這個是引入他的一些預設配置,可以註釋掉
#include /etc/nginx/conf.d/*.conf;
server {
listen 80;
#你的雲伺服器的公網ip地址
server_name 10.31.160.194;
charset utf-8;
#你的專案存放的位置,不包括專案名
root /home/jgh/project;
#指定首頁,Django中可以設定,這裡註釋掉
#index hello.html;
location / {
#你的uwsgi_params位置
include /etc/nginx/uwsgi_params;
#同你前面配置的uwsgi的socket
uwsgi_pass 127.0.0.1:8010;
}
#靜態資源位置
location /static{
#訪問/static就相當於訪問下面的路徑
alias /home/jgh/project/axfhz1805/static;
}
}
}
(4)測試及啟動nginx服務
#測試
nginx -t -c /usr/share/nginx/nginx.conf
#以下結果說明成功
nginx: the configuration file /usr/share/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/share/nginx/nginx.conf test is successful
#開啟之前我們先關閉系統自啟的nginx
nginx -s quit
#檢視是否已經關閉
ps -ef|grep nginx
#開啟
nginx -c /usr/share/nginx/nginx.conf
(4)在瀏覽器上輸入你雲伺服器的公網ip,就可以訪問啦。
注意:Django專案下,你要配置urls.py檔案加入: url(r'^$', views.home)
這樣只要輸入ip就能訪問專案主頁了
這裡講以下uwsgi 和 nginx的關係:
可能出現的問題:
(1)頁面 502錯誤
先檢視一下你的靜態資源是否可以訪問
示例:10.31.160.194/static/app/cart/cart.js 直接訪問靜態資源
如果不可以訪問,那就是nginx配置錯了
如果可以訪問,但是動態資源不能訪問,那麼就是uwsgi相關配置出現了錯誤
處理:1,清理瀏覽器快取
2,看看配置檔案有沒有錯誤
3,在uwsgi配置檔案中不需要指定python直譯器,它會自動找到你配置的虛擬環境
4,有時候還需要重啟一下你的伺服器