1. 程式人生 > >django+nginx+uwsgi+virtualenv部署站點示例

django+nginx+uwsgi+virtualenv部署站點示例

按照uwsgi官方文件部署nginx-uwsgi-django的過程中遇到了很多問題,官方文件可能存在錯誤或不全,比如:

  • nginx配置檔案沒有寫http{}和event{}部分,是無法啟動nginx服務的
  • nginx配置檔案中也沒有指定使用者和MIME格式,這會導致網頁不能正確載入靜態檔案(css/js);
  • 官方給出的例中使用了virtualenv,如果是在真實環境中執行uwsgi,將出現ImportError, 需要先將虛擬環境中安裝的python site-packages先新增到真實環境的python環境變數中去

引數:

CentOS主機地址192.168.0.105

環境拓撲:

整個web通訊關係為:客戶端與nginx之間通過http通訊,nginx通過socket與uwsgi伺服器通訊,uwsgi伺服器與Django通過wsgi協議通訊。因此,整個部署過程就是完成這些部件之間的通訊配置。

Step1: 確認Django專案已經可以自己正常執行:

python manage.py runserver 0.0.0.0:9000

確認可以正常訪問網站

Step2:將虛擬環境中的python路徑新增到真實環境的環境變數中(因為本例中Django是在virtualenv中安裝的,如果不存在virtualenv則跳過這一步)

在project目錄下建立wsgi.py檔案,內容如下:(注意)

import os,sys
sys.path.append("/virtualenv/mezzanine/lib/python2.7/site-packages")
sys.path.append("/virtualenv/mezzanine/mezzsite")from django.core.wsgi import get_wsgi_application
from mezzanine.utils.conf import real_project_name
os.environ.setdefault("DJANGO_SETTINGS_MODULE","%s.settings" % real_project_name("mezzsite"))
application = get_wsgi_application()

Step3:使用uwsgi訪問網站,確保uwsgi配置正確,可以正常工作:

首先在Linux真實環境(不是virtualenv)中安裝好uwsgi

pip install uwsgi

在wsgi.py同級目錄下,執行命令開啟uwsgi伺服器(也可以使用--wsgi-file來執行,點選檢視更多引數):

[[email protected] mezzsite]# uwsgi --http :9000 --module wsgi
*** Starting uWSGI 2.0.15 (64bit) on [Thu Dec 7 05:48:11 2017] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-16) on 06 December 2017 23:35:53
os: Linux-3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017
nodename: 192.168.0.105
machine: x86_64
clock source: unix
detected number of CPU cores: 2
current working directory: /virtualenv/mezzanine/mezzsite
detected binary path: /usr/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 7271
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI http bound on :9000 fd 4
spawned uWSGI http 1 (pid: 21615)
uwsgi socket 0 bound to TCP address 127.0.0.1:45292 (port auto-assigned) fd 3
Python version: 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x1361ff0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72760 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x1361ff0 pid: 21614 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 21614, cores: 1)

此時在瀏覽器中開啟192.168.0.105:9000即可訪問網站,但此時css和js等靜態檔案都無法載入,所以網站沒有樣式。注意: 在這一步中,我們用--http選項指定了可以直接通過9000埠對外提供http服務,稍後會將uwsgi與nginx進行關聯,就不是用--http了,而是通過socket通訊。

Step4: 配置nginx,使nginx與uwsgi用socket相關聯,並對外提供http服務:

首先安裝nginx: yum -y install nginx

安裝完成後,修改nginx的配置檔案如下:

user root;                    #nginx需要對Django專案及其所有父目錄有執行許可權
worker_processes 8;
http{
include /etc/nginx/mime.types;           #點選檢視這兩行的作用
default_type application/octet-stream;

server {
listen 8080;    #監聽埠8080
server_name 192.168.0.105; #nginx伺服器地址或主機名(在瀏覽器中訪問192.168.0.105:8080)
charset utf-8;  #設定編碼格式為utf-8
client_max_body_size 75M; # adjust to taste
#設定nginx的url與django專案中的檔案對應關係:
location /media {    
alias /virtualenv/mezzanine/mezzsite/static/media; 
}
location /static {
alias /virtualenv/mezzanine/mezzsite/static; # Django靜態檔案目錄在系統中的絕對路徑
}
location / {                                                     #對除了上面兩個(/media和/static)url外的所有請求,都由下面定義
uwsgi_pass 192.168.0.105:9000;       #交由uwsgi伺服器進行處理,socket為192.168.0.105:9000,相應的,在uwsgi.ini檔案中要指定與此相同的socket
include /etc/nginx/uwsgi_params;       # uwsgi_params是nginx和uwsgi之間的引數對應表,無需修改,在此處引用進去即可
}
}}
events {
worker_connections 1024; ## Default: 1024
}

