LoginSignup
19
26

More than 3 years have passed since last update.

自分はどのエンジニアに向いている?エンジニア適性診断1DAYキット

Last updated at Posted at 2019-05-06

背景

エンジニア新人~初心者の皆さんから「自分はどんなエンジニアの仕事に向いているかわからない。。。」という声をよく聞きます。

そこでエンジニア適性診断1DAYキットを作成しました。

ゼロの状態からアプリの公開までの仕事の中には、フロントエンドエンジニアの仕事もサーバサイドエンジニアの仕事もインフラエンジニアの仕事も含まれています。

そこで、一度ゼロの状態からアプリの公開までを体験してみるのが良いと考えました。
下記の流れに沿って体験し、最後の診断結果を目安にしていただければうれしい限りです!

全体の流れ

以下の順番ですすめていきます。

  1. AWSアカウントの作成
  2. Cloud9準備
  3. Cloud9で開発環境構築(ちなみに一瞬でカンタンです)
  4. いよいよ開発です
  5. 機能面でのカスタマイズ
  6. デザイン面でのカスタマイズ
  7. アプリケーション側での公開準備
  8. カギ作成
  9. Github登録
  10. Githubでのソースコードの公開
  11. LightsailでOS作成
  12. AmazonLinuxへのアクセス
  13. AmazonLinuxの最初の準備
  14. Rubyのインストール
  15. bundlerのインストール
  16. PostgreSQLのインストールと設定
  17. Nginxのインストールと設定
  18. GithubからAmazonLinuxにソースコードを入れる
  19. AmazonLinux上でアプリを起動させる
  20. では全世界に公開されたWEBサイトを見てみましょう

Cloud9で開発準備

みなさん開発エディタにSublimeTextとかAtomとかサクラエディタとか使っているかと思います。
ここではAWSのサービスの1つであるCloud9を使います。
Cloud9は開発環境構築が超カンタン、かつ、ブラウザ上で開発可能なスーパーエディタなのです。

AWSアカウントの作成

まずはCloud9を利用する前にAWSのアカウントを作成します。

https://aws.amazon.com/jp/
にアクセス(下記画面)
Image from Gyazo

右上の無料サインアップか真ん中ちょい左の今すぐ無料サインアップをクリック
すると下記画面にいきます。
Image from Gyazo

流れにそって下記情報を入力していきます。

  • メールアドレス
  • パスワード
  • 個人情報(氏名、生年月日、住所など)
  • クレジットカード情報

クレジットカードはビビりますがAWS無料枠の範囲内だと料金発生しませんので、その範囲内で進めていきますよ!
※2019/5/5時点で本Kitのレベルで1ヶ月以内のサービス利用であれば課金されないことを確認しています。

登録完了したら下記画面にたどり着きます。
Image from Gyazo

もちろん無料ベーシックプランを選択
すると下記画面が表示されます。
Image from Gyazo

ほぼ同タイミングで登録したメールアドレス宛にこんなメールも来ます。
Image from Gyazo

これでAWSアカウントの作成完了。

Cloud9準備

つぎにCloud9を使う準備をしていきます。

https://console.aws.amazon.com/console/home
にアクセス(下記画面)
Image from Gyazo

さっき登録したアカウントでサインインすると下記のような画面にいきます。
Image from Gyazo

左上のサービスを検索するの検索窓にcloud9と入力してクリック
すると若干いかつめなこんなページに行きます。
Image from Gyazo

真ん中ちょい右のオレンジのCreate environmentをクリックするとこんな画面に行きます。
Image from Gyazo

Name→開発環境の名前(なんでもOK)
Description→その開発環境の説明(なんでもOK)

を入力してNext step
するとこんな画面に行きます。

Image from Gyazo

このあたりは「どのAWSサービスを使いますか?」とか「どんなOSを使いますか?」的なセッティングですが全部デフォルトのまま進めます。

すると下記のような確認画面がでてくるのでCreate environment
Image from Gyazo

こんな画面になります
Image from Gyazo

これでCloud9準備完了です!
また下記のようにそれぞれの部分を呼ぶことにします。

  • 赤の部分→ファイルツリー
  • 緑の部分→ファイルビューワー
  • 青の部分→コンソール

Cloud9で開発環境構築(ちなみに一瞬でカンタンです)

じつはすでにほぼ完了しています。
Git, Docker, Node.js, Python, PHP, Ruby on Railsといった流行りのツールが事前インストール済みなのです。

今回はRuby on RailsPostgreSQLをつかって開発していきます。
cloud9のデフォルトではPostgreSQLの準備が整ってないので、これを準備していきます。

cloud9のコンソール部分で下記のように入力してEnterしてみましょう。

【cloud9コンソール】.
sudo yum -y install postgresql postgresql-server postgresql-devel postgresql-contrib

こんな感じになります。
Image from Gyazo

下記のようにComplete!と表示されればPostgreSQLのインストール成功です。
Image from Gyazo

またec2-user:~/environment $のようなほにゃらら $という表示がされていれば、処理(成功でも失敗でも)完了を意味します。つまりほにゃらら $が表示されるまでは待ちましょう。
※処理によって長く待たないといけないものもたくさんあります。

次にPostgreSQLを初期化、起動させます。
下記コマンドを打ち込みましょう。

【cloud9コンソール】.
sudo service postgresql initdb && sudo service postgresql start

