兩周前完成的一個項目,是用Python寫了一個網站。在部署到正式伺服器時遇到了點問題,反覆多次,浪費了些時間。今天,終於有時間把過程好好整理一下。
伺服器作業系統是CentOS。
一、準備工作
1、安裝gcc。
如果沒有gcc,後面編譯安裝其它東西時,會提示:no acceptable compiler in $path。
在終端執行yum install gcc即可。
yum 是一個Python下面的命令,一般Linux都內建了python 2.4.3,所以一登入系統,就可以使用yum命令了。
2、安裝zlib-devel。
如果沒有zlib-devel,後面執行Python時會報錯:Compression requires the (missing) zlib module,若到了那時再安裝zlib-devel,就需要重新編譯python,會麻煩一點。
在終端執行yum install zlib-devel即可。
二、編譯安裝Python
1、到python官網下載源碼包,如Python-2.7.3.tgz
2、解壓 tar -xf Python-2.7.3.tgz
3、進入解壓後的Python-2.7.3目錄,執行 ./configure --prefix=/usr/local/python27 --enable-shared --with-zlib=/usr/include
prefix參數是指定要將python安裝到哪個目錄
enable-shared是必須要寫的,否則後面會遇到錯誤提示:Command failed with rc=65536
with-zlib就是指定編譯python過程中要用到的zlib的路徑,我們在準備工作中安裝zlib後,zlib就會在/usr/include目錄下。
4、執行make
5、執行make install
現在檢驗一下,在終端輸入python,可以看到python的版本號碼,還是2.4.3。這是因為系統預設指向了原本就在機器上的python,現在需要設定環境變數,讓它指向我們新裝的python2.7。
先exit()退出python環境,回到終端。再執行
export PYTHONPATH=/usr/local/python27
此時再執行 python,就可以看到版本號碼已經變成2.7了。
如果此時遇到錯誤:error: command 'gcc' failed with exit status 1
可以執行 yum install gcc python-devel來解決
如果遇到錯誤:python: error while loading shared libraries: libpython2.7.so.1.0:
cannot open shared object file: No such file
按如下方式解決:
vim /etc/ld.so.conf.d/python2.7.conf
加入以下內容:/usr/local/python27/lib (實際的python安裝路徑下的lib目錄)
儲存退出後運行:
ldconfig
即可
三、安裝setuptools
setuptools可以協助我們方便的安裝項目中使用到的python外掛程式,另外,如果項目中有使用到mysqldb外掛程式,那麼setuptools就是必須要安裝的,因為mysqldb對它有依賴。
到官網下載setup tools的源碼包,解壓後,進入解壓目錄中,在終端運行python setup.py install即可。
四、安裝Mysql
到官網下載Mysql for redhat 的壓縮包,解壓后里面有好幾個檔案,除去test,其它的都需要安裝。
tar -xf MysqlXXX.tar
rpm -ivh Mysql-server-XXX.rpm
rpm -ivh Mysql-devel-XXX.rpm
rpm -ivh Mysql-client-XXX.rpm
rpm -ivh Mysql-embedded-XXX.rpm
五、安裝項目所需要的python外掛程式
我們之前安裝了setuptools,所以現在可以很方便的使用如下命令安裝了。
easy_install web.py
easy_install mysql-python
easy_install jinja2
等等外掛程式
六、安裝Apache
到官網下載源碼,然後依次執行./configure --prefix=/usr/local/apache, make, make install三條命令即可
七、安裝wsgi
同樣的,到官網下載源碼再編譯安裝。
安裝完成後,apache的modules目錄下,就會多一個mod_wsgi.so檔案。
如果安裝不成功,可能需要看一下wsgi目錄裡面的readme檔案,那裡會有指引,說明在編譯時間需要指定什麼參數。
八、配置Apache
把項目放到機器上的任意一個位置,比如項目test,放到/usr/local/www/test
開啟設定檔,
vi /usr/local/apache/conf/httpd.conf檔案
搜尋LoadModule的位置,在末端加上
LoadModule wsgi_module modules/mod_wsgi.so
搜尋DocumentRoot,把它的值修改為真正的項目路徑,如/usr/local/www/test
並添加以下內容
Alias /robots.txt '/usr/local/www/test/static/robots.txt'
Alias /favicon.ico '/usr/local/www/test/static/favicon.ico'
Alias /static/ '/usr/local/www/test/static/'
WSGIProcessGroup test
WSGIDaemonProcess inspect processes=20 threads=1 inactivity-timeout=30 maximum-requests=2000 python-eggs=/tmp display-name=%{GROUP}
WSGIApplicationGroup test
WSGIScriptAlias / '/usr/local/www/test/application.py' #改成實際的項目開機檔案
<Directory '/usr/local/www/test">
Order deny,allow
Allow from all
</Directory>
九、啟動mysql、apache
service mysql start
/usr/local/apache/httpd -k start
之前我用下面這種方法啟動Apache,結果啟動的是系統內建的Apache
service httpd start 或者 (/usr/local/apache/bin/apachectl start)
即可