Nginx與uWSGI搭建Django應用程序

前言

之前幫女朋友做的一個 ‘享憶’ (大學生二手交易平臺),都是在本地演示,顯的有點low,剛好之前在Google Cloud Platform有註冊,就準備把 ‘享憶’放到我的服務器上(網站點這裏).主要利用到的技術就是Nginx和uWSGI.

Nginx

這裏就不介紹什麼是Nginx了,隨便谷歌一篇文章都比我解釋的清楚,省的在關公面前耍大刀。主要就是記錄一下整體的過程和遇到的問題。

配置

  1. 安裝
  2. 安裝完成後,找到nginx的安裝目錄,nginx默認配置文件是nginx.conf。
  3. cat nginx.conf, 應該可以看到類似以下內容(根據nginx的安裝目錄不同):
 include /etc/nginx/conf.d/*.conf;
 include /etc/nginx/sites-enabled/*;

這兩段意思是,引入confg.d 目錄下的以conf爲結尾的文件和sites-enabled下的所有文件。
你也可以其目錄,例如 sites-enabled和sites-available目錄中都有一個default 配置文件,裏面已經配置好了許多東西。
因爲之後我可能會將我的博客也放到服務器上,所以我需要爲應用程序單獨配置,所以我將sites-available目錄中的default文件複製一份到conf.d中(注意文件結尾).並修改一下內容:

server{
    ...
    root your project path
    ...
}

修改root 後半段爲你的前端目錄路徑,修改完成後保存,nginx 會幫你解析靜態文件。

uWSGI

1. 安裝   `sudo pip install uwsgi`

2. 確保你的django 後臺程序能夠運行, `python manage.py runserver`

3.  在你的後臺目錄中新建 uwsgi.ini 文件,輸入以下內容(注意修改相關內容)
[uwsgi]
socket = 127.0.0.1:9090 # (監聽的地址)
chdir= your backend project path
module=填寫你django後臺的wsgi文件 # (例如 xx.wsgi)
master = true         
processes=2
threads=2
max-requests=2000
chmod-socket=664
vacuum=true
daemonize = your backend project path/uwsgi.log
4. 再次打開剛纔nginx的配置文件,修改以下內容:
server{
    ...
    location /api/ {
        include /etc/nginx/uwsgin_params;
        uwsgi_pass 127.0.0.1:9090;
    }
    ...
}

這裏配置這麼多的東西,主要是爲了讓 nginx當檢測到路由中有api/(我後臺的接口是http:// xxx.xxx.xxx/api/xxx)就將流量通過uwsgi 轉發到django 應用程序 ,讓django程序處理。
這樣就完成了對一套完整的應用程序的處理:靜態文件讓nginx處理, 靜態文件訪問後臺api, 通過uwsgi轉發,讓django處理。

遇到的問題和需要注意的地方

  1. 我的前臺/後臺文件都放在github上,我配置了ssh key,但是在我git push的時候,出現這樣的情況:
Can't finish GitHub sharing process

Successfully created project 'Test' on GitHub, but initial commit failed:
*** Please tell me who you are. Run git config --global user.email "[email protected]" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: empty ident name (for (null)>) not allowed during executing git -c core.quotepath=false commit -m "Initial commit" --

意思是讓你配置好你的用戶名和郵箱。我嘗試通過命令

git config --global user.email "[email protected]"  
git config --global user.name "Your Name"

但是沒有效果,我就直接修改項目目錄下.git(隱藏目錄)中的config文件

[user]
    name = XXX(自己的名稱)
    email = XXXX(郵箱)
  1. 我的系統是Debian, 數據庫是mysql, 當我用普通用戶連接數據庫時,連接不上,只有root用戶纔可以,網上找到相關方法點這裏

  2. 每次修改完nginx 的配置文件後,需要執行以下命令,讓配置文件重新生效

(sudo) nginx -s reload / sudo systemctl reload nginx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章