Help us understand the problem. What is going on with this article?

AWSを用いてrailsアプリをデプロイするプロセスを頑張って噛み砕いてみるvol.1

近況報告

 やあ,転職活動を目前にして,ついに個人アプリのデプロイを行なっていきます。テックのカリキュラムは離れると見られなくなるのでこういう場所に自分のやってきたことをメモできたらなあと思っています。個人アプリに関してはDockerを導入して完成としたかったのですが,時間的にとりあえずデプロイを行うことにしました。テックエキスパートのカリキュラムを元に書いてるのでそれと互換性があります。この記事は後々制限つけようかな。

今回の目的

インフラ整備での各アクションの言語化
コードを単に打っているだけでは理解しきれないし,他に応用できないので言語化して整理
・AWSでアカウント作成,ほか諸々の準備は割愛してターミナルでの操作をメインに
・テックキャンプ受講生支援

おおまかな流れ

・本番環境をリモートで操作する準備
・本番環境の構築
・rubyインストール

事前準備

awsのアカウント作成
インスタンス作成
インスタンスとEPアドレス紐付け
セキュリティでポートのスタンバイ
キーペア作成

以下キーペアDL後から書いていきます

本番環境をリモートで操作する準備

ターミナル
$ .ssh yasypikotanji$ cd ~ ←カレントディレクトリに移動
mkdir ~/.ssh
// move A ⏩ B
$ mv Downloads/***.pem .ssh/ move A ⏩ B
$ cd .ssh/
$ ls
***.pem
// ***.pemに対して600(所有者のみ中身の編集を許可)にchmod(権限変更)
$ chmod 600 ***.pem 
$ ssh -i ***.pem ec2-user@IP0000

The authenticity of host 'IP0000 (IP0000)' can't be established.
ECDSA key fingerprint is "Important Key Name".
Are you sure you want to continue connecting (yes/no)? yesと記入
Warning: Permanently added '***' (ECDSA) to the list of known hosts.
⇨おう,知らねえ顔だな。通行許可証は持ってるみたいだな,今後ssh使ってEC2にアクセスしていくのかい?
       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
4 package(s) needed for security, out of 7 available
Run "sudo yum update" to apply all updates.
⇨遠隔操作していくためのツールが手に入る
[ec2-user@IP0000 ~]$ ←放置してると締め出される

 sshはSecure Shellの略で,クラウドにある自分のサーバーをターミナルで遠隔操作するための端末のイメージ。開発環境ならパソコンの中に擬似サーバーを作ってそれをターミナルで操作できるんだけど,みんなが使う本番環境でそれをやっちゃうとたくさんのアクセスをあなたのパソコンが捌き切れず,機能不全に陥っちゃう。水流をアクセスにたとえると,バケツを家の蛇口に置いても溜まるのはゆっくりだけど,バケツを華厳の滝の下に置いたら一瞬で溢れちゃうでしょw だから,ネットのクラウドっていう巨大なバケツをお借りして本番環境を構成していく。

補足chmodについて

本番環境の構築

本番環境はAWSによってリーズナブルに効率的に提供されますが,サーバーの中身は開発環境がまんま複製されることはありません。ここから環境の整備を行なっていきます。

サーバーにもともとあるバージョンをアップデート
・yumはクラウドのLinuxのソフトウェア管理の仕組みらしい
・「sudo」はで「substitute user(もしくはswitch user) do」の略,C言語由来 *引用
⇨他のユーザー権限でサーバーを動かす時に用いる。自分のパソコンと離れたサーバーをいじるから必要なのかな。
・パッケージ LinuxOS下における、ある役割/機能をもったプログラムの集合。

EC2
$ sudo yum -y update
$ sudo yum -y install git make ~各々のパッケージ~

使うものは各々で変わると思うけど,私が使用したのは
gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl

Node.jsのインストール
Node.jsは本番環境でJSを用いるために利用するパッケージ,ほか,CSSや画像の圧縮などにも利用

EC2
$ sudo curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash -
$ sudo yum -y install nodejs

node.jsはサーバー上に存在しないライブラリなのでウェブから調達する必要があるみたい。
上のコードを噛み砕くと,
bash君,「悪い,外野からが指示出しするけど堪忍な。node.jsをインストールできるサイトをサーバー内に持ってきて」ってサーバーに伝えてきてくんね?よし,伝えてきたな。じゃあ,また外野からの指示出しで悪いんだけどインストールして。
。。。って感じ。bash君はPCの操作の命令をうけるシェル,パシリみたいな感じ

rubyインストール

rubyを導入する前に土台のrbenvとruby-buildをインストールします。
rbenvとruby-buildは、Rubyのバージョンを管理する際に組み合わせて使うツールで,これらはRubyをインストールする前にインストールする必要があるみたい。
ruby-buildはrbenvのプラグインでありruby-buildによってRubyの様々なバージョン(2.0.0など)をインストールすることができて,rbenvを使用することでrubyのバージョンを切り替えることできるそう。

EC2
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv ←rbenvのインストール
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile 
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source .bash_profile
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build ←ruby-buildのインストール
$ rbenv rehash ←更新

echoはLinuxのコマンド。文字を読み込ませています。ここでは,rbenvのパスを読み込ませて,本番環境でrbenvを使うための書き込みを環境変数に行なっています。
bash_profileはサーバーにログインした時に実行されるもの。システムを動かす重要なもの,キーやパスを格納するので環境変数になっている。

イメージは,「おれ焼きそばパン好きだからサァ,昼休みのたびに買ってきてくんね?」て陰で命令されたbash君が毎日パシッている感じ。

そして,Rubyをインストールします。

EC2
$ rbenv install 2.5.1 ←時間かかる。バージョンは各々のバージョンに変更
$ rbenv global 2.5.1 ←サーバー全体に適用されるrubyのバージョンを設定
$ rbenv rehash 
$ ruby -v ←うまくインストールできてるかバージョンを確認 

サーバー内の環境で多くのプロジェクトを動かすなら,ピンポイントのプロジェクトのみに対してrubyを適用させるlocalでもいいんだけど,このサーバーではrubyしか使わないからglobalで反映。

おわりに

以上,本番環境の構築,ruby導入まででした。vol.2ではデータベース,ユニコーンを用います(多分)。

微量でも参考になったらLGTM,ご指導はコメント欄にお願いします!

aaabb6211
TECHCAMP72期卒業(since 23/04/2020)⇨インフラ系エンジニア 趣味はウィスキーを飲むこと。twitter : @silverchair_pg
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした