ひょんなことからSuiteCRMを動かしてみよう、と思い立ちました。
dockerで動かす
https://github.com/d9magai/docker-compose-suitecrm
こんな感じでvagrantで作った仮想マシンのdocker上で環境構築しました。
git clone
してvagrant up
すると構築できます。
php7.3を使ったときの警告
はじめはappはphp:7.3.6-fpm-alpine3.10
で動かそうと思いました。
しかし次のような警告が発生して上手く動きませんでした。
意味はこんな感じですかね。「switch
を対象とした"continue"
は"break"
と同じ。"continue 2"
の意味で使いたかったのか?」
文章を読んでもよく分からないので調べたのですが、PHPは曖昧なcontinue文はPHP8から禁止する方針で7.3からwarningを表示するようになったっぽいです。
曖昧なcontinue文とは
continue文はループから抜ける為に利用しますが、switch文で使うとswitchからの脱出を表し、「このループから抜ける」つもりでcontinueを書いても、switch文内ではbreakの意味で動作していました。
while ($foo) {
switch ($bar) {
case "baz":
continue;
}
}
switchを抜けたかったらbreakを用いるべきす。私もそうしてきましたし。上位ブロックのループから抜ける為にcontinueを使いたかったらcontinue 2
を使え、というwarningでした。 continue文は抜けるループのレベルを引数を指定できるみたいですね。PHP以外の言語では、switch文の中でcontinue
を使うとPHPでいう所のcontinue 2
の意味として動作します。この為、間違えやすい仕様であると長年指摘されてきました(らしいです)。
で、その辺の曖昧なところをPHP7.3では警告を出すようにしたって話ですね。
Warningで指摘されている箇所をcontinue 2;
に書き換えるとうまく動いているように見えるのですが、本当に大丈夫なのかちょっと不安だったので、結局php:7.2.19-fpm-alpine3.9
を使うことにしました。
で、あとはSuiteCRMの画面に従って操作をしていけば環境を構築できました。
その他のはまったポイント
いくつかはまった点があるので紹介したいと思います。
hirak/prestissimo
を入れた後にcomposer install
したい
uid=$UID gid=$GID docker-compose run --rm -v /tmp/:/home/$(whoami) app sh -c "composer global require hirak/prestissimo && composer install"
これでいけました。hirak/prestissimo
を入れる際に$HOME
にごにょごにょするみたいですが/etc/passwd
と/etc/group
をマウントしてユーザをしているだけなのでホームディレクトリが無いんですよね。なので/tmp
をホームディレクトリってことにすることでうまく動きました。
SuiteCRMの静的ファイルをnginxで配信できない
環境を構築するとSuiteCRMの静的ファイルが出来上がるのですがこれをnginxで配信できませんでした。理由はパーミッションです。そこで、nginx.confでrootで動かすという力業で解決しました。「動きゃあええねん」の精神だったのでこれで良しとしました。