本シリーズ集
タイトル | |
---|---|
0 | 目標・やりたいこと |
1 | AWS編 |
2 | rails開発環境構築編 |
3 | Nginx・MySQL編 |
4 | Capistrano編 |
5 | CircleCI編 |
6 | 総集編 |
#はじめに | |
Nginx・MySQLを分けると、短くなってしまうため、本記事では二つをまとめる。 | |
まずはNginxから。 |
#Nginxとは
Webサーバ用ソフトウェアの一つ。
Webサーバといえば、Nginx と Apache の二代巨頭なイメージ(がないですか?)。
今回は、このNginxをDockerfileを用いて構築する。
#ディレクトリ構成
/nginx
├ public
| ├ 404.html
| ├ 422.html
| └ 500.html
├ nginx.conf
└ Dockerfile
publicディレクトリ配下は、rails new
コマンドにより生成されたファイル群の一部抜粋したものである。(この404.html
とかのファイルは特別いるわけでもないが、rails側と通信できなかった時にエラーページを表示するためのものである。
###Dockerfileの中身
FROM nginx:latest
RUN rm -f /etc/nginx/conf.d/*
COPY ./public /public
COPY nginx.conf /etc/nginx/conf.d/nginx.conf
# /conf.d/ディレクトリ配下の設定ファイルを読み込む設定になっているので、(元を確認してないので、もしかしたら0かもしれない。)
# それらを一度全部削除して、新たに作成したファイルを入れる
CMD nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
###nginx.conf ファイルの中身
server {
listen 80;
# ドキュメントルートの指定
root /public;
error_page 404 /404.html;
error_page 505 502 503 504 /500.html;
location / {
try_files $uri @app;
}
# # リバースプロキシ関連の設定
location @app {
proxy_pass http://xx.xx.xx.xx:3000;
# 対象APサーバを持つEC2インスタンスの、プライベートIPアドレスとポートを指定する
}
}
これで、準備OK。
Webサーバを起動してみる。
EC2インスタンスに、sftp
コマンドにより、ファイル群をアップロードした後、ssh
コマンドでEC2にアクセスし、
# docker build -t test-nginx .
# docker run -p 80:80 test-nginx
(このまま見た目は止まる)
とすると、起動する(見た目では分かりにくいけど)。
ローカルブラウザから、アクセスしてみる
ローカルブラウザで、http://IPアドレス/
とうち、アクセスしてみると、
と出るので、きちんとWebサーバが立っていることがわかる。
MySQL
MySQLのDockerfileはない。docker pull
コマンドでMySQL:5.7
をpullし、それをrunコマンドで走らせて終了。
sshキーでアクセスし、各種コマンドを打つ。
$ ssh -i 【鍵のPATH】 ec2-user@xx.xx.xx.xx
[ec2-user@ip-xx-xx-xx-xx ~]$ sudo service docker start
[ec2-user@ip-xx-xx-xx-xx ~]$ docker pull mysql:5.7
[ec2-user@ip-xx-xx-xx-xx ~]$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --rm mysql:5.7
...
...
Version: '5.7.32' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
これでおしまい!
まとめ
さら〜っとこんな感じでやればできます〜って感じで書いてますけど、実際には(主にWeb-AP間の連携の部分で)この作業周りでまる1日かかった笑。
特に最後の画像のエラーがどうしても修正できなくて、めちゃくちゃ迷いました。なんでMySQL5.7を使用しているかも含めて、また後日この話は別の記事であげたいと思います。