こんな感じです。
Image from Gyazo

つぎにec2-userという名前でのPostgreSQLのデータベースを自由にコントロールできるユーザ(SUPERUSER)を作成します。
今後、データベースはRuby on Railsを経由して作成し、今回のRuby on Rails開発環境上のユーザの名前はec2-userであるためです。
現段階ではあまり理解しなくて大丈夫です。
下記コマンドを打ち込みましょう。

【cloud9コンソール】.
sudo -u postgres psql

するとpostgres=#と表示され、その後ろに下記コマンドを打ち込みます。

【cloud9コンソール】.
CREATE USER "ec2-user" SUPERUSER;

次に下記コマンドを打ち込みます。

【cloud9コンソール】.
\q

こんな感じです。
Image from Gyazo

これで開発環境構築は完了しました。

いよいよ開発です

cloud9のコンソール部分で下記のように入力してEnterしてみましょう。

【cloud9コンソール】.
rails new testapp -d postgresql

こんな感じ
Image from Gyazo

処理をまって、こんな感じになれば成功です。
Image from Gyazo

これはRuby on Railsの必要ファイルを自動生成するコマンドなのです。
testappの部分はアプリ名です。好きなの何でもOK。

そのおかげで左のファイルツリーにはtestappディレクトリ内にたくさんのファイルが自動作成されました!
Image from Gyazo

次にコンソール部分で下記のように入力してEnterしてみましょう。

【cloud9コンソール】.
cd testapp

こんな感じ
Image from Gyazo

先ほど作成したtestappディレクトリに移動するためのコマンドです。
おかげで$の前の部分がec2-user:~/environmentec2-user:~/environment/testappに変化しています。
$の前の部分は今自分がどこにいるかを表しているのです。

続いてコンソール部分で下記のように入力してEnterしてみましょう。

【cloud9コンソール】.
# これは「~/environment/testapp」で実行するコマンドです。
# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう。
# もしなっていなければ「cd ~/environment/testapp」と入力します
rails g scaffold Blog title:string content:text

こんな感じ
Image from Gyazo

ブログ(Blog)に関するデータベースの領域を作成して、その領域にはタイトル(title)とコンテンツ(content)を保管できるようにしたい。そしてタイトルの保管容量は255文字以内(string)、テキストの保管容量はそれ以上(text)にしたい。
これはそのために必要なファイル群を一気に自動生成するコマンドなのです。
※どんなアプリを作りたいか?でBlog title:string content:textの部分をカスタマイズするのです!

そしてコマンドを打った後に出てくるcreate ほにゃららほにゃららが新たにファイルツリーに生成されていることが分かります。

Image from Gyazo

続いてコンソール部分で下記のように入力してEnterしてみましょう。

【cloud9コンソール】.
# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう。
# もしなっていなければ「cd ~/environment/testapp」と入力します
rails db:create db:migrate

こんな感じ
Image from Gyazo

これは、先ほどrails g scaffold....のコマンドで自動生成されたファイルをもとに、実際にPostgreSQL内にデータベース領域を作成するための処理なのです。

じつはこれで一連の開発が完了しました。
そうです。完了したのです。

ではサーバを起動して完成形を見てみましょう。
コンソールで下記(サーバ起動コマンド)を実行します。
※今回サーバとなる``

【cloud9コンソール】.
# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう。
# もしなっていなければ「cd ~/environment/testapp」と入力します
rails s

こんな感じ。
Image from Gyazo

コマンド実行結果の1行目にBooting Pumaとあります。
このPumaはWEBサーバの1つで、これは最初に実行したrails new testapp -d postgresqlのときにインストールされているのです。

この状態で、下記のようにメニューバーのPreviewからRunning Application Previewをクリックします。
その後、新たにでてくる画面のURL欄からURLをコピペします。
※URLはhttps://ここは人によってことなる.vfs.cloud9.ここは人によってことなる.amazonaws.com/みたいな感じです。
Image from Gyazo

でこのコピペしたURLの後ろに/blogsとつけてブラウザで表示させてみましょう。
※つまりhttps://ここは人によってことなる.vfs.cloud9.ここは人によってことなる.amazonaws.com/blogsというURLで検索です。

こんな感じ。
Image from Gyazo

自由に触ってみてください。
そうです。すでにブログアプリが出来上がっているのです。

アプリをカスタマイズする

ではどうせならすこしアプリをカスタマイズしてみましょう!

機能面でのカスタマイズ

たとえば、本日の日付を表示させたいとしましょう。
まずはファイルツリーから/testapp/app/views/blogs/index.html.erbをダブルクリックします。

こんな感じ。
Image from Gyazo

この/app/views/blogs/index.html.erb/blogsの画面部分を表現しているファイルです。
このファイルをいじることでカスタマイズ可能です。

例えば下記のように編集してみましょう。
<h1>Blogs</h1>の下に追記しています
※ 追記後はCtrl+Sで上書き保存しましょう

/testapp/app/views/blogs/index.html.erb

<p id="notice"><%= notice %></p>

<h1>Blogs</h1>

<!-- ここから下を追記 -->
<%= Time.now %>
<!-- ここから上を追記 -->

<table>
  <thead>
    <tr>
      <th>Title</th>
      <th>Content</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @blogs.each do |blog| %>
      <tr>
        <td><%= blog.title %></td>
        <td><%= blog.content %></td>
        <td><%= link_to 'Show', blog %></td>
        <td><%= link_to 'Edit', edit_blog_path(blog) %></td>
        <td><%= link_to 'Destroy', blog, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Blog', new_blog_path %>

