0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWSを使ってホームページを公開するまで。

Last updated at Posted at 2019-10-23

 AWSで新規プロジェクトを立ち上げようとしたらよくわからない不具合で止まったのでその全貌のメモ。

11月10日
追記:ついに解決しました。が、原因等は不明なのでこれからも原因究明に尽力します。

1 AWSでアカウントを作る。

 リージョンは東京。
 別の地域、特に現在地から遠いところだと最大0.1秒程度のラグが出るらしい。

2 EC2インスタンス立ち上げ。

  • EC2を起動
  • キーペア作成
  • インスタンスIDをコピーしてメモしとく
  • Elastic IPとインスタンスIDを関連付ける
  • セキュリティグループを開いてポートの開放
  • インバウンドタブを開いて編集
  • ルールの追加
  • HTTPを選択して保存
terminal
$ cd
$ mv Downloads/XXX.pem  .ssh/
$ cd .ssh/
$ chmod 600 XXX.pem
$ ssh -i XXX.pem ec2-user@Elastic IP

 これでSSH接続完了。

  [ヒント]

terminal
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

 上記のようなエラーが出た場合は、

  1. ターミナルをいったん閉じる。
  2. Terminal -> Preferences -> Profiles -> Advanced
  3. 最下部の Set locale environment variables on startup のチェックを外す。
  4. もう一度SSH接続し直す。

 これで改善される。

3 環境づくり

 まずパッケージのアップデートを行う。

terminal
$ sudo yum update

 次に一度に必要なものをインストール。

terminal
$ sudo yum install \
git make gcc-c++ patch \
libyaml-devel libffi-devel libicu-devel \
zlib-devel readline-devel libxml2-devel libxslt-devel \
ImageMagick ImageMagick-devel \
terminal
$ sudo yum install -y openssl-devel

Node.jsをインストール

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

rbenvとruby-buildをインストール

terminal
$ git clone https://github.com/sstephenson/rbenv.git ~/.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
$ rbenv rehash
$ rbenv install X.X.X
$ # これはかなり長くかかる場合もあるので痺れを切らせて閉じたり変な入力をしないように!
$ rbenv global X.X.X
$ rbenv rehash
$ ruby -v
$ # 入れたバージョンと同じなら問題なし。

MySQLのインストール

 今回は5.6を入れる。

terminal
$ sudo yum install mysql56-server mysql56-devel mysql56
$ sudo service mysqld start
$ sudo service mysqld status
$ # ここで running と出れば大丈夫。
$ sudo /usr/libexec/mysql56/mysqladmin -u root password 'XXXpasswordxxx'
$ mysql -u root -p
$ # パスワードを入れて問題なければ quit で終了。

SSH鍵ペアを作る

terminal
$ ssh-keygen -t rsa -b 4096
$ cat ~/.ssh/id_rsa.pub
$ # これで出てきた文字列をコピーする。
  • GitHubのhttps://github.com/settings/keysに行く。
  • New SSH key を押してタイトルを入れ、keyのところに先ほどコピーした文字列を入力する。
terminal
$ ssh -T git@github.com

##unicorn導入

gemfile
group :production do
  gem 'unicorn', '5.4.1'
end

 config/unicorn.rb を作成。

config/unicorn.rb
app_path = File.expand_path('../../', __FILE__)
worker_processes 1
working_directory app_path
pid "#{app_path}/tmp/pids/unicorn.pid"
listen 3000
stderr_path "#{app_path}/log/unicorn.stderr.log"
stdout_path "#{app_path}/log/unicorn.stdout.log"
timeout 60
preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true
check_client_connection false
run_once = true
before_fork do |server, worker|
 defined?(ActiveRecord::Base) &&
   ActiveRecord::Base.connection.disconnect!
 if run_once
   run_once = false # prevent from firing again
 end
 old_pid = "#{server.config[:pid]}.oldbin"
 if File.exist?(old_pid) && server.pid != old_pid
   begin
     sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
     Process.kill(sig, File.read(old_pid).to_i)
   rescue Errno::ENOENT, Errno::ESRCH => e
     logger.error e
   end
 end
end
after_fork do |_server, _worker|
 defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end

 と入力する。

terminal
$ sudo mkdir /var/www/
$ sudo chown ec2-user /var/www/
$ cd /var/www/
$ git clone リポジトリURL
$ # このリポジトリURLは各リポジトリを選択した際に右のほうに出る clone or download という緑色のボタンのところに出る。

gemのインストール

terminal
$ cd /var/www/リポジトリ名
$ # 以降はこのディレクションで作業する
$ ruby -v

 ローカルでの開発環境で bundler のバージョンを確認。

local_terminal
$ bundler -v
terminal
$ gem install bundler -v X.X.X
$ # 先ほど確認したバージョンのものを入れる。
$ bundler install
$ # この作業もかなり時間がかかる場合がある。

環境変数の設定

terminal
$ rake secret
$ # これで表示された文字列をコピーしておく。
$ sudo vim /etc/environment
$ # 入力後に i を押してインサートモードにし、

DATABASE_PASSWORD='MySQLのパスワード'
SECRET_KEY_BASE='さっきの文字列'

 入力後は esc を押した後に :wq で保存して終了。

  [ヒント]
 :q!で保存せずに終了。
 出られなくなったりめちゃくちゃになった時はこれ!

 その後 exit でいったんログアウトする。

terminal
$ env | grep SECRET_KEY_BASE
$ env | grep DATABASE_PASSWORD

 これで現在の環境変数を確認できる。
 セキュリティグループを選択してインバウンドタブの編集から、
 カスタムTCP、3000番ポートを開放する設定を追加。

4 データベースを作る

config/database.yml
production:
  <<: *default
  database: XXX
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock

 変更を加えた時は必ず

termianl
$ git pull origin master

 をする。

 そして現在(2019/10/23)の問題点……

terminal
$ rails db:create
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Couldn't create 'XXX_development' database. Please check your configuration.
rails aborted!
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
/var/www/XXX/bin/rails:9:in `<top (required)>'
/var/www/XXX/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

 以前まではこれで普通にデータベースを作れていたのだが、
 何故か今回このような表示が出てデータベースが作れなくなってしまった。
 エラー画面を元に様々な解決法を検索して試してみたが、
 (2)が別の数字に変わるだけで依然進展せず、
 インスタンスをかれこれ3回も初めからやり直すことに……

 解決法が分かり次第更新するが、もしこれを見て解決法が分かりそうな方は是非お力を貸していただきたいです!

 (2019/11/10)問題解決!

 ついに問題が解決するも原因不明。
 一応解決方法を記載するが対策に関しては随時調査続行。

 とりあえずの解決方法は、

config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock

development:
<<: *default
database: XXXXXX_development

test:
<<: *default
database: XXXXXX_test

production:
<<: *default
database: XXXXXX_production
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock

 このように database.yml を編集すれば rails db:create でデータベースを作れる。
 解決するにあたって teratail を活用させていただきました。回答いただいたお二人には何とお礼を申せばいいやら……

 しかし何故他のプロジェクトでは <%= ENV['DATABASE_PASSWORD'] %> で問題がなかったのに今回はできなかったのか……もしわかる方がいらっしゃったら是非お力添えいただきたいです。

 とりあえずここにくるまでの道のりで学んだことも記載します。

terminal
$ whoami
$ # 現在の自分自身が何というユーザーかを表示する。


$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.45 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT USER(); 
$ # MySQL にログインしているユーザーを表示する。


$ ls /XXX/
$ # ディレクションがどうなっているかリストアップする。ls の横に -l を入れると詳しい情報も出る。 

 続き

terminal
$ rails db:create
$ rails db:migrate
$ unicorn_rails -p 3000
$ # http://Elastic IP:3000/ に接続が確認できたら一度落とす。
$ rails assets:precompile

 ところが
 何とここでどうあがいても This site can’t be reached になってしまうという問題発生。ログを見てもどうしてダメなのか不明。
 またしても暗礁に乗り上げてしまう……

 2019年11月12日解決!

terminal
$ unicorn_rails -p 3000

 何故かは不明ですがポートを指定すると接続できました。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?