Linux下Nginx+Django+uWsgi+MySQL多站點虛擬環境搭建

本文章爲各位介紹Linux下Nginx+Django+uWsgi+MySQL多站點虛擬環境搭建希望文章能對各位有所幫助哦。


環境說明

Linux : rhel 5.3
nginx:nginx-1.6.2
python:2.7.9
django: 1.6.7
uwsgi: 2.0.10

注意,要預先裝好編譯環境必備的開發包及libxml2,python-devel,pcre-devel,mysql-devel

2. 軟件下載地址

nginx http://nginx.org/download/nginx-1.6.2.tar.gz
Python https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
Virtualenv https://pypi.python.org/packages/source/v/virtualenv/virtualenv-12.0.7.tar.gz#md5=e08796f79d112f3bfa6653cc10840114
Django https://www.djangoproject.com/download/1.6.7/tarball
uwsgi http://projects.unbit.it/downloads/uwsgi-2.0.10.tar.gz
MySQL-python https://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.5.zip#md5=654f75b302db6ed8dc5a898c625e030c

3. 軟件安裝

安裝nginx


# yum install pcre-devel gcc openssl-devel –y
# cd /usr/local/src/django-env
# tar -zxvf nginx-1.6.2.tar.gz
# cd nginx-1.6.2
# sed -i -e 's/1.6.2//g' -e 's/nginx\//WS/g' -e 's/"NGINX"/"WS"/g' src/core/nginx.h
# useradd webadmin
# ./configure --user=webadmin --group=webadmin --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
# make && make install

安裝python


# cd /usr/local/src/django-env
# tar -zxvf Python-2.7.9.tgz
# cd Python-2.7.9
# ./configure --prefix=/usr/local/python2.7
# make && make install

安裝virtualenv

# cd /usr/local/src/django-env
# tar –zxvf virtualenv-12.0.7.tar.gz
# cd virtualenv-12.0.7
# /usr/local/python2.7/bin/python setup.py install

構建虛擬環境


# cd /usr/local/python2.7/bin
# ./virtualenv /home/webadmin/virtualenv/tools
New python executable in /home/webadmin/tools/bin/python
Installing setuptools, pip...done.

進入並查看虛擬環境

進入虛擬環境在虛擬環境(長前綴的都表示在虛擬環境中的操作),默認會安裝好easy_install這類工具


# source /home/webadmin/virtualenv/tools/bin/activate (退出執行命令 deactivate)
(tools)[[email protected] bin]#
(tools)[[email protected] bin]# python -V
Python 2.7.9

安裝Django-1.5.4


(tools)[[email protected] ~]# cd /usr/local/src/django-env/
(tools)[[email protected] django-env]# tar -zxvf Django-1.5.4.tar.gz
(tools)[[email protected] django-env]# cd Django-1.6.7
(tools)[[email protected] Django-1.6.7]# python setup.py install

安裝uwsgi

(tools)[[email protected] ~]# cd /usr/local/src/django-env/
(tools)[[email protected] django-env]# tar -zxvf uwsgi-2.0.10.tar.gz
(tools)[[email protected] django-env]# cd uwsgi-2.0.10
(tools)[[email protected] uwsgi-2.0.10]# python uwsgiconfig.py --build
(tools)[[email protected] uwsgi-2.0.10]# python setup.py install

安裝mysql-python

(tools)[[email protected] ~]# cd /usr/local/src/django-env/
(tools)[[email protected] django-env]# unzip MySQL-python-1.2.5.zip
(tools)[[email protected] django-env]# cd MySQL-python-1.2.5
(tools)[[email protected] MySQL-python-1.2.5]# python setup.py install

注意事項:

如果系統沒有安裝mysql-devel包,在安裝MySQL-python的時候會報如下錯誤:

Traceback (most recent call last):
File "setup.py", line 16, in <module>
metadata, options = get_config()
File "/root/lzh/MySQL-python-1.2.2/setup_posix.py", line 43, in get_config
libs = mysql_config("libs_r")
File "/root/lzh/MySQL-python-1.2.2/setup_posix.py", line 24, in mysql_config
raise EnvironmentError, "%s not found" % mysql_config.path
EnvironmentError: mysql_config not found

4. 軟件配置

配置django專案

部署代碼


(tools)[[email protected] ~]# mkdir /home/webadmin/djangoproj/tools/ -p
(tools)[[email protected] tools]# unzip tools.zip
(tools)[[email protected] tools]# ls
dmc logs manage.py plugins src static templates tools tools.zip