こんな感じ。
Image from Gyazo

追記上書きが完了したら、先ほどのアプリの画面で更新ボタンをおします。
すると下記みたく、時間が表示されます!
Image from Gyazo

さらに<%= Time.now %><%= Time.now.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒") %>に変更してみましょう。

/testapp/app/views/blogs/index.html.erb
<p id="notice"><%= notice %></p>

<h1>Blogs</h1>

<!-- ここから下を追記 -->
<%= Time.now.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒") %>
<!-- ここから上を追記 -->

<table>
<!-- 以下省略 -->

こんな感じ。
Image from Gyazo

そして追記上書きが完了したら、先ほどのアプリの画面で更新ボタンをおします。
すると下記みたく、日付表示がカスタマイズされています!
Image from Gyazo

さらにいじってみてもOKです。

デザイン面でのカスタマイズ

さらにデザインを変更してみましょう。
<%= Time.now.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒") %>
<div style="background-color:red;"><%= Time.now.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒") %></div>に変更します。

/testapp/app/views/blogs/index.html.erb
<!-- 「<h1>Blogs</h1>」の下に追記しています -->
<!-- 追記後は「Ctrl+S」で上書き保存しましょう -->
<p id="notice"><%= notice %></p>

<h1>Blogs</h1>

<!-- ここから下を追記 -->
<div style="background-color:red;"><%= Time.now.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒") %></div>
<!-- ここから上を追記 -->

<table>
<!-- 以下省略 -->

こんな感じ。
Image from Gyazo

追記上書きが完了したら、先ほどのアプリの画面で更新ボタンをおします。
すると下記みたく、時間の部分が赤くなります!
Image from Gyazo

さらにいじってみてもOKです。

こんなふうにして、

  • 機能的な部分をカスタマイズしていくのがサーバサイドエンジニアの仕事
  • 見た目的な部分をカスタマイズしていくのがプロントエンジニアの仕事

なのです。

ではいったんキリがないので休憩のためサーバを停止しましょう。
コンソールでCtrlCの同時押しでサーバSTOPします。

すると下記のような感じで、元のコマンドを実行できる状態に戻ります。
Image from Gyazo

全世界に公開する

そうです。気になっていますよね。
このブログアプリをどうやって全世界に公開するのか。
それを今からやっていきます。

アプリケーション側での公開準備

全世界公開に関しては主にインフラエンジニアの仕事ですが、一部サーバサイドエンジニアが行う仕事もあります。
それをいまからやっていきます。

まず/testapp/Gemfileをファイルツリーから開き、
ファイルビューワーでそっくりそのまま下記のように書き換えてください。

/testapp/Gemfile.
source 'https://rubygems.org'

gem 'rails', '~> 5.0.0'
gem 'pg', '~> 0.18'
gem 'puma', '~> 3.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'therubyracer', platforms: :ruby
gem 'jquery-rails'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
gem 'unicorn', '5.4.1'

group :development, :test do
  gem 'byebug', platform: :mri
end

group :development do
  gem 'web-console'
  gem 'listen', '~> 3.0.5'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

これは公開に必要なツール(Unicornというアプリケーションサーバ)を新たに追記するという作業です。
次にコンソールで下記コマンドを実行してください。

cloud9コンソール.
# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう
# もしなっていなければ「cd ~/environment/testapp」と入力します
bundle install

こんな感じです。
Image from Gyazo

これはGemfileに追記したもの(Unicornというアプリケーションサーバ)を実際にインストールするコマンドです。
でこんな感じになれば成功です。
Image from Gyazo

つぎにUnicornというアプリケーションサーバの設定を行います。
まずは設定するためのファイルを新規に作成します。
ファイルツリーで/testapp/configディレクトリを右クリックしてNew Fileをクリック
名前をunicorn.rbにします。

こんな感じ。
Image from Gyazo

そして下記のように入力して保存しましょう。
※※Rails 4.2 + Unicorn + Nginx でアプリケーションサーバの構築を参考にさせていただきました!

/testapp/config/unicorn.rb
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true

listen "/var/www/testapp/tmp/sockets/unicorn.sock"
pid "/var/www/testapp/tmp/pids/unicorn.pid"

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])

これはUnicornの通信プロセスの制御方法だったり、Unicornのログの出力場所だったりを設定しています。
なんとなく雰囲気だけ理解してればOKです。

カギ作成

今回のリリースではCloud9Github(後ほど設定)AWS Lightsail(後ほど設定)の3つの環境を連携させながら全世界に公開します。
そのために各環境を高セキュリティで接続させるためのカギを作成します。
カンタンです。

コンソールで下記コマンドを実行してください。

cloud9コンソール.
ssh-keygen -t rsa

コマンド後入力画面がでてくるが全てエンターを実行する。
こんな感じ。
Image from Gyazo

コンソールで下記コマンドを実行してください。

cloud9コンソール.
cat /home/ec2-user/.ssh/id_rsa.pub

このコマンドによって、
ssh-rsaではじまり数字をハイフンでつないだやつで終わる超長い文字列が表示されます。
すぐあとのGithub登録で使うのでコピペしておきましょう。

Github登録

