django開發我的簡易Blog—nginx+uwsgin+django1.6+mysql 部署到CentOS6.5

前面說完了此項目的建立及數據模型設計的過程。若是未看過,能夠到這裏查看,而且項目源碼已經放大到github上,能夠去這裏下載。css

代碼也已經部署到sina sea上,地址爲http://fengzheng.sinaapp.com/html

先跳過視圖展現及表單處理的部分,先介紹一下如何部署。node

標題中已經把部署環境介紹的很清楚了:python

	服務器:CentOS6.5  其實就是個人開發機
	mysql:Server version: 5.1.73 Source distribution
	nginx版本: nginx/1.6.0
	python版本:2.7.3
	django版本:(1, 6, 5, 'final', 0)
	uwsgi

下面介紹一下個人部署過程,僅僅是個人部署過程,針對不一樣的配置可能會有所不一樣,僅供參考。mysql

有些軟件須要在線安裝,而linux的默認源是國外的,下載速度特別慢,能夠先設置一個國內源,我這裏設置的是163源,下載速度仍是很快的.linux

一、進入存放源配置的文件夾nginx

cd /etc/yum.repos.dgit

二、備份默認源github

mv ./CentOS-Base.repo ./CentOS-Base.repo.backupsql

三、使用wget下載163的源

wget http://mirrors.163.com/.help/CentOS-Base-163.repo

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

四、把下載下來的文件CentOS-Base-163.repo設置爲默認源

mv CentOS-Base-163.repo CentOS-Base.repo

mv CentOS6-Base-163.repo CentOS-Base.repo

1.安裝mysql:

CentOS6.5默認的mysql版本就是5.1.73,因此若是不是有特殊要求的話,能夠不進行更改。若是有要求的話,能夠卸載自帶的mysql,從新安裝須要的版本。

這裏有一篇介紹用yum命令安裝mysql的文章,能夠參考安裝。固然,還能夠下載源碼,解壓縮,編譯,安裝。過程就不作過多介紹了。

mysql的經常使用命令:

	檢查mysql服務狀態
	# service mysqld status

	啓動mysql服務,要啓動mysql必須有權限 通常以前會用su命令,輸入管理員密碼
	# service mysqld start
	
	中止mysql服務
    # service mysqld stop

	重啓
	# service mysqld restart
    
	登陸 用root身份
	# mysql -u root –p

	顯示全部數據庫
	# show databases;

	使用myblog數據庫
	# use myblog;

	顯示全部表
	# show tables;

2.升級python到2.7.3:

因爲CentOS6.5默認的python版本是2.6的版本,因此須要升級。下面給出源碼安裝的方法:

#下載python2.7.3源碼壓縮包
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2

#解壓縮
tar xf Python-2.7.3.tar.bz2

#進入解壓縮後的目錄
cd Python-2.7.3

#配置及環境檢查
./configure

#安裝
make install

安裝以後,在終端窗口中輸入python,能夠查看python版本是否已是2.7.3的版本。

注:這樣升級以後可能會致使yum命令失效,

由於yum依賴於ContOS系統默認的python版本,而升級python以後,yum腳本中的python版本被修改成最新版本,此時須要改回爲原來的python版本,ContOS6.5默認的python版本爲python2.6.6,解決方法以下:

進入yum所在目錄

cd /usr/bin

su

vim yum

將第一行
#!/usr/bin/python2.7
改成:
#!/usr/bin/python2.6

輸入:wq! 強制保存

3.安裝MySQLdb模塊:

須要到這裏下載源碼壓縮包,目前最新版本是1.2.3。安裝過程:

cd /home/fengzheng/Soft/  #進入壓縮包所在目錄

tar -zxf MySQL-python-1.2.3.tar.gz  #解壓

cd MySQL-python-1.2.3  #進入解壓後的目錄

python setup.py build #編譯

python setup.py install #安裝

安裝完成後,能夠在終端窗口中輸入如下命令測試是否安裝成功,若是沒有出現錯誤信息,則說明安裝成功。

python
import MySQLdb  

4.安裝django:

這個很少說,能夠到django官網下載源碼,而後用命令進行源碼安裝:

cd /home/fengzheng/Soft/

tar -zxf Django-1.6.5.tar.gz

cd Django-1.6.5/

python setup.py install

 

也能夠用官網上提供的在線安裝方法,須要pip的支持:pip install Django==1.6.5

5.安裝uwsgi:

export LDFLAGS="-Xlinker --no-as-needed"
$ pip install uwsgi

測試uwsgi是否安裝成功:

新建一個uwsgiTest.py文件,代碼以下:

#-*- coding:utf-8 -*-

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

進入文件所在目錄,執行命令:

uwsgi --http :1989 --wsgi-file uwsgiTest.py

以後,在瀏覽器訪問http://127.0.0.1:1989 ,若是出現Hello uwsgi字樣,說明uwsgi安裝成功。

6.安裝nginx:

這裏下載CentOS6.x所需的nginx所需的rpm文件。運行命令:

su

rpm –ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

yum install nginx

nginx經常使用命令:

#查看nginx安裝位置:
whereis nginx

#查看ngin狀態
service nginx status

啓動Nginx:
/usr/sbin/nginx 
或者直接輸入 nginx 
或者 service nginx start 

#中止nginx
service nginx stop

#重啓
service nginx restart
或者
nginx -s  reload

注:啓動服務必須具備管理員權限 即以前要有su命令


有時候會出現異常:nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

出現此問題是由於80端口被Nginx本身佔用,解決方法爲:

fuser -k 80/tcp

而後再啓動Nginx

最後訪問http://127.0.0.1 ,看到以下界面,說明nginx安裝正確併成功啓動:

image

7.配置uwsgi與nginx支持django:

uwsgi和nginx均可以單獨工做,咱們要把這二者聯繫起來,用來支持django項目。

首先咱們打開項目所在目錄,在根目錄,也就是manage.py所在的目錄新建一個django_uwsgi.py的文件,這個文件是要django以uwsgi的方式來運行,文件內容以下:代碼中註釋的那兩行是manage.py運行django的方式,能夠看出有什麼不一樣。

"""
WSGI config for fengzhengBlog project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/
"""

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fengzhengBlog.settings")

#from django.core.wsgi import get_wsgi_application
#application = get_wsgi_application()
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

爲了實現Nginx與uWSGI的鏈接,二者之間將採用soket來通信方式,還須要在項目根目錄,即和上面的django_uwsgi.py同一目錄新建一個文件來實現,文件格式能夠是xml,命名爲django_socket.xml,內容以下:

<uwsgi>
    <socket>:8077</socket>
        <chdir></chdir>
        <module>django_uwsgi</module><!-- 指定模塊 即上面建立的django_uwsgi.py的名稱 -->
        <processes>4</processes> <!-- 進程數 --> 
    <daemonize>uwsgi.log</daemonize>
</uwsgi>

或者是ini格式,命名爲django_socket.ini,內容以下:

[uwsgi]
vhost = false
socket = 127.0.0.1:8077      ;通訊端口
master = true
enable-threads = true
workers = 4
wsgi-file = django_uwsgi.py   ;指定模塊 即上面建立的django_uwsgi.py

配置nginx,用weheris nginx命令查看nginx的安裝目錄在/etc/nginx,進入此目錄,用vim打開nginx.conf配置文件,修改內容:

user  nginx;
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;  #80端口
			server_name 127.0.0.1;  #最後訪問的地址
			access_log /home/fengzheng/mypython/access.log;  #日誌
			error_log /home/fengzheng/mypython/error.log;
			#charset koi8-r;

			#access_log  logs/host.access.log  main;

			location / {
				include        uwsgi_params;
				uwsgi_pass    127.0.0.1:8077;  #前面django_socket.xml或django_socket.ini文件中配置的端口
			}

			#error_page  404              /404.html;

			# redirect server error pages to the static page /50x.html
			#
			error_page   500 502 503 504  /50x.html;
		
			#如下配置的靜態文件
			location /css/ {
					alias  /home/fengzheng/blog/fengzhengBlog/fengzhengBlog/css/; }

			location /js/ {
					alias  /home/fengzheng/blog/fengzhengBlog/fengzhengBlog/js/;       
			}

			location /images/ {
					alias  /home/fengzheng/blog/fengzhengBlog/fengzhengBlog/images/;        }

			location /ueEditor/ {
					alias  /home/fengzheng/blog/fengzhengBlog/fengzhengBlog/ueEditor/;        }
	}
	#如下是另外一個項目配置
	server {

			listen   81;
			server_name 127.0.0.1;
			access_log /home/fengzheng/mypython/accessue.log;
			error_log /home/fengzheng/mypython/errorue.log;
			#charset koi8-r;

			#access_log  logs/host.access.log  main;

			location / {
			include        uwsgi_params;
			uwsgi_pass    127.0.0.1:8088;
			}

			#error_page  404              /404.html;

			# redirect server error pages to the static page /50x.html
			#
			error_page   500 502 503 504  /50x.html;
			location = /50x.html {
			root   html;
			}

			location /upload/ {
			alias  /home/fengzheng/ueEditor_django/ueEditor_django/upload/; }

			location /UE/ {
			alias  /home/fengzheng/ueEditor_django/ueEditor_django/UE/;        }
			}

}

上面配置了兩個server,便可以支持兩個django站點。若是隻有一個,能夠將下面的server節點去掉。注意location節點的配置,如:

location /css/ {
                    alias  /home/fengzheng/blog/fengzhengBlog/fengzhengBlog/css/; }

location後面跟的是項目中的靜態文件的目錄先後都要有「/」,alias後面是靜態文件所在的目錄。對應urls.py中的路由配置:

( r'^css/(?P<path>.*)$', 'django.views.static.serve',
            { 'document_root': ROOT+'/css' }
    ),
    ( r'^js/(?P<path>.*)$', 'django.views.static.serve',
            { 'document_root': ROOT+'/js' }
    ),
    ( r'^images/(?P<path>.*)$', 'django.views.static.serve',
            { 'document_root': ROOT+'/images' }
    ),
    ( r'^ueEditor/(?P<path>.*)$', 'django.views.static.serve',
            { 'document_root': ROOT+'/ueEditor' }
    ),

在上面的設置後,可讓Nginx來處理靜態文件 。非靜態文件請求Nginx會發給 socket 8077,而後讓uWSGI來進行處理。

8.啓動網站:

配置完成後,重啓nginx :  nginx -s reload

啓動uwsgi服務:

進入項目根目錄,即前面建立的django_uwsgi.py所在的目錄。

運行以下命令,使用django_socket.xml配置:

uwsgi -x django_socket.xml

若是系統不支持-x命令,能夠運行下面的命令啓動django_socket.ini配置:

uwsgi --ini django_socket.ini

啓動成功後,會獲得以下信息:

[uWSGI] getting INI configuration from django_socket.ini
*** Starting uWSGI 2.0.5.1 (64bit) on [Thu Jul 17 01:02:06 2014] ***
compiled with version: 4.4.7 20120313 (Red Hat 4.4.7-4) on 22 June 2014 20:36:27
os: Linux-2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013
nodename: localhost
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /home/fengzheng/blog/fengzhengBlog
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
your processes number limit is 1024
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 socket 0 bound to TCP address 127.0.0.1:8077 fd 3
Python version: 2.7.3 (default, Jun 20 2014, 02:55:10)  [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]
Python main interpreter initialized at 0x17db280
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 363840 bytes (355 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 10 seconds on interpreter 0x17db280 pid: 7871 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 7871)
spawned uWSGI worker 1 (pid: 7873, cores: 1)
spawned uWSGI worker 2 (pid: 7874, cores: 1)
spawned uWSGI worker 3 (pid: 7875, cores: 1)
spawned uWSGI worker 4 (pid: 7876, cores: 1)


查看上述信息,發現啓動成功,開啓了4個線程。

更詳細的安裝配置可查看http://django-china.cn/topic/101/#tophttp://django-china.cn/topic/124/講的很詳細。

以後訪問站點:http://127.0.0.1 便可查看效果

相關文章
相關標籤/搜索