■カスタム版MyNETSとCentOS5で1万人規模のSNSを構築する
 友人と運営しているSNSのカスタマイズが一段落したので、ご協力いただいた方々やMyNETSの開発元Usagi Projectの方々に了解をいただき、カスタム版をパッケージにまとめてダウンロードできるようにさせていただいた。近いうちにMyNETSの公式HPからもダウンロードリンクが貼られることになっているが、これまでの集大成でもあるので、こちらでも紹介しておこうと思う。

 MyNETSにゃっぽんカスタム版ダウンロード
 http://v-nyappon.net/download/

 こちらのblogでは内容に沿って、20100921版のINSTALLドキュメントの内容を掲載する(最新の状況は上記URLを参照のこと)。CentOS5.5 x86_64版のインストールとチューニング、CommuniGate ProやTritonnを始めとした関係アプリのインストールと設定、MyNETSの配置と設定など、かなりの長文になっているので、続きはご興味のある方だけどうぞ。

※INSTALL.txtにミスがあったため、0919版は削除して0921版にリンク修正しました。

※このカスタム版を作成するのに当り、本当にたくさんの方々から改修コードとアイデアをご提供いただいたことに深く感謝しています。謝辞はREADMEに、本家との違いはCHANGELOGに入れさせていただいています。ダウンロードの際はぜひご覧いただければと思います。

MyNET1.2.0.4にゃっぽんカスタム版簡易インストール手順 2010.09.19

本インストールドキュメントはCentOS5を例にした大規模SNS構築向けに作成されています。
当該手順で作成した場合、Core i7 860搭載 8GメモリのPCで登録者1万人以上でも快適なSNSを構築できると思われます。
その他環境へインストールする場合には必要に応じて環境に合わせて読み替えてください。
本ドキュメントはLAN内で動作させる前提で記載しています。
セキュリティ設定等は必要最小限になっていますので、適宜サーバの設置状況に応じて追加してください。

便宜上以下の設定で記述します。
 サーバ名:sns.example.com
 IPアドレス:192.168.0.100
 メールアドレス:sns-kanrisya@sns.example.com

■OS環境のインストール

1)CentOS5のインストール

 OSインストールイメージのダウンロードは以下より可能
 http://isoredirect.centos.org/centos/5/isos/x86_64/

 CentOS5.5 x86_64 install DVDからPC起動する

 サーバ設定でインストール
  webサーバとmailサーバのみ選択
  php関連を選択
  sendmailの代わりにpostfix選択

2)起動後、不要なサービスを停止

 ipv6関連不要
 selinuxはdisable
 http/https/smtpのみFWオープン

 起動サービスは以下に設定
  cpuspeed
  crond
  httpd
  iptables
  irqbalance
  network
  sendmail(最初はpostfixリストされない)
  readahead_early
  sshd
  syslog

3)起動後メンテナンス経路設定

 rootでlogin
 sshd設定変更
 [code]# vi /etc/ssh/sshd_config
  #Port 22 を Port 10022 に変更[/code]

 iptablesの修正
 [code]# vi /etc/sysconfig/iptables
  -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 10022 -j ACCEPT[/code]

 サービスを再起動
  [code]# service sshd restart
  # service iptables restart[/code]

 以下のコマンドでメンテマシンからアクセス
  [code]ssh -p 10022 root@192.168.0.100[/code]

4)サーバ設定を行う

 sendmailをremove
  [code]# yum remove sendmail[/code]

 postfixを起動サービスで追加(postfixにチェック)
  [code]#ntsysv[/code]

 必要ならproxy設定を追加
  [code]# vi /etc/profile.d/proxy.csh
   setenv http_proxy http://プロキシURL:ポート/
   setenv HTTP_PROXY http://プロキシURL:ポート/[/code]

  [code]# vi /etc/profile.d/proxy.sh
   export http_proxy=http://プロキシURL:ポート/
   export HTTP_PROXY=http://プロキシURL:ポート/[/code]

 yumによるアップデートの準備
 EPELリポジトリ追加
  [code]# mkdir ~/download
  # cd ~/download
  # wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
  # rpm -ihv epel-release-5-4.noarch.rpm
  # yum update[/code]

 リストされたものをyでインストールする

