トンネル

先日ですが、仮想マシンだとローカルのDBの疎通面倒臭そうだし、そもそもDBのダウンロード面倒だし、サーバー借りてるんだし、借りてるサーバーのDB使おうと思って、さくらVPSをリモートのDBサーバにして、Laravelの開発をやろうと考えました。同じこと考えている人がいたら、この数十倍面倒臭いので、やめておいた方が良いです。

記事の対象者
  • 仮想コンテナ一台からリモートDBに繋げれば良いと考えてる人
  • SSHトンネルを利用して、リモートのDBに繋ぎたいと考えてる人

ip許可してDB疎通を可能にする方法もあります。

目指したかったこと

やりたかったことを物凄く簡略化したExcelで作った図が下です。

Dockerコンテナが2つあって、それぞれをリモートDBに繋ぎたかったんです。

アプリケーション動かす用のサーバーとテストコード動かす用のサーバーがホストマシンWindowsのDockerのコントロール下で動いています。この両方から、さくらVPSのDBに接続したかったのですが、テストサーバーからさくらVPSに接続することができませんでした。図の(PHP)って書いてあるサーバーです。理由はよくわかりませんが、都度都度Dockerを起動してるからかなと思いました。テストの環境の詳細は、下記記事をご覧ください。

図の中のAPP(アプリケーション動かす用のサーバー)だけは繋がったので、つなぎ方を記述していきます。

SSHのトンネルを確立する

トンネルを掘りますが、仮想マシンから接続したい場合、仮想マシンからトンネルを掘ってやらないとダメということです。ホストOSでトンネルを掘っても仮想マシンから繋ぐことができません。

ssh -i ~/.ssh/key.pem -p 1234 -N -L 13306:127.0.0.1:3306 user@domain.com

コマンドについてですが、私はこれを、ローカルホストのポート13306に送られた命令を任意のサーバーのポート3306へsshで転送してくれるコマンドという風に認識しています。このコマンド成功してもコンソール上に何もでないので、安心してください。「ばっちり確立中!」とかいって出てくれたらいいなと思ってます。

でこれは、Laravelから接続したかったので、LaravelのENVファイルのDBのところはこうなります。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=13306
DB_DATABASE=*****
DB_USERNAME=*****
DB_PASSWORD=*****

みたいな感じで書いておくと、DBとの疎通ができるようになります。

他に試したこと

以上がリモートDBへの接続する為のトンネルの作り方になるのですが、自分はテストコード実行用のサーバーがリモートDBに繋がらなかったので、踏み台サーバーの設置を試しました。

踏み台サーバーをDB情報に書いて接続する作戦

踏み台用のコンテナを1個作って、そのコンテナからDBへのトンネルを確立しSQLを受け付けて貰おうと思い、試しました。ネットワークを作成し、ncコマンドでコンテナ間の疎通を確認し、トンネルを作成しましたが、上手く行くことはありませんでした。

やり方が悪いだけかもしれませんが、結局ローカルに仮想DBを持たすことにしました。これが手間だと最初思ってたんですが、リモートのDB使う方がよっぽど手間でした。リモートDB使えた方がメリットは多いと思っています。皆さんがんばってください。もう僕は疲れました…。

スポンサーリンク

この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでフォローしよう

おすすめの記事