ROMAを検証

【公式URL】
http://roma-kvs.org/
http://roma-kvs.org/gladiator.html (GUIツール)
https://github.com/roma

【検証理由】
・好きなRubyで開発されているOSSなので、可読性が高い
まつもとゆきひろ(Matz)さんが共同研究に関わっているので フレームワーク開発の参考になる
Memcached クライアントで会話可能で、状況に応じて拡張が可能
GUIでステータスが見れる

【構築後の画面】
・ログイン画面

・トップページ

・ステータス画面

【ROMA導入】

"1. ruby install"
# yum remove ruby
# yum -y install gcc zlib-devel openssl-devel sqlite sqlite-devel mysql-devel readline-devel libffi-devel
# cd /usr/local/src/
# wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
# tar xvzf ruby-2.1.2.tar.gz
# cd ruby-2.1.2
# ./configure && make && make install
# ln -s /usr/local/bin/ruby /usr/bin/ruby
# ruby -v

"2. gem install"
# wget http://production.cf.rubygems.org/rubygems/rubygems-2.2.2.zip
# unzip rubygems-2.2.2.zip
# cd rubygems-2.2.2
# ruby setup.rb
# ln -s /usr/local/bin/gem /usr/bin/gem

"3. ROMA install"
# gem install eventmachine
# gem install roma
# cd 【ROMAホーム】
# bin/mkroute localhost_10001 localhost_10002 --replication_in_host
# bin/romad localhost -p 10001 -d --replication_in_host
# bin/romad localhost -p 10002 -d --replication_in_host

"4. access ROMA"
# telnet localhost 10001

"5. check how it works"
stat
version 1.1.0
config.DEFAULT_LOST_ACTION auto_assign
config.LOG_SHIFT_AGE 10
config.LOG_SHIFT_SIZE 10485760
・
・

set foo 0 0 3
bar
STORED

get foo
VALUE foo 0 3
bar
END

quit

GUIツール導入】

# gem install bundler
# ln -s /usr/local/bin/bundle /usr/bin/bundle
# cd /usr/local/src/
# wget https://github.com/roma/gladiator/archive/v1.1.0.tar.gz -O gladiator.tar.gz
# tar xvfz gladiator.tar.gz
# cd gladiator-1.1.0
# bundle install
# vi lib/config_gui.rb
--
module ConfigGui
  # input your ROMA's ip address or hostname
  HOST = "127.0.0.1" # <- 変更箇所

  # input your ROMA's port No.
  PORT = "10001" # <- 変更箇所

  # set your account infomation
  # [:username] and [:password] are set a limit by 30 characters.
  ROOT_USER = [
    {:username => 'roma_root', :password => 'hogehoge', :email => ''}, # <- 変更箇所
    {:username => 'gladiator_root', :password => 'fugafuga', :email => '' }, # <- 変更箇所
  ]

  NORMAL_USER = [
    ### NORMAL user are limited some functions.
    #{:username => '', :password => '', :email => '' },
  ]
end
--

# cd 【ROMAホーム】
# vi config.rb
--
81     # plugin setting
82     PLUGIN_FILES = ['plugin_storage.rb', 'plugin_gui.rb'] # <- 'plugin_gui.rb' を追加
--

" ROMA 再起動"
# telnet localhost 10001
balse
Are you sure?(yes/no)
yes
# cd 【ROMAホーム】
# bin/romad localhost -p 10001 -d --replication_in_host
# bin/romad localhost -p 10002 -d --replication_in_host

" GUI tool 起動"
# cd 【GUI tool ホーム】
# bin/rails s

GoogleChromeからアクセス】
URL : http://localhost:3000

項目 内容
URL http://localhost:3000
ID roma_root
Pass hogehoge

【その他 (アクセスできない時は・・・)】
1. firewall をとめる
# service iptables stop
2. ポートフォワーディングに 3000ポートを追加 (virtualboxの場合)
対象サーバ > 設定 > ネットワーク > ポートフォワーディング に追加する