配置好nginx後,先啟動uwsgi伺服器,兩種方法:

  • 可以在wsgi.py檔案同級目錄下執行命令:

uwsgi --socket 192.168.0.105:9000 --module wsgi

  • 也可以通過init檔案的方式啟動uwsgi:

在任一目錄下(本例中在與nginx.conf同級目錄下)建立一個檔案,命名為uwsgi.ini(只要字尾是ini即可),新增如下內容:

[uwsgi]
chdir = /virtualenv/mezzanine/mezzsite     #django工程的目錄
wsgi-file = /virtualenv/mezzanine/mezzsite/wsgi.py  #wsgi.py檔案的絕對路徑
home = /virtualenv/mezzanine/   #如果有虛擬環境,則填虛擬環境的目錄路徑(可選)
master = true
processes = 2
socket =192.168.0.105:9000   #指定一個用於與nginx通訊的socket
vacuum = true     #退出時清理環境
buffer-size = 65536  #最大緩衝區,如果設定得太小,請求的資料超過buffer-size的話,網站會起不來

儲存後在uwsgi.ini同級目錄下,執行命令啟動uwsgi:

uwsgi --ini uwsgi.ini

uwsgi伺服器啟動後,啟動nginx服務:

service nginx start

Step5: 通過nginx訪問站點:

此時,可以通過在瀏覽器中輸入192.168.0.105:8080成功的訪問站點了,且樣式都可以正確載入了。

相關推薦

django+nginx+uwsgi+virtualenv部署站點示例

按照uwsgi官方文件部署nginx-uwsgi-django的過程中遇到了很多問題,官方文件可能存在錯誤或不全,比如: nginx配置檔案沒有寫http{}和event{}部分,是無法啟動nginx服務的nginx配置檔案中也沒有指定使用者和MIME格式,這會導致網頁不

django+nginx+uwsgi部署web站點

uwsgi+nginx+django環境:django:1.8.16 python:2.7.13pip:2.7uwsgi:2.0.15project路徑: /opt/cmdb/Uwsgi的安裝配置1、安裝python2.7 (省略安裝過程)2、安裝pip2.7 (省略安裝過程)3、安裝uwsgi(註意:要用

Django+Nginx+uWSGI部署

3.5 退出 後臺運行 nbsp 前端 ups python gin 使用 一.介紹 Django的部署有多種方式,采用Nginx+uWSGI的方式是最常見的一種方式。在這種方式中,將Nginx作為服務器前端,接收Web的所有請求,統一管理請求。Nginx自己處理所有靜態

Python3+django+nginx+uwsgi使用場景部署

backup tex gen rust 進程 靜態文件 lang 分享圖片 /etc/ 1 環境介紹和準備Python3+django+nginx+uwsgi使用場景部署 當我們寫完一套完整的網站功能,我們需要實時在生產環境上線,並需要容納高並發的訪問請求。所以我們需要

Ubuntu16下部署Django+Nginx+uwsgi

try_files 入口 子進程 nag mit available ubun rod worker 1.更新apt-get apt-get update apt-get upgrade 2.安裝Nginx apt-get install nginx 然後在瀏覽器輸入IP地

Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)

發生 manage virtual 反向代理服務器 centos 開源 -h sts mage 項目部署教程 在線演示 1.1.原理介紹 django 一個基於python的開源web框架 uwsgi 一是一個web服務器,也可以當做中間件 nginx 常用高

Nginx+uWsgi生產部署Django

web服務器 上傳 完成 分享圖片 ram onf utf targe 還需 部署得過程很簡單,部署得核心在於,為什麽要這樣做,每一個參數代表什麽意思,最終的目的是得了解,一些基概念性的東西。 uWsgi簡介 說Uwsgi之前,先說一下Wsgi。 什麽是Wsgi?

在Centos7 部署Python3 + Django + Nginx + Uwsgi