今回はcloud9からGithubというソース管理サービスを経由してAWS Lightsail(後ほど設定)というサーバにソースコードを転送することでアプリを公開します。

そこでGithubに登録します。
まずは下記にアクセスしましょう。
https://github.com/join

こんな感じ。
Image from Gyazo

各項目を入力して進みます。
Image from Gyazo

ここでは$0の方を選んでContinue!

Image from Gyazo

アンケートなのでいい感じに選択してSubmit
すると下記のような「メール来てますよ」と教えてくれる画面に行きます。
Image from Gyazo

登録したメールアカウントで受信メール見るをみるとこんな感じのメールが来ています。
Image from Gyazo

Verify email addressをクリックすると登録完了して下記の画面に遷移します。
真ん中ちょい右のStart a projectをクリック
Image from Gyazo

すると下記の画面にいきます。
Repository nameに「testapp」と入力してCreate repositoryをクリック
Image from Gyazo

すると下記画面にたどり着きます。
Image from Gyazo

これがtestappというアプリケーションのソースコードを収めるべきスペースです。
まだ何も入っていない状態です。

つぎにCloud9Githubを連携させるべく、先ほどCloud9上で作ったカギをGithubにセットします。

下記にアクセスしましょう。
https://github.com/settings/keys

こんな感じです。右上のNew SSH keyをクリックします。
Image from Gyazo

下記のような画面に移ります。
Image from Gyazo

titleに「aws_cloud9」
keycat /home/ubuntu/.ssh/id_rsa.pubで確認したカギ(ssh-rsaではじまりIPアドレスで終わる超長い文字列)
を入力します。
そしてAdd SSH keyをクリック。

これでGithub登録とCloud9との連携完了です!

Githubでのソースコードの公開

cloud9コンソールで下記コマンドを順に実行してください。

cloud9コンソール.
# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう
git init
git add .
git commit -m "first commit"

こんな感じ。
Image from Gyazo

下記のようになれば成功です。(全ファイルが登録されてるので全ファイル名が処理結果として出力されます)
Image from Gyazo

これは、

  1. testappディレクトリ以下のファイル群をGitというツールで管理スタートし(git init)、
  2. testappディレクトリ以下のどのファイルを対象にするかを決めて(git add . ※ドットは全ファイルを意味する)、
  3. 状態を確定させる(git commit -m "なにかメッセージ")

ということをしています。
そのあと、cloud9コンソールで下記コマンドを実行してください。

cloud9コンソール.
# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう
git remote add origin git@github.com:kakiuchis2/testapp.git

こんな感じで特になにも表示されませんが、
先ほどのGithubのkakiuchis2/testappリポジトリの場所をcloud9上に認識させたということです。
Image from Gyazo

そのあと、cloud9コンソールで下記コマンドを実行してください。

cloud9コンソール.
# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう
git push origin master

こんな感じ。
Image from Gyazo

途中でyesかnoか聞かれたら、yesと入力しましょう。
こんな感じになれば成功です。
Image from Gyazo

これは「cloud9のtestappディレクトリ以下のファイル群」を「Githubのkakiuchis2/testappリポジトリ」にコピーしているのです。

では本当にうまくいったか確認しましょう。
Githubのトップページにアクセスします。
https://github.com/

こんな感じ。
Image from Gyazo

左のkakiuchis2/testappをクリック!
kakiuchis2の部分はユーザ名なので人それぞれ異なります。

すると下記画面にいきます。
Image from Gyazo

Cloud9と同じファイル構成がGithub上でも完成しています。
これでGithubでのソースコードの公開は完了です!

おおよそここまでがサーバサイドエンジニアの仕事です。
ここからインフラエンジニアの仕事にはいっていきます。

全世界公開用のサーバ環境を準備する

フロントエンドエンジニアとサーバサイドエンジニアのつくったソースコードを預かって、
それを全世界に公開までもっていくのがインフラエンジニアの担当部分です。
では早速やっていきましょう。

LightsailでOS作成

通常だとレンタルサーバと契約して、OSのイメージみたいなのを入手して、インストールして。。。
みたいな感じですがLightsailは超カンタン!
さっそくやっていきましょう。

まずAWSコンソールにアクセス
https://console.aws.amazon.com/console/home

そしてサービスを検索するの検索窓にlightsailと入力してクリック。
こんな感じです。
Image from Gyazo

では、始めましょうとでてくるので始めます。
Image from Gyazo

プラットフォーム→Linux/Unix
設計図→「OSのみ」、Amazon Linux
を選択します。
Image from Gyazo

つぎにインスタンスのプラン選択→最初の1カ月無料である$3.50ドルのやつ
を選択します。
Image from Gyazo

そしてインスタンスの作成をクリックすると下記画面に行きます。
Image from Gyazo

これでLightsailでAmazonLinux作成が完了です!

Amazon Linuxへのアクセス

Amazon_Linux-512MB...の部分をクリックすると下記画面に行きます。
Image from Gyazo

真ん中らへんのSSHを使用して接続をクリックすると下記画面に行きます。
Image from Gyazo

これでAmazon Linuxへのアクセス完了です。
インフラエンジニアはこの黒い画面(便宜上Lightsailのコンソールと呼ぶことにします)で仕事をしていくのです。
じつはこの画面はAmazon社が作った場所は秘密にされているどこかのサーバにリモートでアクセスしているのです。
そのサーバの一部を借りて、全世界にアプリを公開できるサービスがLightsailなのです。