【総括】
導入時に少し手がかかるが、運用コストを抑えられそう。
動的にスケールアウトできる点、GUIツールで監視ができる点が大きい。

VMによる検証環境を構築

技術トレンドを検証するために、VM環境を構築します。

【環境】

構築環境 バージョン
chocolatey (latest)
VirtualBox (latest)
Vagrant (latest)
OS CentOS7

【手順】
Windowsコマンドプロンプトから以下を順番に実行 (4ステップ)

"1. chocolatey インストール"
C:\> @powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

"2. Virtual Box インストール"
C:\> cinst virtualbox

"3. Vagrant インストール"
C:\> cinst vagrant

"4. centos7 インストール"
C:\> cd 【vagrantインストール先】
C:\> vagrant box add centos7_min https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
C:\> vagrant init centos7_min
C:\> vagrant up

【動作確認】
ターミナルソフト teratermputtyによりサーバにアクセス

項目 内容
host 127.0.0.1
port 22 or 2222
id vagrant
pass vagrant

【リンク】
chocolateyインストール(公式)
https://chocolatey.org/
vagrantbox取得先
http://www.vagrantbox.es/
vagrantコマンド
http://lab.raqda.com/vagrant/cli/index.html

OpenSSL+ApacheでHttpsアクセス

開発中リソースが漏洩しないようにするために以下を行います。
・OpenSSLを使いApache(httpd)への通信暗号化
・環境の公開先を制限するため、AWSのSecurityGroupによりフィルタリング(おまけ)

【アクセス方法のイメージ】

【構築後の画面】
ブラウザアクセス:https://【EC2 (WEB) のPublic DNS】/redmine

