AWS Setup 2017

works.td-inc.jp を半年くらい前に更新しました。その時の記録。

やりたかったこと 「HTTP2対応したい!」

Hetemlで借りていた td-inc.jp サーバーは仕事のテストアップなどで使っていたので、
会社サイトだけをサブドメインで切り出すことに。その時のメモです。
インターネットは素晴らしい場所でした。

 

▼ インスタンスの作成

t2.micro、t2.smallインスタンスについて  | ナレコムAWSレシピ
SSH を使用した Linux インスタンスへの接続 – Amazon Elastic Compute Cloud
サポートされているプラットフォーム – Amazon Elastic Compute Cloud

 

▼ nginxのインストール

sudo yum install nginx -y
sudo cp -r /usr/share/nginx/html /var/www/html
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bk
sudo vim /etc/nginx/nginx.conf

EC2にnginx+php(php-fpm socket)環境を最速で構築 – Qiita
CentOSにてnginxでPHPを動かす – Qiita

 

▼ PHPのインストール

AWS EC2 Amazon Linux 2016.09 + nginx + PHP7.0でサーバー構築 – Qiita

 

▼ PHPの設定

sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.bk
sudo vim /etc/php-fpm.d/www.conf

※ /etc/php-fpm.d がない場合、/etc/php-fpm.d のシンボリックリンクを確認する

or

PHP5.6の場合
sudo cp /etc/php-fpm-5.6.d/www.conf /etc/php-fpm-5.6.d/www.conf.bk
sudo vim /etc/php-fpm-5.6.d/www.conf

PHP7の場合
sudo cp /etc/php-fpm-7.0.d/www.conf /etc/php-fpm-7.0.d/www.conf.bk
sudo vim /etc/php-fpm-7.0.d/www.conf

PHP FastCGI Example | NGINX
※ 調べなきゃ寝れない!と調べたら余計に寝れなくなったソケットの話 – Qiita

 

▼ サーバーの起動と自動起動設定

sudo service nginx start
sudo chkconfig nginx on
sudo chkconfig –list nginx

sudo service php-fpm start
sudo chkconfig php-fpm on
sudo chkconfig –list php-fpm

 

▼ /var/wwwのディレクトリ設定
▼ MySQLのインストール・設定
▼ WordPressのインストール・設定

Amazon EC2(Amazon Linux)でWordPressをインストールし、Nginxで表示させる手順2 – owani.net#markdown

 

▼ Elastic IPへのドメインの設定

sudo vim /etc/nginx/nginx.conf
あと色々書く

 

▼ 今まで使ってたCloudFlareからDNSレコード (ゾーンファイル?) のエクスポート

Advanced > Export DNS File

 

▼ Route 53に乗り換え

お名前.comでネームサーバーを変更

DNSとかネームサーバとかRoute53とかAレコードとかCNAMEとかがわからない人のためのまとめ – ふじいけ技術メモ

 

▼ Cloud Frontの設定

Amazon CloudFront編~動的コンテンツ配信~|php CFセットアップ ディストリビューション 方法  | ナレコムAWSレシピ

WordPressサイトをCloudFrontで配信する – Qiita

varnishとCloudfrontはどちらを採用すべきか? | AWS情報 | Webシステム開発・運用、サーバー・ネットワーク設計から保守まで 雲屋ネットワークにおまかせ

AWS再入門 Amazon CloudFront編 | Developers.IO

ウェブディストリビューションを作成または更新する場合に指定する値 – Amazon CloudFront

ドメイン名を使用したトラフィックの Amazon CloudFront ウェブディストリビューションへのルーティング – Amazon Route 53

 

▼ HTTP2化

AWS SSL Certificate setup for WordPress site hosted on Nginx + CloudFront – Clark CX

AWS EC2に設定してHTTP2の効果を実感した – Qiita

Amazon CloudFront + ACM 独自ドメインで HTTPS (SSL) 配信設定メモ | あぱーブログ

