Dockerで立ち上げたPHPのexec処理でsshが実行できなかった話

2023年10月20日

Docker PHP 日記

eyecatch Docker便利ですよね。 PHPだけじゃなく、色々なプログラム言語が手軽に構築して実行できてしまいます。 もはやこれ無しじゃ仕事もできないし、便利にアプリケーション開発ができません。(個人的に・・・) 以前に作った、Dockerのマルチ言語パックをgithubにアップしたので、よりマルチ言語開発がはかどります。 [Docker] 色々な言語環境を詰め込んだGitパックを作ったよ

仕事トラブル

そんな便利なDockerで、ある時実行できない処理があり、丸一日時間が潰れてしまいました。 とあるお手伝いをしている会社さんの開発をしている時に、その会社さんのサーバーへのアクセスは、ブラウザで特殊なプロキシアクセスをする必要があるので、GoogleChromeの機能拡張「switchy」というのを使ってアクセスをする仕様になっています。 でも、プロキシを立ち上げている状態だと、自宅のグローバルIPがプロキシ先のIPに切り替わってしまうので、切り忘れて別の仕事をしようとすると、IPアクセス制御をされているサーバーに弾かれてしまいます。 忘れずにプロキシを切断すればいいんですが、良く忘れるし、なんとなくめんどくさい。 そもそも、vscodeも、sshアクセスをして開発をしているので、自宅のネットが低速度の時にvscodeも固まってしまうことがたまにある。 ということで、ローカル開発できるように、Dockerでphpを立ち上げてローカルで開発できる環境にしてみた。 ここで最初に問題になったのが、データベースアクセスです。 単純にphpではPDO機能を使って、直接アクセスするという手もあるが、その会社へのサーバーアクセスは、SSHキーを使って特殊ポートでのアクセスが必要でした。 ちょうど先日、mysqlの疑似ポートアクセスをブログに書いたところだったので、それを使えばアクセスできることを思い出した。 [PHP,MySQL] sshトンネル奮戦記 でも、なんかデータベースアクセスできない・・・ 別のサーバーではちゃんと動くのに、何故かローカル環境だけ動かない・・・ なんで??? ちなみに、表示されていたエラーは次の通り。 Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection refused どうやらPDOが正常に動いていないようだ・・・

原因がわかった

MYSQLにアクセスするための、PHPトンネルの方法は、phpのevec()関数を使って、sshを実行するという手段です。 DockerにインストールされているPHPモジュールにsshがインストールされていないために、実行してもエラーでトンネル処理が確率できていませんでした。 なんだか、Dockerと自分の作ったsshトンネル処理を過信していたので、思いの外調査に時間が掛かってしまいました。

対策数パターン

ここでメゲるわけにはいきません。 方法は何個もあることに気が付きました。

方法1. Dockerのphpコンテナにsshをインストール

dockerのphpコンテナには、シンプルにphp関連のモジュールしかインストールされていないので、ここにssh機能をインストールすれば、すんなり使えるだろうと予測した。 (まだやってないけどおそらくできるはず) でも、最近色々なモジュールをいれてphpコンテナが肥大化してきて、メモリ使用量が大きくなり、MacBookAirのバッテリー消費が早くなった気がしているので、sshを追加してしまうとそれらが更にかそくするのではないかという恐れもある。

方法2. 自宅サーバーからのアクセス

うちには、自宅にサーバーを立ち上げていて、HDDを5台ほど繋げてファイルサーバーにしているし、外部公開できるwebサーバーにもなっている。 なんなら、アスタリスクサーバーも立ち上げていて、自宅の電話などを一元管理できるようにもしてある。(会社などで言うところの電話のPBXのようなもの) ここに、開発環境を立ち上げてしまえば簡易に構築はできると考えた。 でも、カフェとか、自宅外で開発をする時に、やっぱりssh接続をする必要があるので、なんとも汎用性に欠ける。

方法3. 大人しくプロキシを使い続ける

いっそのこと、いまのままの開発環境のままでいいのではないかと心が折れかけた。 そもそも、セキュリティ厳し目にセットしてある環境を簡易に外に出すのもな〜とも考えたりして・・・

あとがき

色々な思惑で開発環境をセットする事を考えて現時点では、これまでと同じ環境で開発し続けているんですが、 そもそも、PHPでのデータベーストンネルアクセスは、便利にできるようにしたいと思うので、Dockerを使ってこの事象を解決しておきたいとは思っている。 まだ、検証作業ができていないので、DockerでのPHPトンネルに成功したら別の環境でも非常に便利に作業を進めることができるようになるので、これだけは確定しておく必要がある。 ということで、検証結果が分かったらまたブログに書いて報告したいと思います。 今回は、単なるできない報告だったんですが、同じ境遇で困っている人がいたら、何かしらの参考になるかと思って備忘しておきました。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