スキップしてメイン コンテンツに移動

[Python]CentOS+Apache+mod_wsgi+Flask+mongoDBをセットアップしたメモ

毎回調べながら環境構築してたので、メモとして残しておく。
  • ファイアウォール,SELinuxの無効化
  • ライブラリ群のインストール
  • Pythonのインストール
  • mod_wsgiのインストール
  • mongoDBのインストール
  • easy_installのインストール
  • Flaskのインストール
  • pymongoのインストール
  • mod_wsgi+Flask設定
■ファイアウォール,SELinuxの無効化
/etc/rc.d/init.d/iptables stop
chkconfig iptables off
vi /etc/sysconfig/selinux
=====以下の変更を加える=====
SELINUX=enforcing
↓
SELINUX=disabled
==========

■ライブラリ群のインストール
yum update -y
yum groupinstall -y "Development Tools"
yum install -y httpd httpd-devel zlib-devel ncurses-devel readline-devel sqlite-devel tcl-devel tk-devel openssl-devel
/etc/init.d/httpd start
chkconfig httpd on

■Pythonのインストール
curl -O http://www.python.org/ftp/python/2.7.4/Python-2.7.4.tgz
tar zvxf Python-2.7.4.tgz
cd Python-2.7.4
./configure --enable-shared --prefix=/opt/python2.7
make
make install

ln -s /opt/python2.7/lib/libpython2.7.so.1.0 /lib64/

vi .bashrc
=====以下を追記する=====
PYTHONHOME=/opt/python2.7
PYTHONPATH=/opt/python2.7/lib/python2.7/site-packages/
PATH=/opt/python2.7/bin:$PATH
==========

source .bashrc

■mod_wsgiのインストール
curl -O http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
tar vzxf mod_wsgi-3.4.tar.gz
cd mod_wsgi-3.4
./configure --with-apxs=/usr/sbin/apxs --with-python=/opt/python2.7/bin/python2.7
make
make install

■mongoDBのインストール
vi /etc/yum.repos.d/10gen.repo
=====以下の内容で新規作成する=====
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=0
==========

yum install -y mongo-10gen-server.x86_64 mongo-10gen.x86_64 --enablerepo=10gen
/etc/init.d/mongod start
chkconfig mongod on

■easy_installのインストール
curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py

■Flaskのインストール
easy_install Flask

■pymongoのインストール
easy_install pymongo

■mod_wsgi+Flask設定
vi /etc/httpd/conf.d/mod_wsgi.conf
=====以下の内容で新規作成する=====
WSGISocketPrefix run/wsgi
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python2.7
WSGIPythonPath /opt/python2.7/lib/python2.7/site-packages

WSGIRestrictStdout Off

WSGIDaemonProcess myapps user=apache group=apache threads=8
WSGIScriptAlias / /var/www/cgi-bin/flask/flask.wsgi
<directory /var/www/cgi-bin/flask>
    WSGIProcessGroup myapps
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</directory>
==========

cd /var/www/cgi-bin/
mkdir flask
vi /var/www/cgi-bin/flask/flask.wsgi
=====以下の内容で新規作成する=====
import sys
sys.path.insert(0, "/var/www/cgi-bin/flask")

from main import app as application
==========

vi /var/www/cgi-bin/flask/main.py
=====以下の内容で新規作成する=====
# -*- coding:utf-8 -*-
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'これでOK!'

if __name__ == '__main__':
    app.run()
==========

■Apache再起動
/etc/init.d/httpd restart

ブラウザでhttp://127.0.0.1/にアクセスすれば「これでOK!」と表示されるはず。

コメント

このブログの人気の投稿

[Mac]Time Machineのバックアップ先をWindows共有フォルダに設定する

こんばんは。もっくんです。 2台あったWindowsのデスクトップを1台にまとめるついでに、ずっと放置していたMacのバックアップ環境を構築してみました。Finderでコピペするだけでいいんですが、どうせなら「Mac全体を自動的にバックアップします。」という謳い文句のTime Machineを使いたい。 Apple純正のTime CapsuleやUSBの外付けHDDという手もあったんですが、ノートの機動性を落としたくなかったし、なによりタダでできそうなWindows共有フォルダにネットワーク越しにバックアップする方法を取ることにしました。 実際の流れは下記のようになります。 ネットワーク共有フォルダを作成する 空のディスクイメージを作成する ネットワーク共有フォルダにディスクイメージをコピーする ネットワーク共有フォルダのディスクイメージをマウントする マウントしたディスクイメージをTime Machineのバックアップ先に指定する 1.ネットワーク共有フォルダを作成する この手順はそこまで面倒ではないので、簡単な手順だけ。 Windows全体の設定でファイル共有を有効にする(Windowsで作業) Macと共有(Macから見えるように)したいフォルダを作成する(Windowsで作業) 共有したいフォルダに共有設定をする(Windowsで作業) 共有フォルダに接続(Macで作業) 詳細はこちらの記事が画像付きでわかりやすい。 http://blog.goo.ne.jp/beosound/e/7d6d0d0a8f76035f880001eda06c4247 2.空のディスクイメージを作成する いわばこのディスクイメージがバックアップ先のHDDの代わりとなる。 アプリケーション > ユーティリティ > ディスクユーティリティを起動 画面上部の ファイル > 新規 > 空のディスクイメージをクリック 設定画面の各欄は以下のように設定 名前: TimeMachineVolume(なんでもよい) 保存先: デスクトップ(ローカルのわかりやすい場所) ボリューム名: TimeMachineVolume(なんでもよい) ボリュームサイズ: カスタム

[Python]個別銘柄の時系列データをGoogle Financeから取得するプログラム

今日書いたのはこれ。 Google Finance から証券コードを指定して日別の価格情報を取得するプログラムです。 米国市場に上場している銘柄であればCSVでダウンロードでますが、日本の銘柄はできなかったので作りました。 多くの人はYahoo!Japanから取得しているようなので、あえてGoogle Financeから取得してみました。 ちなみに使えるのは東証に上場している銘柄のみです。(おそらく) このプログラムと 日経225構成銘柄一覧取得プログラム を組み合わせれば、日経225構成銘柄の時系列データが取得できてしまいます。 #!/usr/local/bin/python # -*- coding:utf-8 -*- from BeautifulSoup import BeautifulSoup import urllib2,re,datetime,sys class googleFinance2CSV(object): def __init__(self,ticker): ''' 引数で渡されたticker(=証券コード)の時系列データを Google Financeから取得してCSV形式で保持する CSVの列は'Date','Open','High','Low','Close','Volume' ''' self.ticker = ticker self.url = 'http://www.google.com/finance/historical?q=%s&num=200' % str(self.ticker) self.csv = str() soup = BeautifulSoup(urllib2.urlopen(self.url)) tablesoup = soup.find("table", {"class":"gf-table historical_price"}) for trsoup in tablesoup.findAll("tr&qu

[Python]redis-pyでRedis Pub/Sub実装

前から面白そうと思っていたRedisのPub/Sub機能。 redis-pyでどう実装すれば使えるか確認してみた。 ■Pub/Subについて http://ja.wikipedia.org/wiki/出版-購読型モデル ■pub.py from redis import StrictRedis def publish(channel,msg): """ redis-pyにはPUBLISHするためのメソッドがないので、 Redisのコマンドをそのまま実行する為のクラスを使う。 """ sr=StrictRedis() """ 第1引数にRedisのコマンド、第2引数以降は そのコマンドの引数をそのままセット """ sr.execute_command("PUBLISH",channel,msg) if __name__=="__main__": # チャネル"hoge"に"Hello"というメッセージを出版(Publish) publish("hoge","Hello") ■sub.py from redis import Redis def listen(channel): r=Redis() ps=r.pubsub() ps.subscribe(channel) while True: for i in ps.listen(): print i["data"] if __name__=="__main__": # チャネル"hoge"を購読(Subscribe) listen("hoge") ■実行方法・実行結果 (ターミナル1-準備) [user@localhost ~]# python sub.py 1 # => チャネ