在研究院服務器部署指南(Django + uwsgi + nginx)

Django的部署能夠有不少方式,採用nginx+uwsgi的方式是其中比較常見的一種方式。html

在這種方式中,咱們的一般作法是,將nginx做爲服務器最前端,它將接收WEB的全部請求,統一管理請求。nginx把全部靜態請求本身來處理(這是NGINX的強項)。而後,NGINX將全部非靜態請求經過uwsgi傳遞給Django,由Django來進行處理,從而完成一次WEB請求。前端

可見,uwsgi的做用就相似一個橋接器。起到橋樑的做用。python

Linux的強項是用來作服務器,因此,下面的整個部署過程咱們選擇在Ubuntu下完成。nginx

2、必要的前提

2.1 準備知識web

django數據庫

一個基於python的開源web框架,請確保本身熟悉它的框架目錄結構。

uWSGIdjango

一個基於自有的uwsgi協議、wsgi協議和http服務協議的web網關

nginx後端

經常使用高性能代理服務器

wsgi.pytomcat

django項目攜帶的一個wsgi接口文件
若是項目名叫destiny的話,此文件就位於[destiny/destiny/wsgi.py]

服務器上的nginx

服務器上的nginx已經安裝好了,在/etc/nginx 目錄下,部署本身的django程序時,最好寫本身的conf配置文件,而後按照本身的配置文件啓動,配置文件寫法下面會說。安全

uwsgi的安裝

首先要在本身的目錄下安裝anaconda環境,安裝包在 /home/updatefiles 目錄下,是一個sh文件,啓動安裝一路回車便可,而後爲本身的項目建造虛擬環境,具體作法看這裏,建造虛擬環境後,安裝你的程序對應各類包,例如django-1.11.2等等,最後在虛擬環境中,使用pip安裝uwsgi

上面的工做都完成了,最後在虛擬環境中,使用pip安裝uwsgi

pip install uwsgi

測試uWSGI: 新建文件test.py,寫入如下內容

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

運行

uwsgi --http 0.0.0.0:8000 --wsgi-file test.py

若是端口占用,使用

lsof -i :8000

列出佔用端口的程序的pid號,並使用如下命令殺掉全部佔用端口的程序

sudo kill -9 pid

而後瀏覽 http://127.0.0.1:8000(或http://內網ip:8000、或http://外網ip:8000)查看效果,有」Hello World」輸出即安裝成功。

首先肯定你的django程序沒什麼問題了,再開始部署流程,每每會有但不只限於如下問題:

setting.py裏debug沒關

setting.py裏數據庫信息沒有更換爲服務器數據庫信息

setting.py裏沒有設置allow_host

setting.py裏沒有設置template或static目錄信息

 

創建單獨的uwsgi配置文件

首先,建議工程目錄採起這樣的結構

|--工程
   |
   |--Django程序
   |--setting

本身的工程目錄下,創建兩個文件夾,一個是django程序,一個是setting,用來裝部署配置文件。

在setting中創建如destiny.ini的配置文件

下面是個例子(以圖書管理系統爲例,把該改的地方改爲你本身的)

# backend_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /home/yangtz/booksManage

# Django's wsgi file
module          = booksManage.wsgi

 
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe),將socket寫入sock文件,安全又便捷
socket          = /home/yangtz/booksManage/booksManage/booksManage.sock
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = true

daemonize = /home/yangtz/booksManage/log/uwsgi.log

 

 

創建工程單獨的nginx配置文件 

在setting中創建如destiny.conf的配置文件, 
下面是個例子(以圖書管理系統爲例,把該改的地方改爲你本身的)

user www-data;
worker_processes auto;
pid /run/nginx.pid;
# 若是是非root用戶,user設爲nobody

events {
	worker_connections 768;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##

	# backend_nginx.conf

	# the upstream component nginx needs to connect to
        upstream bookmanager {
            server unix:/home/yangtz/booksManage/booksManage/booksManage.sock; #讀取uwsgi生成的socket文件中的socket信息
            # server 127.0.0.1:8000; # sever信息,有上邊sock文件,這個就能夠注掉了
        }
        # configuration of the server,最重要的部分
        server {
            # 你的服務站點掛載的端口號
            listen      4020;
            # the domain name it will serve for
            server_name 192.168.100.18; # 通常寫你服務器的ip或你的域名
            charset     utf-8;

            # access_log      /home/yangtz/webback/backend/log/nginx_access.log;
            # error_log       /home/yangtz/webback/backend/log/nginx_error.log;

            # max upload size
            client_max_body_size 75M;   # adjust to taste

            # Finally, 設置總目錄,實際就是映射到uwsgi的socket
            location / {
                uwsgi_pass  bookmanager;
                include     /etc/nginx/uwsgi_params; # the uwsgi_params file you install
            }
            
            # 若是有media或者靜態文件須要掛載就加上,先後端各自分開的,不加或者注掉就行
            # Django media
            # location /media  {
            #     alias /path/to/your/mysite/media;  # your Django project's media files - amend as required
            # }

            # location /static {
            #    alias /home/yangtz/webback/backend/static; # your Django project's static files - amend as required
            # }
        }


}

 

最後啓動uwsgi和nginx

uwsgi --ini  /×××/你的工程/setting/destiny.ini

nginx -c  /×××/你的工程/setting/destiny.conf (若是權限問題,你是root的話,能夠在前面加sudo)

若是是非root用戶,不能listen 1024如下的端口。

那麼只好,在你的conf文件中配置user nobody; listen <1024+>;

 

舒適提示:

使用 lsof -l 查看端口占用

kill 進程號 (殺掉進程,只能kill本身的進程)

 

前端代碼部署只需將包含前端代碼文件夾放到 tomcat/webapps下,而後到tomcat/bin裏啓動 ./startup.sh便可

相關文章
相關標籤/搜索