1. 程式人生 > >Centos6.5 django專案apache部署。

Centos6.5 django專案apache部署。

前言

網上有關的教程千篇一律,都是無腦抄,自己都不驗證一遍就直接複製,毫無意義,我通過官方文件和自己摸索,總結了一套教程。

Django自帶Web服務功能,但那只是方便開發除錯,生產環境中一般將Django搭配Apache使用,mod_wsgi是用來溝通Django和Apache的橋樑。

本教程需要下載的檔案都是直接通過官網下載的,我已將本教程所用到的檔案打包上傳到雲盤,有需要的童鞋可以直接下載:

環境說明

作業系統:CentOS 6.7 64-bit

安裝基礎環境

yum -y install gcc make wget

安裝Python

安裝Python

複製程式碼

yum -y install zlib-devel openssl-devel
wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
tar xzf Python-2.7.12.tgz
cd Python-2.7.12/
./configure --prefix=/usr/local/python CFLAGS=-fPIC
make && make install
cd ../

複製程式碼

備註:不安裝zlib-devel的話,在安裝setuptools時會報錯。不安裝openssl-devel的話,在安裝django時會報錯。不加CFLAGS=-fPIC引數,安裝mod_wsgi時會報錯。

將Python加入環境變數

在/etc/profile檔案末尾新增以下內容:

export PATH=/usr/local/python/bin:$PATH

然後使配置檔案生效:

. /etc/profile

安裝setuptools

wget https://pypi.python.org/packages/6b/dd/a7de8caeeffab76bacf56972b3f090c12e0ae6932245abbce706690a6436/setuptools-28.3.0.tar.gz
tar xzf setuptools-28.3.0.tar.gz
cd setuptools-28.3.0/
python setup.py install
cd ../

安裝pip

wget https://pypi.python.org/packages/e7/a8/7556133689add8d1a54c0b14aeff0acb03c64707ce100ecd53934da1aa13/pip-8.1.2.tar.gz
tar xzf pip-8.1.2.tar.gz
cd pip-8.1.2/
python setup.py install
cd ../

安裝Apache

安裝apr

wget http://apache.fayea.com/apr/apr-1.5.2.tar.bz2
tar xjf apr-1.5.2.tar.bz2
cd apr-1.5.2/
./configure
make && make install
cd ../

安裝apr-util

wget http://apache.fayea.com/apr/apr-util-1.5.4.tar.bz2
tar xjf apr-util-1.5.4.tar.bz2
cd apr-util-1.5.4/
./configure --with-apr=/usr/local/apr/
make && make install
cd ../

安裝pcre

複製程式碼
yum -y install gcc-c++
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.bz2
tar xjf pcre-8.39.tar.bz2
cd pcre-8.39/
./configure --prefix=/usr/local/pcre
make && make install
cd ../
複製程式碼

備註:不安裝gcc-c++的話會報錯。

安裝httpd

複製程式碼
yum -y install perl
wget http://apache.fayea.com/httpd/httpd-2.4.23.tar.bz2
tar xjf httpd-2.4.23.tar.bz2
cd httpd-2.4.23/
./configure --prefix=/usr/local/httpd --with-pcre=/usr/local/pcre
make && make install
cd ../
複製程式碼

備註:不安裝perl的話,安裝mod_wsgi時會報錯。

將Apache加入環境變數

在/etc/profile檔案末尾新增以下內容:

export PATH=/usr/local/httpd/bin:$PATH

然後使配置檔案生效:

. /etc/profile

安裝mod_wsgi

複製程式碼
wget https://pypi.python.org/packages/28/a7/de0dd1f4fae5b2ace921042071ae8563ce47dac475b332e288bc1d773e8d/mod_wsgi-4.5.7.tar.gz
tar xzf mod_wsgi-4.5.7.tar.gz
cd mod_wsgi-4.5.7/
./configure --with-apxs=/usr/local/httpd/bin/apxs --with-python=/usr/local/python/bin/python
make && make install
chmod 755 /usr/local/httpd/modules/mod_wsgi.so
cd ../
複製程式碼

(新增)注意:安裝是如果報錯error while loading shared libraries:libpython2.7.so.1.0:,需要重新編譯安裝python並新增--enable-shared引數,安裝完之後python可能無法使用,需要在/etc/ld.so.conf中加入新行/usr/local/lib,儲存後,執行 /sbin/ldconfig,執行/sbin/ldconfig –v檢視

安裝Django

wget https://pypi.python.org/packages/8a/09/46f790104abca7eb93786139d3adde9366b1afd59a77b583a1f310dc8cbd/Django-1.10.2-py2.py3-none-any.whl
pip install Django-1.10.2-py2.py3-none-any.whl

安裝MySQLdb(選做)

yum -y install mysql-devel
pip install MySQL-python

備註:因為我的Django程式用的是MySQL資料庫,所以我需要安裝這個包。

配置Django

將你開發好的Django程式上傳到伺服器,我這裡上傳到/wwwroot/目錄,下面這個樹形圖就是我的Django程式的結構:

 

這裡面有個檔案特別關鍵,能否正常執行就看它了,它就是wsgi.py,下面是我的檔案的內容,供讀者參考:

複製程式碼
import sys

sys.path.append('/wwwroot/OMMS')

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "OMMS.settings")

application = get_wsgi_application()
複製程式碼

注意:前兩句需要自己新增,如果沒有這兩句,你的程式就不能正常運行了,後面的是Django自動生成的。

配置Apache

啟用虛擬主機配置檔案

編輯/usr/local/httpd/conf/httpd.conf檔案,找到下面這句並取消註釋:

#Include conf/extra/httpd-vhosts.conf

在一堆以LoadModule開頭的段落下新增一行:

LoadModule wsgi_module modules/mod_wsgi.so

修改虛擬主機配置檔案

編輯/usr/local/httpd/conf/extra/httpd-vhosts.conf檔案,將原來的配置全部註釋掉(已經註釋過的就不用再註釋了),然後在末尾新增以下內容:

複製程式碼
<VirtualHost *:80>
    DocumentRoot "/wwwroot/OMMS/OMMS"
    WSGIScriptAlias / "/wwwroot/OMMS/OMMS/wsgi.py"

    <Directory "/wwwroot/OMMS/OMMS">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
複製程式碼

注意:讀者請根據自己的程式修改其中的路徑。

啟動Web服務並測試

通過以下命令啟動Apache服務:

apachectl start