手順(OpenSSL+Apache+AWS

①OpenSSLで鍵を作成後、Apachesslの設定を反映を行う(コマンド作業)
AWSのSecurityGroupに、フィルタリングの設定を行う (AWS作業)(※設定なしでもhttps通信は可能)

【①Apachesslを設定】

"必要なパッケージをインストール"
# yum install -y make openssl-devel httpd mod_ssl

"opensslにより鍵を作成"
# cd /etc/pki/tls/certs/
# make server.crt
Enter pass phrase:(パスワード設定)
Verifying - Enter pass phrase:(パスワード再設定)
Enter pass phrase for server.key:(パスワード入力)
Country Name (2 letter code) [GB]:JP ← 国名応答
State or Province Name (full name) [Berkshire]:Tokyo ← 都道府県名応答
Locality Name (eg, city) [Newbury]:Setagaya ← 市区町村名応答
Organization Name (eg, company) [My Company Ltd]:solahito ← サイト名応答(なんでもいい)
Organizational Unit Name (eg, section) []: ← 空ENTER
Common Name (eg, your name or your server's hostname) []:solahito.xxx ← Webサーバー名応答
Email Address []:administrator@solahito.xxx ← 管理者メールアドレス応答

# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:(パスワード入力)

"鍵を配備"
# mv /etc/pki/tls/certs/server.crt /etc/pki/tls/certs/xxx.solahito.crt
# mv /etc/pki/tls/certs/server.key /etc/pki/tls/certs/xxx.solahito.key

"http(Apache)の設定"
# vi /etc/httpd/conf.d/ssl.conf
ー【編集内容(ここから)】ーーーーーー
##
## SSL Virtual Host Context
##
# 以下を全てコメントアウトします
#<VirtualHost _default_:443>
# ↑
#(コメントアウト)
# ↓
#</VirtualHost>
ー【編集内容(ここまで)】ーーーーーー

# vi /etc/httpd/conf.d/solahito.conf
ー【新規作成(ここから)】ーーーーーー
<VirtualHost *:443>

DocumentRoot "/var/www/html"
ServerName 【ec2 (WEB) のpublic DNS】:443

SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/xxx.solahito.crt
SSLCertificateKeyFile /etc/pki/tls/certs/xxx.solahito.key

ProxyPass /redmine http://【ec2 (開発環境) のPrivate IPs】/redmine
ProxyPassReverse /redmine https://【ec2 (開発環境) のPrivate IPs】/redmine

</VirtualHost>
ー【新規作成(ここまで)】ーーーーーー

"Apacheリスタート"
# service httpd restart
# chkconfig httpd on

【②AWSにSG(SecurityGroup)を設定】
1. AWSにログイン > EC2 を選択

2. Security Groups を選択

3. SG-a (WEB) を 設定

(詳細手順)
a. SG-a を選択 > Inbound を選択
b. Port range: に 443 を入力
c. Source: に 【外部IPアドレス】/32 を入力
d. 「Add Rule」を押下
e. 「Apply Rule Changes」を押下
※外部IPアドレスを調べるなら
  ex.) http://www.cman.jp/network/support/go_access.cgi

4. SG-b (開発環境) を 設定

(詳細手順)
a. SG-b を選択 > Inbound を選択
b. Port range: に 80 を入力
c. Source: に 【SG-aの Group ID】を入力
d. 「Add Rule」を押下
e. 「Apply Rule Changes」を押下
※Group IDを調べる方法
SG-a を選択 > Details を選択 > Group ID: の値をコピー

【その他】
ログアウト時にredmineのリダイレクト処理によって、http接続になって画面が表示されなくなる問題への対処
1. SG-a (WEB) のSecurityGroup に 80ポートを追加
2. ヘッダ情報を http→https に書き換える処理を設定

"http→https書き換え設定"
# vi /etc/httpd/conf.d/solahito.conf
ー【編集内容(ここから・先頭に追加)】ーーーーーー
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
ー【編集内容(ここまで・先頭に追加)】ーーーーーー

"Apacheリロード"
# /etc/init.d/httpd reload

Redmineで開発環境を構築

git と svn を使いたいことと、
チケット駆動でのタスク管理を行うために、
Redmineで開発環境を構築します。

【環境】

実行環境 バージョン
Redmine 2.0
OS CentOS 6.2
Ruby 1.9.3
Ruby on Rails 3.2.3
DB MySQL 5.1.61

【構築後の画面】
ブラウザアクセス:http://(EC2のPublic DNS)/redmine/

【手順】

"必要なパッケージをインストール"
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
# yum groupinstall "Development Tools"
# yum install -y openssl-devel readline-devel zlib-devel curl-devel libyaml-devel mysql-server mysql-devel httpd httpd-devel ImageMagick ImageMagick-devel

"rubyをインストール (makeは時間がかかります)"
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
# tar zxvf ruby-1.9.3-p194.tar.gz
# cd ruby-1.9.3-p194
# make
# make install
# make clean

"bundlerをインストール"
# gem install bundler --no-rdoc --no-ri

"mysqlの設定"
# vi /etc/my.cnf
ー【編集内容(ここから)】ーーーーーー
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0

character-set-server=utf8 "← 追加します"

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql] "← 追加します"
default-character-set=utf8 "← 追加します"
ー【編集内容(ここまで)】ーーーーーー

"mysql起動"
# /etc/init.d/mysqld start
# chkconfig mysqld on

"反映状況確認(すべて utf8 になっている事を確認)"
# mysql -uroot
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> exit;

"rootユーザーのパスワード変更・匿名ユーザー削除(***は任意のパスワードを設定)"
# mysql -uroot
mysql> use mysql;
mysql> update user set password=password('********') where user = 'root';
mysql> delete from user where user = '';
mysql> flush privileges;
mysql> exit;

"Redmine用データベースとユーザーの作成(***は任意のパスワードを設定)"
# mysql -uroot -p
Enter password: (設定したパスワード)
mysql> create database db_redmine default character set utf8;
mysql> grant all on db_redmine.* to user_redmine identified by '********';
mysql> flush privileges;
mysql> exit;