在tools的專案配置文件目錄(即setting.py所在目錄),檢查文件wsgi.py

(tools)[[email protected] tools]# cd tools
(tools)[[email protected] tools]# cat wsgi.py
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tools.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

同級目錄下,創建uwsgi的啓動參數的xml文件(wsgi.xml)

<uwsgi>
<socket>127.0.0.1:9090</socket>
<listen>20</listen>
<master>true</master>
<pidfile>/home/webadmin/logs/tools/uwsgi/uwsgi.pid</pidfile>
<processes>4</processes>
<module>wsgi</module>#就是上面那個wsgi.py文件
<pythonpath>/home/webadmin/djangoproj/tools/tools</pythonpath>

#建立專案的路徑(此項需要注意,在虛擬環境中需要配置到wsgi所在目錄;在非虛擬環境中,只需要配置到專案目錄即可)

<profiler>true</profiler>
<memory-report>true</memory-report>
<enable-threads>true</enable-threads>
<logdate>true</logdate>
<limit-as>6048</limit-as>
<daemonize>/home/webadmin/logs/tools/uwsgi/tools.log</daemonize>
</uwsgi>

配置nginx


location /{
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
}
#靜態文件的處理(如果django中有處理靜態文件的了,就可以不要這個了;一般建議將靜態文件交給nginx處理好些)
location /static/ {
alias /home/webadmin/djangoproj/tools/static/;
expires 30d;
break;
}
#配置django admin需要的文件
location ~* ^/media/(css|img|js)/.*$ {
root /usr/local/lib/python2.6/site-packages/django/contrib/admin;
expires 30d;
break;
}
location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt|tar|mid|midi|wav|rtf|mpeg)$ {
access_log off;
break;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|bmp|js)$ {
expires 30d;
break;
}

檢查和修正目錄權限

(tools)[[email protected] webadmin]# chown webadmin:webadmin /home/webadmin/ -R

5. 啓動服務


(tools)[[email protected] ~]$ uwsgi -x /home/webadmin/djangoproj/tools/tools/wsgi.xml
# /usr/local/nginx/sbin/ngin

6. 多站點部署

重複從構建虛擬環境開始的步驟~然後在虛擬環境中安裝好要運行的實際環境,並啓動服務即可
配置nginx的虛擬主機即可
7. 故障檢查思路
查看的日志包括(nginx日志[Nginx配置文件中定義],uwsgi日志[xml文件中定義])
查看uwsgi日志的主要原因是看uwsgi是否正常接管了nginx下發的請求任務
uwsgi日志可查看django執行錯誤信息,也可在開發中通過print 列印調試
nginx錯誤日志/訪問日志查看
兩種日志區別在于,前者針對代碼程序級的錯誤,後者針對網路訪問級的錯誤
8. 一些建議

有時候使用killall uwsgi時不能將uwsgi幹掉,你可以uwsgi -s reload的方式重啓uwsgi或kill -HUP cat /pathto/uwsgi.pid
uWSG配置文件的進程數,可以根據實際情況分配。不要開得太大,否則機器可能會記憶體耗用太高。一般來說,對于一個小社區來說,4個進程已經足夠了。
一般情況下,可以編寫一下 stop.sh 腳本 來關閉uWSGI。
有了uWSGI爲什麽還需要nginx?nginx具備優秀的靜態內容處理能力,然後將動態內容轉發給uWSGI伺服器,這樣可以達到很好的客戶端回應。
9. 注意事項
日志裏面報類似于“Mon Mar 23 10:26:49 2015 – — no python application found, check your startup logs for errors —”這類錯誤時,需要好好檢查一下xml文件
這個文件裏面行尾不能有空格,參數左右也不能有空格,這個問題坑了我一晚上!!!
日志裏面報類似于”ImportError: No module named wsgi”這類錯誤,需要檢查一下你的xml文件的pythonpath選項
在虛擬環境下,需要配置到uwsgi所在目錄(非虛擬環境下,只需要配置到專案所在路徑即可)
10. 備注

