独学未経験4ヶ月。
ポートフォリオをECSデプロイ目指し、現在勉強中!
間違っている内容ありましたら、ご指摘よろしくお願いいたします!
必要な前提知識
- docker hubアカウントあるよ
- githubアカウントあるよ
- awsアカウントあるよ(osは、amazon linux 2)
- awsでec2インスタンスを起動できるよ
AWSのOS、amazonlinux2とは何??
今からaws始めるならこれが良いのでは、
awscliなど付属してるし
寸劇
(業界未経験の筆者が勝手な想像で書いております。。失礼ありましたらエンジニア界隈のかた申し訳ありません。。)
筆者
「あーやっと、railsでtodoappが作れたぞ!」
「次は、herokuでデプロイしてみるか!」
「えherokuって案外......ムズ!」
「あ、でもこうやったら、、、デプロイできたぞ!」
「デプロイって、結構むずいな。笑(挫折しそう)」
エンジニア界隈
「やー、でもさー。今更、railsのアプリをherokuでデプロイしました!」
「ていうレベル感のポートフォリオ持ってこられてもねー。」
「正直、反応に困るよね!」
筆者
「 ..... 」
エンジニア界隈
「どうせなら、aws使ってデプロイしました!くらいじゃないと通用しないぜ!」
筆者
「どうせawsなんて簡単だろ。herokuだってデプロイできたし!」
「上等!やってやんよ!」
後日、、
「ええーと。awsアカウント作成してっと。ログインしてっと。。」
「ん、なにこれ? herokuと全然違う!」
「無事awsに、デプロイできるかな??」
こうして筆者の「awsのデプロイ奮闘劇」が始まるのです。
こんにちは、筆者です!
前置き長くなりました!
ポートフォリオに導入しなければという危機感から、aws始めました。
難しいですね。
awsのデプロイとは?
複数の方法があります。
- EC2: 自分で作成した、アプリをEC2という場所に設置する
- ECS: 自分で作成した、複数のdockerイメージをコンテナ管理する手法
今回は
1.のEC2というサービスを用いて、デプロイまでしたいと思います。
使用するrailsアプリ
git cloneして使用ください。
aws 初期設定
ec2インスタンス起動
awsでログインして、ec2インスタンスを起動しましょう!
パブリックIPアドレスを控えておいてください!
後に必要です!
sshログイン
- ローカルのターミナルで操作
cd ~
cd .ssh
ssh [作成したkey名].pem ec2-user@[ec2インスタンスのIPアドレス]
awscli設定
インストール
amazon linux 2選択済みなら必要ないと思います。
インストール必要なかたはこちらで
↓
awscliをpip3でインストール
設定
- accesskey
- secretkey(IAMユーザー作成時に控えておく)
- リージョン(tokyoリージョンなら、ap-northeast-1)
- 出力形式(defaultはJSON)
を聞かれる
aws configure
dockerをインストール
youtube参考動画(7分20秒から8分58秒まで)
awsのec2インスタンスでdockerをインストール
これが一番分かりやすい方法でした!
動画内に出てくるコマンド↓
sudo yum update -y
amazon-linux-extras install docker
sudo usermod -a -G docker ec2-user
docker info
(docker hub起動しておく)
docker login
(dockerコマンドが使える画面が表示されているかを確認)
docker-composeをインストール
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
railsアプリを配置
githubと接続しよう
.gitconfigをかく
vim ~/.gitconfig
以下を記載
[user]
name = gitに登録した自分の名前
email = git登録時の自分のメアド
[alias]
a = add
b = branch
ch = checkout
st = status
[color]
ui = true
[url "github:"]
InsteadOf = https://github.com/
InsteadOf = git@github.com:
sshkeyの作成
cd ~
mkdir .ssh
chmod 700 .ssh
cd .ssh
ssh-leygen -t rsa
Enter file in which to save the key ():
=> ここでは、好きなファイル名を指定
Enter passphrase:
=> 空でエンター
Enter same passphrase again:
=> 空でエンター
ls
=> ファイルが2つ生成でok!
vim config
以下を記載
Host github
Hostname github
User git
IdentityFile ~/.ssh/[好きなファイル名]_rsa
↓
ssh-keygenで生成した鍵を指定する
chmod 600 config
作成したsshkeyをgithubに登録
cat [好きなファイル名]_pud
=> コピーしておく。githubとの認証に使用。
=> githubへ
=> setting
=> SSH and GPG key
=> new-ssh-key
=> key欄で貼り付け。

ssh -T Github
<Hi,,,,,,と表示で成功
githubからrailsアプリをclone
railsアプリ配置ディレクトリの作成
sudo su
cd ~
cd /var
mkdir www
(rootユーザーでない場合)
==>> chown [ユーザー名]:[グループ名] [ファイル名]
cd www
mkdir rails
cd rails
git clone
pwd /var/www/rails
git clone [githubリポジトリのURL]
成功すると
/var/www/rails/todoapp
となっているはず
docker-composeで起動
cd /var/www/rails/todoapp
docker-compose build
docker-compose up -d
データベースを作成
このままだと、こういうエラーが表示される。

docker-compose exec web bash
bundle exec rails db:create RAILS_ENV=production
bundle exec rails db:migrate RAILS_ENV=production
bundle exec rails assets:precompile RAILS_ENV=production
docker-compose down
docker-compose build
docker-compose up
[パブリックIP]にアクセス!
すると、、、
エラー集
なんだこれ??
Forbidden??
どうやらエラーメッセージから理解するに、index.htmlが読めないことが原因っぽい
作業時、rootユーザーであれば問題少ないと思います。しかし、作業ユーザーを作成する人はファイルやディレクトリに対して適切な権限やファイルの仕様になっていないとpermission error(権限エラーや拒否)が起こります。
例
ファイルappleの仕様を700に変更
sudo chmod 700 apple
ディレクトリcoffeeの権限をユーザーtullysにグループをcafeに変更
sudo chown tullys:cafe coffee