Amazon Linuxの最初の準備

Cloud9とちがって本番環境のAmazon Linuxはなにも準備されていません。
自分で準備していくのです。
これがインフラエンジニアの仕事です。

さっそくいきましょう。

Lightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
sudo su -

こんな感じで$#に変わります。
Image from Gyazo

これは権限をMAXにする行為です。
本来の仕事では危険なのであまり行いませんが、今回の適性診断ははスピード重視のため全コマンドをMAX権限で実行します。

つぎにLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
yum -y update

こんな感じ
Image from Gyazo

こんな感じでComplete!と表示されたら成功です!
Image from Gyazo

これは、yum(ヤム)といういろんなソフトをインストールしたりアンインストールしたりするツールがあり、それをyum管理されているソフトウェアを最新状態にするという処理です。
あまり気にせず先に進みましょう。

つぎにLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
yum -y install git

こんな感じ。
Image from Gyazo

こんな感じでComplete!と表示されたら成功です!
Image from Gyazo

これはyumでGitをインストールする処理です。
先ほど開発のところでも登場したGitですが、
インフラでもGitを通じて、世界中のいろんな人が作ったものをコピーすることができるのです。

Rubyのインストール

では次にRubyをインストールしましょう。
RubyをインストールしないとRuby on Railsが使えないのです。
では行きましょう。

Lightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
git clone https://github.com/rbenv/rbenv.git /usr/local/rbenv

こんな感じです。
Image from Gyazo

これはRubyのインストールを便利にするためのツールrbenvがgithubで公開されており、そのソースをAmazonLinuxの/usr/local/rbenvディレクトリにコピーしているのです。

つぎにLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
vi /etc/profile.d/rbenv.sh

こんな感じ。
Image from Gyazo

するとこんな画面がでてきます。
Image from Gyazo

最初はなにも入力できない状態です。
そこでiをタイプします。
すると左下に-- INSERT --と表示され、入力できる状態になります。
Image from Gyazo

下記内容をコピペして張り付けましょう。

/etc/profile.d/rbenv.sh
export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

ただこのLightsailコンソールは直接のコピペができず、右下のノートマークを経由してコピペします。
そして黒い画面の文字のコピーはドラッグ、
張り付けるときは右クリックです。

こんな感じ。
Image from Gyazo

そのあとESCとタイプすると左下の-- INSERT --が消えて、入力できない状態になります。
Image from Gyazo

入力できない状態で:wqとタイプすると上書き保存されます。
:q!で保存せずに終了です。
こんな感じ。
Image from Gyazo

するともとのLightsailコンソールに戻ります。
Image from Gyazo

このviコマンドでのファイル編集方法は今後も頻発するのでよく覚えておきましょう。

  • iESCで入力モードと入力できないモードの切り替え
  • 入力できないモード状態で、:wqで上書き保存、:q!で保存せずに終了

です!
この一連の処理は、PCでいう環境変数の設定のようなもので、rbenvを用いたコマンドをどこからでも実行可能にする処理をコピペしたのです。

つぎにLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
source /etc/profile.d/rbenv.sh

こんな感じです。
Image from Gyazo

とくになにも起こりませんが、先ほど作成した/etc/profile.d/rbenv.shファイルの読み込みをおこなったイメージです。
読み込みを行わないと設定が反映されないのです。

ではちゃんとrbenvがインストールされたか確認してみます。

Lightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
rbenv --version

このようにバージョンの数字が表示されたら成功しています。
Image from Gyazo

つぎにLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
git clone https://github.com/rbenv/ruby-build.git /usr/local/rbenv/plugins/ruby-build

こんな感じです。
Image from Gyazo

これもruby-buildというRubyインストールに必要なツールをGithubからAmazonLinuxの/usr/local/rbenv/plugins/ruby-buildディレクトリにコピーする処理です。

では次にRubyのインストールに必要なその他ツールを一気にインストールしていきます。
Lightsailコンソールで下記コマンドを順に実行してください。

Lightsailコンソール.
yum -y groupinstall "Development Tools"
yum -y install gcc72-c++.x86_64 glibc-headers openssl-devel readline libyaml-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel mysql-devel readline-devel

問題なければ最後にComplete!と表示されるはずです。

ではようやく本題のRubyのインストールに移ります。
Cloud9と同じバージョンのRubyをインストールするのが良いので、まずはそれを調べます。

cloud9コンソールで下記コマンドを実行してください。

cloud9コンソール.
ruby -v

こんな感じでRuby2.6.0であると分かります。
Image from Gyazo

ではAmazonLinuxでもRuby2.6.0をインストールします。

Lightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
rbenv install 2.6.0

こんな感じです。
Image from Gyazo

これは少々時間がかかって、下記のようになれば成功です。
Image from Gyazo

つぎにLightsailコンソールで下記コマンドを順に実行してください。

Lightsailコンソール.
rbenv global 2.6.0
rbenv rehash
ruby -v

これは使用するRubyのバージョンを変更し、その結果ちゃんとRuby2.6.0がセットされたか確認する処理です。
問題なく最後に2.6.0とでたら成功です。
こんな感じです。
Image from Gyazo

これでRubyインストール完了です。
大変ですね。Cloud9の便利さがよくわかります。
本番環境だけでなく、自力で開発環境構築するには、この処理が必要になるのです。

