目录结构
这是我的应用程序在本地运行的结构:
环境
Linux Mint 17 肉桂
本地复制的步骤
01) MongoDB 2.4.9 - 完成
在 Linux Mint 17 上安装 MongoDB 2.4.9 的说明:
http://docs.mongodb.org/v2.4/tutorial/install-mongodb-on-ubuntu
02) RockMongo 1.1(需要 Apache、PHP 和 MongoDB 驱动程序)- 完成
sudo apt-get install apache2 php5
sudo apt-get install php5-dev php5-cli
sudo apt-get install php-pear
pear version
pecl version
sudo pecl install mongo
此时,我被提示包含 [no] 的内容,我只是按 Enter 键。
cd /etc/php5/apache2
sudo vi php.ini
添加到文件末尾:
extension=mongo.so
然后重启:
/etc/init.d/apache2 restart
然后安装 RockMongo:
cd /var/www/html
wget https://github.com/iwind/rockmongo/archive/1.1.7.zip
unzip 1.1.7.zip
mv rockmongo-1.1.7 rockmongo
rm 1.1.7.zip
03) 创建干净的virtualenv 环境并将软件包安装到其中 - 完成
virtualenv 是一个 Python 包,可让您创建包含自己的 Python 安装和包的独立虚拟环境。
通过 Synaptic 包管理器安装 virtualenv。
如何创建
https://code.google.com/p/modwsgi/wiki/VirtualEnvironments
mod_wsgi 的作者,格雷厄姆·邓普顿。
为什么要创建
http://www.dabapps.com/blog/introduction-to-pip-and-virtualenv-python/
这篇文章太精彩了,几乎让我想哭,赞,赞。
命令
在执行以下操作之前,请通过 Synaptic 包管理器安装 python2.7-dev、libxml2-dev、libxslt1-dev 和 apache2-dev,以解决稍后进行 pip 安装时出现的错误。
# change to your html folder
cd /var/www/html
# this will create a folder called ENV that contains its own instance
# of python without inheriting your system's installed python packages.
# it will also install independent instances of pip and setuptools.
# the --no-site-packages option is the default setting in recent versions
# however I added it just to be sure.
virtualenv --no-site-packages ENV
New python executable in ENV/bin/python
Installing setuptools, pip...done.
# you can 'activate' the virtual environment so that each time you use
# pip it automatically installs packages in the virtual environment.
# change to your virtual environment folder
cd /var/www/html/ENV
# activate the virtual environment
source bin/activate
# you can deactivate this by typing 'deactivate` and it is also
# automatically deactivated each time you close the terminal.
deactivate
# from time to time you can save the names of the packages you have
# installed to your virtual environment via pip to a text file with:
pip freeze > requirements.txt
# note, after installing virtualenv as shown above, you will have some
# packages installted by default.
pip freeze
argparse==1.2.1
wsgiref==0.1.2
# requirements.txt would allow installation of all required packages via:
pip install -r requirements.txt
# install packages, whilst virtualenv is activated
pip install bottle
pip install https://github.com/FedericoCeratto/bottle-cork/archive/master.zip
pip install requests
pip install pymongo==2.6.2
pip install beautifulsoup4
pip install lxml
pip install Beaker
pip install pycrypto
pip install pillow
pip install tldextract
04) 将现有应用程序文件复制到新位置 - 完成
cp -r path/to/open_shift_apps/my-app/. /var/www/html
05) 从 var/www/html 中删除 *local* 生产不需要的文件和文件夹 - 完成
rm -r data
rm -r libs
rm -r .openshift
rm -r .git
rm setup.py
rm setup.pyc
rm setup.pyo
06) mod_wsgi - 完成
通过 Synaptic 包管理器。
除非在系统级别安装了mod_wsgi,否则Apache 对我不起作用,即当mod_wsgi 安装在virtualenv 中时它不起作用。
07) 了解 Apache 服务器、mod_wsgi 和您的应用程序之间的关系 - 完成
阿帕奇
要在本地运行动态网站,您需要一台服务器,在本例中我们使用了 Apache。
mod_wsgi
mod_wsgi 是一个 Apache 模块,它扩展了 Apache,因此可以将规则添加到其配置中,这些规则指向您的 Python 代码,以便在用户访问特定路径时运行它。
08)配置Apache规则
/etc/apache2/sites-available/000-default.conf
WSGIPythonHome /var/www/html/ENV
WSGIPythonPath /var/www/html:/var/www/html/ENV/lib/python2.7/site-packages:/var/www/html/wsgi
<VirtualHost *:80>
# for all content in static folder - css, js, img, fonts
Alias /static/ /var/www/html/wsgi/static/
# for rockmongo
Alias /rockmongo /var/www/html/rockmongo
<Directory /var/www/html/rockmongo>
Order deny,allow
Allow from all
</Directory>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
WSGIScriptAlias / /var/www/html/wsgi/application
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
当用户访问特定路径时,Apache 会查找 application 对象,其中包含将运行您的 Python 程序的代码。
在这种情况下,对象位于wsgi/application,并在用户转到localhost 时触发。
/var/www/html/wsgi/application
from mybottleapp import application
09)检查文件所有权和权限
如果在流程的任何阶段都无法正常工作,请务必查看本地文件的权限。没有正确的权限可能意味着您的应用程序没有被导入。
10) 来自 OpenShift 的 mongodump 和本地 mongorestore
How to mongodump from OpenShift and mongorestore locally on MongoDB 2.4.9?
进一步阅读
How Python web frameworks, WSGI and CGI fit together
https://docs.python.org/2/howto/webservers.html
http://wsgi.readthedocs.org/en/latest/servers.html
https://code.google.com/p/modwsgi/
https://www.python.org/dev/peps/pep-0333
http://bottlepy.org/docs/dev/deployment.html#apache-mod-wsgi