読者です 読者をやめる 読者になる 読者になる

Ubuntu ServerにMySQLとApache+mod_pythonをインストールする

Django用のサーバー環境を整える。
今回は特別な要件が無いので、全てaptからインストールする。

MySQLのインストール(apt)

giraffy@pe-dev:~$ sudo apt-get update
[sudo] password for giraffy:
Ign http://jp.archive.ubuntu.com trusty InRelease
(略)
giraffy@pe-dev:~$ apt-cache show mysql-server | grep Version
Version: 5.5.44-0ubuntu0.14.04.1
Version: 5.5.35+dfsg-1ubuntu1

MySQLのバージョンは現時点で5.5xのようだ。最後に触った時は4系だった気がする。

giraffy@pe-dev:~$ sudo apt-get install mysql-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18
  libterm-readkey-perl mysql-client-5.5 mysql-client-core-5.5 mysql-common
  mysql-server-5.5 mysql-server-core-5.5
Suggested packages:
  libclone-perl libmldbm-perl libnet-daemon-perl libplrpc-perl
  libsql-statement-perl libipc-sharedcache-perl tinyca mailx
The following NEW packages will be installed:
  libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18
  libterm-readkey-perl mysql-client-5.5 mysql-client-core-5.5 mysql-common
  mysql-server mysql-server-5.5 mysql-server-core-5.5
0 upgraded, 12 newly installed, 0 to remove and 113 not upgraded.
Need to get 9520 kB of archives.
After this operation, 96.6 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://jp.archive.ubuntu.com/ubuntu/ trusty/main libaio1 amd64 0.3.109-4 [6364 B]
(略)
Setting up mysql-server-5.5 (5.5.44-0ubuntu0.14.04.1) ...
150811 16:06:21 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
150811 16:06:21 [Note] /usr/sbin/mysqld (mysqld 5.5.44-0ubuntu0.14.04.1) starting as process 5135 ...
mysql start/running, process 5267
Setting up libhtml-template-perl (2.95-1) ...
Processing triggers for ureadahead (0.100.0-16) ...
Setting up mysql-server (5.5.44-0ubuntu0.14.04.1) ...
Processing triggers for libc-bin (2.19-0ubuntu6.5) ...

途中、rootパスワードの入力を求められた。

今回は開発環境上のMySQLなので、my.cnfは日本語関連のみ追記する。

giraffy@pe-dev:~$ cd /etc/mysql/
giraffy@pe-dev:~$ sudo cp my.cnf my.cnf.org
giraffy@pe-dev:~$ sudo vi my.cnf
[client]に以下を追加
default-character-set = utf8

[mysqld]に以下を追加
skip-character-set-client-handshake
character-set-server  = utf8

設定を反映して確認

giraffy@pe-dev:~$ sudo service mysql restart
mysql stop/waiting
mysql start/running, process 5483
giraffy@pe-dev:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.5.44-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.44, for debian-linux-gnu (x86_64) using readline 6.3

Connection id:		36
Current database:
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		5.5.44-0ubuntu0.14.04.1 (Ubuntu)
Protocol version:	10
Connection:		Localhost via UNIX socket
Server characterset:	utf8
Db     characterset:	utf8
Client characterset:	utf8
Conn.  characterset:	utf8
UNIX socket:		/var/run/mysqld/mysqld.sock
Uptime:			46 sec

Threads: 1  Questions: 109  Slow queries: 0  Opens: 48  Flush tables: 1  Open tables: 41  Queries per second avg: 2.369
--------------

無事文字コードがUTF8になっているのを確認。一旦これでOKとする。

Apache+mod_pythonのインストール

giraffy@pe-dev:/etc/mysql$ sudo apt-get install apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  apache2-bin apache2-data libapr1 libaprutil1 libaprutil1-dbd-sqlite3
  libaprutil1-ldap ssl-cert
Suggested packages:
  apache2-doc apache2-suexec-pristine apache2-suexec-custom apache2-utils
  openssl-blacklist
The following NEW packages will be installed:
  apache2 apache2-bin apache2-data libapr1 libaprutil1 libaprutil1-dbd-sqlite3
  libaprutil1-ldap ssl-cert
0 upgraded, 8 newly installed, 0 to remove and 113 not upgraded.
Need to get 1287 kB of archives.
After this operation, 5342 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
(略)
 * Starting web server apache2                                                                                          AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
 *
Setting up ssl-cert (1.0.33) ...
Processing triggers for libc-bin (2.19-0ubuntu6.5) ...
Processing triggers for ureadahead (0.100.0-16) ...
Processing triggers for ufw (0.34~rc-0ubuntu2) ...

続いてmod_python