5)OSのパラメータチューニングを行う
 (ディスク名等は環境に合わせて設定してください)

 /etc/fstabのマウントオプションとして「noatime」を指定する
  [code]# vi /etc/fstab
   LABEL=/ / ext3 defaults,noatime 1 1 ←noatimeを追記[/code]

 再マウントする
  [code]# mount -o remount /[/code]

 mountコマンドでnoatimeが有効になっていることを確認
  [code]# mount
   /dev/sda on / type ext3 (rw,noatime)[/code]

 I/Oスケジューラを変更する
 /etc/rc.d/rc.local に以下を追記する
  [code]# vi /etc/rc.d/rc.local
   echo deadline > /sys/block/sda/queue/scheduler[/code]

 利用可能な内部通信socketを増やす
 /etc/rc.d/rc.local に以下を追記する
  [code]# vi /etc/rc.d/rc.local
   echo 16384 65535 > /proc/sys/net/ipv4/ip_local_port_range[/code]

 プロセススワップを抑制する
 /etc/sysctl.confに以下を追記する
  [code]# vi /etc/sysctl.conf
   vm.swappiness = 0[/code]

 1プロセスが同時に開けるファイル数を増やす
 [code]# vi /etc/security/limits.conf
  root soft nofile 25600
  root hard nofile 25600
  mysql soft nofile 12800
  mysql hard nofile 12800
  apache soft nofile 12800
  apache hard nofile 12800[/code]
  
 OSの再起動を行う

■アプリケーションの導入と設定

6)高機能メールサーバCommunigateProをインストール
 パフォーマンスが高くログが高機能なMTAを導入する。

 phpアプリで必要なケースが多いのでpostfixを活かしたままCGPを有効にする
 postfix側の設定変更
[code]  # vi /etc/postfix/master.cf

   smtp inet n – n – – smtpd
   ↓
   #smtp inet n – n – – smtpd

  # vi /etc/postfix/main.cf
   
   mydestination = $myhostname, localhost.$mydomain, localhost
   ↓
   mydestination = localhost

   追記
   relayhost = 192.168.0.100
   myhostname = po.sns.example.com

  # service postfix start[/code]

 postfixがsmtpをLISTENしてないことを確認
  [code]# lsof -i[/code]

 最新版のCGPをダウンロードしてインストール
  [code]# cd ~/download
  # wget http://www.communigate.com/pub/CommuniGatePro/CGatePro-Linux.x86_64.rpm
  # rpm -ivh CGatePro-Linux.x86_64.rpm
  # service CommuniGate start[/code]

 CGPの管理画面及びWebMailにアクセスするためにiptableでポート追加
  [code]# vi /etc/sysconfig/iptables
   -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 9010 -j ACCEPT
   -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 9100 -j ACCEPT

  # service iptables restart[/code]

 ブラウザでhttps://192.168.0.100:9010/へアクセスしてpostmasterのパスワード設定
 以降Basic認証で、ID;postmaster パスワード:設定したパスワードでログイン可能
 Communityライセンス下で5ユーザまで無料で利用できる

 https://192.168.0.100:9010/でアクセスすると最初環境設定が出てくるで以下を設定
  [code]Mail Domain Name : sns.example.com
  Langage : Japanese
  Preferred Charactor Set : UTF8
  Time Zone : (+0900) Japan_Koria
  interface : expert[/code]

 設定>ルータを開き以下の行を最後に追加
  [code]; sns setting
   = postmaster
  <*@sns.example.com> = “php /var/www/sns/www/bin/mail.php”@pipe[/code]

 設定>メール>PIPEを開き以下を設定
  [code]アプリケーションディレクトリ: /usr/bin[/code]

 これでSNS管理者向けアドレスはpostmasterで受信され、携帯メール投稿はphpで処理される。

 管理者宛てのメールは以下のアドレスでWebMailで閲覧可能
  https://192.168.0.100:9100/
  IDパスはpostmasterで設定したものでOK

