前提
- DockerHubにあるfpmイメージをベースとして考えています。(debianベース)
- Phalcon4です。psrを入れる辺りを消せば3系でも使えたと思います。
とりあえず先に結論
素直にソースからビルドしましょう。(正しくはPhalconをCの形式にビルドされた後のソース)
以下は私が作っているdocker imageからphalconの本質的なインストール部分だけ持ってきたものです。
# install phalcon
RUN pecl install -s psr \
&& docker-php-ext-enable psr \
&& pecl clear-cache \
&& curl -LO https://github.com/phalcon/cphalcon/archive/v${PHALCON_VERSION}.tar.gz \
&& tar xzf v${PHALCON_VERSION}.tar.gz \
&& docker-php-ext-install -j$(nproc) ${PWD}/cphalcon-${PHALCON_VERSION}/build/php7/64bits \
&& rm -rf v${PHALCON_VERSION}.tar.gz cphalcon-${PHALCON_VERSION}
色々試していたのですが、これが確実です。。。
少し前だともっとめんどくさくて、zephirのパーサーから入れないと駄目な感じでしたので、良くなったほうです。
もっとめんどくさかった頃(クリックで開く)
# install php-psr
RUN pecl install psr && docker-php-ext-enable psr
# install zephir-parser
RUN curl -LO https://github.com/phalcon/php-zephir-parser/archive/v${ZEPHIR_PARSER_VERSION}.tar.gz \
&& tar xzf v${ZEPHIR_PARSER_VERSION}.tar.gz \
&& docker-php-ext-install ${PWD}/php-zephir-parser-${ZEPHIR_PARSER_VERSION} \
&& rm -rf php-zephir-parser-${ZEPHIR_PARSER_VERSION} v${ZEPHIR_PARSER_VERSION}.tar.gz
# install phalcon
RUN curl -LO https://github.com/phalcon/cphalcon/archive/v${PHALCON_VERSION}.tar.gz \
&& tar xzf v${PHALCON_VERSION}.tar.gz \
&& cd cphalcon-${PHALCON_VERSION} \
&& curl -LO https://github.com/phalcon/zephir/releases/download/${ZEPHIR_VERSION}/zephir.phar \
&& php zephir.phar fullclean && php zephir.phar compile \
&& docker-php-ext-install ${PWD}/ext \
&& cd .. \
&& rm -rf v${PHALCON_VERSION}.tar.gz cphalcon-${PHALCON_VERSION}
色々試した
いまはpearのライブラリも結構更新されるようになって、phalconのreleaseにもpearパッケージのソースがつくようになったりしてます。
そこで、peclで入れれないのかと試したのですが、途中でコンパイルが止まって最終的にコンパイル失敗になってしまうようでした。ディストリビューションによってはうまく動くのかも知れません。。。(私がやろうとしたのはdebianのbuster)
他にPackageCloudというサービスにもphalconのリポジトリはあります。
https://packagecloud.io/phalcon
こちらで試しに入れようとしましたが、うまく入ったかな?とおもってapt-cache
コマンドでインストール出来るパッケージを探してみましたが無いことになってしまったので断念。
ppa:ondrej/php
とかも試してみようかとしましたが、そもそもppaがUbuntu用だったし、GPGのエラーが出たりといろいろ苦戦してしまい、結局入れれそうにありませんでした。。。
自分で用意するのが面倒な人に
自分の方で作っているイメージがあります。それを元にしてもいいと思います。
phalconはセマンティックバージョニングなのでメジャーバージョンとしてしかバージョンを付けてないですが。。。
最後に
結果的に、ソースからビルドして入れるのが最適だという結論になったのですが、もしもっと簡単に入れれる方法があったら教えてほしいです。。。