ミッションたぶんPossible

どこにでもいるシステムエンジニアのなんでもない日記です。たぶん。

オープンソースSNS「OpenPNE」「SKIP」をCent OS 6にインストール


 オープンソースSNSを評価したいというお客さんからの要望があって、Cent OS 6にPHP製のSNSOpenPNE」と、Ruby on Rails製のSNSSKIP」の環境構築を行いました。結構色々と苦戦したので、忘れないようにメモメモ。
 「OpenPNE」は株式会社手嶋屋、「SKIP」は株式会社ソニックガーデンという、どちらも日本の会社が開発・公開しています。ドキュメントが日本語でサポートも受け易い、というのがチョイスのポイントでした。ちなみに、調査するにあたって以下の様なまとめも作っています。


ビジネス利用できる?国内外SNSまとめ - NAVER まとめ


 なお、以下の前提条件は「OSインストールしたてでまっさらな状態のCent OS 6.x」です。
 あと、以下の作業は全てスーパーユーザーで操作する事も前提とします。「root」というユーザーで操作し、「/root/work」というワークディレクトリで作業の殆どを行うと思って下さい。

 本当はコンソールに表示された内容とかもメモっておけば良かったんですが、なんか知らんけどコピペが全くできない環境での構築だったので、やむなく断念。OSの細かいバージョンもメモし忘れました。重ね重ね申し訳ないです。




1.CD-ROM(isoファイル)のマウント

# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom


 この作業自体はSNSのインストールに全く関係無いんですが、OSしたてのまっさらな環境、ということで一応。



2.yumの最新化

# yum update

3.SELINUXの設定変更

# vi /etc/selinux/config

 SELINUX=enforcing
SELINUX=disabled

# reboot

 アクセス制限が掛かっている場合に無効化します。コマンドで一時的に解除することもできますが、面倒なので永続的に変更しておきましょう。設定ファイル変更後、サーバの再起動を行うことで反映されます。


4.gcc関連ライブラリのインストール

# yum -y install gcc* compat-gcc* compat-lib*


 yumコマンドに「-y」オプションを付けると、「インストールを続行するか?」という問いに対して必ず「y」と返答してくれます。必須ではありません。



5.wgetのインストール

# yum -y install wget


 「yum list」コマンドを用いるとインストーラーの有無が確認出来ます。また、インストール後に「which wget」の様にwhichコマンドでインストールしたコマンドを指定すると「/usr/bin/wget」といったようにインストールされたディレクトリを返してくれます。



6.makeのインストール

# yum -y install make

7.gettextのインストール

# yum -y install gettext-2.0.4


 gettextコマンドはバージョン指定しないで

# yum -y install gettext


 とインストールしてもいいんですが、SKIPインストール時にバージョンが合わずインストールし直す事になるかもしれないので要注意。オレは最初バージョン指定無しでインストールして、後から入れ直すハメになりました。



8.rpm-buildのインストール

# yum -y install rpm-build

9.checkinstallのインストール

# wget http://asic-linux.com.mx/~izto/checkinstall/files/rpm/checkinstall-1.6.1-1.i386.rpm
# rpm -ivh checkinstall-1.6.1-1.i386.rpm


 checkinstallyumではインストール出来ません。最新バージョンは1.6.2なんですが、rpm無しでインストールするとめんどくさい(オレは何故かmakeに失敗した)ので、rpmが存在する1.6.1でインストールする方がラクチンだと思います。



10.httpd(Apache)のインストール

# yum -y install httpd

 ※必要に応じてサーバ名を変更しておいて下さい。

# vi /etc/httpd/conf/httpd.conf

 ServerName localhost
→ServerName (ドメイン名、もしくはIPアドレス)

 変更を反映させるにはhttpdを再起動しましょう。

# /etc/init.d/httpd restart

11.MySQLインストール

# yum -y install mysql-server

12.MySQLの起動

# /etc/init.d/mysqld start


 停止は「mysqld stop」で行います。まぁ動かしっぱなしで良いと思いますね。




13.Ruby と関連のパッケージをインストール

# yum -y install ruby ruby-devel ruby-docs ruby-irb ruby-libs ruby-mode ruby-rdoc ruby-tcltk rubygems mysql-devel


 「yum install」コマンドに対して複数のパッケージを同時に指定する事で、一斉にインストールする事も出来ます。慎重派は別々にやって逐次目視で確認して行った方が良いでしょう。



14. RubyGemsのインストール