WordPressでAmazon CloudFrontを導入(CDN)する方法

[AWS Certificate Manager]東京でも無料でSSL証明書が使用可能になりました! | Developers.IO

[ACM] AWS Certificate Manager 無料のサーバ証明書でCloudFrontをHTTPS化してみた | Developers.IO

【新機能】 Amazon CloudFrontがHTTP/2に対応しました | Developers.IO

UVD | How to set up AWS Certificate Manager with NGINX

 

別のブログを立てるために、nginxで複数のバーチャルホストの設定

nginxでvirtualhostを設定する – Qiita

 

▼ FTPの設定

[AWS] EC2でFTPを使いたい – Qiita

道はなくても進むのだ。: Amazon EC2 (Amazon Linux) での vsftpd インストールと設定

 

▼ S3にメディアファイルを移動

AWS CloudFrontを使ってWordPressのメディアファイルだけS3に配置する | Developers.IO

 

▼ PHPのアップロード容量

# cp /etc/php.ini /etc/php.ini.org
# vim /etc/php.ini
upload_max_filesize = 20M

sinatraサーバーをchkconfigで自動起動

sinataraサーバーをEC2の起動時に自動的に起動して、
さらにTwitterのStreaming APIを監視するRubyプログラムも同時起動するのに一苦労。

– chkconfigで起動するシェル (td_aircon) を作成

$sudo su
# cd /etc/init.d/
# touch td_aircon
# chmod 755 td_aircon
# vim td_aircon

td_airconの内容

#!/bin/sh
# chkconfig: 2345 99 10
# description: launch TD_AIRCON sinatra server

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

cd /home/ec2-user/aircon/aircon-api/
thin start -C thin.yml
ruby tweet_checker.rb

今回は、thinを使ってsinatraサーバーを起動するので、以下のファイルを作る。

$ cd ~/aircon/aircon-api/
$ touch config.ru
$ vim config.ru

config.ruの中身

require 'rubygems'
require 'sinatra'

require File.expand_path "app", File.dirname(__FILE__)
run Sinatra::Application

thinの設定ファイルをつくる

$ cd ~/aircon/aircon-api/
$ thin config -C thin.yml 

出来た thin.yml の中身のポート番号を変更


---
chdir: /home/ec2-user/aircon/aircon-api
environment: development
address: 0.0.0.0
port: 4567
timeout: 30
log: log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
daemonize: true

自動起動をchkconfigに設定・確認する

# cd /etc/init.d/
# chkconfig --add td_aircon
# chkconfig --list

sinatraサーバーをEC2で起動して外部からアクセス

EC2上でsintraを使ってサーバーを立てようとしたら、ハマったのでメモ。

デフォルトではlocalhost以外から接続出来ない設定になっている。
実行オプションを使って、

bundle exec ruby app.rb -o 0.0.0.0

または

bundle exec ruby app.rb -e production

で起動する。

 

Security Groupの設定で、4567番のポートを開けるのも忘れずに。

 

参考: http://qiita.com/u1_fukui/items/b86b21f6ed39f4c10d5d

EC2でrbenv、Ruby, Apache, FTPのセットアップ

色々あって、新規に作ったインスタンスを最初からセットアップすることに。

 

SSHでアクセス

$ sudo yum update
$ sudo su

タイムゾーンの設定
# cp -i /usr/share/zoneinfo/Japan /etc/localtime

gitのインストール
# yum install git

 

==

rbenvを使ってシステムワイドにrubyをインストールする方法 #Ruby #rbenv – Qiita [キータ]
http://qiita.com/items/8e973a544b592376a07e

グループ staff の作成と、ユーザーの追加

# groupadd staff

# gpasswd -a ec2-user staff

# exit
$ logout

再度SSHで接続

 

====

rbenvのインストール

$ sudo su
# cd /usr/local