啓動時,正常的日志:
Mon Mar 23 10:59:20 2015 – *** Starting uWSGI 2.0.10 (64bit) on [Mon Mar 23 10:59:20 2015] ***
Mon Mar 23 10:59:20 2015 – compiled with version: 4.1.2 20080704 (Red Hat 4.1.2-44) on 22 March 2015 22:08:54
Mon Mar 23 10:59:20 2015 – os: Linux-2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:39 EDT 2010
Mon Mar 23 10:59:20 2015 – nodename: tools.cyou.com
Mon Mar 23 10:59:20 2015 – machine: x86_64
Mon Mar 23 10:59:20 2015 – clock source: unix
Mon Mar 23 10:59:20 2015 – pcre jit disabled
Mon Mar 23 10:59:20 2015 – detected number of CPU cores: 16
Mon Mar 23 10:59:20 2015 – current working directory: /home/webadmin/djangoproj/tools
Mon Mar 23 10:59:20 2015 – writing pidfile to /home/webadmin/logs/tools/uwsgi/uwsgi.pid
Mon Mar 23 10:59:20 2015 – detected binary path: /home/webadmin/virtualenv/tools/bin/uwsgi
Mon Mar 23 10:59:20 2015 – your processes number limit is 268288
Mon Mar 23 10:59:20 2015 – limiting address space of processes…
Mon Mar 23 10:59:20 2015 – your process address space limit is 6341787648 bytes (6048 MB)
Mon Mar 23 10:59:20 2015 – your memory page size is 4096 bytes
Mon Mar 23 10:59:20 2015 – detected max file descriptor number: 1024
Mon Mar 23 10:59:20 2015 – lock engine: pthread robust mutexes
Mon Mar 23 10:59:20 2015 – thunder lock: disabled (you can enable it with –thunder-lock)
Mon Mar 23 10:59:20 2015 – uwsgi socket 0 bound to TCP address 127.0.0.1:9090 fd 3
Mon Mar 23 10:59:20 2015 – Python version: 2.7.9 (default, Mar 23 2015, 10:40:10) [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)]
Mon Mar 23 10:59:20 2015 – Python main interpreter initialized at 0x161c5580
Mon Mar 23 10:59:20 2015 – python threads support enabled
Mon Mar 23 10:59:20 2015 – your server socket listen backlog is limited to 20 connections
Mon Mar 23 10:59:20 2015 – your mercy for graceful operations on workers is 60 seconds
Mon Mar 23 10:59:20 2015 – mapped 363840 bytes (355 KB) for 4 cores
Mon Mar 23 10:59:20 2015 – *** Operational MODE: preforking ***
Mon Mar 23 10:59:20 2015 – added /home/webadmin/djangoproj/tools/tools/ to pythonpath.
Mon Mar 23 10:59:20 2015 – WSGI app 0 (mountpoint=”) ready in 0 seconds on interpreter 0x161c5580 pid: 24588 (default app)
Mon Mar 23 10:59:20 2015 – *** uWSGI is running in multiple interpreter mode ***
Mon Mar 23 10:59:20 2015 – spawned uWSGI master process (pid: 24588)
Mon Mar 23 10:59:20 2015 – spawned uWSGI worker 1 (pid: 24599, cores: 1)
Mon Mar 23 10:59:20 2015 – spawned uWSGI worker 2 (pid: 24600, cores: 1)
Mon Mar 23 10:59:20 2015 – spawned uWSGI worker 3 (pid: 24601, cores: 1)
Mon Mar 23 10:59:20 2015 – spawned uWSGI worker 4 (pid: 24602, cores: 1)

