はじめに
動機
・RubyもPHPもバージョン差多すぎめんどくさい
・WebサーバはApacheばかり使ってたけどnginx使いたい。RubyもRaptor試してみたい
・設定する度に忘れてるから、毎度リセットしてる気がする。というかしてる、どうかしてる
目的
・RubyやPHP周りのバージョン差とかの検証をすぐにできる開発環境を整備する(とりあえずEC2で)
・サーバの初期設定やら何やらを記録しておく
完成形
EC2のmicro.t2に以下が乗った状態
・RHEL7
・nginx:1.6.2。PassengerやPHP-FPMへの振り分け
・Ruby:1.9.3-p551/2.0.0-p598/2.1.5をrbenvで切り替え
・Rails:3系/4系をアプリケーションごとに切り替え
・Passenger:5.0.0.beta1(Raptor)で、アプリケーションごとにRuby1.9系/2.0系/2.1系を切り替え
・PHP:5.3.29/5.4.35/5.5.19/5.6.3をphpenvで切り替え
・PHP-FPM:上記を同一ソースでドメインごとに切り替え
・MariaDB:5.5.40
想定読者
・EC2などでPHPやRubyOnRailsの開発用サーバを用意したい方
・LinuxサーバにSSHで繋いでコマンド叩いたりくらいはできる方
・物忘れの激しいWeb系の技術者(主に私)
記事内容
・ググったり推測したりで試してうまくいったら記録
・一応初期状態から上記の構成が完成するまでのほぼ全記録になるはず
・特別目新しいことがあるわけではない。たぶん
お願い
・一応0から一式試したけど、バージョンなどによってはこの通りに行かないのでそのときはぐぐってください
・筆者はLinuxにあまり慣れているわけではありませんので、設定など、こうした方がいいというものがあったらご指摘ください
・コマンド打ってバージョン切り替えればいいじゃないまあそんなこといわずに
・Dockerでやれそのため公開に迷ったのですが、導入コストが低いしせっかく書いたので載っけることにしました
この記事はその1:基本設定編です。
多くの人は読み飛ばしてしまっても構わない部分だと思います。
続きはその2:RubyOnRails編、その3:PHP編をご覧ください。
EC2のローンチ
インスタンスの立ち上げ
リージョンは特に理由がなければ東京にしておこう。EC2ダッシュボードの右上から選択可能だ。
AMIはとりあえずRHEL7。インスタンスはまずは実験なのでmicro.t2にした。期間限定だけど月750時間分まで無料だし、完成したら本運用するということで。テスト用の環境なのでこのまま継続でもいいかもしれない。
その他ストレージ(別途必要な場合)やセキュリティグループ(後で設定変更)を設定すれば完了。
完了時に、SSHの秘密鍵について尋ねられる。初回ならその画面で作ってしまおう。もちろん鍵はなくさないように。
とまあ、これだけでインスタンスが立ち上がる。
ElasticIPの割り当て~SSH接続
SSHで接続する前にElasticIPを割り当てておく。EC2ダッシュボードの左側にメニューがあるので、そこからIPを1つ取得する。
なお、執筆時点では東京リージョンではインスタンスに1つだけ割り当てるElacticIPについては特に料金はかからないようだ。料金プランについては念のために調べておくとよいだろう。
ということで早速さっきのインスタンスにこのIPを割り当てる。別に割り当てなくても接続は可能なのだが、インスタンスを変えたり(ぶっ壊れて立ち上げ直した方が早くなったり)ドメインを割り当てたりするのに、固定IPを持っておくと何かと都合がいい。
SSHクライアントはPuTTYを使っているが、もちろん何でもよい。私は窓しかろくに使えない雑魚なものでして。
今作ったpemをPuTTYgenで開いてppkの鍵を用意しつつ、今割り当てたIPを指定して、生成した鍵を使ってSSHで接続する。
ユーザ名はec2-userがデフォルト、パスワードは不要だ。
基本設定
初期設定周りはEC2インスタンス(Amazon Linux)の初期設定 を参考に、セキュリティ周りはそこそこセキュアなlinuxサーバーを作るを参考にした。ただしSELinuxはpermissiveにしてしまっている。
RHEL6から7でけっこういろいろ変わっているようである。
ユーザ関係
ユーザ追加したりはお好みでどうぞ。まずはさくっとパスワードを設定してsuしてしまおう。
$ sudo passwd
$ sudo su
ec2-userはパスワード設定して、sudoはパスワードが必要なようにしておく。
# passwd ec2-user
# visudo -f /etc/sudoers
対応行を変更:
ec2-user ALL=(ALL) ALL
sudoするとパスワードが求められることを確認。
# su ec2-user
$ sudo su
[sudo] password for ec2-user:
おっけー。
開発環境なのでSELinuxはログに記録するだけにする
開発環境なので効率優先にする。
べ、別に不慣れの言い訳じゃないし(目をそらしながら)
vi /etc/sysconfig/selinux
以下に変更:
SELINUX=permissive
# setenforce 0
引っかかった場合はログに残るので、本運用時の参考にする。
SSHの設定
何はなくとも。
# vi /etc/ssh/sshd_config
対応行を変更:
Port 3333
Protocol 2
ポートは他のサービスにかぶらないように適当に決める。
こっちは設定されていたので確認のみ:
PasswordAuthentication no
ChallengeResponseAuthentication no
ポートを変えたら、EC2のセキュリティグループも併せて変更しておこう。
あとsshdも再起動。
RHELではsystemctlコマンドでサービスの起動や終了などの制御をするようになったようだ。
詳しくはRHEL 7 に採用される Systemctl コマンドを見るとよさそうだ。
サービス名の後の.serviceは省略可能らしいので省いていく。
# systemctl restart sshd
ここで、コンソールは即座に閉じずに、新たに接続することで接続確認をとるように。
そうしないと設定がミスっていたときに復旧できない。
サーバ名はお好みで変更。
cloud.cfgはAWSのインスタンス立ち上げ時に毎回反映されるものらしい。ec2-userのsudoについても言及があるが、何故かこちらは再起動しても変化がなかった。今度引っかかったら変えてみることにする。
# hostnamectl set-hostname drac-ec2 --static
# vi /etc/cloud/cloud.cfg
追加:
preserve_hostname: true
再接続するとホスト名が変わっている。
タイムゾーンと時刻の設定
# yum -y install ntp
# timedatectl set-timezone Asia/Tokyo
# date
時刻がJSTになっていればOK。
NTPの自動起動とか設定とか。
設定は深く考えずにLinux/UNIXサーバは立てたらまず時刻同期の設定をまるっと引用した。
# systemctl enable ntpd
# vi /etc/ntp.conf
以下に書き換え:
# 時刻の狂いがどんなに大きくても動作停止はしないが、300秒以上狂っていたらSLEWせず一気にあわせる
tinker panic 0 step 300
# 時刻の狂う傾向を統計して以下のファイルに記録する
driftfile /var/lib/ntp/drift
# サーバとしての動作は全面禁止
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
# ただしローカルホストからのアクセスは許可
restrict 127.0.0.1
restrict -6 ::1
# NICTからのアクセス(返答パケット)を許可する
restrict 133.243.238.163 mask 255.255.255.255 nomodify notrap noquery
restrict 133.243.238.164 mask 255.255.255.255 nomodify notrap noquery
restrict 133.243.238.243 mask 255.255.255.255 nomodify notrap noquery
restrict 133.243.238.244 mask 255.255.255.255 nomodify notrap noquery
# 同期先はNICT
server ntp.nict.jp
書き換えたら再起動。少し間を置いたら動作確認。
# systemctl restart ntpd
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp-a2.nict.go. .NICT. 1 u 13 64 3 4.552 0.187 0.000
左側に*を確認。おっけー。
使いそうなパッケージのインストールとリポジトリの追加
とりあえずDevelopment Toolsをgroupinstallしてしまうのが手っ取り早い。後になって知った私はモグリ。
リポジトリはとりあえずRPMForgeとEPELとRemi足しておけばいいでしょう。
使いたい場合にenablerepo指定するなら普段はenable=0にしておいてもよい。
その辺は/etc/yum.repos.d/あたりにあるファイルを編集して調整。今回は特にしていない。
# yum -y groupinstall 'Development Tools'
# yum -y install wget
# cd /tmp
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
# rpm -ivh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
# wget https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
# rpm -ivh epel-release-7-2.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# rpm -ivh remi-release-7.rpm
これで準備は完了。
次はRailsのインストールから。