CentOS 5.9 + Python(Flask)のWebアプリ作成環境
サーバといえばCentOS、そんなふうに考えていた時期が(ry
いや、今もきっとそうだと思います、多分。
とりあえず最新のCentOS 5.9にFlaskを使ったPythonのWebアプリ作成環境を構築してみました。
まずCentOSのPythonはバージョン2.4なのでなんとかしたいです。
ただ元々入っているのを消したりすると困る人がいるかもしれないので
pythonzとvirtualenvを使って新しいPythonを入れようと思います。
とはいっても元々入っているPythonだとpythonzもvirtualenvも使えません。
ということでyumのepelリポジトリからPython2.6をインストールしちゃいます。
それではepelリポジトリの設定から。
# epelリポジトリのインストール $ sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm # epelリポジトリの初期化 $ sudo yum check-update --enablerepo=epel
デフォルトでepelリポジトリを使わないようにするには設定ファイルのenabledを0にしておきます。
$ sudo vim /etc/yum.repos.d/epel.repo
$ diff -u /etc/yum.repos.d/epel.repo~ /etc/yum.repos.d/epel.repo
--- /etc/yum.repos.d/epel.repo~ 2010-08-12 03:07:06.000000000 +0900 +++ /etc/yum.repos.d/epel.repo 2013-02-17 22:35:25.000000000 +0900 @@ -3,7 +3,7 @@ #baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch failovermethod=priority -enabled=1 +enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
これでPython2.6がインストールできるようになりました。
yumコマンドでインストールします。
$ sudo yum install python26 --enablerepo=epel
次はpythonzのインストールです。
# pythonzのインストールスクリプトが使用するpythonをsedで指定 $ curl -kL https://raw.github.com/saghul/pythonz/master/pythonz-install | sed -e "s/\/usr\/bin\/python/\/usr\/bin\/python26/" | bash # .bashrcにpythonzの設定を追加 $ vim .bashrc $ diff -u .bashrc~ .bashrc
--- .bashrc~ 2013-02-17 22:32:43.000000000 +0900 +++ .bashrc 2013-02-17 22:44:36.000000000 +0900 @@ -6,3 +6,5 @@ fi # User specific aliases and functions + +[[ -s $HOME/.pythonz/etc/bashrc ]] && source $HOME/.pythonz/etc/bashrc
それではpipでvirtualenvをインストールしましょう。
と思ったらpipもまだ使えないんでしたね...
以下のコマンドでpipとvirtualenvをインストールします。
# setuptoolsのインストール $ curl http://peak.telecommunity.com/dist/ez_setup.py | sudo python26 # pipのインストール $ curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | sudo python26 # virtualenvのインストール $ sudo pip-2.6 install virtualenv $ sudo pip-2.6 install virtualenvwrapper $ mkdir .virtualenvs # .bashrcにvirtualenvの設定を追加 $ vim .bashrc
diff -u .bashrc~ .bashrc --- .bashrc~ 2013-02-17 22:44:36.000000000 +0900 +++ .bashrc 2013-02-17 22:50:41.000000000 +0900 @@ -8,3 +8,8 @@ # User specific aliases and functions [[ -s $HOME/.pythonz/etc/bashrc ]] && source $HOME/.pythonz/etc/bashrc + +export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.6 +export VIRTUALENVWRAPPER_VIRTUALENV=/usr/bin/virtualenv-2.6 +export WORKON_HOME=$HOME/.virtualenvs +source /usr/bin/virtualenvwrapper.sh
.bashrcの設定を変更したら追加した設定を読み込みます。
$ source .bashrc
さて、このあとはpythonzで新しいPythonをインストールするわけですが、
pythonzはソースからビルドするのでビルド環境を整えなければいけません。
# ビルドツールのインストール $ sudo yum install gcc gcc-c++ automake autoconf # Pythonのビルドに必要なライブラリのインストール $ sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel
さあPython2.7(そろそろ3系でも良いのかもしれませんが...)のインストール、
といきたいところなんですけど、今の状態だとpythonzはシステムのPythonを
使ってしまうのでPython2.6を使うようにpythonzを修正します。
vim .pythonz/bin/pythonz diff -u .pythonz/bin/pythonz~ .pythonz/bin/pythonz
--- .pythonz/bin/pythonz~ 2013-02-17 22:43:52.000000000 +0900 +++ .pythonz/bin/pythonz 2013-02-17 22:52:04.000000000 +0900 @@ -1,2 +1,2 @@ #!/usr/bin/env bash -python /home/myapp/.pythonz/scripts/pythonz_main.py "$@" +python26 /home/myapp/.pythonz/scripts/pythonz_main.py "$@"
ようやくPython2.7がインストールできるようになりました。
このあと、mod_wsgiのビルドで必要となるのでビルドオプションに
"CFLAGS=-fPIC"をつけておきます。
$ pythonz install --configure="CFLAGS=-fPIC" 2.7.3
今度はmod_wsgiですが、その前にmake installでインストールするパッケージを
管理するためにpacoを入れておきましょう。
$ curl -OL http://downloads.sourceforge.net/paco/paco-2.0.9.tar.gz $ tar zxvf paco-2.0.9.tar.gz $ cd paco-2.0.9 $ ./configure --disable-gpaco $ make $ sudo make install $ sudo make logme $ cd
気を取り直してmod_wsgiをインストールします。
なお、virtualenvでインストールしたPythonを使わないのであれば
epelからインストールしてしまっても良いと思います。
# mod_wsgiのビルドに必要なライブラリのインストール $ sudo yum install httpd-devel # mod_wsgiのインストール $ curl -O http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz $ tar zxvf mod_wsgi-3.4.tar.gz $ cd mod_wsgi-3.4 # pythonzでインストールしたPythonを指定 $ ./configure --with-python=$HOME/.pythonz/pythons/CPython-2.7.3/bin/python $ make $ sudo paco -D make install $ sudo chmod 755 /usr/lib64/httpd/modules/mod_wsgi.so $ cd
mod_wsgiがインストールできたのでもう使わないmod_pythonの設定は消し、
mod_wsgiの設定をしておきましょう。
$ sudo rm /etc/httpd/conf.d/python.conf
$ sudo vim /etc/httpd/conf.d/wsgi.conf
LoadModule wsgi_module modules/mod_wsgi.so WSGIRestrictStdout off WSGISocketPrefix /var/run/wsgi <VirtualHost *> WSGIDaemonProcess app-sample user=app group=app threads=5 python-path=/home/app/.virtualenvs/myapp/lib/python2.7/site-packages WSGIScriptAlias / /home/app/flask-app-sample/app.wsgi WSGIScriptReloading On <Directory /home/app/flask-app-sample> WSGIProcessGroup app-sample WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all </Directory> </VirtualHost>
$ sudo /etc/init.d/httpd restart
Webアプリで使うデータベースは何でも良いんですが、なんとなくMySQLにしてみます。
# MySQLのインストール $ sudo yum install mysql mysql-devel mysql-server # MySQLのエンコーディングをutf8にする $ sudo vim /etc/my.cnf
diff -u /etc/my.cnf~ /etc/my.cnf --- /etc/my.cnf~ 2013-01-23 05:05:35.000000000 +0900 +++ /etc/my.cnf 2013-02-17 23:03:28.000000000 +0900 @@ -9,6 +9,9 @@ # Disabling symbolic-links is recommended to prevent assorted security risks; # to do so, uncomment this line: # symbolic-links=0 +default-character-set=utf8 +skip-character-set-client-handshake +character-set-server=utf8 [mysqld_safe] log-error=/var/log/mysqld.log
mysqldの設定を変更したらmysqldを再起動します。
$ sudo /etc/init.d/mysqld restart
MySQLの準備が出来たのでアプリで使用するデータベースを作成します。
# rootのパスワードを設定 $ mysqladmin -u root password 'password' $ mysql -u root -p # appユーザのアカウントを設定 mysql> grant all privileges on myapp.* to app@localhost identified by 'app'; mysql> exit # アプリで使用するデータベースの作成 $ mysql -u app -p mysql> create database myapp; mysql> exit
長かったですね...やっとWebアプリの環境をセットアップできるようになりました。
mkvirtualenvでアプリ用の環境を作ります。
$ mkvirtualenv -p ~/.pythonz/pythons/CPython-2.7.3/bin/python myapp $ pip install flask $ pip install flask-wtf $ pip install flask-sqlalchemy $ pip install mysql-python $ chmod 755 /home/app
ところで、素のVim(しかもバージョン7.0)で開発をするのはツライものがあります。
ということでVimも最新版を入れておきましょう。
if_pythは最新のvirtualenvのPython2.7を使用することにします。
$ sudo yum install mercurial --enablerepo=epel $ hg clone https://vim.googlecode.com/hg/ vim $ cd vim # virtualenv環境にいなかったらvirtualenv環境に入っておく $ workon myapp $ ./configure \ --prefix=$HOME/local/vim \ --with-features=huge \ --with-compiledby=daisuzu \ --enable-multibyte \ --enable-fontset \ --enable-cscope \ --enable-perlinterp \ --enable-pythoninterp \ --with-python-config-dir=$HOME/.pythonz/pythons/CPython-2.7.3/lib/python2.7/config $ make $ sudo paco -D make install
なんだか疲れてしまいました。
肝心のアプリは完成品が出てくる料理番組のようにflask-app-sampleあたりで。
うまく動かない場合はiptablesとSELinuxを無効にしてみてください。
P.S.
今日はYokohama.vim.reverse #4でした。
お寿司もピザも美味しかったです。
そしてまたVimのスゴさを知ることができました。