【问题标题】:How to replicate a Python 2.7, Bottle, MongoDB OpenShift application locally in Linux Mint 17?如何在 Linux Mint 17 中本地复制 Python 2.7、Bottle、MongoDB OpenShift 应用程序?
【发布时间】:2015-01-21 08:45:46
【问题描述】:

这开始是一个问题,但我想我已经弄清楚了大部分部分,所以在这里发布以供参考。它相对涉及,但我认为它可能对其他考虑这种情况的人有用。

我是其中一些领域的新手,所以如果在 Apache 的安全问题或其他不良做法方面出现错误,请更正。

另外请注意,按照以下步骤生成的本地开发版本不再启用 git,因为它与生产代码之间的更改。所以我会将本地 git repo 保存在另一个位置。

期望的行为

选项一:
在本地复制我当前的 Python 2.7、Bottle、MongoDB OpenShift 应用程序以加快开发时间(在 git push 等期间)。

选项二(如果简单得多):
在本地复制我当前的 Python 2.7、Bottle、MongoDB Openshift 应用程序*无需 OpenShift 平台*以加快开发时间。

当前行为

我在 OpenShift 上有一个 Python 2.7、Bottle、MongoDB 应用程序。

我目前的工作流程是:

  • 在本地编辑。
  • git add --all
  • git commit -m "这是一条消息"
  • git push origin master(这会更新 openshift 上的实时站点)
  • git push github master(这会更新 github repo)

显然这对于​​开发来说并不理想,因为每次推送都需要时间才能看到结果。

【问题讨论】:

  • 一篇很棒的帖子!现在 openshift 已经转移到了基于 docker 上。您是否能够在新的 openshift 上做同样的事情?

标签: mongodb python-2.7 openshift bottle linux-mint


【解决方案1】:

目录结构

这是我的应用程序在本地运行的结构:

环境

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-devlibxml2-devlibxslt1-devapache2-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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2015-08-03
    • 2015-07-01
    • 2016-03-27
    相关资源
    最近更新 更多