13.EC2でのデータベースの設定
まずは PostgreSQL をインストールします。
$ sudo su -
$ yum -y install postgresql94 postgresql94-server postgresql94-devel postgresql94-contrib postgresql94-docs
$ /etc/init.d/postgresql94 initdb
[起動]
$ /etc/init.d/postgresql94 start
設定ファイルを編集します。
$ vi /var/lib/pgsql94/data/postgresql.conf
三番目のトピックにある、listen_addressesのコメントを解除(先頭の#を削除)して、設定を'localhost'から'*'に編集してください。
#------------------------------------------------------------------------------
# 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)
認証設定の編集
$ vi /var/lib/pgsql94/data/pg_hba.conf
このファイルの最下部に、以下を追記します。
local all all trust
host all all 0.0.0.0/0 md5
また、同ファイルの下の部分を以下のようにコメント化します
# "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 ←コメント化する
編集が終了したら再起動させます。
$ /etc/init.d/postgresql94 restart
次に、postgresというユーザー名で、PostgreSQLへ接続します。
$ psql -U postgres
次に、アプリのconfig/database.ymlに書いてあるproduction設定のusername、database名を使ってロールとデータベースを登録します。
postgres=# CREATE ROLE "ロール名" WITH SUPERUSER LOGIN;
postgres=# CREATE DATABASE "データベース名";
作業が終了したら、PostgreSQLとの接続を解除
postgres=# \q
最後にPostgreSQLを再起動してOK。
14.Nginx(エンジンエックス)Webサーバ、Unicorn(ユニコーン)アプリケーションサーバの環境整備
Nginxのインストール
EC2からrootユーザーに入って、Nginxをインストール
$ sudo su -
$ yum -y install nginx
$ chkconfig nginx on
以下のコマンドでNginxが起動
$ /etc/init.d/nginx start
これでEC2のIPアドレスをブラウザのアドレスに記述すれば、Nginxのページが表示されます。
15.デプロイツール(Capistrano)を使ってデプロイ
公開鍵を作成してGithubに設置する
$ sudo su app # app userに切り替わっていない場合のみ実行
$ cd # ホームディレクトリにいない場合のみ実行
$ ssh-keygen -t rsa # 公開鍵秘密鍵のペアを作成
入力画面が出てきたら全てエンターでOK。
$ cat ~/.ssh/id_rsa.pub
コピーした公開鍵を、Githubのsettingにて設置すれば、EC2とGithub間でSSH接続ができるようになります。
アプリ公開用ディレクトリを作成
EC2上に、アプリ公開用のディレクトリを新規作成します。
今回はwwwを公開用ディレクトリの名前として作成。
$ sudo mkdir wwwを管理者権限で実行しwwwフォルダを作り、
$ sudo chown -R app:app wwwでapp userに権限を与え、
$ cd /var/wwwでディレクトリに移動するながれになります
$ cd /var
$ sudo mkdir www
$ sudo chown -R app:app www
$ cd /var/www
Gemfile編集
gem 'dotenv-rails' # 開発環境で環境変数を操作するのに必要
gem 'unicorn' # アプリケーションサーバのunicorn
gem 'mini_racer', platforms: :ruby # デプロイ時に必要
group :development, :test do
gem 'capistrano', '3.6.0' # capistranoのツール一式
gem 'capistrano-bundler'
gem 'capistrano-rails'
gem 'capistrano-rbenv'
gem 'capistrano3-unicorn'
# 以下省略
end
# 以下省略
Capfileの作成、編集
$ bundle exec cap install でファイル作成
Capfileに以下の内容を追記
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rbenv'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano3/unicorn'
デプロイ先のサーバ情報、アクセスキー情報を設定
/config/deploy/production.rb
server 'EC2のIPアドレス', user: 'app', roles: %w{app db web}
set :ssh_options, keys: 'ローカルの秘密鍵へのpath'
config/deploy.rbを開き、すべて以下に上書き
# config valid only for current version of Capistrano
lock '3.6.0'
# デプロイするアプリケーション名
set :application, 'achieve'
# cloneするgitのレポジトリ
# (xxxxxxxx:ユーザ名、yyyyyyyy:アプリケーション名)
set :repo_url, 'https://github.com/xxxxxxxxx/yyyyyyyyy'
# deployするブランチ。デフォルトはmasterなのでなくても可。
set :branch, ENV['BRANCH'] || 'master'
# deploy先のディレクトリ。
set :deploy_to, '/var/www/achieve'
# シンボリックリンクをはるフォルダ・ファイル
set :linked_files, %w{.env config/secrets.yml}
set :linked_dirs, %w{log tmp/pids tmp/cache tmp/sockets public/uploads}
# 保持するバージョンの個数(※後述)
set :keep_releases, 5
# Rubyのバージョン
set :rbenv_ruby, '2.5.1'
set :rbenv_type, :system
# 出力するログのレベル。エラーログを詳細に見たい場合は :debug に設定する。
# 本番環境用のものであれば、 :info程度が普通。
# ただし挙動をしっかり確認したいのであれば :debug に設定する。
set :log_level, :info
namespace :deploy do
desc 'Restart application'
task :restart do
invoke 'unicorn:restart'
end
desc 'Create database'
task :db_create do
on roles(:db) do |host|
with rails_env: fetch(:rails_env) do
within current_path do
execute :bundle, :exec, :rake, 'db:create'
end
end
end
end
desc 'Run seed'
task :seed do
on roles(:app) do
with rails_env: fetch(:rails_env) do
within current_path do
execute :bundle, :exec, :rake, 'db:seed'
end
end
end
end
after :publishing, :restart
after :restart, :clear_cache do
on roles(:web), in: :groups, limit: 3, wait: 10 do
end
end
end
。。つづく