在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程

來源:互聯網
上載者:User
最近嘗試把項目遷移到Python環境下,特別新裝了一台乾淨的Debian系統,準備重新設定環境,上網找了一些運行Python Web的環境方案,最後敲定Nginx+uWSGI組合,Nginx用得比較多,熟練些;uWSGI據說效能不錯,想嘗試一下。

網上大部分教程都是要求到uWSGI官方網站下載源碼包,然後通過編譯的方式安裝,比如對於一台新Debian系統,可以通過下面的命令安裝:

apt-get updateapt-get upgradeapt-get install build-essential psmiscapt-get install python-dev libxml2 libxml2-devapt-get install python-setuptoolscd /opt/wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gztar -zxvf uwsgi-latest.tar.gzmv uwsgi-latest/ uwsgi/cd uwsgi/python setup.py install

還有一些配置我就不介紹了,大家可以參考Linode Library的《Deploy Python Code with WSGI using uWSGI and nginx on Debian 6 (Squeeze)》介紹。

今天要介紹的是利用APT源直接apt-get install安裝配置我們所需要的環境,首先按慣例先安裝MySQL和Nginx:

然後通過Debian Packages網站找到我們所需要的uWSGI在sid裡,sid版裡的東西表示仍在開發測試中,不是最終穩定版,不過對於我們測試來說是夠用了,為了用sid裡面的軟體包,我們還需要修改我們的/etc/apt/sources.list源,添加deb http://ftp.tw.debian.org/debian sid main non-free contrib這一行,或者直接輸入命令:

echo "deb http://ftp.tw.debian.org/debian sid main non-free contrib" >> /etc/apt/sources.list

配置過源列表後,我們就可以通過下面的命令安裝了:

apt-get updateapt-get install uwsgi uwsgi-core uwsgi-plugin-python

安裝完成後,設定檔按慣例放在了/etc/uwsgi裡面,服務控制可以通過invoke-rc.d uwsgi後面跟命令參數來實現,不過這裡有個小插曲我不得不提一下,安裝時可能會報這樣的錯誤:

The following packages have unmet dependencies: libc6-dev : Breaks: gcc-4.4 (< 4.4.6-4) but 4.4.5-8 is to be installed. E: Broken packages

看樣子是依賴包gcc版本不匹配,我後來通過下面的方式解決了:

apt-get updateapt-get upgrade # 先嘗試升級系統軟體包 apt-get install libc6-dev

接下來就是安裝django以及Python的MySQL支援,繼續APT命令:

apt-get install python-django python-mysqldb

通過上面的步驟,Python環境應該安裝到你的系統裡了,切換到/usr/lib:

cd /usr/libls -l | grep python

你可能會發現系統內被預設安裝了幾個版本的Python,比如我這裡就安裝有3個版本:

/usr/lib/python2.6/usr/lib/python2.7/usr/lib/python3

如何確定當前的Python預設版本呢?很容易,直接通過下面的命令就可以了:

python --version

大家知道django是安裝到python目錄下的site-packages下的,但是這幾個python目錄下都沒有site-packages這個檔案夾,其實我們可以先通過下面的命令定位一下:

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

上面的命令會在控制台上列印Python包路徑,比如這裡我們可能獲得dist-packages這個目錄,切換到這個目錄你就會發現django在那兒啦。給django-admin.py加上許可權,再做個符號串連,便於我們以後操作(我這裡Django在Python2.7下):

chmod 777 /usr/lib/python2.7/dist-packages/django/bin/django-admin.pyln -s /usr/lib/python2.7/dist-packages/django/bin/django-admin.py /usr/local/bin

記下Django所在的Python版本,然後通過下面的命令切換uwsgi的預設Python版本(一般不需要切換):

update-alternatives --config uwsgi-plugin-python

好啦,到這裡基本上安裝部分就介紹完了,下面講解配置部分,首先建立我們項目的檔案夾,比如說放在/home/user/www下,然後通過下面的命令建立名為mysite的Django項目:

cd /home/user/wwwdjango-admin.py startproject mysite

好了,這下/home/user/www目錄下應該有個子檔案夾名字叫mysite,我們需要丟個wsgi的設定檔到/home/user/www/mysite/裡面去,設定檔命名為wsgi.py,內容如下:

接下來是修改uwsgi設定檔,先通過如下命令按照剛才的設定建立個設定檔:

cat > /etc/uwsgi/apps-enabled/www.ini << EOF[uwsgi]socket = /var/run/uwsgi/app/www/socketchmod-socket = 666limit-as = 256processes = 6max-request = 2000memory-report = trueenable-threads = truepythonpath = /home/user/wwwchdir = /home/user/www/mysitewsgi-file = /home/user/www/mysite/wsgi.pyEOF # 重啟uwsgiinvoke-rc.d uwsgi restart

注意上面的socket配置,這個在我機子上是這個路徑,大家可以cd /var/run裡面找下,然後配置正確,接下來建立Nginx設定檔:

cat > /etc/nginx/sites-enabled/www << EOFserver {    listen  80;    server_name localhost;    location / {        include uwsgi_params;        uwsgi_pass unix:///var/run/uwsgi/app/www/socket;    }}EOF

這裡的uwsgi_pass依舊是上面我們找到的socket,注意一下server_name,這個是我們綁定的網域名稱,通過nginx -s reload重新載入nginx。

好了,現在可以訪問看看是不是成功了?如果出現502 Bad Gateway,可以檢查一下uwsgi是否正常啟動,通過ps aux | grep uwsgi看下進程列表,最後在檢查下socket路徑是否正確。

假如出現uWSGI Error:Python application not found這個問題,主要是路徑配置問題,這點你可以查閱/var/log/uwsgi下面的記錄檔,比如我就遇到過ImportError: No module named django.core.handlers.wsgi這個問題,實際上是wsgi.py裡面路徑配置不正確。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.