更多相關文章
  • 下面本文給各位介紹linux下Nginx+Django Admin界面無樣式問題解決方法,如果你碰到此問題可以一起來看看吧.Django增加admin後台管理:[[email protected] Byrd]# python manage.py syncdb #建表.設置管理員[[email protected] Byrd]# cat B
  • Vagrant是一個基于Ruby的工具,用于創建和部署虛擬化開發環境.docker 是一個開源的應用容器引擎,開發者可以打包他們的應用到一個可移植的容器中,然後發布到 Linux 上,也可以實現虛擬化.虛擬化: 其實就是因爲雲計算的催生的技術,目的是讓運行在上面的應用程序覺得自己獨占所有的資源.說白 ...
  • Nginx在Linux系統上運行有輕量.高效能.並發處理能力強.資源消耗小等功能,特別是能表態網站,表現更出色.所以作爲了Aapache的補充和替代,使用率越來越高.本文以Linux下配置VirtualHost虛擬主機的實例教程增加 Nginx 虛擬主機這裏假設大家的 Nginx 伺服器已經安裝好,
  • 今天因爲工具需要需要配置一個web環境,由于初次接觸在linux內核系統中配置Apache+mysql+PHP環境折騰了許久,下面整理了一篇安裝教程與大家一起交流一下吧.PHP之伺服器環境搭建安裝軟件准備1. Apa
  • hhvm下Nginx環境搭建步驟詳解
    下面來給各位同學介紹一個hhvm下Nginx環境搭建步驟詳解,有興趣的同學不防進入參考一下吧.HHVM(HipHop Virtual Machine)會將PHP代碼轉換成高級別的字節碼(通常稱爲中間語言).然後在運行時通過即時(JIT)編譯器將這些字節碼轉換爲x64的機器碼.在這些方面,HHVM十分
  • 雲主機Linux中環境搭建及WDCP安裝圖解
    下面給大家介紹一篇關于雲主機Linux中環境搭建及WDCP安裝圖解,希望此文章對使用阿裏雲主機的同學會有幫助哦.一.分區挂載,下面的操作將會把數據盤劃分爲一個分區來使用. 代碼如下 1.查看數據盤在沒有分區和格式化數據盤之前,使用 “df –h”命令,是無法看到數據盤的,可以使用“fdisk -l” ...
  • windows下JAVA敏捷開發環境搭建步驟教程
    編程開發環境搭建還是挺重要的,第一步是先要搭建環境,有了環境才能開展工作.本文我們來看看windows下JAVA敏捷開發環境搭建步驟.整個軟件專案分爲四個環境 開發本地環境.開發環境.測試環境.IDC環境.和傳統C++開發不一樣的模式是多了第一個開發本地環境.這是爲什麽呢,因爲目前大部分開發人員還是
  • Linux系統Web伺服器環境搭建LNMP一鍵安裝包詳解
    下面來給各位整理一個非常不錯的Linux系統Web伺服器環境搭建LNMP一鍵安裝包的配置詳解,有需要了解的朋友不防進入參考一下吧.最新版本:lnmp-2.5更新時間:20140702MD5值:D4D52E39066F041569B8EF2DAA033E15安裝說明:請保證伺服器能夠正常上網.yum命 ...
一周排行
  • 冒險島手遊影子雙刀BOSS遊戲攻略
    冒險島手遊影子雙刀怎麽打?在此款遊戲中有一些冒險島手遊影子雙刀怎麽打玩家在打主線任務時我們 ...
  • Google的PR對換連接有什麽作用,其實PR可換友情鏈接可參考其實是一個僞命題,因爲百度和谷歌不是一個搜索引擎,在國內百度占最大市場份額,現如今的谷歌更是連搜狗都不如了可是自從2011年好像在7月份的時候放開PR值
  • index.asp教程 上傳演示img_class.asp 獲取圖片的高度和寬度的類oupload.asp 上傳處理conn.asp 這個就不用我來說了.連接數據庫教程的.upload_class.asp采用艾恩無組
  • 本文我們來分析一下因爲Nginx主動監測模塊upstream check誤用導致在error log中出現大量no live upstream日志的原因及如何解決這個問題.如果nginx出現502 Bad GateW
  • Beamer  使用 tikz 宏包實現畫圖和動畫實例
    無意之中搜索到tikz這個宏包,它可以在beamer中用來繪制圖表,還可以結合到beame
  • 宮爆老奶奶2第15關怎麽過 15關通關攻略
    宮爆老奶奶2是一款騰訊獨家代理的新派Q萌休閑動作手遊,通關副本是一大特色,其中好多玩家都被 ...
  • 一.不能盲目相信用戶輸入在Web應用開發中,開發者最大的失誤往往是無條件地信任用戶輸入,假定用戶(即使是惡意用戶)總是受到浏覽器的限制,總是通過浏覽器和伺服器交互,從而打開了攻擊Web應用的大門.實際上,黑客們攻擊和 ...
  • FileUpload是一個.net中文件上傳控制了,我們可以直接使用.net中的FileUpload快速的實現文件上傳功能的開發應用,下面小編呢詳細的介紹一下FileUpload文件上傳過程中一些驗證判斷與上傳例子. ...
  • 修改更改Apple ID國家和地區體驗Apple Music教程
    Apple Music目前在中國還沒有上線了,但在其它的許多國家都已經上線了,如果沒有上線
  • 這段程序代碼是一款php $_POST.$_GET防注入程序哦,以前我們也寫過很多sql防注入程序,下面來看看這款防注入的php代碼吧.<?/*************************說明:判斷傳遞的變 ...