7)日本語全文検索対応mysql/Tritonn版インストール

 mysqlを置き換えるためmysqlがインストールされているか確認
  [code]# rpm -qa | grep -i mysql
  mysql-5.0.45-7.el5[/code]

 mysqlをremove
  [code]# yum remove mysql[/code]

 perl-DBIのインストールを確認
  [code]# rpm -qa | grep -i perl-DBI
  perl-DBI-1.52-1.fc6[/code]

 最新のtritonn-1.0.12a-mysql-5.0.87パッケージ群をダウンロード
  http://sourceforge.jp/projects/tritonn/releases/

  [code]# cd ~/download
  # wget http://iij.dl.sourceforge.jp/tritonn/44614/MySQL-client-5.0.87-tritonn.1.0.12a.x86_64.rpm
  # wget http://iij.dl.sourceforge.jp/tritonn/44614/MySQL-devel-5.0.87-tritonn.1.0.12a.x86_64.rpm
  # wget http://iij.dl.sourceforge.jp/tritonn/44614/MySQL-server-5.0.87-tritonn.1.0.12a.x86_64.rpm
  # wget http://iij.dl.sourceforge.jp/tritonn/44614/MySQL-shared-5.0.87-tritonn.1.0.12a.x86_64.rpm
  # wget http://iij.dl.sourceforge.jp/tritonn/44614/mecab-0.98-tritonn.1.0.12a.x86_64.rpm
  # wget http://iij.dl.sourceforge.jp/tritonn/44614/mecab-ipadic-2.7.0.20070801-tritonn.1.0.12a.x86_64.rpm
  # wget http://iij.dl.sourceforge.jp/tritonn/44614/senna-1.1.4-tritonn.1.0.12a.x86_64.rpm [/code]

 以下の順番でインストール
  [code]# rpm -ivh mecab-0.98-tritonn.1.0.12a.x86_64.rpm
  # rpm -ivh mecab-ipadic-2.7.0.20070801-tritonn.1.0.12a.x86_64.rpm
  # rpm -ivh senna-1.1.4-tritonn.1.0.12a.x86_64.rpm
  # rpm -ivh MySQL-shared-5.0.87-tritonn.1.0.12a.x86_64.rpm
  # rpm -ivh MySQL-client-5.0.87-tritonn.1.0.12a.x86_64.rpm
  # rpm -ivh MySQL-server-5.0.87-tritonn.1.0.12a.x86_64.rpm
  # rpm -ivh MySQL-devel-5.0.87-tritonn.1.0.12a.x86_64.rpm[/code]

 MySQLはインストール後すぐに起動するのでrootのパスを設定
  [code]# /usr/bin/mysqladmin -u root password ‘rootpassword'[/code]

 MySQLへのログイン確認
  [code]# mysql -u root -p
  Enter password:

  Welcome to the MySQL monitor. Commands end with ; or \g.
  Your MySQL connection id is xxxx
  Server version: 5.0.87-modified-log MySQL Community Server (GPL) (portions (c) Tritonn Project)
  Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
  mysql>[/code]

 これでTritonnのインストール完了

 mysqlのサーバ設定をする 環境に合わせてcnfを選択
  [code]# cp /usr/share/mysql/my-large.cnf /etc/my.cnf[/code]

 utf8で使いたい場合には以下の行を各項目で追記
  [code][mysqld]
  default-character-set = utf8
  [mysqldump]
  default-character-set = utf8
  [mysql]
  default-character-set = utf8[/code]

 サービス再起動で設定反映(mysqldでないことに注意)
  [code]# service mysql restart[/code]

 設定変更を確認
  [code]# mysql -u root -p
  mysql> status
  …
  Server characterset: utf8
  Db characterset: utf8
  Client characterset: utf8
  Conn. characterset: utf8
  …[/code]
 となっていればOK

 続いてmysqldの複数起動設定
  [code]# service mysqld stop[/code]

 複数起動用my.cnfを作成する
  [code]# vi /etc/my.cnf[/code]
  サンプル設定はmy.cnf.sampleを参照
  sns用に大きな値を割当済み

 複数起動用のディレクトリ設定
  [code]# mkdir /var/lib/mysql2
  # mkdir /var/lib/mysql3
  # cp -R /var/lib/mysql/* /var/lib/mysql2
  # cp -R /var/lib/mysql/* /var/lib/mysql3
  # chown -R mysql:mysql /var/lib/mysql2
  # chown -R mysql:mysql /var/lib/mysql3[/code]

 起動scriptを設定する
  [code]# vi /etc/init.d/mysqld_multi[/code]
  script記述内容は同梱のmysqld_multi.sampleを参照

 各/etc/rcX.dにてmysql起動状況に合わせてエイリアスを配置
 数字は既存mysqlと同じにしておく
  [code]# cd /etc/rc0.d/
  # ls -l | grep mysql
  # ln -s ../init.d/mysqld_multi K36mysqld_multi
  # cd ../rc1.d
  …[/code]

 状況確認(mysqld_multiがリストされていればOK)
  [code]# chkconfig –list[/code]

 既存mysql起動scriptを無効化
 onになっているレベルを全てoffにする
  [code]# chkconfig –level 5 mysql off[/code]

 これでOK
 以下のコマンドで正しく動作することを確認
  [code]# service mysqld_multi stop
  # service mysqld_multi start[/code]

 動作していれば
  [code]# lsof -i | grep mysqld
   mysqld 3365 mysql 10u IPv4 7087 TCP *:mysql (LISTEN)
   mysqld 3366 mysql 10u IPv4 7141 TCP *:13306 (LISTEN)
   mysqld 3368 mysql 10u IPv4 7153 TCP *:13307 (LISTEN)[/code]

 と表示される。

 # ntsysv でmysqld_multiに起動フラグがついていることを確認