# gem sources -a http://gems.github.com/
# gem sources -a http://rubygems.org/
# gem install rails -v2.3.5
# gem install openskip-skip_embedded -v 0.9.19
# gem install will_paginate -v 2.3.12
# gem install fastercsv -v 1.5.1
# gem install json -v 1.2.0
# gem install mysql maedana-ar_mailer ruby-openid
# gem install gettext_rails -v 2.0.4
# gem install gettext_activerecord -v 2.0.4
# gem install locale_rails -v 2.0.4
# gem install feed-normalizer -v 1.5.2
# gem install searchlogic -v 2.4.7
# gem install nokogiri -v 1.4.1
# gem install sanitize -v 1.2.0
# gem install diff-lcs -v 1.1.2
# gem install httpclient -v 2.1.5.2


 Rubyの関連パッケージを「gem」コマンドでインストールして行きます。


 ここで要注意!SKIPは指定されたバージョン以外は一切許容しません。複数のバージョンをインストールしていたり、バージョンが異なっていたりすると、この後の「19.データベースの作成」作業でエラーが出て全く前に進まなくなります。
 「gem list XXXX(パッケージ名)」コマンドでインストール済バージョンを確認し、バージョン番号が食い違っていないことを確認しましょう。必要以外のヴァージョンが存在していた場合には「gem uninstall XXXXX(パッケージ名 -v X.X.X(バージョン番号)」でアンインストールし、必要なパッケージのみインストールしてある状態を保って下さい。


 また、「i18n」がインストールしてあるとやはり失敗するので、これもアンインストールしておいた方が無難です。アンインストールはデータベース作成に失敗してからでも間に合いますけどね。

 同様に、「locale」と「gettext」は、今回オレが環境構築を行った際、バージョンの食い違いでエラーが発生したことから、インストールし直したものです。SKIPの環境構築のガイドにこれらをインストールしろ、とは書いてないんですが、必要に応じて入れ直しが必要でしょう。

# gem install locale -v 2.0.4
# gem install gettext -v 2.0.4

15.libxslt、libxslt-devel、libxml2-develのインストール

# yum -y install libxml2-devel
# yum -y install libxslt
# yum -y install libxslt-devel

16.SKIPのダウンロードと解答

http://www.openskip.org/download


 上記URL先を開くと、アンケートが表示され、回答するとダウンロードページが表示されます。オレは今回はZIP形式を選びました。



17. SKIPのファイル解凍(tarファイルをダウンロードした場合のみ)

# unzip openskip-skip-xxxxxxx.zip
# cd openskip-xxxxxxx


 以降の作業は解凍して出来たSKIPディレクトリに移動して作業します。



18. 設定ファイルの準備・編集

# cp config/initial_settings.yml.sample config/initial_settings.yml
# cp config/database.yml.sample config/database.yml
# cp config/common_menus.yml.sample config/common_menus.yml


 失敗しても良いように、オリジナルはそのまま残し、使用する設定ファイルをコピーして作ります。この後このタイミングで作ったconfig/initial_settings.yml、config/database.yml、config/common_menus.ymlを編集します。が、最低以下の2箇所だけ追記すればとりあえず動かす事は可能です。

initial_settings.yml
config/initial_settings.yml 39行目

 変更前:host_and_port:
→変更後:host_and_port: localhost:3000

config/initial_settings.yml 40行目

 変更前:protocol:
→変更後:protocol: http://

19.データベースの作成

# RAILS_ENV=production rake db:create
# RAILS_ENV=production rake db:migrate


 MySQLが起動済みの状態で作業を行って下さい。

 前述の「14. RubyGemsのインストール」作業でインストールしたパッケージが正しいバージョンではない場合、migrate実行時にエラーが発生します。ネットで調べてみると大抵の人がここでつまずくみたいですね。


20.初期データの登録

# RAILS_ENV=production rake skip:load_default_data


 実行に成功すると「Select language: ja,en [ja]」と聞いてきますので、「jaと入力しましょう。



21.初期管理者ユーザ登録URLの生成

# RAILS_ENV=production ruby lib/create_new_admin_url.rb --code

 実行に成功すると初期管理者ユーザ登録画面のURLが出力されます。起動時に表示はされますが、出来ればこのタイミングで忘れずにメモしておきましょう。結構間違え易い複雑なURLなので、コピペかスクリーンショットを撮っておくことをオススメします。


 あと、SKIPの環境構築のガイドだと、この後「ar_sendmailの起動」を行いますが、メール機能を利用する場合のみ必要なのでとりあえず無視します。



22.SKIPサーバ起動

# ruby ./script/server -p [initial_settings.ymlで指定したSKIP起動ポート] -e production

 実行すると先ほど取得したSKIP初期管理者ユーザ登録画面にアクセス出来るようになります。SKIPサーバ起動中はそのコンソールは占有されます。サーバを停止させるにはCtrl+Cを実行しましょう。



23.初期管理者ユーザの作成&利用開始

 「19.初期管理者ユーザ登録URLの生成」で表示されたURLにブラウザでアクセスして、最初の運営者となるユーザを登録してください。



24.PHPpeclpearのインストール

# yum -y install php
# yum -y install php-mbstring
# yum -y install php-devel
# yum -y install php-pdo
# yum -y install php-pear
# yum -y install php-gd
# yum -y install php-mcrypt
# yum -y install pcre-devel
# yum -y install httpd-devel
# yum -y install APC
# pecl install pdo_mysql


 PDOはPHPからDBを扱い易くするツールなんですが、それぞれのDB用(上記だとMySQL)ではなくまとめて「pecl install pdo」とやるとまるっと大抵のDBをサポート出来るようになります。…が、オレがPDOをインストールしようとすると何故かmakeで失敗してしまい、断念。

 「pecl」コマンドでインストールされたpdo_mysql.soは「chmod」コマンドでアクセス権限を変えておかないと、後からPHPから見て見つからない場合があります。



25.PHPの設定変更

 /etc/php.iniに以下を追加。場所はどこでもOKですが、最後の辺りに書くのが分かり易いんじゃないかと勝手に思ってます。

# vi etc/php.ini

記述内容

extension=pdo.so
extension=pdo_msql.so


 記入が終わったらhttpd(Apache)を再起動します。

# /etc/rc.d/init.d/httpd restart

もしくは

# service httpd restart

26.OpenPNE3のソースコードの入手と展開

# wget https://nodeload.github.com/openpne/OpenPNE3/zipball/OpenPNE-3.6.3
# unzip OpenPNE-3.6.3
# mv OpenPNE3 /var/www


 展開したOpenPNEディレクトリファイルは、サーバルートに当たる「/var/www」以下に移動しておきます。



27.設定ファイルをコピー

# cd /var/www/OpenPNE3
# cp config/ProjectConfiguration.class.php.sample config/ProjectConfiguration.class.php
# cp config/OpenPNE.yml.sample config/OpenPNE.yml


 SKIPの時と同様に設定ファイルのオリジナルは残し、コピーしたものを変更します。OpenPNE.ymlの「base_url」と「mail_domain」を環境に合わせて変更します。

7行目

 変更前:base_url: "http://example.com"
→変更後:base_url: "http://localhost"

15行目

 変更前:mail_domain: "example.com"
→変更後:mail_domain: "(活用したいメールアドレスのドメイン)"

28.インストールコマンド(DBデータ作成)の実行

# ./symfony openpne:install


 インストールコマンドを実行するとDBの設定について聞かれます。

使用する DBMSmysql, pgsql, sqlite から選択。ただし mysql以外は未サポート)

