完全私的メモ。
やりたいこと
- VALUE DOMAINで管理しているドメインを、サブドメインだけEC2で管理したい。
- メインのドメインはXserverに残しておきたい。
- 今回はサブドメインだけのテストだけど、いずれはドメイン丸ごとEC2で動かしたい。
- 複数のWordpressを動かすかもしれないので網元とかBitnamiではなく、Amazon Linux AMIで構築したい。
- サーバーへのアップロードはSFTPを使う。
Amazon AWSのアカウント取得
特に難しくないので、このへんを読むといいと思う。
≫一般ブロガーやWebデザイナーがAmazon Web Service(AWS)で独自ドメインのWordpressサイトを10分で作る方法
リージョンを選択
画面右上で地域を選択する。国内向けに何かやるなら「東京」で問題ない。
作業用アカウントを作る
最初に作成したAWSアカウントは全権持った管理者そのものなので、作業用にアカウントを作成する。個人なら管理者のままでも問題ないが、複数人で作業するなら必須。
≫グループ・ユーザー管理ページ
≫最初の IAM ユーザーと管理者グループの作成
グループの作成
- 左側のメニューから
グループ
-
新しいグループの作成
。最初のグループなので「admin」とかにするといいかも。 - ポリシーは
AdministratorAccess
を選択。この辺は用途に応じて。 -
グループの作成
で完了。
ユーザーの作成
- 左側のメニューから
ユーザー
-
新規ユーザーの作成
。名前は適当に。ユーザーごとにアクセスキーを生成
はON。 -
作成
で完了。 - 認証情報がダウンロードできるが、現時点では何に使うのか不明。
-
閉じる
で管理画面に戻る。 - 作成したユーザーを選択し、右側の
グループ
タブを選択。 グループにユーザーを追加
- 先ほど作成した「admin」を追加。
キーペアの作成(Macの場合)
sshに必要な鍵を作成する。
Mac以外では試していないのでWindowsは不明。
- ヘッダメニューの
サービス
からEC2
を選択。 - 左側のナビゲーションで
ネットワーク&セキュリティ
>キーペア
。 -
キーペアの作成
を選択。名前はこの後作るインスタンス名と同一にしておくとわかりやすいかも。 - ダウンロードされたファイルは大切に保管する。
- ~/.ssh/ にも鍵ファイルをコピー。さらにパーミッションを
600
に変更。
インスタンスの作成
- 左側のナビゲーションで
インスタンス
>インスタンス
。 - 右側で
インスタンスの作成
。 -
Amazon Linux AMI 20**.**.** (HVM), SSD Volume Type
を選択。 - インスタンスタイプは用途に合わせてだが、無料枠なら
t2.micro
。 -
次の手順:インスタンスの詳細の設定
を選択。デフォルトのままで次の手順:〜
を選択。 -
セキュリティグループの設定
では新しいセキュリティグループを作成する
を選択。グループ名は任意で。 -
ルールの追加
を選択し、HTTP
を追加。必要であればHTTPS
も。 確認と作成
- 確認画面になるので
作成
で完了。 - キーペアの選択になるので、先ほど作成したキーペアを選択する。
-
選択したプライベートキーファイル〜認識しています。
にチェックしてインスタンスの作成
。
sshログイン(Macでターミナルを使う方法)
インスタンスの一覧から先ほど作成したインスタンスを確認する。runnning
になったらサーバーの起動が完了している。
ついでにインスタンスに名前をつけて置くと分かりやすい。
- 作成したインスタンスを選択して、右クリックから
接続
を選択。 -
スタンドアロンSSHクライアント
を選択。接続方法が親切に表示される。 - ターミナルを起動。下記コマンドを実行。「ホニャララ」の部分は適宜変更。
ssh -i ~/.ssh/ホニャララ.pem ec2-user@ホニャララ.ap-northeast-1.compute.amazonaws.com
下記のような文章が表示されるのでyes
と入力。EC2というロゴが表示されたらログイン成功。
Are you sure you want to continue connecting (yes/no)? yes
〜中略〜
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
webサーバーの設定
下記を参考に。ただし、installで指定する各アプリのバージョンは2016年6月のものとなっている。
≫チュートリアル: Amazon Linux への LAMP ウェブサーバーのインストール
[ec2-user ~]$ sudo yum update -y
[ec2-user ~]$ sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd
[ec2-user ~]$ sudo service httpd start
[ec2-user ~]$ sudo chkconfig httpd on
[ec2-user ~]$ chkconfig --list httpd
webサーバーの接続確認
インスタンス一覧でインスタンスを選択すると、画面右下にパブリックIP
が表示されている。それをブラウザに入力すれば表示される。
あとは下記ページの通りユーザー設定したり。
≫チュートリアル: Amazon Linux への LAMP ウェブサーバーのインストール
Elastic IPを設定
- 左側ナビゲーション
ネットワーク&セキュリティ
>Elastic IP
を選択。 -
新しいアドレスの割り当て
を選択。 - 作成されたIPアドレスを選択し、右クリックから
アドレスの関連付け
を選択。 -
インスタンス
をクリックするとすでに作成されているインスタンスが選択できる。 -
関連付ける
で完了。 - 試しに関連づけられたIPアドレスでアクセスできるか、ブラウザに入力して確認。
Route 53 でネームサーバー設定
VALUE DOMAINで管理しているドメインに、AWSのDNSを割り当てる。
Route 53を作成
- ヘッダメニューの
サービス
>Route 53
。 - 右側の
DNS management
を選択。 -
Create Hosted Zone
を選択。 - 右側に
Create Hosted Zone
という枠が表示される。Domain Name
に管理したいドメインを記載。Type
はPublic Hosted Zone
。 -
Create
を選択すると中断に設定項目が表示される。
最初はこんな感じになっているはず。
ドメイン名 NS ns-1427.awsdns-50.org.
ns-251.awsdns-31.com.
ns-1021.awsdns-63.net.
ドメイン名 SOA ns-1427.awsdns-50.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
VALUE DOMAINの設定を変更
- 上記ドメイン管理画面に行く。
- 変更したいドメインの
ネームサーバー
を選択。 - 登録されているネームサーバーをRoute 53で指定されたものに変更する。ns-1427.awsdns-50.org.など。
- 全て書き換えたら
保存
。 - ドメイン管理画面に戻り、今度は
DNS/URL
を選択。 - 現在のIPアドレスほか、設定をメモしておく。
再びRoute 53の設定
現在のIPアドレスが123.456.78.9
、ドメイン名がhogehoge.hoge
だと仮定して書きます。
レコードの追加はCreate Record Set
から。
保存は右下のSave Record Set
から。
Aレコードの追加
Name : hogehoge.hoge.(最後にピリオド忘れずに)
Type : A
Value: 123.456.78.9
MXレコードの追加
Name : hogehoge.hoge.(最後にピリオド忘れずに)
Type : MX
Value: 10 hogehoge.hoge.(最後にピリオド忘れずに)
TXTレコードの追加
Name : hogehoge.hoge.(最後にピリオド忘れずに)
Type : TXT
Value: "v=spf1 ip4:123.456.78.9 ~all"
サブドメインのAレコード
Name : foo.hogehoge.hoge.(最後にピリオド忘れずに)
Type : A
Value: Elastic IPで作成されたアドレス
SFTPの設定
初期設定されたec2-user
はrootアカウントなので、実際に使うには専用のSFTP用アカウントを使うほうが安全でしょう。さらに言えば、アクセスできるディレクトリを限定したいところです。
sshログインします。Elastic IPを設定した後はログインホスト名が変わるので気をつけてください。
専用ユーザーを作る
[ec2-user ~]$ sudo useradd sftp-www
[ec2-user ~]$ sudo passwd sftp-www
[ec2-user ~]$ sudo usermod -a -G www sftp-www
RSA鍵を作る
[ec2-user ~]$ su sftp-www
[sftp-www ~]$ cd ~ ; mkdir .ssh ; chmod 0700 .ssh ; cd .ssh
[sftp-www ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sftp-www/.ssh/id_rsa): ←そのままEnter
Enter passphrase (empty for no passphrase): ←パスフレーズ入力
Enter same passphrase again: ←パスフレーズ再入力
id_rsa
という秘密鍵と、id_rsa.pub
という公開鍵が作られる。
パーミッションを変更してファイル名を変更する。
[sftp-www ~]$ chmod 0600 id_rsa.pub
[sftp-www ~]$ mv id_rsa.pub authorized_keys
秘密鍵をローカルPCに保存する必要があるので、cat
コマンドで表示させ、ローカルのテキストファイルにコピー・ペーストする。
[sftp-www ~]$ cat id_rsa
SFTPしたらサイト用ディレクトリ以外を見せない
sftpログインするとルートが/var/log/www
になるようにしたいのですが、chrootするには対象ディレクトリのパーミッションがroot:root
である必要があります。あとchrootした上の階層のシンボリックリンクは見れないとか、とにかく色々制限があります。
色々考えた結果chroot専用ディレクトリを作ることにして、そこにサイト毎のディレクトリを作ることにしました。
[ec2-user ~]$ sudo mkdir -p /chroot/website1/htdocs
[ec2-user ~]$ sudo chown sftp-www:www /chroot/website1/htdocs
今後作られるファイルやディレクトリにグループIDが付くようにします。
[ec2-user ~]$ sudo chmod 2775 /chroot/website1/htdocs
[ec2-user ~]$ find /chroot/website1/htdocs -type d -exec sudo chmod 2775 {} \;
sshd_configを編集します。
[ec2-user ~]$ sudo vi /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server 書き換え
Subsystem sftp internal-sftp
Match user sftp-www
ChrootDirectory /chroot/website1
sshdの再起動
[ec2-user ~]$ sudo service sshd reload
httpd.confを書き換えてホストを割り当てる
User apache
Group www ←書き換える
バーチャルホスト用設定ファイルを作る。
[ec2-user ~]$ sudo touch /etc/httpd/conf.d/virtualhost.conf
[ec2-user ~]$ sudo vi /etc/httpd/conf.d/virtualhost.conf
<VirtualHost *:80>
ServerName foo.bar.com
DocumentRoot "/chroot/website1/htdocs"
</VirtualHost>
<Directory "/chroot/website1/htdocs">
Require all granted
</Directory>
httpdの再起動
[ec2-user ~]$ sudo service httpd restart
ひとまず完了
上記手順でひとまず完了!
SFTPのchrootでハマりまくった……。