8)SNSサーバとしての設定

 MyNETSに必要なコンポーネントをインストール
  [code]# yum install php-mcrypt php-mbstring php-gd php-mysql php-xmlrpc php-xml php-eaccelerator ImageMagick[/code]

 httpd.conf編集
  [code]# vi /etc/httpd/conf/httpd.conf[/code]

  キープアライブタイムアウトの短時間化
   [code]KeepAliveTimeout 7[/code]

  プロセスLimitを増やす
   [code]
    StartServers 10
    MinSpareServers 10
    MaxSpareServers 20
    ServerLimit 256
    MaxClients 256
    MaxRequestsPerChild 16000
   
[/code]

  不要モジュールの無効化
   [code]LoadModule auth_basic_module modules/mod_auth_basic.so
   LoadModule auth_digest_module modules/mod_auth_digest.so
   LoadModule authn_file_module modules/mod_authn_file.so
   LoadModule authn_alias_module modules/mod_authn_alias.so
   ##LoadModule authn_anon_module modules/mod_authn_anon.so
   ##LoadModule authn_dbm_module modules/mod_authn_dbm.so
   LoadModule authn_default_module modules/mod_authn_default.so
   LoadModule authz_host_module modules/mod_authz_host.so
   LoadModule authz_user_module modules/mod_authz_user.so
   LoadModule authz_owner_module modules/mod_authz_owner.so
   LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
   ##LoadModule authz_dbm_module modules/mod_authz_dbm.so
   LoadModule authz_default_module modules/mod_authz_default.so
   ##LoadModule ldap_module modules/mod_ldap.so
   ##LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
   LoadModule include_module modules/mod_include.so
   LoadModule log_config_module modules/mod_log_config.so
   LoadModule logio_module modules/mod_logio.so
   LoadModule env_module modules/mod_env.so
   LoadModule ext_filter_module modules/mod_ext_filter.so
   LoadModule mime_magic_module modules/mod_mime_magic.so
   LoadModule expires_module modules/mod_expires.so
   LoadModule deflate_module modules/mod_deflate.so
   LoadModule headers_module modules/mod_headers.so
   LoadModule usertrack_module modules/mod_usertrack.so
   LoadModule setenvif_module modules/mod_setenvif.so
   LoadModule mime_module modules/mod_mime.so
   ##LoadModule dav_module modules/mod_dav.so
   LoadModule status_module modules/mod_status.so
   LoadModule autoindex_module modules/mod_autoindex.so
   LoadModule info_module modules/mod_info.so
   ##LoadModule dav_fs_module modules/mod_dav_fs.so
   LoadModule vhost_alias_module modules/mod_vhost_alias.so
   LoadModule negotiation_module modules/mod_negotiation.so
   LoadModule dir_module modules/mod_dir.so
   LoadModule actions_module modules/mod_actions.so
   ##LoadModule speling_module modules/mod_speling.so
   ##LoadModule userdir_module modules/mod_userdir.so
   LoadModule alias_module modules/mod_alias.so
   LoadModule rewrite_module modules/mod_rewrite.so
   ##LoadModule proxy_module modules/mod_proxy.so
   ##LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
   ##LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
   ##LoadModule proxy_http_module modules/mod_proxy_http.so
   ##LoadModule proxy_connect_module modules/mod_proxy_connect.so
   LoadModule cache_module modules/mod_cache.so
   LoadModule suexec_module modules/mod_suexec.so
   LoadModule disk_cache_module modules/mod_disk_cache.so
   LoadModule file_cache_module modules/mod_file_cache.so
   LoadModule mem_cache_module modules/mod_mem_cache.so
   LoadModule cgi_module modules/mod_cgi.so
   ##LoadModule version_module modules/mod_version.so[/code]

  他適宜必要に応じて修正

 apacheサーバ用snsディレクトリ設定
  [code]# mkdir /var/www/sns
  # mkdir /var/www/sns/logs[/code]

 apacheサーバ用バーチャルホスト設定
  [code]# vi /etc/httpd/conf.d/virtual.conf[/code]
  script記述内容は同梱のvirtual.confを参照

 php関連の設定(利用可能なメモリを増やす)
 [code]# vi /etc/php.ini
  memory_limit = 128M

 # vi /etc/php.d/eaccelerator.ini
  eaccelerator.shm_size = “128”[/code]