3.6 left python3.6 make centos pre 環境 ons 為我 1.更新Python的版本  根據你項目所用的Python版本更新Python ,如果你的項目運行在Python2.x那就不用更新,因為Centos7自帶Python2.7.因為我的項

centos+django+nginx+uwsgi 部署手記

1.安裝anaconda配置相關python環境 2.uwsgi配置 (1)安裝uwsgi pip install uwsgi Exception: you need a C compiler to build uWSGI yum install -y gcc gcc-c++

Linux生產環境下部署Django+Nginx+uwsgi

    本文是在上一篇 “ Linux作業系統下部署Jenkins環境,資料遷移(備機部署)以及主從節點的配置 ”基礎上進行延伸,Jenkins+Django+Nginx+uWSGI才是一套解決方案。     之所採用Djan

Centos7+nginx+uwsgi部署我的Django專案

前不久寫了個小的部落格專案,想著將它部署到伺服器上去,因為是第一次部署專案,有很多的東西都不這麼懂,走了很多的彎路,現在部署成功了,怕以後忘記了就記錄下筆記 首先我的專案結構如下: 關於伺服器的遠端連線,我用的伺服器是阿里雲的輕量應用伺服器,連線資料庫的軟體通過WinSCP來連線我的伺

React + Django + nginx + uwsgi 生產環境部署(一步一步教你從開發環境到線上環境)

剛剛在本地測試環境寫完專案,目前本地測試是一切順利,未發現異常,準備打包到生產環境伺服器上. 前端React + antd + React-Router + axios 後端Python3.6 + Django1.10.1 腳手架用的是create-rea

python3.x +django + nginx + uwsgi 搭建web服務

python3 介紹 wsgi str 過程 ron 開發 網站 經歷 最近一直在用django開發自己的網站、在開發和線上環境的對接過程中遇到了許多的坑、所以想以一個老鳥的經歷來寫一下怎麽 搭建web服務 一、python3.x 、django 、nginx 、uwsgi

centos7.2下pip3 + python3.5 + django + nginx + uwsgi

family 9.png logs art ews 安裝 個人 ont 安裝redis Centos7.2 安裝python 3.5及pip安裝 須知:1. centos自帶python2.7 2. 此教程適合大多數linux系統,本文以centos7.2為例 安裝pyth

django + nginx + uwsgi + websocket

while dmi alias stat rect -- 狀態 mode threads   最近使用django框架做了一個簡單的聊天機器人demo, 開發的過程中使用了django自帶的websocket模塊,當使用django框架自帶的wsgi服務去啟動的話,沒有什麽

django+nginx+uwsgi搭建踩到的各種坑

  之前實習的時候搭建過一次,當初搭的時候順風順水,遇到的小坑也比較容易解決,這次在自己的機器和伺服器上踩到了各種各樣的坑 我一一列舉 希望可以幫到遇到同樣問題的人吧。 Error one : 靜態檔案無法載入         在專

Django專案上線:雲伺服器+Django+nginx+uwsgi

問題:在本地專案已經完成,現在我們部署到雲伺服器上,筆者因為是學生黨,所以使用了免費的華為雲,當然網上還有很多其他的可以選擇 一、雲伺服器的使用      1,連線雲伺服器,雲伺服器自帶遠端連線(不好用)           使用者名稱root,密碼是自己申請時候建

nginx+uwsgi+djangos部署專案完整

1、基本資訊 Linux 版本:SentOS7.4 Python 版本:3.7.1 2、下載 uWSGI pip3 install uwsgi uwsgi 主要的任務是座位分發路由的伺服器。 先寫一個測試檔案,測試 uwsgi 是否可以正常使用。 # test.py def application(env,

Nginx + uwsgi 簡單部署 Djnago 視訊工具 web 專案(www.videotools.cn)

視訊工具: http://www.videotools.cn 環境:ubuntu騰訊雲主機docker容器內 一、uwsgi 安裝與配置 1.uwsgi 安裝 pip install uwsgi 2.uwsgi 配置 在專案根目錄下新建檔案:video_tool

Django Nginx+uwsgi 安裝配置

在前面的章節中我們使用 python manage.py runserver 來執行伺服器。這隻適用測試環境中使用。 正式釋出的服務,我們需要一個可以穩定而持續的伺服器,比如apache, Nginx, lighttpd等,本文將以 Nginx 為例。 安裝基礎開發包