2021年1月10日日曜日

WindowsでphpMyAdminを使う+多段SSHポートフォワードでDBのポートが通るようにする

サーバーサイドは本番環境は自分は作らず、試作や検証目的のことが多いので、
データベースは1つのVPS上にMariaDB+Webサーバ&phpMyAdminの環境を構築して
SSHポートフォワードで直接サーバ内のphpMyAdminを開いてSQLを投げていたのですが、
たまに本番環境のDBも時折直接編集する必要が出てきて、
Amazon AWS VPC内にあるRDSを多段踏み台経由で操作する必要ができました。
接続の構成としてはこんな感じ。

ひとまずRLoginで多段踏み台経由でRDSと接続するポートをSSHポートフォワーディング、
やはりGUIで操作したいのでMySQL Workbenchを使ってやっていたのですが、
phpMyAdminのほうが慣れていてやっぱり使いやすいよなということで、
ローカルにphpMyAdmin環境を構築し、リモートDBを参照できるように設定してみました。
結果はうまくいっていつもどおりphpMyAdminからRDSを操作できています。
ぱっと調べてもコピペで動くページが見つからなかったので手順をまとめておきます。

構成:
OS: Windows 10(x64) WSLも使わないしあんまりバージョンは問わない
Webサーバ: nginx version: nginx/1.19.6
php: PHP 8.0.0 (cgi-fcgi) (built: Nov 24 2020 22:02:53)
ターミナル: RLogink (x64) Version 2.25.6 (2020/12/09)
phpMyAdmin: 5.0.4

多段SSHポートフォワードでSQL用のポートが通るようにする
RLoginをダウンロード
Tera termのスクリプトとかでもできるみたいなんですが、
RLoginならGUIで全部設定できるので最近は結構使っています。
少しスクロールしたところに、GitHubからダウンロード、実行プログラム…
という項目があります。
64bit Windows 10なのでrlogin_x64.zipをダウンロードしました。
インストーラではなく解凍したところにいきなり実行ファイルがあるので、
適当な場所へ移動しておいたほうがいいと思います。

起動するとServer Selectというダイアログが出るので、新規をクリック

まずはエンドポイントとなる踏み台の接続情報を埋めていきます。
ホスト名に踏み台のホスト名あるいはIPアドレスを入力
ユーザー名に接続ユーザー名、パスワードログインが可能ならパスワード
鍵認証の場合は、SSH認証鍵ボタンで鍵ファイルを選択
エントリー欄にわかりやすい名前(踏み台1など)をつけておく

プロトコル項目のポートフォワードをクリック

新規をクリックしてSSH2ポートフォワード設定ウインドウで
Local Socksを選択
Host: localhost、Port: 11022(任意)
でOK

一旦つないでみて、SSH接続できたら踏み台1の設定はOK。
VPC内にあるDB接続用踏み台の接続プロファイルを作成
再びServer Selectウインドウで新規をクリック

右上にあるタブ(上)、前接続先(下)の下のプルダウンで
先ほど作成した接続プロファイルを選択

IPアドレス(Host名)、ユーザー、認証情報を入力
プロキシ設定ボタンでSelect Proxy Protocol: SOCKS5を選択
Server OptionでProxy Server Address: localhost
Socket Portを先ほど設定したポート 11022に設定してOK

プロトコル→ポートフォワードウインドウを開く
Listened: Local、 Host:localhost、 Port: 13306(任意)
Connect: Host: RDSのIPアドレス、 Port: 3306
に設定してOK

Server Selectに戻り、踏み台2のほうに接続すると、
自動的に多段SSH接続してくれて、RDSのポートも通るようになる。

Nginx+phpMyAdminを使えるようにする
上記手順でlocalhost:13306でRDSと接続できるようになったので、
phpMyadminをセットアップ。

Nginxをダウンロード
nginx/Windows-1.19.6 を選びました。解凍してC:\nginxに移動しました。

phpをダウンロード
x64 Non Thread Safe のZipをダウンロードしました。解凍してC:\phpに移動しました。

phpMyAdminをダウンロード
右側にDownloadってリンクボタンがあります。
解凍して、C:\nginx\html\phpmyadminに移動しました。

C:\nginx\conf\nginx.confをエディタで開き、
location ~\.php$...の部分のコメントアウトを外して有効にして、
SCRIPT_FILENAMEの行を修正します。

        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

とりあえずphpが動くようになったか確認してみます。
C:\nginx\html\phpinfo.phpに以下の内容のファイルを保存します。

<?php
phpinfo();
?>

Nginxとphp-cgiの起動スクリプトを作成します。
C:\nginx\run.batに以下の内容のファイルを保存します。

start nginx.exe
start C:\php\php-cgi.exe -b 127.0.0.1:9000

停止用スクリプトも作成します。
C:\nginx\stop.batに以下の内容のファイルを保存します。

  nginx -s stop
  taskkill /F /IM php-cgi.exe

run.batを実行して、
http://localhost/phpinfo.php
を開いて、
phpinfoが正常表示できれば準備完了です。
停止するときはstop.batを実行すればphp-cgiとnginxが停止します。


phpMyAdminの設定を行います。
C:\nginx\html\phpmyadmin\config.sample.inc.phpをコピーして、同じフォルダにconfig.inc.phpとして保存します。
内容を以下のように編集します。

  $cfg['Servers'][$i]['host'] = 'localhost';
  $cfg['Servers'][$i]['port'] = '13306';

ポートフォワードでローカルホストの13306でRDSと接続できるようにしたので、
host: localhost、port: 13306にします。
portの項目がない場合は行を追加すればOKです。
コメントアウトされている場合はコメントアウトを解除して設定を有効にしてください。
保存して、
http://localhost/phpmyadmin/index.php
を開くとphpMyAdminが開きます。
RDSの接続情報を入れればRDSをphpMyAdminで操作できます。



0 件のコメント:

コメントを投稿