bundlerのインストール

Ruby on Railsでの開発のとき、bundle installって使いましたよね。
WEBサーバのPumaとか(その他本当にたくさん)インストールしてくれるコマンド。
このコマンドを使えるようにするためにbundlerをインストールする必要があります。

Lightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
gem install bundler

こんな感じです。
Image from Gyazo

これでbundlerのインストール完了です。

PostgreSQLのインストールと設定

Cloud9でもインストールしましたね。
同じように本番環境でもインストールします!

Lightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
yum -y install postgresql94 postgresql94-server postgresql94-devel postgresql94-contrib postgresql94-docs

最後にComlplete!と表示されたらOKです。
これらはPostgreSQLで必要な各種ツールをインストールしています。

次にLightsailコンソールで下記コマンドを順に実行してください。

Lightsailコンソール.
/etc/init.d/postgresql94 initdb
/etc/init.d/postgresql94 start

こんな感じでそれぞれOKと表示されたらOKです。
Image from Gyazo

これはPostgreSQLの初期化と起動のイメージです。

次にviコマンドで/var/lib/pgsql94/data/postgresql.confを編集しましょう。
Lightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
vi /var/lib/pgsql94/data/postgresql.conf

そして/var/lib/pgsql94/data/postgresql.confを下記のように編集します。
大項目が次のように並んでいる巨大ファイルです。

  • FILE LOCATIONS
  • CONNECTIONS AND AUTHENTICATION
  • RESOURCE USAGE (except WAL)
  • WRITE AHEAD LOG
  • REPLICATION
  • QUERY TUNING
  • ERROR REPORTING AND LOGGING
  • RUNTIME STATISTICS
  • AUTOVACUUM PARAMETERS
  • CLIENT CONNECTION DEFAULTS
  • LOCK MANAGEMENT
  • VERSION/PLATFORM COMPATIBILITY
  • ERROR HANDLING
  • CONFIG FILE INCLUDES
  • CUSTOMIZED OPTIONS

2つめのCONNECTIONS AND AUTHENTICATIONを編集します。
デフォルトは下記のようになっています。

【編集前】/var/lib/pgsql94/data/postgresql.conf
# 以上省略

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'   # what IP address(es) to listen on;
                                  # comma-separated list of addresses;
                                  # defaults to 'localhost'; use '*' for all
                                  # (change requires restart)
#port = 5432                      # (change requires restart)

# 以上省略

これを以下のように編集します。
変更点は次の2点です。

  • #listen_addresses = 'localhost'listen_addresses = '*'
  • #port = 5432port = 5432
【編集後】/var/lib/pgsql94/data/postgresql.conf
# 以上省略

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*'                  # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)

# 以上省略

これはPostgreSQLへのアクセスできる条件の緩和をおこない、またPostgreSQLの使用するポート番号というものを有効化させる変更にあたります。
あまり気にせず、つぎに進みましょう。

次にviコマンドで/var/lib/pgsql94/data/pg_hba.confを編集しましょう。
Lightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
vi /var/lib/pgsql94/data/pg_hba.conf

そして/var/lib/pgsql94/data/pg_hba.confを下記のように編集します。
/var/lib/pgsql94/data/pg_hba.confの一番下のほうの部分です。

/var/lib/pgsql94/data/pg_hba.conf
# TYPE  DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
# local   all  all  peer
# IPv4 local connections:
# host    all  all  127.0.0.1/32  ident
# IPv6 local connections:
# host    all  all  ::1/128  ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
# local   replication     postgrespeer
# host    replication     postgres127.0.0.1/32ident
# host    replication     postgres        ::1/128                 ident
local   all     all     trust
host    all     all     0.0.0.0/0 md5

これはどの環境からそのデータベースにどのユーザがどの認証方式をつかってアクセスできるかを指定しています。
まあ、気にせず、次に進みましょう。

つぎにLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
/etc/init.d/postgresql94 restart

こんな感じ。
Image from Gyazo

これはPostgreSQLの再起動で、今まで編集したファイルを反映させる処理です。

つぎにec2-userという名前でのPostgreSQLのデータベースを自由にコントロールできるユーザ(SUPERUSER)を作成します。
今後、データベースはRuby on Railsを経由して作成し、今回のRuby on Rails開発環境上のユーザの名前はec2-userであるためです。
現段階ではあまり理解しなくて大丈夫です。
下記コマンドを打ち込みましょう。
つぎにLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
psql -U postgres

するとpostgres=#と表示され、その後ろに下記コマンドを打ち込みます。

Lightsailコンソール.
CREATE ROLE "root" WITH SUPERUSER LOGIN;
CREATE ROLE "testapp" WITH SUPERUSER LOGIN;
CREATE DATABASE "testapp_production";
\q

そしてLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
/etc/init.d/postgresql94 restart

こんな感じです。
Image from Gyazo

この処理は、roottestappという名前でのPostgreSQLのデータベースを自由にコントロールできるユーザ(SUPERUSER)を作成し、testapp_productionという名前のデータベースを作成しています。
これは今Lightsailで使用しているユーザ名や導入するRuby on Railsの仕様にそった処理となります。
そしてそのあとにPostgreSQLを再起動して追加したユーザやデータベースを読み込みます。
あまり気にせず、つぎに進みましょう。

Nginxのインストールと設定

