前回からの続き
4.AWS EC2サーバの構築
サーバはruby,rails,MySQLの環境構築はもちろん、nginxをリバースプロキシとして使用するのでその設定を行います。
まずは新規にEC2を作っていきます。AWSの管理コーソールからEC2を選び、「Launch Instance」、サーバは「Amazon Linux AMI」「t2.micro」、セキュリティグループで「http TCP 80」を追加、新しいssh keyをダウンロードしておきます。
ダウンロードしたpem keyを使って、サーバにSSHで接続します。
$ chmod 600 ~/.ssh/blog_rwerck.pem $ ssh -i ~/.ssh/blog_rwerck.pem ec2-user@xxx.xxx.xxx.xxx __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/ 18 package(s) needed for security, out of 42 available Run "sudo yum update" to apply all updates.
最初にyumアップデートしておきましょう。
$ sudo yum update
必要なライブラリをインストールします。
$ sudo yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison git
rubyをインストール
ruby-buildとrbenvを使います。
$ cd $ git clone git://github.com/sstephenson/ruby-build.git Cloning into 'ruby-build'... remote: Counting objects: 4186, done. remote: Compressing objects: 100% (12/12), done. remote: Total 4186 (delta 3), reused 0 (delta 0) Receiving objects: 100% (4186/4186), 755.92 KiB | 252.00 KiB/s, done. Resolving deltas: 100% (2130/2130), done. Checking connectivity... done. $ cd ruby-build $ sudo ./install.sh
$ cd $ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv Cloning into '/home/ec2-user/.rbenv'... remote: Counting objects: 2002, done. remote: Total 2002 (delta 0), reused 0 (delta 0) Receiving objects: 100% (2002/2002), 318.87 KiB | 153.00 KiB/s, done. Resolving deltas: 100% (1249/1249), done. Checking connectivity... done. $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile $ source ~/.bashrc $ exec $SHELL -l $ rbenv install -l $ rbenv install 2.1.5;rbenv rehash Downloading ruby-2.1.5.tar.gz... -> http://dqw8nmjcqpjn7.cloudfront.net/4305cc6ceb094df55210d83548dcbeb5117d74eea25196a9b14fa268d354b100 Installing ruby-2.1.5... Installed ruby-2.1.5 to /home/ec2-user/.rbenv/versions/2.1.5 $ rbenv global 2.1.5;rbenv rehash
バージョンを確認
$ ruby -v ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
bundlerをインストール
$ gem install bundler --no-rdoc --no-ri;rbenv rehash Fetching: bundler-1.7.9.gem (100%) Successfully installed bundler-1.7.9 1 gem installed
railsをアプリケーションに合わせたバージョン指定してインストール
$ gem install rails -v 4.1.4 --no-rdoc --no-ri $ rbenv rehash $ rails -v Rails 4.1.4
sqlite3をインストール
$ sudo yum install sqlite-devel $ gem install sqlite3;rbenv rehash
MySQLをインストール
$ sudo yum install mysql-server mysql-devel
/etc/my.cnfで文字コードをUTF-8に設定しておきます。[mysqld]にはcharacter-set-server=utf8、[mysql]と[client]にはdefault-character-set=utf8を追記します。
$ sudo vi /etc/my.cnf
/etc/my.cnf
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mysqld according to the # instructions in http://fedoraproject.org/wiki/Systemd character-set-server=utf8 [mysql] default-character-set=utf8 [client] default-character-set=utf8 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
MySQLを起動して、ログインできるか確認。
$ sudo service mysqld start Initializing MySQL database: Installing MySQL system tables... OK Filling help tables... OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h ip-172-31-13-193 password 'new-password' Alternatively you can run: /usr/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. See the manual for more instructions. You can start the MySQL daemon with: cd /usr ; /usr/bin/mysqld_safe & You can test the MySQL daemon with mysql-test-run.pl cd /usr/mysql-test ; perl mysql-test-run.pl Please report any problems at http://bugs.mysql.com/ [ OK ] Starting mysqld: [ OK ]
$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.40 MySQL Community Server (GPL) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec)
後ほどプロダクション環境で使うデータベースを作成しておきます。
mysql> create database rweckersample_production; Query OK, 1 row affected (0.03 sec)
node.jsをインストール
JavascriptランタイムがないとExecJSのエラーが出るので、予めnode.jsをインストールしておきます。curlのコマンド一発でnvmをインストール。
$ curl https://raw.githubusercontent.com/creationix/nvm/v0.22.0/install.sh | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 5102 100 5102 0 0 3964 0 0:00:01 0:00:01 --:--:-- 3964 => Downloading nvm from git to '/home/ec2-user/.nvm' => Cloning into '/home/ec2-user/.nvm'... remote: Counting objects: 2857, done. remote: Compressing objects: 100% (9/9), done. remote: Total 2857 (delta 4), reused 0 (delta 0) Receiving objects: 100% (2857/2857), 542.28 KiB | 227.00 KiB/s, done. Resolving deltas: 100% (1571/1571), done. Checking connectivity... done. => Appending source string to /home/ec2-user/.bashrc => Close and reopen your terminal to start using nvm
$ source ~/.bashrc
nvmのls-remoteで最新版のバージョンを確認してインストールします。
$ nvm ls-remote
$ nvm install 0.11.14 ######################################################################## 100.0% Now using node v0.11.14 $ node -v v0.11.14
nginxをインストール
Webサーバとして(リバースプロキシとして)nginxを使うので、インストールします。
$ sudo yum install nginx
nginxの起動確認
$ sudo /etc/init.d/nginx start nginx を起動中: [ OK ]
ブラウザでpublicDNS(ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com)にアクセスするとnginxのwelcome画面が表示されることを確認。
$ sudo /etc/init.d/nginx stop nginx を停止中: [ OK ]
Unicornとの連携設定を行っておく
railsアプリケーションをデプロイした際にはUnicornと連携するため、設定ファイルを作成しておきます。ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.comの部分は、EC2のpublic DNSに合わせて変更してください。
/etc/nginx/conf.d/rwerck.conf
upstream ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com { server unix:/tmp/unicorn.sock; } server { listen 80; server_name rwerckersample; root /usr/share/nginx/html; location ~ ^/uploads/ { root /home/ec2-user/rwerckersample/current/public; gzip_static on; # to serve pre-gzipped version expires 1y; add_header Cache-Control public; add_header ETag ""; break; } location ~ ^/assets/ { root /home/ec2-user/rwerckersample/current/public; gzip_static on; # to serve pre-gzipped version expires 1y; add_header Cache-Control public; add_header ETag ""; break; } location / { proxy_pass http://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com; } # redirect server error pages to the static page /40x.html # error_page 404 /404.html; location = /40x.html { } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { } }
$ sudo /etc/init.d/nginx start nginx を起動中: [ OK ]
関連記事
[1] 最近のWebサービス開発フロー,WerckerでGithubのプライベートリポジトリからAWSへデプロイしてHipChatへの通知まで
[3] AWS EC2サーバの構築