1. バケット作成
バケットポリシー
{
"Version": "2012-10-17",
"Id": "Policy1544152951996",
"Statement": [
{
"Sid": "Stmt1544152948221",
"Effect": "Allow",
"Principal": {
"AWS": "************①****************"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::************②**********"
}
]
}
上記の①に先ほどメモしておいた「ユーザーのARN」を、②に作成した「バケット名」を記述
2. fogの設定
gemfile
gem 'fog-aws'
bundle install
app/uploaders/image_uploader.rb
if Rails.env.development? || Rails.env.test?
storage :file
else
storage :fog
end
アプリケーションのルートからconfig/initializers直下に、carrierwave.rbというファイルを作成してください。
config/initializers/carrierwave.rb
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'
CarrierWave.configure do |config|
if Rails.env.development? || Rails.env.test?
config.storage = :file
else
config.storage = :fog
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
region: 'ap-northeast-1'
}
config.fog_directory = 'バケット名'
config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/バケット名'
end
end
3. 環境変数の設定
ec2サーバ
# 本番環境
$ ssh -i [pem鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP]
(ダウンロードした鍵を用いて、ec2-userとしてログイン)
$ sudo vim /etc/environment
# iを押してインサートモードに移行し、下記を追記する。既存の記述は消去しない。
AWS_ACCESS_KEY_ID='ここにCSVファイルのAccess key IDの値をコピー'
AWS_SECRET_ACCESS_KEY='ここにCSVファイルのにSecret access keyの値をコピー'
# 編集が終わったらescapeキーを押してから:wqと入力して保存して終了
AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYは、IAMユーザー作成した際に、DownloadしたCSVファイルにそれぞれ記載があります。
ec2サーバ
# 本番環境
# 編集した環境変数を適用するために一旦ログアウトします。
$ exit
$ ssh -i [pem鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP]
# 環境変数が適用されているか確認しましょう。
$ env | grep AWS_SECRET_ACCESS_KEY
$ env | grep AWS_ACCESS_KEY_ID
4. 自動デプロイ
① GitHubへのpush
②「bundle exec cap production deploy」の実行