# git clone git://github.com/sstephenson/rbenv.git rbenv
# chgrp -R staff rbenv
# chmod -R g+rwxXs rbenv

# exit

$ vim ~/.bash_profile

.bash_profileに以下を追記

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

 

====

sudo su してもrbenvを参照するようにする

/etc/profile.d/custom.sh をつくって

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

を書き込む

色々インストール

 

====

http://blog.marsbar.us/blog/2013/03/13/aws-install-ruby/

$ sudo su
# yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel

# exit
$ logout

再度SSHで接続

 

====

RubyBuildのインストール

$ mkdir /usr/local/rbenv/plugins

$ cd /usr/local/rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
$ chgrp -R staff ruby-build
$ chmod -R g+rwxs ruby-build

 

====

Rubyのインストール

$ rbenv install 1.9.3-p194

$ rbenv rehash
$ rbenv global 1.9.3-p194

$ which ruby
$ which gem

which gemでrbenvが参照されていることを確認する

 

====

Railsのインストールなど

http://www.rubylife.jp/railsinstall/rails/index1.html

$ gem install rdoc
$ gem install bundle
$ gem install rails

 

====

Apacheのインストールと自動起動の設定
http://live-cast.asia/blog/2010/10/amazon-ec2-for-setting-up-the-apache-micro-instances.html

$ sudo yum install httpd
$ sudo chkconfig httpd on

Apache起動
$ sudo service httpd start

 

====

FTPのセットアップ
http://dev.classmethod.jp/cloud/amazon-ec2-apache-ftp-setup/

$ sudo su
# yum install vsftpd
# vim /etc/vsftpd/vsftpd.conf

 

編集箇所