giraffy@pe-dev:/etc/mysql$ sudo apt-get install libapache2-mod-python
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  libapache2-mod-python-doc
The following NEW packages will be installed:
  libapache2-mod-python
0 upgraded, 1 newly installed, 0 to remove and 113 not upgraded.
Need to get 106 kB of archives.
After this operation, 475 kB of additional disk space will be used.
Get:1 http://jp.archive.ubuntu.com/ubuntu/ trusty/main libapache2-mod-python amd64 3.3.1-11ubuntu2 [106 kB]
Fetched 106 kB in 0s (507 kB/s)
Selecting previously unselected package libapache2-mod-python.
(Reading database ... 86730 files and directories currently installed.)
Preparing to unpack .../libapache2-mod-python_3.3.1-11ubuntu2_amd64.deb ...
Unpacking libapache2-mod-python (3.3.1-11ubuntu2) ...
Setting up libapache2-mod-python (3.3.1-11ubuntu2) ...
apache2_invoke: Enable module python
 * Restarting web server apache2                                                                                        AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
                                                                                                                 [ OK ]

無事インストール出来たので、コンフィグファイルを編集しつつmod_pythonを組み込んでいく。

ここですごく驚いたのだがDebian系の設定ファイルは独特の構成になっていた。自分でコンパイルすればよかったか…。とにかく omnioo lab. record | オムニオラボ WEB, LAMP, jQuery, ITのお話 を参考に設定を書き換えていく。

giraffy@pe-dev:~$ cd /etc/apache2/sites-available/
giraffy@pe-dev:/etc/apache2/sites-available$ sudo cp 000-default.conf pedev.conf
giraffy@pe-dev:/etc/apache2/sites-available$ vi pedev.conf

今回はとりあえず起動すれば良いので、ディレクトリをそのままにして、mod_pythonだけ使えるようにする。

        ServerName pedev
        <Directory /var/www/html>
                AddHandler mod_python .py
                PythonHandler mod_python.publisher
                PythonDebug On
        </Directory>

を追加した。

続いてpedevサーバーの有効化。

giraffy@pe-dev:/etc/apache2/sites-available$ sudo a2ensite pedev
Enabling site pedev.
To activate the new configuration, you need to run:
  service apache2 reload
giraffy@pe-dev:/etc/apache2/sites-available$ service apache2 reload
 * Reloading web server apache2                                                                                          *

ブラウザアクセスを試みる。仮想マシンのIPアドレスは、192.168.56.111。
f:id:giraffyk1:20150811163544p:plain

同じくhttp://pedev にても動作を確認した。pedevは OSX側のhostsであらかじめ192.168.56.111にバインドしてある。

同じくhttp://pedev にても動作を確認できたが、document_rootが同じで分かりづらい。pedev.confを再度修正する。

        DocumentRoot /var/www/html2                                        /var/www/htmlから変更
        <Directory /var/www/html2>                                             /var/www/htmlから変更
                AddHandler mod_python .py
                PythonHandler mod_python.publisher
                PythonDebug On
        </Directory>

続いて、サンプルhtmlを用意する。

giraffy@pe-dev:/etc/apache2/sites-available$ sudo mkdir 777 /var/www/html2
giraffy@pe-dev:/etc/apache2/sites-available$ vi /var/www/html2/index.html

こんな感じでよいだろう。

<html>
<body>
hello pedev(html)
</body>
</html>

apacheを再起動

giraffy@pe-dev:/etc/apache2/sites-available$ service apache2 reload
 * Reloading web server apache2                                                                                          *

f:id:giraffyk1:20150811165149p:plain
無事pedevは/var/www/html2以下へアクセスされるようになった。

続いてmod_pythonの動作確認。
Mod_python Documentation — Mod_python v3.5.0-3.5.0 documentation などを確認しつつやる。日本語のドキュメントが全然無くて少し戸惑う。

giraffy@pe-dev:/etc/apache2/sites-available$ sudo vi /var/www/html2/test.py

中身はこんな感じ。

def index(req):
        return "Test successful";

apacheを再起動。

giraffy@pe-dev:/etc/apache2/sites-available$ sudo service apache2 restart

http://pedev/test.pyにアクセスする。
f:id:giraffyk1:20150811172859p:plain
ちゃんと動いているかちょっと不安なので、テストハンドラーでmod_pythonの状態を一度確認してみる。

(バーチャルホスト設定を書き換え※この場合pedev.conf)
        <Directory /var/www/html2>
#                AddHandler mod_python .py
#               PythonHandler mod_python.publisher
                SetHandler mod_python
                PythonHandler mod_python.testhandler
                PythonDebug On

        </Directory>

apacheを再起動して、http://pedev/ をリクエスト。
f:id:giraffyk1:20150811173455p:plain
無事mod_python下で稼働しているようだった。