railsの本番サイトのデータベースを別サーバーで行うための方法
今回やりたいことです。
- app/dbサーバーを分けて運用する
そんなの当たり前だろ!って感じですが、デプロイするときに詰まったので、忘れないために書いておきます。
なお、今回のお話はmysqlでの運用にしておりますが、他のデータベースでも同じ感じでいけると思います。
mysqlでリモートの接続を許可する
こんな設定あるとは知りませんでした。
言われてみれば、どこからでもデフォルトでアクセスできるのは、危険としか言いようがありません。
/etc/mysql/mysql.conf.d/mysqld.cnf
ファイルから、mysqlの設定を変更します。
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log # By default we only accept connections from localhost # bind-address = 127.0.0.1 bind-address = xxx ←ここをmysqlがあるサーバーのIPアドレスにする # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0
これでmysql -h IPアドレス -u hoge -p
でアクセスできるようになります。
補足
ただし、この場合は全世界に解放されている状態なので、最低でもDBサーバーにアクセスする場所からしか入れないようにしましょう。
AWSの場合はセキュリティグループがあるので、port:3306
へのアクセスはIPアドレスで制限しましょう。
ファイアーウォールでもそういう設定はできるでしょう。
database.ymlの設定
production: <<: *default host: xxx ←IPアドレスを環境変数で設定しておきましょう ...
mysql userの作成
deployするとmysqlのユーザーはhoge@localhost
ではなく、hoge@IPアドレス
でアクセスします。
なので、それに沿ってユーザーを作成しましょう。
- ユーザー作成
- 権限設定
create user {user名}@IPアドレス identified by {パスワード} -- ユーザー作成 grant all on foo_db.* to {user名}@IPアドレス identified by {パスワード};
この辺を注意して作成します。
以上です。
やってる内容は普通なのですが、意外に詰まってしまった。