つまりなにしたの?
AWS Cloud9からElasticBeanstalkにRailsアプリをデプロイしようとしたら、
・データベース設定
・nginxの設定
の2点でハマったのでその解決方法を書いておくことにした。
後編は上記2点を実行することについて。
前編はこちら
ensekitt.hatenablog.com
Elastic Beanstalkがなにか等はこっちに書いてある。
デプロイしてみたは良いもののエラーが出ていてHello Worldが見られない。
まだ、データベースもないのでエラーが出るし表示はできない。
conflicting server name "localhost" on 0.0.0.0:80, ignored
こんなエラーが出ていたりもする。
(なんかこの順序間違えてるよって感じどうにかならんのだろうか。)
データベースを設定していく
先程のエラー表示が出ている画面の左側にある設定を押してデータベース(RDB)を作っていく。
今回はMySQLでユーザ名とパスワードを設定する。
実験なのでストレージは5gbでアベイラビリティは低のまま。
保存すると設定画面に戻る。
AWS RDBのインスタンスを作ってくれる。
これはかなり時間がかかって辛抱強くYoutubeでも見ながら待つ。
シークレットキーを作成する
Railsで作成できるシークレットキーを環境変数に入れたいので作る。
Cloud9のターミナルで作った。
$ rails secret 0000000000000000000000000000000000000hogehoge00000000000000000000000000000000000000000000000000000000000000000000000
環境変数を設定する
環境変数はDatabase関連とシークレットキー関連。
ちょっと見にくいけど、RDBインスタンスの詳細ページからそれぞれの値を持ってきて埋める。
これで設定の適用を行うと再起動してくれる。
あれ?
僕はここでイケルと思っていたら
conflicting server name "localhost" on 0.0.0.0:80, ignored
が出ていた。普通にNginxのほうで問題があるようで、SSHで見に行ったりしていたら、
Nginxの設定が間違っている様子。
nginxの設定を追記する
.elasticbeanstalk/config.yml
に以下を追記する。
files: "/etc/nginx/conf.d/websockets.conf" : content: | upstream backend { server unix:///var/run/puma/my_app.sock; } server { listen 80; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; server_name ここをホスト名にする # prevents 502 bad gateway error large_client_header_buffers 8 32k; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; # prevents 502 bad gateway error proxy_buffers 8 32k; proxy_buffer_size 64k; proxy_pass http://backend; proxy_redirect off; location /assets { root /var/app/current/public; } # enables WS support location /cable { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } } container_commands: 01restart_nginx: command: "service nginx restart"
デプロイのときにnginxの設定ファイルを更新するようなコード
.ebextensions\nginx_proxy.config · GitHub
をほとんどそのまま使わせてもらった。
デプロイしなおす
$ git add -A $ git commit -am "add nginx config" $ eb deploy
これで、ElasticBeanstalkの再起動が終わると、
ちゃんと表示できた。
やってみてどうだった?
一通りElasticBeanstalkにデプロイするところまでできた。
ベストプラクティスかはわからないけど、公開するところまではこぎつけられた。
便利ではあるものの、正直サービスのバックエンドとしては制限が逆に管理しにくくなっていて、
期間限定の静的サイトとかの使い方しかしなさそう。それならHerokuかなってところもあって厳しい。
ぐぐってみると色々情報が出てくるけど、結構変わっていることもある(AWSのドキュメントもなんか古かったり)
ので、最新の動作例を見つけるのが良さそう。