5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

タグ: Docker

  • Bitbucketの支払い明細がよくわからないからGitLabに乗り換えた話し

    今の仕事でPDFファイルとか画像ファイルがたくさんあるサイトの世話をしているのだけど、このサイトをgitでバージョン管理している。プログラムソースではなく、HTMLファイルとか画像もgitでバージョン管理していると何かと便利なのである。やはり、先祖返りを起こさない(複数でサイトアップしてしまっているから、厳密には難しいけど)し、昔のページに戻してとかの話しもたまにあるので、gitで管理するのはいいのである。

    さて、今まで使っていたのはアトラシアンのBitbucketだった。LFSで4GB近くのバイナリもレポジトリに入れていた。そうなると、無料プランでは無理で、有料のStandardプランのライセンスを購入していた。特にBitbucketの機能には不満はない。サーバーの運用も任せられるので安心して利用していた。

    しかし、メールで送られてくる支払いの明細をみたら疑問が出てきた。支払いのメールアドレスとBitbucketのログインのアドレスと違っていた。こちらは、運用のアドレスと請求のアドレスが別に登録されているかと思ったら違っていた。こちらは自分が悪いのだけど、2つのアドレスをBitbucketに登録していた。不思議なのは、請求のあったアカウントには有料プランのWorkspacesを所有していない。請求されていない方のアカウントに有料プランを登録しているWorkspacesが存在している。これはどうしてか?

    この辺りのWorkspacesって何かから調べて、アトラシアンのサポート担当者に聞いてみる。翌日の早い回答をくれたが、その回答はよくわからない内容だった。何かWorkspacesとクレジットカード記入と契約担当者の関係とかの、自分では理解できない難しいことを言っていた。

    この辺りは、既に理解不能に陥っている。そもそも、Bitbucketに登録したときにはWorkspacesなんてなかったので(昔だとTeam?)、Workspacesと課金の関係から理解しなければいけないようだ。でも、課金の体系が変更になるのであれば、丁寧に説明してくれないと困る。

    また別件の話しになるのだが、請求は毎月$15されている。レポジトリに5人のアカウントで使っていたので、$3×5人で$15だと思っていたら、実は違っていたようだった。アトラシアンのサポート担当者によると、Standardプランの最低限価格は$15ドルだそうだ。

    しかし、こちらのWorkspacesの設定からリンクされている料金表を見て1ユーザー$3と思い込んでいた。

    サポート担当者の説明だと、本来ならこの表の上にスライダーで人数を入力して価格シミュレーターがある価格表があるのだそうだ。価格シミュレーターだと1~5人でも$15になるそうだ。こちらを見てくれと言われた。

    おいおい、これはよくわからないぞ。重要な情報である価格表でこれでいいのか? 価格に関するすべてのページに、この価格シミュレーターが必要ではないか? だったら、大元の価格表だけにしないと、自分みたいな勘違いする輩が出るのではないのか?

    ついでに請求書もわかりにくい。Workspacesごとに有料プランに登録できるらしいけど、請求書の明細には有料プランではないWorkspacesも載っている。しかも、なぜかすべてのWorkspacesは載っていないという訳のわからなさ。どういった理由でWorkspacesを選択しているのか?

    だんだんBitbucketを使っていくのはめげてきた。課金体系には明確さが重要である。アトラシアンには不信感が残ってしまった。

    ということで、Gitのレポジトリサービスなんて、Bitbucket以外にもいろいろあるしねということになった。どのGitのレポジトリサービスにしようかと考えたら、QNAPのコンテナサービスにGitLabのDockerコンテナで実現することにした。こちらはGitLab公式のコンテナを使って簡単に動かした。最初からGitLabをインストールするなんてRubyの云々でいろいろトラブル起こすのが目に見えているので、簡単確実にGitLab公式のコンテナを何も変更せずに利用する。レポジトリの移行は、BitbucketからPullしてGitLabにPushすれば、こちらも簡単である。

    移行後は、Bitbucketの有料プランのWorkspacesに登録しているレポジトリを削除してStandardプランをFreeプランに忘れずに変更しておく。アトラシアンのサポートによると、これをやっておかないとユーザーをWorkspacesから削除してもそのまま課金されるそうだ。ただし、Workspacesの削除の仕方がわからなかったので、何もレポジトリが存在しないWorkspacesをそのままにしている。

    課金以外のBitbucketは満足していたけど、今回の件は残念だった。海外のサービスを自分のようなヤツが使うのは難しいのは実感した。だけどEvernoteとかDropboxとか使っているけどな。

    だけど、自分のところのQNAPでGitLabを動かすと、メンテナンスとか自分でやらないとけいけないので大変なのである。もっとわかりやすい料金体系のGitのサービスを探そうかな。

  • Bitbucketの有料プランのユーザー数を勘違いしていた話し

    現在、AtlassianのBitbucketのスタンダートプランに契約しています。最近Atlassianからの請求が、$3だったのに$15の請求と高くなっていました。

    よくプランの説明ページを読んでみると、Bitbucketのユーザー数で勘違いしていました。

    ユーザー数が無制限と思っていたら、リポジトリに追加できるユーザーが無制限だったみたいです。所有するリポジトリにユーザーの登録を追加すると、追加されたユーザーごとに3ドルかかるようです。(これで本当に合っている?)

    現在利用しているBitbucketは自分以外に、ただ同じプロジェクトだけの別の会社の4人にアカウントを追加してあげています。今までプロジェクトの開発の過程で、ファイルを書き換えたとか、先祖返りしたとかのトラブルがあったので、だったら今こちらで使っているBitbucketのリポジトリでソースを管理しましょう、という提案をして、こちらのBitbucketのレポジトリを公開したのでした。このときはリポジトリの利用で金銭は発生させていません。

    しかし、今回Bitbucketの請求が5倍になって何とかしなければいけません。その分を請求できるわけでもないので問題です。そもそも、Bitbucketのスタンダートプランにしたのは、プロジェクトにPDFファイルとか画像ファイルが大きくて、LFSのサイズが大きくなって無料プランではまかないきれなかったのが理由でした。

    結局は、自分のところでGitLabのサーバーをDockerで立てて対応しました。再度、別の会社の人たちにGitLabから招待して登録してもらいました。バージョン管理以外の課題管理とかの機能は使っていないので、今回のGitLabでも十分でした。

    でも、Bitbucketの課金ですが、自分が所有するリポジトリの登録している他のユーザー分課金するのですが、他のユーザーがBitbucketでレポジトリに登録したら課金されるとなりますので二重取りになってしまいます。この辺りが、Bitbucketの納得できない課金方法なのでした。

    とこの記事を投稿したら、昔に同じことを書いてあった。そう言えば、チームアカウントてどうやって登録するのだっけ?

    追記

  • QNAPにsudoをインストールした話し

    QNAP(TS-673)にsudoをインストールしてみた。sudoをインストールしておけば、コンソールからadminで入らなくてもいろいろできる。最近、ようやくQNAPにDockerのコンテナで、サーバーを立てて、ずっと使っているさくらインターネットのVPSを移行している。

    上の記事のようにあらかた移行できたけど、残りはWebのサイトの更新作業で使用するためのテストサーバーを移行するだけとなった。DockerのコンテナでApacheをインストールしただけで動いていることは動いているのだけど、更新をどうするか? ネットワークドラブで更新するのでもいいのだけど、外部からの更新もできるように、sshでscpでファイルを更新したい。しかし、QNAPで最初からサポートしているsshサーバーは、ポート番号の変更くらいしかできなそう。何とか公開キーでの認証をできるようにしたが、パスワード認証を禁止することができない。/etc/ssh/sshd_configをどうもQNAPが起動するたびに書き換えてしまうようである。SSHの設定は、この辺で中断して、先にsudoを使えるようにしておく。

    ここから本題である。

    QNAPにsudoをインストールする情報は、いろいろなサイトで書かれているが、QNAPのファームウェアのバージョン(ちなみに現在は4.4.2.1310 Build 20200519が入っている)によって方法が違うみたい。とりあえず、今使っているQNAPで動いた結果をメモとして残しておく。

    • QPKG Storeのアプリリポジトリを追加してEntware-stdをインストールする。
    • opkg install sudo でsudoをインストール。qpkgではないopkgコマンドであるのに注意。
    • 設定追加はvisudo をしてもダメ。/usr/etc/sudoers を直接編集すること。
      vi /usr/etc/sudoer

    これでターミナルからの設定が捗りそう。

    SambaをLinuxサーバーのインストールしてファイルサーバーとして動かすよりも、サクッとQNAPを入れてしまったほうが簡単、安心、便利でおすすめ。ファイルサーバーだけではなくてIntelのCPUのQNAPなら、Dockerでいろいろとコンテナを設定してサーバーをたくさん立てられるしね。

  • 1年かかって(さぼっていただけだけど)QNAPにサーバーに移行した話し

    自粛要請だったからではないけど、昨日でようやくLinuxからQNAPにサーバーを移行した。QNAPを買ったのは、ほぼ一年前である。

    今まで忙しいとか気が乗らないとかの理由で、サーバー移行を放っておいたのは自分が悪い。

    今回移行したのはLinuxサーバーで動いているIMAPとSambaサーバーである。IMAPのほうははそのまま移行したのではなく、QNAPのDockerコンテナの上でDovecotで動いている。成果はGitHubに置いてある。自分のネットワーク内で動けばいいという位のいい加減なコンテナである。

    [linkcard url=”https://github.com/muneando/docker-simple-dovecot“]

    見返してみるとコミットメッセージもいい加減である。自由にForkして自由に書き直してね

    ファイルサーバーはQNAPの本来の仕事である。今回のQNAPはバックアップに使っていた。それが原因かもしれないが、最初はWindowから共有フォルダでアクセスしたときにファイルの書き込みができなかった。調べてみると、共有フォルダの書き込み権限(どうしてゲストに書き込み権限が必要なの?)がなかったことと、共有フォルダ以下のファイルとディレクトリのグループがバックアップ先のグループIDになっていたことが原因だった。グループはドメインユーザーに変更して解決した。そのときは、管理者でターミナルでログインできないと設定できないので注意。

    あとは各ディレクトリのバックアップの設定をしておく。こちらは、前回のRedmineのMariaDBのバックアップと同様に、HBS3でバックアップを行う。HBS3はとても楽チンである。バックアップ先は、もう一台のQNAPとHPのMicroServerにインストールしたFreeNASの2台である。本当なら、どちらかを別の場所に置けばいいのだけど。

    ファイルサーバーとIMAPは、ほぼツレしか使っていないので、ツレのPCで設定変更を行っていく。ThunderbirdでIMAPを見ているので、MailDirのディレクトリコピーではなくThunderbirdでメールメールのコピーをしておく。ファイルサーバーはドライブの切り替えで完了である。

    以上で、1年かかって(さぼっていただけだけど)LinuxサーバーからQNAPに移行ができた。とても時間がかかった。

    SambaをLinuxサーバーのインストールしてファイルサーバーとして動かすよりも、サクッとQNAPを入れてしまったほうが簡単、安心、便利でおすすめ。ファイルサーバーだけではなくてIntelのCPUのQNAPなら、Dockerでいろいろとコンテナを設定してサーバーをたくさん立てられるしね。

  • QNAPでMariaDB(MySQL)の自動バックアップの設定をした話し

    RedmineをQNAPでDockerのコンテナで稼働し始めた。RedmineのデータベースはDockerのコンテナではなく、QNAPで起動しているデータベースにしておく。QNAPでデータベースとなっているのはMariaDB、いわゆるMySQLとなる。PostgreSQLもインストールすれば使える。

    やはり、仕事でRedmineを使うから、データベースのバックアックは必須である。バックアップをどうしようかと思えば、大抵考えるのはcronでmysqldubpを勝手に起動して、どこかのサーバーに保存していくこと。ここのどこかのサーバーをどうするか悩む。

    どこかのサーバーといえば、ローカルにLinuxのサーバーがあればいいのだけど、今あるLinuxサーバーは古いのでお役御免にしたい。QNAPとかFreeNASとかNASはあるけど、NFSとか設定するのが面倒。

    SambaをLinuxサーバーのインストールしてファイルサーバーとして動かすよりも、サクッとQNAPを入れてしまったほうが簡単、安心、便利でおすすめ。ファイルサーバーだけではなくてIntelのCPUのQNAPなら、Dockerでいろいろとコンテナを設定してサーバーをたくさん立てられるしね。

    そこで考えた結果、手っ取り早くDropboxに保存して同期をすることにした。バックアップとったけど、データベースと同じQNAPにバックアップファイルを保存していていたけど、QNAPが飛んでバックアアップファイル共々お亡くなりなんてないように。外部にデータを保存することは大事。QNAPにはディレクトリをDropboxなどのクラウドストレージサービスと同期をとってくれるHBS3というアプリケーションが用意されている。HBS3は情報が少ないけど、日本語化されているので何とか設定できそう。

    MariaDBのバックアップのシェルスクリプトはこんな感じ。以下のサイトを参考にした、というよりもコピペ。

    NASの MySQLを自動バックアップ (ただし、404 File Not FoundなのでGoogle検索のキャッシュから)

    mysqldumpのパスが違うとか(最初mysqldumpがなかったらどうしようと焦った)、QNAPではfindが-mtimeオプションが対応していないとか、出力ファイル名に時分まで付けるとか、もろもろこちらに合わせて修正している。

    #!/bin/sh
    
    # バックアップの保存期間(days)は 5日とする。
    
    # バックアップ保存用ディレクトリの指定
    dirpath='/share/backup-data/mariadb-backup'
    
    # ファイル名を指定する(※ファイル名で日付がわかるようにしておきます)
    filename=`date +%Y%m%d%H%M`
    
    # データベース全体をエクスポート
    /mnt/ext/opt/mariadb/bin/mysqldump --opt --all-databases --events --default-character-set=binary -u root --password=[MySQLのrootのパスワード] | gzip > $dirpath/$filename.sql.gz
    
    # パーミッション変更
    chmod 700 $dirpath/$filename.sql.gz
    
    # 保存期間を過ぎたバックアップを削除
    find $dirpath/ -type f -mtime +5 |xargs rm -f  

    このシェルスクリプトを実行するとDropboxで同期をとるディレクトリ(ここでは/share/backup-data/mariadb-backup)にバックアップされる。このシェルスクリプトをcronで回せば完了。

    しかし、QNAPのcronの設定は、

    crontab -e

    では保存してくれない。

    vi /etc/config/crontab

    で直接crontabを編集して、cronのサービスを再起動する。以上で完了。

    無事にデータベースのダンプを出力して、Dropboxで同期していることを確認できた。

    追記(2022年12月13日)

    シェルスクリプトが消えていたので、再度設定しておいた。

  • CandyCaneをRedmineに移行した。だけどデータ移行なんて考えないで移行したという話し。

    こちらの話しの続き。

    現在作業記録をCandyCaneで行っている。CandyCaneは元々Redmineの機能をPHPで記述するということで始まったプロジェクトである。現在は、ほぼ開発は停止している。

    CandyCaneはPHP5.6の上で動かしているので、PHP自体アップデートはない。新しくPHP7の上で動かそうにも難しい。実際にDockerのコンテナでPHP7のサーバーを起動してCandyCaneを動かしたが諦めた。この際、CandyCaneを捨ててしまおうと考えた。

    つぎのバグトラッキングシステムを何にしようかいろいろ検討したが、チケットごとに時間での工数記録してお客さんに報告をしなければいけないので(これが一番大事)、結局はCandyCaneの大元のRedmineに落ち着いた。操作もあまり変わらないし。

    最初はCandyCaneからRedmineにデータの移行をしようと考えたが、これは大変だったのでやめた。今月からCandyCaneの使用をやめてきっぱりRedmineでチケット管理をやっていく。チケット番号(issue ID)の重複をさけるため、チケット番号はGitでも管理しているので、チケット番号を途中まで採番しておく。これはissuesテーブルのidのオートインクリメントを設定し直すだけ。

    CandyCaneは古いPHPが動くようにQNAPの中にDockerのコンテナを立てて、CandyCaneのファイルとデータベースをそのまま移行するくらいで問題無かった。

    最後に利用しているお客さんにCandyCaneからRedmineに変わったというアナウンスと、Redmineのアカウントを発行すれば完了。

    しかしながら、CandyCaneを使い始めて11年経っていた。チケットは約3,000近く溜まっている。トラブルなくここまで無事に動いてくれた。ご苦労様でした。

    SambaをLinuxサーバーのインストールしてファイルサーバーとして動かすよりも、サクッとQNAPを入れてしまったほうが簡単、安心、便利でおすすめ。ファイルサーバーだけではなくてIntelのCPUのQNAPなら、Dockerでいろいろとコンテナを設定してサーバーをたくさん立てられるしね。

  • BIOSがクリアされるので、マザーボードの電池を交換してみた話し

    これは自分へのメモです。

    CPUクーラーを交換したり、PCの中身をいじっていると、起動したときにこんなメッセージが出てくる。たまに出てくるだけなので、いつもはすんなり起動できる。

    ここでF1を押すとBIOS設定の画面になるのだが、そのまま何もせずにPCを起動すると、Windows10が立ち上がらない。これには焦る。

    BIOSの値がクリアされてしまっているようだ。こちらで設定しているBIOSの値を設定する。まずは、自分で何を設定しているかのメモを残しておく。

    SATAコントローラーをIDEからAHCIにする。AHCIにしないと、このWindows10のPCは起動できない。

    Dockerを使っているので、Intel VTを有効にしておく。これでDockerが起動できる。

    以上の2点を設定すれば、無事にPCが起動できるようになる。

    何でBIOSがクリアされてしまうかだが、おそらくマザーボードの電池が切れているのではないかと予想する。このマザーボードの電池はCR2032だったので、手元に最近Amazonで購入した在庫があるので交換しておく。

    これで大丈夫かと思うが、交換した古い電池の電圧をテスターで測ったら3Vを越えていた。もしかしたら、電池が原因ではないかもしれない・・・。

  • Windows Defender絡みでトラブルが出た話し

    Windows10に最初から入っている標準ウイルス対策ソフトであるWindows Defenderで2点ほどトラブルがあった。

    そもそもLenovoのThinkPadに開発環境を作っていたところトラブルが発生した。その原因が2つともWindows Defenderであった。

    Docker for Windowsが「Removing Files」で止まってインストールできない。

    「Removing Files」の表示したところのインストールの途中で止まってしまう。もちろんこれではDockerの起動で失敗してしまう。いろいろGoogleさんに尋ねたところ、Dockerのコミュニティサイトで見つけた。

    そのものズバリである。楽しようと思って日本語のサイトばかり探していたので時間がかかった。英語の本家のサイトも見ておきましょう。

    一時的にWindows Defenderを無効にしたら、無事にインストールできた。

    ESETはマイナーなアンチウイルスソフトだけど、軽くてPCの邪魔をしないのでお勧めしています。自分が使っているPCにはMicrosoft DefenderではなくESETを入れています。

    Phtoshopで「Web用に保存」で「指定されたパスは見つかりません」というエラーになる

    最初は「Generator に問題があります」というエラーが出ていた。こちらは、PhotoshopのディレクトリにLogsを作成したら「クリック書き出し」は直った。どうしてPhotoshopをインストールしたときにLogsディレクトリを作成してくれないのかは不明である。

    しかし、今度は「Web用に保存」で「指定されたパスは見つかりません」というエラーが出てしまう。こちらはWindows DefenderをでPhotoshopのアクセスを許可したら直った。こちらは以下のサイトを参考にした。


    (右クリックでテキストコピー禁止しているサイトなので注意)

    今までウィルス対策はESET Securityを使っていたので、このようなトラブルはなかった。まだライセンスは余っているし、ESET Securityに戻そうか思案中である。

    ThinkPadのトラブルが多くて、一度Windowsを再インストールしてやろうかと思ったが、やらないでよかった。まだWindows Updateが失敗するとかのトラブルが残っているが。

  • Laradockを使ってCakePHP3+Xdebug+VS Codeの開発環境を構築した話し

    CakePHP3で作りたいものがあったので、CakePHP3の開発環境を簡単にDockerを使って構築しようと思い立った。最初は自分でdocker-compose.ymlを作成してコンテナを起動してみたけど、どうしてもXdebugでデバッグができなかった。

    たまたまLaradockという本来はLaravelフレームワーク用のDockerコンテナキットを見つけた。最後にcomposerでLaravelの代わりにCakePHPをインストールできるらしいからLaradockを使ってみた。LAMP関連(今回はAではなくnginxだけど)のコンテナが全部入りだから(MySQLだけではなくて、PostgreSQLやSQL Serverもある)、自分でdocker-compose.ymlを書くよりはいいだろうと思った。

    参考までにこれから構築していく自分の環境は以下の通りである。ここにLaradockを使ってCakePHP3+Xdebug+VS Codeの開発環境を構築する。。

    Windows 10 Pro 64 bit
    Docker version 17.12.0-ce, build c97c6d6
    docker-compose version 1.18.0, build 8dd22a96

    以下はいろいろと参考にしたサイトからつまみ食いしなから設定を行った部分を抜き出してまとめていく。

    Laradockの設定は、こちらのサイトを途中まで参考にした。

    PHPフレームワーク「Laradock」で、手軽にLaravel+Dockerな開発環境を構築する

    株式会社LIG|東京のWeb制作・システム開発・オフショア開発会社

    gitのcloneでLaradockをインストールしている。次にLaradockでCakePHP3に関する設定を行うには、こちらのサイトを参考にした。

    LaradockでPHPフレームワーク(Laravel・CakePHP)とCMS(WordPress・Drupal・baserCMS)の開発環境(nginx・php-fpm・mysql)を構築する

    Qiita

    .envをコピーして設定して、これでインストール完了ですと言えないのは、コピー&ペーストインストールのいつものこと。このままではphpMyAdminからMySQLコンテナに接続できないとか、細かい問題があった。そしてXdebugでPHPのデバッグをやりたかったので、いろいろ設定を追加していく。

    まずは、上記の2つのサイトを参考にしてLaradockをインストールする。自分のところでは、今までの作業でディレクトリはこのようになっている。

     /laradock-test
     ├── laradock
     └── src

    .envの設定だが、設定の一番のポイントはポート番号を重ならないこと。既にローカルでPHP+Xdebugが動いていたようなので、ポート番号の指定で嵌まった。使っていないポート番号を設定しておく。以下に今回設定した.envのnginx, MySQL, phpMyAdminの設定を上げておく。

     ### NGINX
     NGINX_HOST_HTTP_PORT=8082
     NGINX_HOST_HTTPS_PORT=443
     NGINX_HOST_LOG_PATH=./logs/nginx/
     NGINX_SITES_PATH=./nginx/sites/
     NGINX_PHP_UPSTREAM_CONTAINER=php-fpm
     NGINX_PHP_UPSTREAM_PORT=9000
    
    ## MYSQL
     MYSQL_VERSION=5.7
     MYSQL_DATABASE=default
     MYSQL_USER=default
     MYSQL_PASSWORD=secret
     MYSQL_PORT=3333
     MYSQL_ROOT_PASSWORD=root
     MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
    
    ### PHP MY ADMIN
     # Accepted values: mariadb - mysql
     PMA_DB_ENGINE=mysql
     # Credentials/Port:
     PMA_USER=default
     PMA_PASSWORD=secret
     PMA_ROOT_PASSWORD=secret
     PMA_PORT=8083

    使っていない別のポート番号に設定し直しておく。MYSQL_VERSIONは元の設定の8.0だと認証で失敗してしまったので、8.0ではく5.7に設定したら認証ができた。こちらは何か別のよい方法があるかもしれない。

    WORKSPACEとPHP_FPM の設定は以下の通り。修正した箇所だけを上げておく。

     ### WORKSPACE
     WORKSPACE_INSTALL_XDEBUG=true
    
     ### PHP_FPM
     PHP_FPM_INSTALL_XDEBUG=true
     PHP_FPM_INSTALL_INTL=true

    Xdebugを使うのでWORKSPACE_INSTALL_XDEBUGとPHP_FPM_INSTALL_XDEBUGをtrueにして(PHP_FPM_INSTALL_XDEBUGだけでもいいかも?)、PHP_FPM_INSTALL_INTLはCakePHP3で必要なのでtrueにしておく。

    .envの設定の最後として、CakePHP3のインストール先のディレクトリも設定しておく。

    # Point to your code, will be available at `/var/www`.
    APPLICATION=../src/

    nginxのドキュメントルートを修正する。設定するファイルは以下のファイルである。

    .\laradock\nginx\sites\default.conf

    こちらのrootの設定を、CakePHP3のリモート側のドキュメントルートのディレクトリに設定する。今回のプロジェクト名をmycakephpとしておく。

    root /var/www/mycakephp/webroot;
    ここで一度Docker composeを実行してコンテナを起動しておく。
    docker-compose up -d nginx mysql phpmyadmin

    workspaceコンテナにログインして、composerを使ってCakePHP3をインストールしておく。こちらは参考サイトの通り。

    LaradockでCakePHPの開発環境(nginx・php-fpm・mysql)を構築する

    Qiita

    ここではサイトに書いてある通り、以下のコマンドでプロジェクトmycakephpでCakePHP3をインストールした。

     $ composer self-update && composer create-project --prefer-dist cakephp/app mycakephp

    nginxからCakePHP3のサイトを参照できるかチェックする。OKならCakePHP3の初期画面が見えるはず。

    データベースの接続の設定を.\src\mycakephp\config\app.phpにしておく。

    'Datasources' => [
    
        'default' => [
           :
        'host' => 'mysql',
           :
        'username' => 'default',
        'password' => 'secret',
        'database' => 'default',
           :

    このような感じで.envのMySQLの設定に合わせておけば、データベースに接続が成功はずである。

    phpMyAdminも確認しておく。こちらも.envのMySQLの設定通りにすればログインできてMySQLの中を参照できるはずである。もちろん、MySQLのパスワードは適当なものに変えること。

    サーバ:mysql
    ユーザ名: root
    パスワード: root

    MySQL Workbenchからも接続を確認できた。以下の接続情報でWindowsローカルで接続できた。

    Hostname:localhost
    Port: 3333
    Username: root
    password: root

    最後にXdebugの設定である。Xdebugのコンテナ側の設定ファイルは次の2つである。同じ内容でコピーすれば大丈夫だった。

    .\laradock\php-fpm\xdebug.ini
    .\laradock\workspace\xdebug.ini

    自分が設定した内容は以下の通りである。とりあえずプロフィラの設定も含めて設定しておく。

     xdebug.remote_host=172.27.7.81
     xdebug.remote_port=9002
     xdebug.idekey=Listen for XDebug
    
     xdebug.remote_autostart=1
     xdebug.remote_enable=1
     xdebug.remote_connect_back=0
     xdebug.cli_color=1
     xdebug.profiler_enable=1
     xdebug.profiler_output_dir="/var/www/mycakephp/tmp"
    
     xdebug.remote_handler=dbgp
     xdebug.remote_mode=req
    
     xdebug.var_display_max_children=-1
     xdebug.var_display_max_data=-1
     xdebug.var_display_max_depth=-1

    ここでわからなかったのはxdebug.remote_hostの値だった。結論としてはこちらはWindowsの場合、

    ipconfig

    で表示されるDocker側の仮想スイッチのアドレスの値を設定しておく。Googleさんに「xdebug リモートデバッグ」で検索して、よく出てくるサイトに書かれている$_SERVER[‘HTTP_X_REAL_IP’]とか$_SERVER[‘REMOTE_ADDR’]の値ではないので注意すること

    xdebug.remote_host = host.docker.internal
    xdebug.remote_connect_back=1
    xdebug.remote_port=9002
    xdebug.idekey=Listen for XDebug
    
    xdebug.remote_autostart=1
    xdebug.remote_enable=1
    xdebug.remote_connect_back=0
    xdebug.cli_color=1
    xdebug.profiler_enable=1
    xdebug.profiler_output_dir="/tmp"
    
    xdebug.remote_handler=dbgp
    xdebug.remote_mode=req
    
    xdebug.var_display_max_children=-1
    xdebug.var_display_max_data=-1
    xdebug.var_display_max_depth=-1

    xdebug.remote_hostの設定は、最近新しくDockerのための設定が追加されたようなので、こちらは難しいことをせずにhost.docker.internalを指定しておく。これでうまくデバッグができるようになった。

    docker-compose stop
    docker-compose build php-fpm workspace

    でphp-fpmとworkspaceのイメージをビルドしなおす。ビルドできたら、

    docker-compose up -d nginx mysql phpmyadmin

    をDocker Composeを再度実行する。nginxのドキュメントルートにphpinfo()を書いたファイルを置いてアクセスしてみて、正しくxdebugが設定されているかを確認しておく。

    クライアント側の開発環境はマイクロソフトのVisual Studio Code(VS Code)を使っている。あらかじめVS Codeの拡張機能であるPHP Debugをインストールしておく。次にVS Codeのデバッグの構成ファイル(launch.json)を修正する。launch.jsonは以下のように設定した。

    {
      "version": "0.2.0",
      "configurations": [
    
       {
        "name": "Listen for XDebug",
        "type": "php",
        "request": "launch",
        "port": 9002,
        "pathMappings": {
          "/var/www":"${workspaceRoot}/src"
         },
        "ignore": [
          "**/vendor/**/*.php"
        ]
       },
       {
        "name": "Launch currently open script",
        "type": "php",
        "request": "launch",
        "program": "${file}",
        "cwd": "${fileDirname}",
        "port": 9002
       }
      ]
     }

    portは、xdebug.iniのxdebug.remote_portと同じ値にする。以下のように設定するように言っているサイトもあるが、

          "serverSourceRoot": "/var/www",
          "localSourceRoot": "${workspaceRoot}/src"

    serverSourceRoot、localSourceRootとも今後推奨されない設定のようなので、pathMappingsにしておく。pathMappingsの設定は、

    "pathMappings": {
        "リモートディレクトリ":"ローカルディレクトリ" 
        },

    のようにリモートとローカルのパスをマッピングする設定である。ドキュメントをよく読まずにリモートとローカルを反対にしてしまったので動かなくて悩んだ。こちらはnginxのドキュメントルートのディレクトリではないことに注意する。ドキュメントルートディレクトリ外のファイル(例えば、.\src\mycakephp\src\Controller\AppController.php)をデバックしようとしたときに、pathMappingsにルートディレクトリに設定してしまうとソースファイルが見つからないと言ってくる。そこでソースファイルを格納しているディレクトリを設定しておく。

    ignoreの設定をしておかないと、以下のような例外が途中で発生する。どうしてかは不明である。

    例外が発生しました
    
    Aura\Intl\Exception: Package 'default' with locale 'ja-JP' is not registered.

    .\src\mycakephp\webroot\index.php とかに適当にブレークポイントを設定して、Listen for XDebug”の構成でデバッグを行う。ブレークポイントを設定したところで止まるかとチェックする。後はステップオーバーでプログラムが進むか、ステップインで別のソースを参照できるか、または変数の中身を参照できるかをチェックして完了。

    以上でLaradock+CakePHP3+XdebugでVS Codeを使って快適にデバッグができるようになった。以上、再度開発環境を構築する際に忘れないようにメモを残しておく。

    追記

    同じ設定をMacでやってみたら、niginxコンテナが起動できなかった。原因不明・・

    .\laradock\nginx\sites\default.conf にゴミが入っていたのが原因だった。dockerのログを見たら原因がわかった。

    無事にMacでCakePHP3のトップページを参照できた。ただしデバッグできない。

    Macでもデバッグができるようなった。ただし、xdebug.ini に

    xdebug.remote_host=docker.for.mac.localhost

    を設定すればOKのようだ。情報はこちらのサイトから。

    PHP on Laradock w/ Visual Studio Code(VS Code)でデバッグ環境 (特にon Mac)

    Qiita

    ただし、MacでDockerはとても遅い。ブラウザが表示し終わるのに時間がかかる。こちらは問題になっているようで、将来改善されるのかな?

    追記2

    VS CodeのターミナルからDocker Composeすると、IO Errorが出る。普通にPower Shellで実行するとうまく行く。これは、issuesに上がっているから周知の問題なのかな?

    追記3

    MySQLのコンテナが起動できなかったので、解決策はこちらから

    LaradockでMySQLがどうしても立ち上がらない人あつまれー!

    Qiita

    追記4(2018年9月14日)

    xdebug.remote_hostの設定を変更しておく。

  • vagrant upでエラーが出た話し

    久しぶりにvagrantでテスト環境を作っているところでvagrant upを実行してみた。

    実際には、Windows上のVagrantでCoreOSを動かして、その上でdockerを動かそうと目論んだのだが。

    普段なら、仮想環境が起動されてテスト環境が起動されてくるのだが、今回は次のようなエラーが出た。テスト環境が動いてくれないと、これからの作業に支障をきたしてしまうので解決しておかなければならない。

    $ vagrant up
    
    Thanks for wanting to use Vagrant! Unfortunately, this is not the way
    to install Vagrant anymore. We now make installers for the various operating
    systems Vagrant supports.
    
    Vagrant is no longer distributed as a RubyGem. Please download the latest
    version for your operating system from the URL below. If you still wish
    to use the RubyGem version, you can manually install version 1.0.7. Note that
    the RubyGem version hasn't been updated in over a year and will no longer
    receive any updates.
    
    Prior to installing Vagrant using the installer, make sure you uninstall
    all your Vagrant gems, since they sometimes conflict.
    
    http://www.vagrantup.com
    
    If you want to learn more about why we don't distribute using RubyGems
    anymore, please read this: http://mitchellh.com/abandoning-rubygems

    vagrantup.comに行って最新のvagrantをダウンロードしてインストールしてみる。VirtualBoxも再インストールする。しかし、同じエラーが出る。

    まじめにエラーメッセージを読んだら、トンチンカンな対応をしているようだ。

    $ gem uninstall vagrant

    を実行して、RubyGemsからVagrantをアンインストールしてみる。今度は無事にvagrant upができるようになりました。

    私自身Rubyを使っていないし知らないので、RubyGemsがどうなっているかはわからない。ただVagrantが動けばいいのでした。

    Windows上のVagrant上のcoreOS上のdocker上のUbuntuは無事に動いています。

    著:大竹 龍史, 著:山本 道子
    ¥2,950 (2025/04/01 13:05時点 | Amazon調べ)
    著:Piro, 編集:日経Linux
    ¥2,178 (2025/03/28 21:08時点 | Amazon調べ)
    著:三宅 英明, 著:大角 祐介
    ¥2,970 (2025/04/01 13:05時点 | Amazon調べ)