(この記事は続きです)
なんだか結構苦労したので、自分の整理のためにも記事におこしました。
初学者でポートフォリオをとりあえず公開したい方は参考になるかもしれません。
完成図
Ruby 2.5.1
Rails 5.2.0
MySQL 5.7
全部で3記事あります。
(1)開発環境構築編 https://qiita.com/obr-note/items/a923e7acf77652a6994e
(2)AWSコンソール画面編 https://qiita.com/obr-note/items/f897762b831b6f3c273c
(3)デプロイ編 この記事
ローカル作業
### docker-compose.ymlファイル修正
ローカルのターミナルで作業します。
$ cd ~/project/webapp
$ 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/webapp
- public-data:/var/www/webapp/public
- tmp-data:/var/www/webapp/tmp
- log-data:/var/www/webapp/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/webapp/public
- tmp-data:/var/www/webapp/tmp
ports:
- 80:80
depends_on:
- app
volumes:
public-data:
tmp-data:
log-data:
db-data:
GitHubへPush
githubにレポジトリを作成して、コードをpushしておきます。
レポジトリがprivateだと、後でgit cloneするとき面倒なので、publicにしておきます。
セキュリティ的なことはよく知らないです。
https://github.com/
$ cd ~/project/webapp
$ git add .
$ git commit -m 'modified docker-compose.yml'
$ git remote add origin https://github.com/ユーザー名/webapp
$ git push origin master
EC2での作業
$ ssh -i ~/.ssh/webapp-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/webapp-ec2.pem ec2-user@xxx.xxx.xxx.xxx
[ec2]$ docker info
なんかいろんな情報が出てくればOKです。
docker-composeをインストール
[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でデータベース作成とユーザーへ権限付与
[ec2]$ mysql -u admin -p -h webapp-db.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com # RDSのエンドポイント
Enter password: admin_password
mysql> create database webapp_production;
mysql> create user db_user identified by 'db_password';
mysql> grant all privileges on webapp_production.* to db_user@'%';
mysql> quit
GitHubからコードをクローンする
[ec2]$ sudo yum -y install git # gitをインストール
[ec2]$ cd /var/www
[ec2]$ git clone https://github.com/ユーザー名/webapp.git
データベースのアクセス情報を書き換え
(簡単にするために、この記事では直接書き込んでいます。セキュリティとかに問題があるらしいので、環境変数とか使うらしいです。知らないです。)
[ec2]$ cd /var/www/webapp
[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: webapp_development
test:
<<: *default
database: webapp_test
production:
<<: *default
host: webapp-db.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com # RDSのエンドポイント
database: webapp_production
username: db_user
password: db_password
Dockerイメージの作成
[ec2]$ cd /var/www/webapp
[ec2]$ docker-compose build # 数分かかります
[ec2]$ docker images
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アドレスにブラウザからアクセスしてみてください。
※ SSH認証していないので、http://xxx.xxx.xxx.xxxとなります。https://は使えません。