環境構築手順書: Ubuntu + Apache2 + Python + Pyramid

# はじめに

本書では、Ubuntu環境におけるApache + Python + Pyramid の導入手順について記述します。

# 前提条件

今回の環境構築には、以下のソフトウェアを使用します。

|ソフトウェア|バージョン|
|:----:|:----:|
|Ubuntu|12.04 LTS|
|Apache|2.2.22|
|Python(System)|2.7.3 (Ubuntu 12.04に標準でインストールされているもの)|
|Python(for virtualenv)|2.7.6|
|VirtualEnv|1.7.1.2|
|Pythonz|-|
|Pyramid|1.4.5|


今回は、AWS上で環境構築しました。
その際に使用したAMIは「Ubuntu Server 12.04.3 LTS - ami-6aad335a (64-bit)」です。

また、以下の準備をしておいてください。

* 環境構築前にpyramidユーザーを作成していること。

→ pyramidユーザーの作成手順は下記を参照してください。(rootユーザーで実行してください。)

```
$ sudo adduser pyramid # パスワードは任意のものを入力してください。それ以外の項目については全てEnterを押してください。
$ sudo gpasswd -a pyramid sudo
$ sudo cp -r /home/ubuntu/.ssh /home/pyramid
$ sudo chown -R pyramid:pyramid /home/pyramid/.ssh
```

* pyramidアプリケーションを作成していること。

→ 今回の説明では、「sampleapp」というアプリケーションを使用します。「sampleapp」の作成手順は下記の通りです。(「sampleapp」を作成する際は、下記手順の(14)までを実施しておいてください。)

```
$ cd /home/pyramid
$ pcreate -s starter sampleapp
$ cd sampleapp
$ python setup.py install
```

# 手順

ここからの手順については、全てpyramidユーザーで実行してください。

(1) パッケージ管理システム(APT)のパッケージリストを最新にします。

```
$ sudo apt-get -y update
```

(2) インストール済みのパッケージをアップグレードします。

```
$ sudo apt-get -y upgrade
```

(3) build-essential と curl をインストールします。

```
$ sudo apt-get -y install build-essential curl
```

(4) Python関連のパッケージをインストールします。

```
$ sudo apt-get -y install python-dev python-setuptools python-pip python-virtualenv
```

(5) Pythonzでビルドする際に必要なライブラリをインストールします。

```
$ sudo apt-get -y install libncurses-dev libreadline6-dev libbz2-dev liblzma-dev libsqlite3-dev libgbm-dev
```

(6) Apache2をインストールします。

```
$ sudo apt-get -y install apache2
```

(7) mod_wsgiをインストールします。

```
$ sudo apt-get -y install libapache2-mod-wsgi
```

(8) Pythonzをインストールします。

```
$ curl -kL https://raw.github.com/saghul/pythonz/master/pythonz-install | bash
```

(9) /home/pyramid/.bashrcに以下の内容を追加します。

```
[[ -s $HOME/.pythonz/etc/bashrc ]] && source $HOME/.pythonz/etc/bashrc
```

(10) .bashrcの内容を適用させます。

```
$ source /home/pyramid/.bashrc
```

(11) Pythonzを使って、Python 2.7.6をインストールします。

```
$ pythonz install 2.7.6
```

(12) PythonzとVirtualenvを使って、Pyramidで使用するPython環境を作成します。
*) 今回、作成するPython環境の名前を「env」とします。

```
$ mkdir /home/pyramid/.virtualenv
$ cd /home/pyramid/.virtualenv
$ virtualenv -p /home/pyramid/.pythonz/pythons/CPython-2.7.6/bin/python --no-site-packages env
```

(13) 上記で作成したenv環境を有効にします.

```
$ source /home/pyramid/.virtualenv/env/bin/activate
```

(14) Pyramidをインストールします。今回は1.4.5のバージョンをインストールするため、下記のコマンドを実行します。
*) 最新版のpyramidをインストールする場合は「pip install pyramid」を実行してください。

```
$ pip install pyramid==1.4.5
```

(15) sampleappの直下にpyramid.wsgiファイルを作成します。

```
$ cd /home/pyramid/sampleapp
$ vi pyramid.wsgi
```

(16) pyramid.wsgiファイルに下記の内容を追加します。
*) 今回は本番環境で動作することを想定して記載しています。開発環境の場合は、production.iniがdevelopment.iniになります。

```
from pyramid.paster import get_app
application = get_app(
  '/home/pyramid/sampleapp/production.ini', 'main')
```

(17) pyramid.wsgiファイルのパーミッション権限を755に変更します。

```
$ sudo chmod 755 /home/pyramid/sampleapp/pyramid.wsgi
```

(18) Pyramid用のApache設定ファイルを作成します。

```
$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/pyramid
$ sudo vi /etc/apache2/sites-available/pyramid
```

(19) 作成した設定ファイルをviで開き、下記の内容に変更します。

```
<VirtualHost *:80>
    DocumentRoot /home/pyramid/sampleapp
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    WSGIDaemonProcess pyramid user=www-data group=www-data threads=4 \
    python-path=/home/pyramid/.virtualenv/env/lib/python2.7/site-packages
    WSGIScriptAlias /sampleapp /home/pyramid/sampleapp/pyramid.wsgi
    <Directory /home/pyramid/sampleapp/>
        WSGIProcessGroup pyramid
        Order allow,deny
        Allow from all
    </Directory>
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
```

(20) Pyramidのサイトを有効にし、デフォルトのサイトを無効にします。

```
$ sudo a2ensite pyramid
$ sudo a2dissite default
```

(21) Apacheを再起動します。

```
$ sudo /etc/init.d/apache2 restart
```

(22) ブラウザで「http://[ipaddress]/sampleapp」にアクセスし、Pyramidのページが表示されることを確認します。