以下の内容はhttps://asumikam.com/entry/2025/05/06/214123より取得しました。


さくらのクラウド AppRun(β版)でPHPアプリケーションをデプロイしてみたかった

PHPerKaigi 2025 のさくらインターネットさんのブースで fujiwaraさんに「AppRunつかってみます!」とおはなしして、ちょうどデプロイしたいものができたので試しにいじってみました。

2025/05/06現在、β版として公開されているので無料で遊べます。やったね!

cloud.sakura.ad.jp

今回デプロイするもの

Claude CodeでVibe CodingしたSlim製のPHPアプリケーション「umeco-ikura」という おだわら市民交流センター UMECO の利用料金を計算するツールをデプロイしていきます。

公式サイトからキャプチャを撮りました

UMECOは普段お世話になっている安い貸し会議室なのですが、時間帯・部屋によって料金が異なるため、たくさんの部屋をいろんな時間で借りるとなると計算がちょっと複雑になります。

自家製ツールを作りたいとおもいつつもスマホの計算機やスプレッドシートなどで苦しんで早2年、ようやく重い腰を上げて作りました。Claude Codeが。こちらの腰は軽くなりました。ありがてぇ〜。

umeco-ikuraのかわいい入力画面

本当に古き良きやつ。こういうのでいいんだよこういうので!

umeco-ikuraのかわいい計算結果

UMECOは参加者から1000円以上の徴収あるいは販売を行う場合は料金が2倍になるのでそれも出しています。

まずはお試しでnginxをデプロイしてみる

  1. さくらのクラウド コンテナレジストリの作成
  2. さくらのクラウド AppRun の作成

手順はマジで↑だけで、本当に簡単!というかんじ。 マニュアルも必要なことをバシッとシンプルに書いてくれているので、手順がわからない、ということはなかったです。

ためしに素のnginxをデプロイしようと思ったのですが、docker pull nginx:latestだと platform が合わずにコケてしまって以下のエラーがでました。

{
    "status": "UnHealthy",
    "message": "Component is exited: Container failed with: failed to start containerd task \"xxx\": OCI runtime start failed: starting container: starting sub-container [/docker-entrypoint.sh nginx -g daemon off;]: creating process: failed to load /docker-entrypoint.sh: exec format error: unknown: starting container: starting sub-container [/docker-entrypoint.sh nginx -g daemon off;]: creating process: failed to load /docker-entrypoint.sh: exec format error\n"
}

サポート | さくらのクラウド マニュアル を眺め、 linux/amd64 を指定せよということがわかったので docker pull --platform linux/amd64 nginx:latest でpullしたものをコンテナレジストリに登録してデプロイしたらうまくいきました。

デプロイ設定画面に最後にデプロイしたアプリケーションの構成情報と、今回のアプリケーションの構成情報が同一の場合には、新しいバージョンは作成されません。とある通り、latest連打ができなかったので適当にタグ名はつける必要ありです。何回かミスってるのは手元のNginxをpullしなおしたつもりがarm64のままだったりしたので何回かごちゃごちゃやっていた結果です。

あとは「処理中...」が結構長く*1ウグ〜となっていたら以下のエントリからAPIで叩けることを知ったのでちょっと楽になりました。ありがとうございます。

hirosetakahito.hatenablog.com

実物をデプロイしていく

コンテナイメージが1つしか指定できないため、nginx+PHP FPMの構成は自然にとることは難しそうと思ったのでApacheでイメージを構築しました。umeco-ikura でつかったDockerfileは以下。

FROM composer:latest AS vendor

COPY ./composer.* /app/

RUN composer install --no-dev --ignore-platform-reqs

FROM --platform=linux/amd64 php:8.4-apache AS app

RUN a2enmod rewrite

COPY docker/apache/slim-app.conf /etc/apache2/sites-available/slim-app.conf
RUN a2dissite 000-default.conf \
 && a2ensite slim-app.conf

WORKDIR /var/www/html
COPY --from=vendor /app /var/www/html
COPY . /var/www/html

RUN chown -R www-data:www-data /var/www/html

EXPOSE 80

CMD ["apache2-foreground"]

失敗したらさきほどのAPIを叩きつつ、statusがUnhealthyでImage is not foundtypoした)やUnexpected error(β版だからこういうこともありそう)やDeployment Failed(β版だからこういうこともありそう)などが出たので、ためしにAWSのAppRunnerにデプロイしてうまくいってそうなことを確認したり無邪気につけていたヘルスチェックを消してみたりしたが................動かなかった........かなしい........けどここまでブログを書いていたので恥ずかしげもなく投稿しちゃう。

画面上部に一部環境にて、アプリケーションの作成に失敗する不具合を確認しています。ご不便をおかけいたしますが、今しばらくお待ちください。ってあるからそれなのかな...と思いつつ、そろそろGW終わるのに衣替えのタスクが終わってないので一旦あきらめます。 AppRunをちょこっと触ることはできたし、AWS AppRunnerはじめてだったけどサクッと試せたので収穫はあった。さくらインターネットさん応援しているのでAppRunでうまくいかせたい気持ちがある、また今度再チャレンジするぴょん!

*1:成功の時ははやかったので、長かったら失敗とみて良さそうかも




以上の内容はhttps://asumikam.com/entry/2025/05/06/214123より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14