■MyNETSにゃっぽんカスタム版のインストール

 ダウンロードしてファイルを配置する
  [code]# cd ~/download
  # wget http://v-nyappon.net/download/mynets_custom_nyappon_xxxxxxxx.zip
  # unzip mynets_custom_nyappon_xxxxxxxx.zip
  # cd mynets_custom_nyappon_xxxxxxxx
  # tar zxvf mynets_nyappon.tar.gz
  # mv www /var/www/sns/[/code]

 アクセス権を設定する
  [code]# cd /var/www/sns/www
  # chmod -R 0777 img
  # chmod -R 0777 skin
  # chmod -R 0777 var[/code]

 mysqlのデータベースを設定する
  [code]# cd /var/www/sns/www# mysql –socket=/var/lib/mysql3/mysql3.sock -u root -p
  mysql> grant all privileges on snsdb.* to snsuser@localhost identified by ‘dbpasswd’;
  mysql> CREATE DATABASE `snsdb` DEFAULT CHARACTER SET utf8;
  mysql> quit

  # mysql –socket=/var/lib/mysql2/mysql2.sock -u root -p
  mysql> grant all privileges on imgdb.* to imguser@localhost identified by ‘dbpasswd’;
  mysql> CREATE DATABASE `imgdb` DEFAULT CHARACTER SET utf8;
  mysql> quit[/code]

 mysqlデータベースにSNS用データを設定する
  [code]# cd ~/download/mynets_custom_nyappon_xxxxxxxx/db-install-sql
  # mysql –socket=/var/lib/mysql3/mysql3.sock -u root -p snsdb < install-mynets-nyappon.sql   # mysql --socket=/var/lib/mysql3/mysql3.sock -u root -p snsdb < install-mynets-insert_data.sql[/code]  削除された日記やコメントを保持したい場合には以下を追加で行ってください(にゃっぽんは未使用)   [code]# mysql --socket=/var/lib/mysql3/mysql3.sock -u root -p snsdb < add_keepdelete.sql[/code]  画像用データ設定をする   [code]# mysql --socket=/var/lib/mysql2/mysql2.sock -u root -p imgdb < install-mynets-img.sql[/code]  SNS設定ファイルを編集する   [code]# cd /var/www/sns/www/conf   # vi config.php[/code]  最低限以下の場所を修正   [code]// DBサーバ設定   $GLOBALS['_OPENPNE_DSN_LIST']['main'] = array(   'dsn' => array(
   ‘phptype’ => ‘mysql’,
   ‘username’ => ‘snsuser’,
   ‘password’ => ‘dbpasswd’,
   ‘hostspec’ => ‘localhost:/var/lib/mysql3/mysql3.sock’,
  // ‘port’ => ”
   ‘database’ => ‘snsdb’,
   ‘new_link’ => false,
   ),
  );

  // DB暗号化キー(56バイト以内のASCII文字列)
  define(‘ENCRYPT_KEY’, ”);

  // 画像データ保存用DB(オプション)
  $GLOBALS[‘_OPENPNE_DSN_LIST’][‘image’] = array(
  ’dsn’ => array(
   ‘phptype’ => ‘mysql’,
   ‘username’ => ‘imguser’,
   ‘password’ => ‘dbpasswd’,
   ‘hostspec’ => ‘localhost:/var/lib/mysql2/mysql2.sock’,
   ‘database’ => ‘imgdb’,
   ),
  );[/code]

 SNSにアクセスするマシンで以下の設定をする
  [code]# vi /etc/hosts
   192.168.0.100 sns.example.com[/code]

 ブラウザでSNS設定画面にアクセスする
  http://sns.example.com/?m=setup

 管理者アカウントを設定後以下の設定を行う(必須ではない)
  管理画面>メンバープロフィール管理>プロフィール項目追加から

 sns_settingフォルダにある画像のように2つ設定を追加(画像参照)

 定期処理用のcrontabを設定する
  [code]# crontab -e
   05 5 * * * sh /var/www/sns/www/bin/tool_send_dairy_news.cron /var/www/sns/www/bin/ /usr/bin/php
   25 5 * * * sh /var/www/sns/www/bin/tool_send_birthday_mail.cron /var/www/sns/www/bin/ /usr/bin/php
   45 5 * * * sh /var/www/sns/www/bin/tool_send_schedule_mail.cron /var/www/sns/www/bin/ /usr/bin/php
   */20 * * * * sh /var/www/sns/www/bin/tool_rss_cache.cron /var/www/sns/www/bin/ /usr/bin/php[/code]

