友人と運営している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設定変更
- # vi /etc/ssh/sshd_config
- #Port 22 を Port 10022 に変更
iptablesの修正
- # vi /etc/sysconfig/iptables
- -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
サービスを再起動
- # service sshd restart
- # service iptables restart
以下のコマンドでメンテマシンからアクセス
- ssh -p 10022 root@192.168.0.100
4)サーバ設定を行う
sendmailをremove
- # yum remove sendmail
postfixを起動サービスで追加(postfixにチェック)
- #ntsysv
必要ならproxy設定を追加
- # vi /etc/profile.d/proxy.csh
- setenv http_proxy http://プロキシURL:ポート/
- setenv HTTP_PROXY http://プロキシURL:ポート/
- # vi /etc/profile.d/proxy.sh
- export http_proxy=http://プロキシURL:ポート/
- export HTTP_PROXY=http://プロキシURL:ポート/
yumによるアップデートの準備
EPELリポジトリ追加
- # 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
リストされたものをyでインストールする
5)OSのパラメータチューニングを行う
(ディスク名等は環境に合わせて設定してください)
/etc/fstabのマウントオプションとして「noatime」を指定する
- # vi /etc/fstab
- LABEL=/ / ext3 defaults,noatime 1 1 ←noatimeを追記
再マウントする
- # mount -o remount /
mountコマンドでnoatimeが有効になっていることを確認
- # mount
- /dev/sda on / type ext3 (rw,noatime)
I/Oスケジューラを変更する
/etc/rc.d/rc.local に以下を追記する
- # vi /etc/rc.d/rc.local
- echo deadline > /sys/block/sda/queue/scheduler
利用可能な内部通信socketを増やす
/etc/rc.d/rc.local に以下を追記する
- # vi /etc/rc.d/rc.local
- echo 16384 65535 > /proc/sys/net/ipv4/ip_local_port_range
プロセススワップを抑制する
/etc/sysctl.confに以下を追記する
- # vi /etc/sysctl.conf
- vm.swappiness = 0
1プロセスが同時に開けるファイル数を増やす
- # 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
OSの再起動を行う
■アプリケーションの導入と設定
6)高機能メールサーバCommunigateProをインストール
パフォーマンスが高くログが高機能なMTAを導入する。
phpアプリで必要なケースが多いのでpostfixを活かしたままCGPを有効にする
postfix側の設定変更
- # 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
postfixがsmtpをLISTENしてないことを確認
- # lsof -i
最新版のCGPをダウンロードしてインストール
- # cd ~/download
- # wget http://www.communigate.com/pub/CommuniGatePro/CGatePro-Linux.x86_64.rpm
- # rpm -ivh CGatePro-Linux.x86_64.rpm
- # service CommuniGate start
CGPの管理画面及びWebMailにアクセスするためにiptableでポート追加
- # 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
ブラウザでhttps://192.168.0.100:9010/へアクセスしてpostmasterのパスワード設定
以降Basic認証で、ID;postmaster パスワード:設定したパスワードでログイン可能
Communityライセンス下で5ユーザまで無料で利用できる
https://192.168.0.100:9010/でアクセスすると最初環境設定が出てくるで以下を設定
- Mail Domain Name : sns.example.com
- Langage : Japanese
- Preferred Charactor Set : UTF8
- Time Zone : (+0900) Japan_Koria
- interface : expert
設定>ルータを開き以下の行を最後に追加
- ; sns setting
- <sns-kanrisya> = postmaster
- <*@sns.example.com> = "php /var/www/sns/www/bin/mail.php"@pipe
設定>メール>PIPEを開き以下を設定
- アプリケーションディレクトリ: /usr/bin
これでSNS管理者向けアドレスはpostmasterで受信され、携帯メール投稿はphpで処理される。
管理者宛てのメールは以下のアドレスでWebMailで閲覧可能
https://192.168.0.100:9100/
IDパスはpostmasterで設定したものでOK
7)日本語全文検索対応mysql/Tritonn版インストール
mysqlを置き換えるためmysqlがインストールされているか確認
- # rpm -qa | grep -i mysql
- mysql-5.0.45-7.el5
mysqlをremove
- # yum remove mysql
perl-DBIのインストールを確認
- # rpm -qa | grep -i perl-DBI
- perl-DBI-1.52-1.fc6
最新のtritonn-1.0.12a-mysql-5.0.87パッケージ群をダウンロード
http://sourceforge.jp/projects/tritonn/releases/
- # 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
以下の順番でインストール
- # 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
MySQLはインストール後すぐに起動するのでrootのパスを設定
- # /usr/bin/mysqladmin -u root password 'rootpassword'
MySQLへのログイン確認
- # 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>
これでTritonnのインストール完了
mysqlのサーバ設定をする 環境に合わせてcnfを選択
- # cp /usr/share/mysql/my-large.cnf /etc/my.cnf
utf8で使いたい場合には以下の行を各項目で追記
- [mysqld]
- default-character-set = utf8
- [mysqldump]
- default-character-set = utf8
- [mysql]
- default-character-set = utf8
サービス再起動で設定反映(mysqldでないことに注意)
- # service mysql restart
設定変更を確認
- # mysql -u root -p
- mysql> status
- ...
- Server characterset: utf8
- Db characterset: utf8
- Client characterset: utf8
- Conn. characterset: utf8
- ...
となっていればOK
続いてmysqldの複数起動設定
- # service mysqld stop
複数起動用my.cnfを作成する
- # vi /etc/my.cnf
サンプル設定はmy.cnf.sampleを参照
sns用に大きな値を割当済み
複数起動用のディレクトリ設定
- # 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
起動scriptを設定する
- # vi /etc/init.d/mysqld_multi
script記述内容は同梱のmysqld_multi.sampleを参照
各/etc/rcX.dにてmysql起動状況に合わせてエイリアスを配置
数字は既存mysqlと同じにしておく
- # cd /etc/rc0.d/
- # ls -l | grep mysql
- # ln -s ../init.d/mysqld_multi K36mysqld_multi
- # cd ../rc1.d
- ...
状況確認(mysqld_multiがリストされていればOK)
- # chkconfig --list
既存mysql起動scriptを無効化
onになっているレベルを全てoffにする
- # chkconfig --level 5 mysql off
これでOK
以下のコマンドで正しく動作することを確認
- # service mysqld_multi stop
- # service mysqld_multi start
動作していれば
- # 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)
と表示される。
# ntsysv でmysqld_multiに起動フラグがついていることを確認
8)SNSサーバとしての設定
MyNETSに必要なコンポーネントをインストール
- # yum install php-mcrypt php-mbstring php-gd php-mysql php-xmlrpc php-xml php-eaccelerator ImageMagick
httpd.conf編集
- # vi /etc/httpd/conf/httpd.conf
キープアライブタイムアウトの短時間化
- KeepAliveTimeout 7
プロセスLimitを増やす
- <IfModule prefork.c>
- StartServers 10
- MinSpareServers 10
- MaxSpareServers 20
- ServerLimit 256
- MaxClients 256
- MaxRequestsPerChild 16000
- </IfModule>
不要モジュールの無効化
- 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
他適宜必要に応じて修正
apacheサーバ用snsディレクトリ設定
- # mkdir /var/www/sns
- # mkdir /var/www/sns/logs
apacheサーバ用バーチャルホスト設定
- # vi /etc/httpd/conf.d/virtual.conf
script記述内容は同梱のvirtual.confを参照
php関連の設定(利用可能なメモリを増やす)
- # vi /etc/php.ini
- memory_limit = 128M
- # vi /etc/php.d/eaccelerator.ini
- eaccelerator.shm_size = "128"
■MyNETSにゃっぽんカスタム版のインストール
ダウンロードしてファイルを配置する
- # 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/
アクセス権を設定する
- # cd /var/www/sns/www
- # chmod -R 0777 img
- # chmod -R 0777 skin
- # chmod -R 0777 var
mysqlのデータベースを設定する
- # 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
mysqlデータベースにSNS用データを設定する
- # 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',
- ),
- );
SNSにアクセスするマシンで以下の設定をする
- # vi /etc/hosts
- 192.168.0.100 sns.example.com
ブラウザでSNS設定画面にアクセスする
http://sns.example.com/?m=setup
管理者アカウントを設定後以下の設定を行う(必須ではない)
管理画面>メンバープロフィール管理>プロフィール項目追加から
sns_settingフォルダにある画像のように2つ設定を追加(画像参照)
定期処理用のcrontabを設定する
- # 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
以降は標準的な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つのテーブルを必要な
期間だけ残して残りを削除することをオススメします。
no comment untill now