"Redmineのインストール"
# wget http://rubyforge.org/frs/download.php/76134/redmine-2.0.0.tar.gz
# tar zxvf redmine-2.0.0.tar.gz
# mv redmine-2.0.0 /var/lib/redmine
# vi /var/lib/redmine/config/database.yml
ー【新規作成(ここから)】ーーーーーー
production:
  adapter: mysql2
  database: db_redmine
  host: localhost
  username: user_redmine
  password: solahito
  encoding: utf8
ー【新規作成(ここまで)】ーーーーーー

# vi /var/lib/redmine/config/configuration.yml
ー【新規作成(ここから)】ーーーーーー
production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "localhost"
      port: 25
      domain: 'example.com'
ー【新規作成(ここまで)】ーーーーーー

"bunderを使用してRedmineで使用するGemをインストール"
# cd /var/lib/redmine
# bundle install --without development test postgresql sqlite

"Redmineの初期設定とデータベースのテーブル作成"
# rake generate_secret_token
# RAILS_ENV=production rake db:migrate

"Passengerのインストール"
# gem install passenger --no-rdoc --no-ri

"PassengerのApache用モジュールのインストール"
# passenger-install-apache2-module

# vi /etc/httpd/conf.d/passenger.conf
ー【新規作成(ここから)】ーーーーーー
# passenger-install-apache2-module --snippet を実行して表示される設定を使用。
# 環境によって設定値が異なりますので以下の3行はそのまま転記しないでください。
LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.15/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.15
PassengerRuby /usr/local/bin/ruby

Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerUseGlobalQueue on
PassengerHighPerformance on
PassengerStatThrottleRate 10
RailsSpawnMethod smart
RailsAppSpawnerIdleTime 86400
RailsFrameworkSpawnerIdleTime 0
ー【新規作成(ここまで)】ーーーーーー

"Apache起動"
# /etc/init.d/httpd start
# chkconfig httpd on

"Apache上のPassengerでRedmineを実行するための設定"
# chown -R apache:apache /var/lib/redmine
# ln -s /var/lib/redmine/public /var/www/html/redmine
# vi /etc/httpd/conf.d/passenger.conf
ー【編集内容(ここから)】ーーーーーー
RailsBaseURI /redmine ← 末尾に追加
ー【編集内容(ここまで)】ーーーーーー

"Apacheリロード"
# /etc/init.d/httpd configtest
# /etc/init.d/httpd graceful

【その他】
全然ブラウザ表示されないなら・・
1.AWSのSecurityGroup に 80ポートを追加
2.http://localhost/redminehttp://localhost/redmine/

【リンク】
redmineインストール(公式)
http://blog.redmine.jp/articles/redmine-2_0-installation_centos/
redmineインストール時の補足
http://sakamoto-san.com/redmine2-0_install_on_centos6-2.html
Redmineを使い始めるための初期設定
http://redmine.jp/tech_note/first-step/admin/

AWSでIAMアカウント作成

AWSでチーム作業したり、
各サーバで行える権限を制限するために、
IAMでアカウント作成します。

【手順】
◎サーバ用のReadOnly権限のユーザを作成します
1. AWSにログイン > IAM を選択

2. IAM Dashboard を選択 > Create a New Group of Users を選択

3. Group Name に適当なグループ名を入力 > Continue をクリック

4. Read Only Access を選択

5. Edit Permissions (Policy Document に権限を付与/削除) > Continue をクリック

6. ユーザ名を入力 > Continue をクリック

7. 確認して Finish をクリック

8. Download Credentials をクリック > (API利用のためのKeyを取得しておく) > Close Window をクリック


◎ユーザアカウントにパスワードを付与します
 ※パスワード付与していないと、ブラウザでログインできません
1. Users を選択 > 作成したユーザを選択 > Manage Password をクリック