mysql

データベースへの接続用ユーザ名

→ root

データベースへの接続用パスワード(未入力可)

→ (未入力)

データベースサーバのホスト名(localhost など)

localhost

データベースサーバのポート番号(未入力可)

→ 3306

 ※ ポート番号は「netstat -tlpn」コマンドで確認出来ます

データベース名

mysql

使用するソケットへのパス(DBMSMySQL を選択し、サーバホスト名に localhostを指定した場合)(未入力可)

→ /var/lib/mysql/mysql.sock

 ※ ソケットの場所は「mysql_config --socket」コマンドで確認出来ます。

 以上の事項について入力をおこなうと、インストール作業が自動でおこなわれます。エラーが出なければインストールは成功。



29..htaccessを変更

# vi .web/.htaccess

 一行目をコメントアウト(先頭に「#」を付ける)し、

 # RewriteBase /
→RewiteBase /

 OpenPNEのドキュメントルートを指定します。ついでにhttpd.confも書き換えておきましょう。

# vi /etc/httpd/conf/httpd.conf

ー変更前ー

DocumentRoot /var/www/html

ー変更後ー

DocumentRoot /var/www/OpenPNE3/web

Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all

 変更を反映させるにはhttpdを再起動しましょう。

# /etc/init.d/httpd restart

30./var/lib/php/sessionのpermissionを変更

# chmod 777 /var/lib/php/session
# chown apache /var/lib/php/session

 これをやっておかないと、ログイン画面は表示出来ても、実際にログインするとログイン出来ない、という事態が起こります。



31.OpenPNEソースコードを修正

# vi .//lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Mysql.php

ー変更前ー

public function connect()
{
$connected = parent::connect();
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

return $connected;
}

ー変更後ー

public function connect()
{
$connected = parent::connect();
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

return $connected;
}

 OpenPNEのバグらしくて、上記の様にPDO:: MYSQL_ATTR_USE_BUFFERED_QUERY を追加してやる必要があります。最後に念の為httpdを再起動させておきましょう。


 起動して「http://(指定したサーバ名、もしくはIPアドレス)/」にアクセスし、OpenPNEが正常起動していることを確認して下さい。



 「SKIP」「OpenPNE」2種類のSNSを同時にインストールすることはまず無いでしょうが、良かったら参考にしてみてください。