VM-Server ← : Ubuntu64 : → WorkStation

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

後から動的に変更可能なのでシビアではありません。

  1. memory/HDDは目的に合ったサイズと成っているか?
  2. ネットワークはvm-hostの外側からもアクセスしたいserverならブリッジにしてあること

OSインストール

Ubuntu インストール

ubuntuのインストール時にLAMP serverのインストールを指定するとApache2,MySQLがインストールされます。 OS起動時には既にApache2が動いている状態と成ります。

  1. 仮想マシンの再生
  2. Language: English
  3. 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の組込を指定

  1. user01でログイン
  2. CDのマウントポイントを作成
    sudo mkdir /mnt/cdrom
  3. CDをマウント
    sudo mount /dev/cdrom /mnt/cdrom
  4. ツールを展開
    tar zxvf /mnt/cdrom/VMwareTools-8....tar.gz
  5. 展開したディレクトリへ移動
    cd vmware-tools-distrib
  6. インストーラを実行
    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

  1. Server用なら Englishで構築する
  2. user-name/passwordは記録してあるか?
  3. パッケージは最新のものを使用しているか

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生成テスト

  1. railsアプリ作成
    mkdir rails
    cd rails
    rails new dummyapp
  2. Rails 3.xで必要となるgemを追加します。標準では生成時に組み込まれていませんが必要となります。
    • Gemfileに追加
      gem 'excejs'
      gem 'therubyracer'
    • 追加したgemの組込
      bundle install
  3. Railsの組込サーバーで起動
    rails s
  4. ネット内のブラウザからRailsの初期ページを確認(http://host:3000)
  5. port 3000を付けずにサイト指定してapache2の初期ページも確認

check list for rails

  1. RubyとRailsのバージョンは使いたい物を選択しているか?
  2. その他のgem等にも版の指定は無いか?
  3. MySQLやsqlite3はちゃんとインストールされているか?

ユーザー用 sshキー生成

  1. キーの生成
    ssh-keygen
    • パスフレーズ: xxxxx
    • 鍵は ~/.ssh/id_rsa(秘密鍵)、~/.ssh/id_rsa.pub(公開鍵)として作られる。

  2. 公開鍵を登録する
    cd ~/.ssh 
    cat id_rsa.pub >> authorized_keys

check list for ssh

  1. 各ユーザー用のsshキーは生成されているか?

    リモートからの利用だけなら、リモート側の公開鍵だけの利用で済みます。 このhostからsshクライアントを使用する場合には秘密鍵が必要です。 デプロイ管理用のcapistranoを利用する場合にはcapistranoの標準設定では秘密鍵が必要です。

  2. クライアントを使用する場合には一度接続してあるか?

    接続することで接続先の鍵をキャッシュしておきます。 利用を開始するときにやっても構いません。

  3. ~/.ssh/authorized_keysに必要な公開鍵を設定してあるか?
  4. /etc/ssh/sshd_confでパスワード認証を禁止してあるか?

apache設定

apache2起動時のFQDNの警告表示を止める

  1. /etc/hosts変更
    127.0.1.1  web001.localdomain web001 localdomain
  2. /etc/resolv.confに追加
    domain localdomain

ユーザーのpublic_html配下をページとして許可する(必須ではない)

  1. userdirモジュールの有効化
    sudo a2enmod userdir
  2. ユーザーページの指定にチルダを無くす(必須ではない)

    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

  1. ブラウザで接続して初期ページが表示されるか?

passenger設定

passengerはapacheからrails等を呼び出す為のモジュールです。

  1. 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
  2. インストーラから下記のような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
  3. check list for passenger

    1. /etc/apache2/httpd.confにpassenger-install-apache2-moduleで示された設定値が設定されているか?
    2. 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が確認できません

    3. DNSを使っていない場合、/etc/hostsに定義を入れてあるか?

      この確認はアプリ組込時に行ないます。

      192.168.xx.xx  hostname.localdomain hostname localdomain

      確認方法: "hostname -f" で正しいドメイン名をもった FQDNで表示されるか?

      プライベートな利用の場合には localdomain を設定するようにします。

    4. /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 で有効無効を制御します。

    5. apacheのログにpassenger関連のエラーは記録されていないか?

railsの動作テスト

  • rails new で適当な名前のアプリを生成
  • rails s で起動
  • 他のマシンの適当なブラウザで動作を確認

check list for RAILS-APP

  1. rails 3.x の場合、Gemfileに execjs, therubyracer を追加してあるか?
  2. productionの場合、precompileが想定されているので、実行前にassetsをプリコンパイルしてあるか?
     bundle exec rake assets:precompile RAILS_ENV=production

    または config/environments/production.rb で実行時コンパイルが指定されているか?

    config.assets.compile = true
  3. 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のインストール手順を示します。

  1. admin用鍵を作成、公開鍵をアクセス可能な場所にコピーして置く
  2. パッケージからインストール
    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/の下に作られます。

  3. リモートから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等があります。

WinSCP

ubuntus等のUTF-8を使用するLinuxにWinSCPを利用する場合、 標準設定のままではディレクトリ名が文字化けするので下記の設定を行ないます。

  • WinSCPのログイン設定ダイアログで、 保存したセッションから対象のログイン設定を選択
  • 編集ボタンを押して編集モードに入る
  • 左メニューから環境を選択
  • ファイル名をUTF-8でエンコードを「オン」に設定
  • 保存する



VM-Server ← : Ubuntu64 : → WorkStation

News: -