つぎにNginxというWEBサーバをインストールします。
Cloud9環境ではPumaというWEBサーバを利用していましたが、AmazonLinux環境ではNginxというWEBサーバとUnicornというアプリケーションサーバを利用します。
※それぞれメリットデメリットがあるらしいですが、難しいので私は分かりません。公開するということが目的で、かつ参考になる記事数を鑑みて、AmazonLinux環境ではNginxUnicornという構成を選択しました。

では細かいこと気にせず早速Nginxをインストールしていきましょう。

Lightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
yum -y install nginx

最後にComplete!と表示されればインストール成功です。

次にLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
chkconfig nginx on
/etc/init.d/nginx start

こんな感じでOKと表示されます。
Image from Gyazo

これはNginxが自動で起動するよう設定とNginxの起動処理です。

ではLightsailのOS詳細画面(下記の画面)の下の方のパブリックIPの数字を確認し、ブラウザのURL欄に入力してみてください。
Image from Gyazo

Nginxのインストールと起動が問題なければこのように表示されます。
Image from Gyazo

次にviコマンドで/etc/nginx/conf.d/testapp.confを新規作成+カスタマイズしましょう。
※viコマンドはその後ろに存在しないファイルを指定すると新規作成+編集ができるのです。
Lightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
vi /etc/nginx/conf.d/testapp.conf

そして/etc/nginx/conf.d/testapp.confを下記のように作成します。
※ただし7行目のIPアドレスは各個人でことなります。
※先ほど調べたLightsailのOS詳細画面(下記の画面)の下の方のパブリックIPの数字を入力しましょう。
Rails 4.2 + Unicorn + Nginx でアプリケーションサーバの構築を参考にさせていただきました!

/etc/nginx/conf.d/testapp.conf
upstream unicorn {
  server unix:/var/www/testapp/tmp/sockets/unicorn.sock;
}

server {
  listen 80;
  server_name 13.231.62.63;

  access_log /var/log/nginx/testapp_access.log;
  error_log /var/log/nginx/testapp_error.log;

  root /var/www/testapp;

  location ~ ^/assets/ {
  }

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://unicorn;
  }
}

Nginxは/etc/nginx/conf.dconf.dディレクトリ●●●.confを作成すると、起動時に読み込んでくれます。
一般的にはアプリ名.confとして作成するので今回はtestapp.confという名前のファイルを作成しました。
またその中で主に下記の設定を書いています。

  • NginxがUnicornと連動する上で必要なプロセスやホストやポートの連携ファイルの設定
  • Nginxのポート番号や使うサーバIPアドレスやトップページやエラーログ保管場所の設定

次にLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
nginx -s reload

こんな感じでなにも起こりませんが、Nginxが再起動し、testapp.confの設定が読み込まれます。
Image from Gyazo

全世界公開用のサーバでGithub公開ソースコードをもとに公開する

いよいよ終わりが見えてきました。
それではGithubで公開しているソースコードをAmazonLinuxに入れ込んで、アプリを起動して公開していきましょう。

GithubからAmazonLinuxにソースコードを入れる

まずはGithubからAmazonLinuxにソースコードを入れていきます。

Githubにアクセス
https://github.com/
Image from Gyazo

左の該当するリポジトリをクリックして下記画面に行きます。
Image from Gyazo

この画面の右上の緑色のClone or Downloadをクリックすると、
https://github.com/xxxx/yyyy.gitというURLが出てきます。
※xxxxはGuthub登録ユーザ名でyyyyはリポジトリ名なので皆さん異なります。

そしてLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
git clone https://github.com/xxxx/yyyy.git /var/www/testapp

こんな感じ。
Image from Gyazo

これでGithubで公開しているソースコードがAmazonLinuxの/var/www/testappディレクトリにコピーされました。
※つまり公開されているコードは全世界の人たちに使ってもらえるのです!

ただし一部Githubの状態から変更しておきべき場所があります。
まずcloud9のコンソール部分で下記のように入力してEnterしてみましょう。

【cloud9コンソール】.
# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう。
bundle exec rake secret

こんな感じです。
Image from Gyazo

この出てきた乱数をコピペしておきます。

つぎにLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
vi /var/www/testapp/config/secrets.yml

/var/www/testapp/config/secrets.ymlを下記のように編集します。
<%= ENV["SECRET_KEY_BASE"] %>の部分に先ほどの乱数をコピペします。

/var/www/testapp/config/secrets.yml
# 以上省略
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

この乱数はセキュリティレベルを上げるためのランダムな文字列です。
通常だとcloud9上で修正してAmazonLinuxにコピーしますが、そうするとGithubに公開されてしまうので、AmazonLinux内で直接編集しています。

AmazonLinux上でアプリを起動させる

最後の一押しです。
ソースコードが入ったので、あとは起動させましょう。

Lightsailコンソールで下記コマンドを実行して、ソースコードをいれたディレクトリに移動します。

Lightsailコンソール.
cd /var/www/testapp

こんな感じ。
Image from Gyazo

次にLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
# 「#」の前の部分が「root@ip-xx-xx-xx-xx testapp」となっていることをコマンド実行前に確認しましょう。
bundle install

うまくいくとこんな感じになります。
Image from Gyazo

もし下記のようなエラーが発生したら/var/www/testappディレクトリgem install nokogiri -v '1.10.3'を実行した後で再度bundle installを実行してみてください。
Image from Gyazo