anonymous_enable=NO
ascii_upload_enable=YES(先頭の#を削除)
ascii_download_enable=YES(先頭の#を削除)


以下の行を追加

use_localtime=YES
force_dot_files=YES
pasv_min_port=60000
pasv_max_port=61000
pasv_address=xxx.xxx.xxx.xxx(Elastic IPアドレスを指定)

 

FTPの起動と、自動起動設定

# service vsftpd start
# chkconfig vsftpd on

 

WordPress on EC2

EC2上にインストールしたWordpressにダッシュボードから
プラグインをインストールする時に、エラーが出た。解決法は、

wp-config.php に

define('FS_METHOD', 'direct');

を追加。理由は以下らしい。

デフォルトの設定だとブラウザからプラグインやテーマをインストールする際に
ファイルのオーナーが、スクリプトを実行するオーナーと同じかどうかチェックするために、
『要求されたアクションを実行するには、WordPress が Web サーバーにアクセスする必要があります。
次に進むには FTP の接続情報を入力してください。接続情報が思い出せない場合は、
ホスティング担当者に問い合わせてください。』というエラーが表示される。

EC2 に WordPress をインストールする | 猫科のぶろぐ

wp-content/upgrade
wp-content/themes
wp-content/plugins
wp-content/plugins
のパーミッションは707か777あたり (最後の7が重要)

EC2でEBSをマウントして使う

1. AWSにログインして、EC2のダッシュボードを開く。

2. 左のナビゲーションの ELASTIC BOOK STORE → Volumes を開く。

3. Create Volume して、右クリックして、インスタンスにAttachする。

4. /dev/sdf/ にマウントされる。

 

ここからデータのコピーと、シンボリックリンクで参照する作業
(すでにMySQL、Apacheがインストール済みで、新しくマウントしたEBSにデータを移動する)

# Setup EBS and FS
sudo mkfs.ext4 /dev/sdf
echo "/dev/sdf /mnt ext4 defaults,noatime 0 0" | sudo tee -a /etc/fstab
sudo mount /mnt
sudo mkdir -p /mnt/www/
sudo cp -r /var/www/html /mnt/www
sudo mv /var/www/html /var/www/html.bak
sudo ln -s /mnt/www/html /var/www/html
sudo mkdir -p /mnt/lib/
sudo cp -r /var/lib/mysql/ /mnt/lib
sudo mv /var/lib/mysql/ /var/lib/mysql.bak
sudo ln -s /mnt/lib/mysql/ /var/lib/mysql
sudo chown mysql:mysql -R /mnt/lib/mysql

# damon start
sudo /etc/init.d/httpd start
sudo /etc/init.d/mysqld start

参考: EC2: Amazon LinuxにWordPressを急ぎで入れる (その2) – was memo

 

– その他メモ

ルートユーザーに切り替える

# sudo su

MySQLにパスワードを入力して入る

# mysql -u root -p

 

これでマイクロのインスタンスの8GBの他に、
EBSによる40GB(とりあえずhetemlと同じ程度の容量)を確保。

EC2の環境に、PHP MongoDB Driverをインストール

▽ ローカルの開発環境

PHP MongoDB Driver をインストール。

参考: https://github.com/mongodb/mongo-php-driver/blob/master/README.md

まずzipをダウンロードして、解凍。
解凍したディレクトリにターミナルでcdして、

$ phpize
$ ./configure
$ make
$ sudo make install

出来たmodules/mongo.soを、
/Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626 へ移動。

/Applications/MAMP/bin/php/php5.3.6/conf/php.ini を編集。
extension= が沢山書かれている場所に、 extension=mongo.so を追記

phpinfo して、mongoDBが入っていれば完了!
(要Apacheの再起動)

※ MAMP 2.0.5で作業。2.1系でトラブル発生中。(12/7/10頃)

▽ EC2でMongo

参考: http://blog.genies-ag.jp/2011/08/amazon-ec2-amazon-linux-apachephp.html
参考: http://web.j-q.co.jp/?p=124
参考: http://www.if-not-true-then-false.com/2010/install-php-mongodb-mongo-driver-on-linux-mac-os-x-windows-unix-bsd/

# sudo vi /etc/yum.repos.d/10gen.repo
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0

を記入

# yum search mongo
# yum install mongo-10gen.x86_64

PEARインストール
参考: http://stackoverflow.com/questions/8636538/does-aws-provides-pear-package-manager-installation-from-repository

# wget http://pear.php.net/go-pear.phar
# php go-pear.phar

PECLインストール (ローカルとほぼ同じ手順)
参考: https://groups.google.com/forum/?fromgroups#!topic/mongodb-user/9be1bpaNvVU

# wget http://pecl.php.net/get/mongo-1.2.10.tgz
# tar xvf mongo-1.2.10.tgz
# ./configure (エラー出た)
# sudo yum install gcc (参考: http://www.linuxforums.org/forum/applications/41118-how-install-gcc.html)
# ./configure (出来た)
# make (エラー出た)
# sudo yum install make
# make (出来た)
# sudo make install
Installing shared extensions: /usr/lib64/php/modules/

MONGOのドライバーをインストール
http://www.if-not-true-then-false.com/2010/install-php-mongodb-mongo-driver-on-linux-mac-os-x-windows-unix-bsd/

# sudo pecl install mongo

「You should add “extension=mongo.so” to php.ini」 って出た!

/etc/php.ini のそれっぽい場所に、

extension_dir = "/usr/lib64/php/modules/"
extension=mongo.so

を記入。

phpinfo してmongoDBが無事に入っていれば完了!

AWSのSecurity Groupの設定で、27017を開けたら、
PHPからも無事に書き込み出来ました。PHPの書き方はまた次回。

[追記]
さらに、http://d.hatena.ne.jp/akuwano/20120130/1327884845
を見てデータベースにパスワードをかけておいた方が良いかも。

こう書くとサーバー起動時にmongodを実行できるはず

# sudo chkconfig --add mongod
# sudo chkconfig mongod on

さくらのVPSを借りてgitのレポジトリを置いて、EC2からgit pull。

▽ EC2サーバー上で公開鍵を作成

# cd ~/.ssh
# scp id_rsa.pub さくらのユーザー名@さくらのアドレス: (←コロン重要)

▽ さくらのVPSサーバーで、authorized_keysに追記

# cat id_rsa.pub >> ~/.ssh/authorized_keys

※ authorized_keysに内容を直接書き足しても良い。

▽ EC2サーバーからさくらのVPSサーバーへ接続テスト

# ssh td-inc@49.212.170.189

▽ EC2上から、git cloneして、データを落とす

# sudo git clone ssh://さくらのユーザー名@さくらのアドレス/var/git/レポジトリ名

▽ httpd.confにバーチャルホストの設定を追加

# sudo vi /etc/httpd/conf/httpd.conf
ServerName fes.mu
DocumentRoot /var/www/fes.mu

apache再起動

sudo service httpd restart

▽ 次回以降、差分をダウンロードする時は、

# sudo git pull ssh://さくらのユーザー名@さくらのアドレス/var/git/レポジトリ名

[追記]
↑ パーミッションを775とかにして、”ec2-user”をownerのグループに追加しておけば、
sudo は不要になる。

グループに追加

# usermod -G wheel ec2-user

パーミッション、所有者の変更

# sudo chmod 775 ○○○
# sudo chown root:wheel ○○○

Amazon EC2 Webサーバーを立ち上げてHello World

▽ Apacheのインストール

# sudo yum install httpd

▽ Apacheを起動

# sudo /etc/init.d/httpd start
httpd を起動中: [ OK ]

EC2 Management Consoleで確認できるPublic DNSをブラウザに入力すると、
Apacheの初期ページが出ます。

▽ index.htmlファイルをつくる

# sudo vi /var/www/html/index.html

編集したら、
:w
:q

再びブラウザでアクセスすると、このページが見られる。

番外編

▽ 時計をあわせる

# date
2012年 6月 30日 土曜日 12:36:11 UTC (時計がUTC)
# sudo cp /usr/share/zoneinfo/Japan /etc/localtime
# date
2012年 6月 30日 土曜日 21:36:50 JST (時計がJSTになった)

▽ PHPのインストール

# sudo yum install php

▽ Apacheが自動的に起動するように

# sudo chkconfig httpd on
# sudo chkconfig --list httpd

Amazon EC2 インスタンスを作ってSSHでログイン

調べて書いといて!ってお願いしたので、
だいたいここに書いてある通り。GJ。

http://ikezawa-ayaka.blogspot.jp/2012/06/mongodbamazonec2.html

お好みの設定でインスタンスをつくって、startする。

EC2 Management Consoleの”Instance”で起動したいインスタンスを選んで”Start”。
次に”Connect”を押して、”Connect with a standalone SSH Client”を選ぶ。

Exampleってとこにある通り、

$ ssh -i XXXX.pem ec2-user@XX.XX.XXX.XXX

(↑ローカルに保存したKeyPairへのパスと、サーバーのアドレス)
をMacのターミナルから実行。

※ .pemファイルはパーミッションを600にしておくこと。

これでサーバーに入れた。

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

インスタンス終了時の覚書

AWS

マネージメントコントローラにある似たような2つのメニュー。

Stop・・・・・・サーバの一時停止。物理サーバで言うところのshutdown
Terminate・・・インスタンスの永久破棄。物理サーバで言うと筐体廃棄

http://tsubo3.wordpress.com/2011/07/02/aws-ec2%E3%81%A7%E3%81%AEstop%E3%81%A8terminate%E3%81%AE%E9%81%95%E3%81%84/

[追記]
▽ SCP (Transmit)でのログイン

▽「ssh ec2」で入れるようにする
$ vi ~/.ssh/config して、

Host fes.mu
HostName XXX.XXX.XXX.XXX
User ec2-user
IdentityFile ~/.ssh/XXXX.pem

を追記