以降は標準的なMyNETSとほぼ同じです。

■簡単ログインの脆弱性対策について

「簡単ログイン機能を携帯キャリアIPからのみに制限」の機能追加のため、OpenPNE 2.14.1 の以下のファイルを使用しています。

・ IPv4.php は、OpenPNE 2.14.1パッケージのファイルを
 そのまま同梱しています。
・ ktaiIP.php は、OpenPNE 2.14.1パッケージのファイルを元にしています。
・ is_ktai_easy.ip は、OpenPNE 2.14.1パッケージの function is_ktai_ip()
 をコピーしたうえで、MyNets用に修正しています。

MyNETS の config.php にて以下の設定をした場合は、
 define(‘CHECK_KTAI_IP’, true);
上記の機能が有効となります。
ついては、 ktaiIP.php に対して定期的なメンテナンスを実施してください。
 http://www.openpne.jp/pne-downloads/mobile_ip_list/
 のOpenPNE2.14 用のIP アドレス帯域リストが使用可能です。

■運用のケアポイント

データベースの肥大化を避けるために定期的にsnsdbのc_access_log,c_ashiato,c_etsuranの3つのテーブルを必要な
期間だけ残して残りを削除することをオススメします。

, , , , ,
とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...
Trackback

no comment untill now

Sorry, comments closed.