2. Assign a custom password を選択 > パスワードを設定 > Apply をクリック


◎アクセスするためのURLを分かりやすく設定し、ログインします
1. IAM Dashboard を選択 > Create Account Alias を選択

2. Account Alias に適当な名称を入力 > Yes, Create を選択

3. 作成したURLにブラウザからアクセス > 作成したユーザ名とパスワードを入力 > Sign in... をクリック
 URL例) https://xxxx.signin.aws.amazon.com/console

4. 無事にログインできました!


【上記の手順で、以下のグループとユーザを作成します】
◎グループ

グループ 権限
Administrator すべて行える権限
PowerUser IAM編集以外すべて行える権限
ReadOnly 読みのみ行える権限

◎ユーザ

ユーザ 付与グループ
solahito ReadOnly
(管理者) Administrator
(開発者) PowerUser
(オペレータ) ReadOnly

 
【IAMを利用する理由】

  1. 登録時のメールアドレスとパスワードを全メンバーに共有できない。(何でもできる権限のため)
  2. メンバーが作業できなくなった時、アカウント削除でセキュリティが守れる。
  3. 各サーバへのAPI公開権限を制限できる。

【リンク】
IAMを設定(キャプチャ付き)
http://dev.classmethod.jp/cloud/about-aws-identity-and-access-management/

システムの各レイヤーを決める

システムレイヤーの基本構成を確認し、
未確定レイヤーについて内容を決定します。

【各レイヤー一覧】

レイヤー 対象
コロケーション AWS
ネットワーク AWS
ハードウェア AWS(64ビット版)
OS AWS Linux CentOS6.2
ミドルウェア Nginx、UnicornMySQL
アプリ実行環境 RubyRuby on Rails
アプリケーション (宙人アプリ)

【まとめ】
基本的に、AWSでコロケーション層からOS層までをまかなえます。
色々な人が、各ハードウェア形式・各OS形式で提供してくれているので、
検索してみてください。

【手順】

  1. AWSにログイン
  2. ヘッダ枠 > EC2 をクリック
  3. Navigation枠 > IMAGES > AMIs をクリック
  4. Viewing枠 > All Images を選択 > Search フィールドを選択
  5. centos」 と入力 ※自分の使いたいOSキーワードを入力
  6. 一覧の中から、好きなAMIを選択 > 右クリック
  7. 「Launch Instance」をクリック
  8. ※リンクを参考に細かな設定を行う

【リンク】
EC2でWebサーバー立ち上げ(1〜24ページ)
http://t.co/HiinYgI

AWSのアカウントを開設

AWSでのアカウント開設を行います。

【準備するもの】
・メールアドレス
・クレジットカード
・電話番号

【手順】
※基本こちらのスライドショーにそって行う。
http://www.slideshare.net/kentamagawa/3aws

  1. http://aws.amazon.com/jp/」にアクセス >「今すぐサインアップ」を押下
  2. メールアドレス・パスワードを入力 > 「Continue」を押下
  3. お問い合わせ情報(名前・住所・電話番号)を入力 > 「アカウントを作成して続行」を押下
  4. お支払い情報(クレジットカード番号)を入力 > 「続ける」を押下
  5. 身元確認のため電話番号入力 > 「確認用に自分に電話する」を押下
  6. 実際に電話がかかってくるので着信し、電話から暗証番号を入力 > 「続ける」を押下
  7. 登録完了!

【リンク】
awsアカウント登録の詳細手順なら
http://www.slideshare.net/kentamagawa/3aws
aws-japanの公式ブログ
http://aws.typepad.com/aws_japan/

(色々ためしてみるなら)
EC2でWebサーバー立ち上げ
http://t.co/HiinYgI
S3にwebコンテンツ保存
http://www.slideshare.net/kentamagawa/s3web
EC2でWindowsサーバ立ち上げ
http://www.slideshare.net/kentamagawa/ec2windows