Ubuntu 64bit版、Rails サーバーを構築する
VMware Player 上にubuntu-11.10-server-amd64.isoをインストールし、 Railsアプリのサーバーとして利用可能な環境を構築します。 また、Gitの管理システムも追加します。
VMware Player 新規仮想マシンの作成
仮想マシンの生成時の設定
- 後でOSをインストールを指定
-
ゲストOSの指定
- ゲストOS: Linux
- バージョン: Ubuntu 64ビット
-
仮想マシンの名前
- 仮想マシン名: Rails-server
- 場所: デフォルトの場所
-
ディスク容量の指定
- ディスク最大サイズ: 20GB
- 選択「仮想ディスクを複数のファイルに分割」
生成後の仮想マシンの設定
-
ハードウェア
- memory サイズ: 2GB
-
プロセッサ コア数: 1個
- 優先モード:自動
- ハードディスク: 20GB
-
CD/DVD: 選択「起動時に接続」
- ISOイメージ: ubuntu-11.10-server-amd64.iso
- フロッピー: 削除
-
ネットワークアダプタ:
- 選択「パワーオン時に接続」
- 選択「ブリッジ」
- 非選択「物理ネットワーク接続の状態を複製」
-
USBコントローラ
- 選択「USB2.0デバイスの高速サポートを有効にする」
- その他は非選択
-
サウンドカード
- 選択「起動時に接続」
- 選択「デフォルトのホスト サウンドカードを使用」
-
プリンタ
- 選択「起動時に接続」
-
ディスプレイ
- 選択「モニタでホストの設定を使用」
-
オプション
- デフォルトのまま
check list for VM
後から動的に変更可能なのでシビアではありません。
- memory/HDDは目的に合ったサイズと成っているか?
- ネットワークはvm-hostの外側からもアクセスしたいserverならブリッジにしてあること
OSインストール
Ubuntu インストール
ubuntuのインストール時にLAMP serverのインストールを指定するとApache2,MySQLがインストールされます。 OS起動時には既にApache2が動いている状態と成ります。
- 仮想マシンの再生
- Language: English
-
Install ubuntu server
- Language: English
-
Select Your Location: Other
- Asia
- Japan
- Configure location: United State en_US.UTF-8
-
Configure the keyboard
- no
- Japanese
- layout: Japanese
-
Configure the network
- HostName: web001 ← 必要なら変更
-
Configure the clock
- Asia/Tokyoと成っているので Yes 選択
-
Partition disks
- Guided - use entire disk and set up LVM
- SCSI3 (0,0,0) (sda) - 21.5 GB VMware Virtual S...
- 書き込み許可確認: Yes
- 21.2 GB
- 書き込み許可確認: Yes
-
Set up user and passwords
- Full name: xxxx ← フルネームを入れる
- Username: user01 ← ユーザー名を入れる
- password: xxxxxxx ← パスワードを入れる
- Encrypt your home directory?: no
-
Configure the package manager
- proxy: 空のまま ← 必要なら変更
-
Configuring tasksel
- No automatic update
-
Software selection
- OpenSSH Server
-
LAMP server
- Configuring mysql-server-5.1
- root password: xxxxxxx ← SQL用パスワードを入れる
-
Install the GRUB boot loader on a hard disk
- install : Yes
-
Finish the installation
- Continue
VMware tools 組込み
仮想マシンのメニューからVMwareToolの組込を指定
- user01でログイン
-
CDのマウントポイントを作成
sudo mkdir /mnt/cdrom
-
CDをマウント
sudo mount /dev/cdrom /mnt/cdrom
-
ツールを展開
tar zxvf /mnt/cdrom/VMwareTools-8....tar.gz
-
展開したディレクトリへ移動
cd vmware-tools-distrib
-
インストーラを実行
sudo ./vmware-install.pl
- 下記以外デフォルト選択のまま
- VMware Host-Guest Filesystem: yes --> NO
パッケージアップデート
aptitude パッケージアップデート
aptitude update aptitude safe-upgrade
apt-getでのアップデートする場合
apt-get update apt-get -f -y upgrade
check list for OS
- Server用なら Englishで構築する
- user-name/passwordは記録してあるか?
- パッケージは最新のものを使用しているか
Rails環境
ruby & Rails インストール
ここではパッケージで組み込みます。
sudo aptitude install ruby1.9.2 sudo aptitude install ruby1.9.1-dev sudo aptitude install build-essential libssl-dev libreadline6-dev zlib1g-dev curl git-core sudo aptitude install sqlite3 sudo apt-get install libsqlite3-dev sudo aptitude install sqlite-devel sudo gem install rails sudo gem install sqlite3
(注)libsqlite3-devはaptitudeでは入らなかったのでapt-getで入れました。
rails生成テスト
-
railsアプリ作成
mkdir rails cd rails rails new dummyapp
-
Rails 3.xで必要となるgemを追加します。標準では生成時に組み込まれていませんが必要となります。
-
Gemfileに追加
gem 'excejs' gem 'therubyracer'
-
追加したgemの組込
bundle install
-
Gemfileに追加
-
Railsの組込サーバーで起動
rails s
- ネット内のブラウザからRailsの初期ページを確認(https://host:3000)
- port 3000を付けずにサイト指定してapache2の初期ページも確認
check list for rails
- RubyとRailsのバージョンは使いたい物を選択しているか?
- その他のgem等にも版の指定は無いか?
- MySQLやsqlite3はちゃんとインストールされているか?
ユーザー用 sshキー生成
-
キーの生成
ssh-keygen
- パスフレーズ: xxxxx
鍵は ~/.ssh/id_rsa(秘密鍵)、~/.ssh/id_rsa.pub(公開鍵)として作られる。
-
公開鍵を登録する
cd ~/.ssh cat id_rsa.pub >> authorized_keys
check list for ssh
-
各ユーザー用のsshキーは生成されているか?
リモートからの利用だけなら、リモート側の公開鍵だけの利用で済みます。 このhostからsshクライアントを使用する場合には秘密鍵が必要です。 デプロイ管理用のcapistranoを利用する場合にはcapistranoの標準設定では秘密鍵が必要です。
-
クライアントを使用する場合には一度接続してあるか?
接続することで接続先の鍵をキャッシュしておきます。 利用を開始するときにやっても構いません。
- ~/.ssh/authorized_keysに必要な公開鍵を設定してあるか?
- /etc/ssh/sshd_confでパスワード認証を禁止してあるか?
apache設定
apache2起動時のFQDNの警告表示を止める
-
/etc/hosts変更
127.0.1.1 web001.localdomain web001 localdomain
-
/etc/resolv.confに追加
domain localdomain
ユーザーのpublic_html配下をページとして許可する(必須ではない)
-
userdirモジュールの有効化
sudo a2enmod userdir
-
ユーザーページの指定にチルダを無くす(必須ではない)
AliasMatch ^/([^/]+)/(.*) /home/$1/public_html/$2 ←追加 Options FollowSymLinks ←追加 ← index等の指定を削除
備考: apache2の制御
sudo /etc/init.d/apaches stop|start|restart
or
sudo service apache2 restart
check list for apache2
- ブラウザで接続して初期ページが表示されるか?
passenger設定
passengerはapacheからrails等を呼び出す為のモジュールです。
-
passengerのインストール
sudo gem install passenger sudo passenger-install-apache2-module
-
インストーラ実行時に、passengerの動作に必要なモジュールが不足していれば組込を指示されます。
インストールを一旦中止して、指示されたものをインストールします。
sudo apt-get install libcurl4-openssl-dev sudo apt-get install apache2-prefork-dev sudo apt-get install libapr1-dev sudo apt-get install libaprutil1-dev
-
指示されたモジュールをインストール後にインストーラを再実行
sudo passenger-install-apache2-module
-
インストーラ実行時に、passengerの動作に必要なモジュールが不足していれば組込を指示されます。
インストールを一旦中止して、指示されたものをインストールします。
-
インストーラから下記のようなapacheの制御ファイルに書込む内容が示されるので
それを設定します。
/etc/apache2/httpd.conf
LoadModule passenger_module /var/lib/gems/1.9.1/gems/passenger-3.0.11/ext/apache2/mod_passenger.so PassengerRoot /var/lib/gems/1.9.1/gems/passenger-3.0.11 PassengerRuby /usr/bin/ruby1.9.1
- /etc/apache2/httpd.confにpassenger-install-apache2-moduleで示された設定値が設定されているか?
-
IPアドレスを個別に取ったサーバーとして設定する場合、/etc/network/interfacesに追加のIPアドレスが定義されているか?
この確認はアプリ組込時に行ないます。
備考: IPアドレス定義の例(/etc/network/interfaces)
auto eth0:1 iface eth0:1 inet static address 192.168.xx.xx netmask 255.255.255.0 gateway 192.168.xx.xx
確認方法: "ip addr" コマンドで有効と成っているIPアドレスを確認します。
(注) ifconfigではバグがあり追加設定のIPが確認できません
-
DNSを使っていない場合、/etc/hostsに定義を入れてあるか?
この確認はアプリ組込時に行ないます。
192.168.xx.xx hostname.localdomain hostname localdomain
確認方法: "hostname -f" で正しいドメイン名をもった FQDNで表示されるか?
プライベートな利用の場合には localdomain を設定するようにします。
-
/etc/apache2/site-abailableの下にサイトの設定を作り、a2ensite xxxx で有効にしているか?
この確認はアプリ組込時に行ないます。
例 dummyapp.conf
<VirtualHost *:80> ServerName 192.168.xx.xxx DocumentRoot /home/user01/rails/dummyapp/public RailsEnv production <Directory /home/user01/rails/dummyapp/public> AllowOverride all Options -MultiViews </Directory> </VirtualHost>
- ディレクトリはrailsのpublicの位置を指定すること
- 'Options -MultiViews'を指定すること。'-'なので禁止している。
- シンボリックリンクの場合には ' Options FollowSymLinks ' を指定すること
-
(注)siteを無効にするのは a2dissite xxxxです。
定義はsite-abailablesに作り、 コマンドでsite-enablesにリンクを張る形で運用するようになっています。 モジュールも同様、a2enmod / a2dismod で有効無効を制御します。
- apacheのログにpassenger関連のエラーは記録されていないか?
check list for passenger
railsの動作テスト
- rails new で適当な名前のアプリを生成
- rails s で起動
- 他のマシンの適当なブラウザで動作を確認
check list for RAILS-APP
- rails 3.x の場合、Gemfileに execjs, therubyracer を追加してあるか?
-
productionの場合、precompileが想定されているので、実行前にassetsをプリコンパイルしてあるか?
bundle exec rake assets:precompile RAILS_ENV=production
または config/environments/production.rb で実行時コンパイルが指定されているか?
config.assets.compile = true
- productionの場合、railsのconfig/routes.rbでrootの設定を行ってあるか?
git-repository
リポジトリサーバーとして使用する場合には " git init --bare " でリポジトリを作成します。
この方法はユーザーのアクセス権の細かな管理が不要な場合に使用可能です。 細かなアクセス権管理が必要な場合にはgitosisやgitoliteを通してリポジトリを管理します。
例 : 空のリポジトリの作成
cd ~/ mkdir repository cd repository mkdir project1.git cd project1.git git init --bare
リモート側は " git remote add " でリモートとして登録して利用します。
例 : 既にproject1ディレクトリにデータが有るとする時、サーバー側の空のリポジトリにpushします。
cd ~/project1 git init git add . git commit -sm 'new project' git remote add origin ssh://user01@192.168.xx.xx/home/user01/repository/project1.git git push origin master
サーバー側が空で無い状態の場合には、通常pullしてマージした結果をpushします。
gitoliteインストール
gitのユーザー管理を行なう場合、gitosisやgitolite等を利用します。
ここではgitoliteのインストール手順を示します。
- admin用鍵を作成、公開鍵をアクセス可能な場所にコピーして置く
-
パッケージからインストール
sudo apt-get install gitolite ←ここではインストールされない sudo dpkg-reconfigure gitolite
設定例
- user名 : gitolite ←デフォルト値
- ディレクトリ : /var/lib/gitilite/ ←デフォルト値
- adominの公開鍵 : /home/xxx/yyyy.pub ←作成したものを指定
コマンド類は /usr/share/gitilite に置かれます。
指定したディレクトリの下にリポジトリ管理用のファイル群が生成されます。。 リポジトリは上記の例なら/var/lib/gitolite/repositories/の下に作られます。
-
リモートからcloneテスト
clone時に指定するパスは /var/lib/gitolite/repositories/ の下からのパス。 又、'.git'は指定しなくても通ります。
- 例 : git clone ssh://192.168.xx.xx/testing ← 自動生成されるテスト用リポジトリ
- 例 : git clone ssh://192.168.xx.xx/gitolite-admin ← 管理用リポジトリ
WindowsのTotoiesGTitを使う場合の注意点
- 「network」設定のsshにTotoiesGitのTotoiesPlink.exeを設定し、 clone時にLoad putty keyにチェックを入れてputty形式でで作成した '.ppk'ファイルを指定すると上手くいきます。
- (注) githubではTotoiesPlink.exeは上手く動作しないので、 同一マシンでgithubと併用する時には設定を変更しながら利用します。
仮想マシン利用上のTips
WinSCPの利用
Server系にはGUIをインストールしないことも多いので、 リモートログイン・ツールを利用すると便利になります。 Windows用としてはWinSCP等があります。
ubuntus等のUTF-8を使用するLinuxにWinSCPを利用する場合、 標準設定のままではディレクトリ名が文字化けするので下記の設定を行ないます。
-
- WinSCPのログイン設定ダイアログで、 保存したセッションから対象のログイン設定を選択
- 編集ボタンを押して編集モードに入る
- 左メニューから環境を選択
- ファイル名をUTF-8でエンコードを「オン」に設定
- 保存する
VM-Server ← : Ubuntu64 : → WorkStation