前面說完了此項目的建立及數據模型設計的過程。若是未看過,能夠到這裏查看,而且項目源碼已經放大到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安裝正確併成功啓動:
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/#top和http://django-china.cn/topic/124/講的很詳細。
以後訪問站點:http://127.0.0.1 便可查看效果