XserverのDBをBudibaseで使用するまで
背景
Xserverは外部にSQLを公開する機能がないため、直接接続することができません。そこで、ポートフォワーディングを使用し、SSHトンネル接続を行うことで問題を解決します。
環境
- Xserver: レンタルサーバー
-
Budibase側
- AWS: t2.micro
- Docker: Budibaseのホスティング
方法
BudibaseのDockerコンテナ内部でSSHポートフォワーディングを実行します。前提として、Budibaseをホスティングできている環境が整っていることとします。
手順
1. コンテナへ入る
まず、Webアプリのコンテナを特定するため、以下のコマンドを実行します。
docker ps
すると、次のような表示がされるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20200f858a97 budibase/proxy "/docker-entrypoint.…" 53 seconds ago Up 50 seconds 80/tcp, 10000/tcp bbproxy
cbee044be031 budibase/apps "docker-entrypoint.s…" 53 seconds ago Up 51 seconds 4001/tcp bbapps
597b48847e53 budibase/worker "docker-entrypoint.s…" 53 seconds ago Up 52 seconds 4001/tcp bbworker
今回は bbapps のコンテナを使用するため、以下のコマンドでコンテナに入ります。
docker exec -it bbapps bash
2. OSの確認
コンテナに入ると、次のような表示になります。
8d146fc87543:/app#
どのOSが使われているかを確認するため、以下のコマンドを実行します。
cat /etc/os-release
結果として、Alpine Linux であることが判明しました。
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.21.2
PRETTY_NAME="Alpine Linux v3.21"
3. SSHとautosshのインストール
ポートフォワーディングを行うために ssh
を使用可能にし、また常時 ssh
を維持する autossh
もインストールします。
apk update && apk add --no-cache openssh autossh
4. SSH接続のテスト
ポートフォワーディングの前に、通常の ssh
で接続テストを行います。
※ 事前に docker cp
コマンドなどで 秘密鍵 をコンテナ内にコピーしておくこと。
ssh -i /鍵のパス -p 10022 xserver@ホスト名.xserver.jp
鍵が正しく設定されていれば、SSH接続が成功します。
5. SSHトンネルの作成
次に、以下のコマンドを実行し、Xserverの3306ポートをローカルの3307ポートにトンネル接続します。
autossh -M 0 -N -o ServerAliveInterval=60 -o ServerAliveCountMax=3 \
-L 0.0.0.0:3307:localhost:3306 \
-i /鍵のパス -p 10022 xserver@ホスト名.xserver.jp &
この設定により、
- Xserverの3306ポート が ローカルの3307ポート にマッピングされる
-
0.0.0.0:3307
を開放することで、他のサービスからのアクセスも可能になる
6. Budibaseの設定
最後に、Budibase側で以下の設定を行います。
HOST: localhost
PORT: 3307
加えて、任意で ユーザー名・パスワード・DB名 を入力すれば、正常に接続されるはずです。
まとめ
これで、XserverのデータベースにBudibaseからアクセスできるようになります。AWSのセキュリティ設定でアクセス可能なIPを制限することで、よりセキュアな運用が可能です。