もし下記のようなエラーが発生したら/var/www/testappディレクトリgem install pg -v '0.21.0'を実行した後で再度bundle installを実行してみてください。
Image from Gyazo

これはCloud9環境でも行った必要なRuby on Railsの起動に必要な各種パッケージをインストールする処理です。

次にLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
# 「#」の前の部分が「root@ip-xx-xx-xx-xx testapp」となっていることをコマンド実行前に確認しましょう。
rake db:migrate RAILS_ENV=production

こんな感じ。
Image from Gyazo

これはCloud9環境でも行いましたが、Ruby on Railsの特定のファイルの情報に基づいてデータベースの状態をカスタマイズしている処理です。

次にLightsailコンソールで下記コマンドを実行してください。

Lightsailコンソール.
# 「#」の前の部分が「root@ip-xx-xx-xx-xx testapp」となっていることをコマンド実行前に確認しましょう。
bundle exec unicorn_rails -c config/unicorn.rb -E production -D

こんな感じでなんも起こりませんがUnicornが起動開始した状態になります。
Image from Gyazo

では全世界に公開されたWEBサイトを見てみましょう。

LightsailのOS詳細画面(下記の画面)の下の方のパブリックIPの数字を確認し、ブラウザのURL欄にxx.xx.xx.xx/blogsと入力してみてください。
Image from Gyazo

すべての処理がうまくいっていれば下記のような感じで全世界に公開されている状態になります。
Image from Gyazo

終了です。お疲れ様でした!!!

診断

では診断を行います。
下記のなかでどの箇所が一番没入できましたか?もっとも没入したものを1つ選んでください。
没入とは、のめり込んで周りが見えなくなるくらい集中している状態です。
※楽しいとか面白いという感情とは異なります。

  • AWSアカウントの作成
  • Cloud9準備
  • Cloud9で開発環境構築(ちなみに一瞬でカンタンです)
  • いよいよ開発です
  • 機能面でのカスタマイズ
  • デザイン面でのカスタマイズ
  • アプリケーション側での公開準備
  • カギ作成
  • Github登録
  • Githubでのソースコードの公開
  • LightsailでOS作成
  • AmazonLinuxへのアクセス
  • AmazonLinuxの最初の準備
  • Rubyのインストール
  • bundlerのインストール
  • PostgreSQLのインストールと設定
  • Nginxのインストールと設定
  • GithubからAmazonLinuxにソースコードを入れる
  • AmazonLinux上でアプリを起動させる
  • では全世界に公開されたWEBサイトを見てみましょう

診断結果

転職、就職にかかわらず仕事選びで失敗しない要素の一つに没入できるかという要素があります。
没入できた部分がどのエンジニアポジションの仕事か?

以下で没入したひとはサーバサイドエンジニアを選択すると失敗する可能性が低いです。

  • いよいよ開発です
  • 機能面でのカスタマイズ
  • アプリケーション側での公開準備

とくに機能面でのカスタマイズで勝手にカスタマイズし始めたり、ソースコードをいじって検証とか、このキットで記載していないファイルを眺めたりしている人はドンピシャです。

以下で没入したひとはサーバサイドエンジニアを選択すると失敗する可能性が低いです。

  • Cloud9で開発環境構築(ちなみに一瞬でカンタンです)
  • カギ作成
  • AmazonLinuxへのアクセス
  • AmazonLinuxの最初の準備
  • Rubyのインストール
  • bundlerのインストール
  • PostgreSQLのインストールと設定
  • Nginxのインストールと設定
  • GithubからAmazonLinuxにソースコードを入れる
  • AmazonLinux上でアプリを起動させる

以下で没入したひとはフロントエンドエンジニアを選択すると失敗する可能性が低いです。

  • デザイン面でのカスタマイズ

とくにデザイン面でのカスタマイズでデザインをいじり続けてすごい時間が過ぎてしまったみたいな人はドンピシャです。

以下で没入したひとは、その他の可能性を秘めていると思います。今回は診断範囲から外れてしまいます。すみません!

  • AWSアカウントの作成
  • Cloud9準備
  • Github登録
  • Githubでのソースコードの公開
  • LightsailでOS作成
  • では全世界に公開されたWEBサイトを見てみましょう

最後の片づけ

今回の1DAYキットでの使用でレベルですと、
AWSのcloud9は1年後課金対象に、Lightsailは1カ月後課金対象になります。
※2019/5/5時点の情報

そのため、課金されたくない場合は下記手順にしたがってサービスを停止しましょう。

こちらにアクセスします。
https://lightsail.aws.amazon.com/ls/webapp/home/instances

削除したいOSの部分の右の方の縦3点の部分をクリックして削除します。
こんな感じです。
Image from Gyazo

つぎはこちらにアクセスします。
https://us-east-2.console.aws.amazon.com/cloud9/home

削除したいCloud9開発環境をクリックして削除します。
こんな感じ。
Image from Gyazo

これで大丈夫です。また作りましょう!

参考文献

とても参考になりました!ありがとうございます!!

CentOSにrbenv, Rubyをインストールする
unicornがエラーで起動しなくて困った
Rails + unicorn + nginx でWeb Serverを起動させるときにはまった話。
Amazon Linux上でRails新規プロジェクトを作成すると、bundle installで落ちる
Rails 4.2 + Unicorn + Nginx でアプリケーションサーバの構築

19
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
26