🦦

デプロイ(本番環境の準備)[2]

2024/08/12に公開

前回までは、デプロイまでのファイル準備。

ここから、アプリケーションを動かすために必要な
ソフトウェアや、データベース、EC2上で環境構築をしていく。

Mysqlにデータベース作成

EC2へSSHでログインする

EC2へSSHでログインする。
"サーバーで作業するときは、まずSSHでログインする。"

username:~/environment $ ssh -i ~/.ssh/キーペア.pem ec2-user@パブリックIPv4アドレス

EC2からRDSへ接続を確認する

  • RDSを使用している場合でも、EC2インスタンスからRDSに接続するには、
    MySQLクライアントが必要なので、インストールする。
[ec2-user@ip-xx-xx-xx-xx ~]$ sudo yum -y install mysql
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main                                                               | 2.1 kB  00:00:00
amzn-updates                                                            | 2.5 kB  00:00:00
Resolving Dependencies
...
Complete!

MySQLに接続

mysql -u (マスタユーザ名) -p -h (エンドポイント)

[ec2-user@ip-xx-xx-xx-xx ~]$ mysql -u root -p -h rds-mysql-server.xxx.ap-northeast-1.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.22-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, 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>
  • xxxには、エンドポイントを入力する。RDSメニューで確認できる。
  • Enter password:には、自分で設定したパスワードを入力するけど、
    何も入力されていないように見えるけど、入力されているので、大丈夫。

私の場合は、MySQLをインバウンドルールで設定してなかったため、

(ERROR 2003 (HY000): Can't connect to MySQL server on 'rds-mysql-server.clso6gcigv9z.ap-northeast-1.rds.amazonaws.com' (110))
のエラーが出た。

  1. セキュリティグループをSSHとHTTPとは別に設定する。

  2. セキュリティグループを作成をクリック

  3. インバウンドルールを設定
    タイプ : MYSQL/Aurora
    プロトコル : TCP
    ポート範囲 : 3306
    CIDRブロック : EC2のプライベートIPアドレスを入力する/32

  4. ルールを保存

  5. RDSで検索 → データベースクリック → ラジオボタンクリック → 変更

データベースを作成する

mysql> create database アプリケーション名;

で、作成できる。
一度作成したものと同じ名前だと、すでにそのデータベースは存在しています。って言うエラーが表示されてしまう。
(ERROR 1007 (HY000): Can't create database 'inuming'; database exists)
その場合、そのデータベースをそのまま使いたい時は、

mysql> USE アプリケーション名;

にすると、デプロイした時に、データベースがそのまま引き継がれる。

ここまでできたら、MySQLの接続を解除する。exit

ImageMagickをインストール

ImageMagicは画像処理をする為のソフトウェア。

[ec2-user@ip-xx-xx-xx-xx ~]$ sudo yum -y install libpng-devel libjpeg-devel libtiff-devel gcc-c++ git
[ec2-user@ip-xx-xx-xx-xx ~]$ git clone -b 7.1.1-5 --depth 1 https://github.com/ImageMagick/ImageMagick.git ImageMagick-7.1.1-5
[ec2-user@ip-xx-xx-xx-xx ~]$ cd ImageMagick-7.1.1-5
[ec2-user@ip-xx-xx-xx-xx ImageMagick-7.1.1-5]$ ./configure
[ec2-user@ip-xx-xx-xx-xx ImageMagick-7.1.1-5]$ make
[ec2-user@ip-xx-xx-xx-xx ImageMagick-7.1.1-5]$ sudo make install
[ec2-user@ip-xx-xx-xx-xx ImageMagick-7.1.1-5]$ cd
  • ImageMagickを利用する為に必要なパッケージのインストール
  • ImageMagickのファイルをGitHubよりバージョンを指定してclone
  • cloneしたフォルダへ移動
  • 各種チェックを行いmakefileを生成
  • ビルドを行う
  • ビルドされたアプリケーションをEC2の中で使えるようにする
ビルドとは

各種、ソースファイルのコンパイルを実行した上で、コンパイルされた各種ファイルを実行可能な形式にすること。

makefileとは

ビルドを行うための詳細な内容が記載されたファイルのこと

Rubyをインストール

  • EC2には、デフォルトでRubyがインストールされている。
    ただしバージョンが古いため、より新しいバージョンのRubyをインストールする必要がある
[ec2-user@ip-xx-xx-xx-xx ~]$ sudo yum remove -y ruby*

yumコマンドで、旧バージョンのRubyをアンインストールする。
↓ この結果が出力されても問題ないので、無視で良い。 ↓
(No Match for argument: ruby* No Packages marked for removal)

  • 必要なパッケージをインストールする。
[ec2-user@ip-xx-xx-xx-xx ~]$ sudo yum -y install openssl-devel readline-devel

rbenvのインストールに必要なパッケージをインストール

[ec2-user@ip-xx-xx-xx-xx ~]$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
[ec2-user@ip-xx-xx-xx-xx ~]$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
[ec2-user@ip-xx-xx-xx-xx ~]$ sudo ~/.rbenv/plugins/ruby-build/install.sh
[ec2-user@ip-xx-xx-xx-xx ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
[ec2-user@ip-xx-xx-xx-xx ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
[ec2-user@ip-xx-xx-xx-xx ~]$ source ~/.bash_profile

インストール完了。

新しいバージョンのRubyと、Bundlerをインストール

[ec2-user@ip-xx-xx-xx-xx ~]$ rbenv install 3.1.2
[ec2-user@ip-xx-xx-xx-xx ~]$ rbenv global 3.1.2
[ec2-user@ip-xx-xx-xx-xx ~]$ rbenv rehash
[ec2-user@ip-xx-xx-xx-xx ~]$ rbenv exec gem install bundler
  • 完了したら、ruby -vを実行。
[ec2-user@ip-xx-xx-xx-xx ~]$ ruby -v
ruby 3.1.2p62 (2019-04-16 revision 67580) [x86_64-linux]

これが出力されたら、成功。
ruby 3.1.2 の表示だと、最新。
p62のところは、数字が違くても問題ない。

さらに、bundle -vを実行して、Bundlerがインストールされていることも確認する。

[ec2-user@ip-xx-xx-xx-xx ~]$ bundle -v
Bundler version 2.2.3

Railsをインストールする

  • 必要なパッケージをダウンロードする
[ec2-user@ip-xx-xx-xx-xx ~]$ sudo yum -y install patch libyaml-devel zlib zlib-devel libffi-devel make autoconf automake libcurl-devel sqlite-devel mysql-devel

nvmのインストール

cloud9の環境構成に近づけるために行う。

[ec2-user@ip-xx-xx-xx-xx ~]$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
[ec2-user@ip-xx-xx-xx-xx ~]$ export NVM_DIR="$HOME/.nvm"
[ec2-user@ip-xx-xx-xx-xx ~]$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ec2-user@ip-xx-xx-xx-xx ~]$ [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

Node.jsをインストール

Node.jsがないとrailsが動作しない。

[ec2-user@ip-xx-xx-xx-xx ~]$ curl -O https://unofficial-builds.nodejs.org/download/release/v18.17.1/node-v18.17.1-linux-x64-glibc-217.tar.gz
[ec2-user@ip-xx-xx-xx-xx ~]$ tar -xzf node-v18.17.1-linux-x64-glibc-217.tar.gz
[ec2-user@ip-xx-xx-xx-xx ~]$ mkdir -p ~/.nvm/versions/node/v18.17.1-custom
[ec2-user@ip-xx-xx-xx-xx ~]$ mv ~/node-v18.17.1-linux-x64-glibc-217/* ~/.nvm/versions/node/v18.17.1-custom/
[ec2-user@ip-xx-xx-xx-xx ~]$ export PATH=$PATH:~/.nvm/versions/node/v18.17.1-custom/bin/
[ec2-user@ip-xx-xx-xx-xx ~]$ source ~/.bashrc
  • インストールしたNode.jsを使用できるようにする
[ec2-user@ip-xx-xx-xx-xx ~]$ nvm alias default v18.17.1-custom
[ec2-user@ip-xx-xx-xx-xx ~]$ nvm use v18.17.1-custom
  • Node.jsを環境で使用できるようになっているか確認
[ec2-user@ip-xx-xx-xx-xx ~]$ node -v
v18.17.1

yarnをインストールする

[ec2-user@ip-xx-xx-xx-xx ~]$ npm install -g yarn

railsをインストールする

[ec2-user@ip-xx-xx-xx-xx ~]$ gem install rails -v 6.1.4

たくさんのGemがインストールされる。
最後に、数 gem installedと表示されたらオッケー。

  • 最後にrailsのバージョン確認をする。
[ec2-user@ip-xx-xx-xx-xx ~]$ rails -v
Rails 6.1.4

バージョンが表示されたら完了!

これで、railsアプリケーションを動作させるための、環境ができた。

Discussion