(この記事は続きです)
下記記事を参考にさせていただき、dockerで環境構築してデプロイまでもっていきました。
多分何度も作り直すことになると思ったので、コピペするだけでスムーズに作れるように
バージョン情報を自分用に合わせて記事に残させていただきました。
(少し補足している箇所もあります)
▼参考にさせていただいた記事▼
バージョン情報
Ruby 3.0.0
Rails 6.1.4
MySQL 5.7
Nginx 1.19.10
前提
AWSにアカウント作成済
docker hubにアカウント作成済
docker インストール済
ローカル作業
docker-compose.ymlファイル修正
ローカルのターミナルで作業します。
$ cd ~/project/remote-work-space
$ vim docker-compose.yml
データベースはRDSを使うので、コメントアウトします。
version: "3"
services:
app:
build:
context: .
env_file:
- ./environments/db.env
# command: bundle exec puma -C config/puma.rb
command: bundle exec rails server -e production
volumes:
- .:/var/www/remote-work-space
- public-data:/var/www/remote-work-space/public
- tmp-data:/var/www/remote-work-space/tmp
- log-data:/var/www/remote-work-space/log
# depends_on:
# - db
# db:
# image: mysql:5.7
# env_file:
# - ./environments/db.env
# volumes:
# - db-data:/var/lib/mysql
web:
build:
context: containers/nginx
volumes:
- public-data:/var/www/remote-work-space/public
- tmp-data:/var/www/remote-work-space/tmp
ports:
- 80:80
depends_on:
- app
volumes:
public-data:
tmp-data:
log-data:
db-data:
GitHubへPush
githubに「remote-work-space」というレポジトリを作成して、コードをpushしておきます。
レポジトリがprivateだと後でgit cloneするとき面倒なので、publicにしておきます。
https://github.com/
$ cd ~/project/remote-work-space
$ git add .
$ git commit -m 'modified docker-compose.yml'
$ git remote add origin https://github.com/ユーザー名/remote-work-space
$ git push origin master
EC2での作業
EC2のパブリックIPv4アドレスをコピーしておきます。
SSH接続します。
$ ssh -i ~/.ssh/remote-work-space-ec2.pem ec2-user@xxx.xxx.xxx.xxx # EC2のパブリックIPv4アドレス
DockerをEC2にインストール
[ec2]$ sudo yum install -y docker
[ec2]$ sudo service docker start
[ec2]$ sudo usermod -G docker ec2-user
[ec2]$ exit
$ ssh -i ~/.ssh/remote-work-space-ec2.pem ec2-user@xxx.xxx.xxx.xxx
[ec2]$ docker info
なんかいろんな情報が出てくればOKです。
Node.jsとyarnのインストールをEC2にインストール
▼参考記事
docker-composeをEC2にインストール
[ec2]$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[ec2]$ sudo chmod +x /usr/local/bin/docker-compose
[ec2]$ docker-compose -v
フォルダ作成
[ec2]$ sudo mkdir -p /var/www
[ec2]$ sudo chown ec2-user:ec2-user /var/www # 現ユーザーに権限付与
MySQLでデータベース作成とユーザーへ権限付与
RDSのエンドポイントをコピーしておきます。
[ec2]$ mysql -u admin -p -h remote-work-space-db.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com # RDSのエンドポイント
Enter password: admin_password
mysql> create database `remote-work-space_production`;
mysql> create user db_user identified by 'db_password';
mysql> grant all privileges on `remote-work-space_production`.* to db_user@'%';
mysql> quit
GitHubからコードをクローンする
[ec2]$ sudo yum -y install git # gitをインストール
[ec2]$ cd /var/www
[ec2]$ git clone https://github.com/ユーザー名/remote-work-space.git
データベースのアクセス情報を書き換え
(簡単にするために、この記事では直接書き込んでいます。セキュリティに問題があるので、環境変数を使ったほうがいいと思います。)
[ec2]$ cd /var/www/remote-work-space
[ec2]$ vim config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILES_MAX_THREADS") { 5 } %>
username: <%= ENV.fetch("MYSQL_USER") { 'root' } %>
password: <%= ENV.fetch("MYSQL_PASSWORD") { 'password' } %>
host: db
development:
<<: *default
database: remote-work-space_development
test:
<<: *default
database: remote-work-space_test
production:
<<: *default
host: remote-work-space-db.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com # RDSのエンドポイント
database: remote-work-space_production
username: db_user
password: db_password
Dockerイメージの作成
[ec2]$ cd /var/www/remote-work-space
[ec2]$ docker-compose build # 数分かかります
[ec2]$ docker images
注意
$ docker-compose buildの結果、下記エラーが出ることがある。
Building app
Traceback (most recent call last):
File "site-packages/docker/utils/build.py", line 96, in create_archive
PermissionError: [Errno 13] Permission denied: '/var/www/remote-work-space/config/master.key'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "bin/docker-compose", line 6, in <module>
File "compose/cli/main.py", line 71, in main
File "compose/cli/main.py", line 127, in perform_command
File "compose/cli/main.py", line 287, in build
File "compose/project.py", line 386, in build
File "compose/project.py", line 368, in build_service
File "compose/service.py", line 1084, in build
File "site-packages/docker/api/build.py", line 159, in build
File "site-packages/docker/utils/build.py", line 31, in tar
File "site-packages/docker/utils/build.py", line 100, in create_archive
OSError: Can not read file in context: /var/www/remote-work-space/config/master.key
[20367] Failed to execute script docker-compose
sudo chmod 644 /var/www/remote-work-space/config/master.key
その場合は、上記コマンドで当該ファイルの権限を変更すればOK。
credentials.yml.encの設定
ちゃんと理解はできていませんが、credentials.yml.encファイルを消して開いて閉じます。
これで、作成されたmaster.keyと対応するらしいです。
[ec2]$ rm config/credentials.yml.enc
[ec2]$ docker-compose run -e EDITOR="vim" app bundle exec rails credentials:edit
(特に何も編集せずに、保存して閉じる(:wq) ←これを使う)
マイグレーション
[ec2]$ docker-compose run app bundle exec rails db:migrate RAILS_ENV=production
プリコンパイル
[ec2]$ docker-compose run app bundle exec rails assets:precompile RAILS_ENV=production
dockerコンテナ立ち上げ
[ec2]$ docker-compose up -d
以上です。
これで本番公開ができます!
EC2のパブリックIPv4アドレスにブラウザからアクセスしてみてください。
※ SSL化していない&ドメイン取得していないので、http://xxx.xxx.xxx.xxx となります。(https://は使えません。)
補足1
アセットパイプラインをクリーンにするコマンド
[ec2]$ docker-compose run app bundle exec rails assets:clobber RAILS_ENV=production
補足2
ローカル環境からgithubにpushをしたら、EC2からpullをする必要がある。
[ec2]$ cd /var/www/remote-work-space
[ec2]$ sudo git pull
※強制的にマージする方法は下記。
[ec2]$ sudo git fetch origin master
[ec2]$ sudo git reset --hard origin/master
▼参考記事▼