前提条件
-
Clever Cloudにアカウントを作成しておきます。
- サインアップは GitHubアカウントまたはメールアドレスを利用します。
- サインアップ直後はメールアドレスとアカウント名の入力を求められるので、指示に従い入力を行います。(GitHubアカウントでサインアップを行った場合は連携して自動入力となります)
事前準備
まず、Laravel 13を使ってデプロイの対象となるアプリケーションを準備します。
今回は cc-sddを使って、以下のような簡単なTodoリストのアプリケーションを開発して、 GitHub に push しました。
Clever Cloud にアプリケーションを登録
それでは、 Clever Cloud にデプロイするための設定を行っていきます。
Clever Cloud のwebページにアクセスしてログインを行います。
このような構成のダッシュボードが表示されます。
画面左上の「Personal space」をクリックします。
「Personal space」の下に「Switch organisation」というメニューが現れました。
「organisation(組織)」については未作成のため「Switch organisation」の下に「Add new organisation」というメニューが表示されています。
Clever Cloud では「Personal space(個人)」と「organisation(組織)」を切り替えて利用できるような仕組みなっているようですが、今回は「Personal space(個人)」のみを利用する想定のため、「Add new organisation」は対応しないこととします。
「Personal space」の「Overview」のタブはこのような表示になっています。
画面上部に支払い方法についての警告が表示されていますので、「Go to the billing page」をクリックします。
画面の指示に従いクレジットカード番号を入力し、「ADD PAYMENT CARD」をクリックします。
SCAに関する説明が表示されますので、内容を確認して「I AGREE」をクリックします。
クレジットカードの登録が完了すると以下のように表示されるので「SET AS DEFAULT」をクリックします。
「Default payment method」と表示されてますが、「Beware! You don't have any registered payment method」の警告が消えません。
試しに画面をリロードしてみると「Beware! You don't have any registered payment method」の警告が消えました。このように支払い周りの作り込みが甘いと少々心配になりますね。
「Coupons & credits」のタブに移動すると、「You have €20.00 in free credits.」と表示されているので、20ユーロ分の無料クレジット枠が付与されていることが確認できました。
それではこの無料枠の範囲内で操作感を調査していきたいと思います。
左側のメニューから「Create」を選択して、「Add-on」をクリックします。
多くのアドオンが利用可能ですが、この中から「MySQL」を選択します。
プラン選択の画面が表示されるので、「Plan name」から「€0.00」の「Dev」を選択して、「NEXT」をクリックします。
「NAME」にデータベース名となる「my-todo-list-db」を入力します。
「Zone」は「Paris France (Clever Cloud)」と「Montreal Canada (OVHcloud)」の2択となるようです。
今回は「Paris France」を選択し、「NEXT」をクリックします。
データベースの作成が完了するとこのように表示されます。
「Information」のタブに移動すると、「Environment variables」の欄に接続情報が記載されていますので、 Laravel の動作に必要な項目(「DB_DATABASE」、「DB_HOST」、「DB_PORT」などに利用します)を控えておきます。
データベースが作成できたら左側のメニューから「Create」を選択して、「Application」をクリックします。
「Select your GitHub repository」のセレクトボックスから、デプロイ対象のリポジトリ名を選択します。
余談ですが、「Select your GitHub repository」のセレクトボックスには全リポジトリが表示されています。
GitHubにかなり強めの権限を渡しているようで、すべてのリポジトリの操作ができる状態になっており、これはかなりマイナスな印象ですね。
リポジトリを選択すると、どういったアプリケーションを構築するのか選択肢が表示されます。
「Docker」を選択して Render用に作成した Dockerfile を利用することで恐らく正常稼働するかと思いますが、「PHP」で Laravel のアプリケーションが動作するのか確認してみたいので、あえて「PHP」を選択します。
スケーリングについて質問されるので、「EDIT」をクリックします。
デフォルトでは以下のような表示になっています。
「Autoscalability」は「DISABLED」、「Horizontal scaling」は「1」のデフォルト状態を維持します。
「Vertical scaling」は「XS」から「nano」に変更して「NEXT」をクリックします。
「NAME」にアプリケーション名となる「my-todo-list-app」を入力します。
「DESCRIPTION」は空欄のままとします。
「ZONE」はデータベースの場合と異なりいくつか選択肢がありますので、日本から最も近い「Singapore Singapore (OVHcloud)」を選択します。
すべての入力が完了したら「CREATE」をクリックします。
アドオンの画面に遷移し「Do you need a database? an S3-like storage? or a FTP access?」と聞かれますが、データベースは既に作成済みですので「I DON'T NEED ANY ADD-ONS」をクリックします。
デプロイが完了するまでしばらく待ちます。
アプリケーションの作成が完了すると、このように外部からアクセス可能なURLが表示されます。
URLは以下のような形式となります。
http://[アプケーションID].cleverapps.io/
「https://」ではなく「http://」という点が非常に気になりますが、もしかすると「SSL/TLSをONにする」といった設定がどこかにあるのかもしれないので、ひとまず気にしないこととします。
アプリケーションの「Overview」のタブに移動すると、「Your application is currently stopped. The last deployment failed, read logs here」と表示されているので、「Logs」のタブに移動します。
「Logs」のタブでログを見てみても、これといった解決のヒントが見つかりませんでした。
最下行あたりに「[ERROR] Failed to mount ftp bucket for php.」とありますが、「ftp」は使わないんだけどなぁという気持ちです。
「Environment variables」のタブに移動して、「EXPERT」をクリックします。
「EXPERT」をクリックすると、直接編集できるモードに切り替わるので、 Laravel の動作に必要な項目(「APP_KEY」など)を入力して、「UPDATE CHANGES」をクリックします。
「RESTART THE APP TO APPLY CHANGES」というボタンが現れるので、これをクリックします。
--
「Environment variables」のタブに以下のような表示があり、どうやらアプリケーションの「my-todo-list-app」とアドオンの「my-todo-list-db」が連携できていないように見えます。
--
「Service dependencies」のタブに移動します。
どうやらこの画面でアプリケーションとアドオンの紐付けを行う必要があるようです。
--
「Link add-ons」から「my-todo-list-db」を選択して、「ADD」をクリックします。
「Link add-ons」の欄に「my-todo-list-db」が表示されたので、これでアプリケーションからデータベースへの接続が可能になったはずです。
「Overview」のタブに移動し、「RE-BUILD AND START」をクリックします。
上記の通り、再度ビルドを試みましたがデプロイは失敗しました。
アプリケーションの種類を選択するこの画面で「PHP」を選択しましたが、デプロイに関するログの情報が少なすぎることと、 Buildpack や Railpack のようなものではなく Clever Cloud 独自のビルドの仕組みのため、デプロイ失敗後の調整が難しい状況です。
ということで、次は「Docker」を選択してやり直してみようと思います。
アプリケーションの「my-todo-list-app」を削除します。
左側のメニューから「Create」を選択して、「Application」をクリックします。
デプロイ対象のリポジトリを選択します。
アプリケーションの種類を選択する画面で「Docker」を選択します。
インスタンスタイプは最小構成を選択します。
「Name」に「my-todo-list-app」と入力し、「ZONE」はデータベースと同じく「Paris France (Clever Cloud)」を選択してみます。
追加のアドオンは不要なので「I DON'T NEED ANY ADD-ONS」をクリックします。
「Logs」のタブに移動すると Dockerfile の内容が実行されているようですので、しばらく待ちます。
「Logs」のタブで以下のように「composer install」で失敗していることがわかります。
ログを遡ると、いくつかのリポジトリで「504」エラーが発生していることがわかります。
「Environment variables」が未登録なので、まずこちらを対応します。
登録後に以下のような表示になること、各項目・値に誤りがないことを確認します。
「Service dependencies」のタブで「my-todo-list-db」を紐付けます。
「Overview」のタブに移動し、「RE-BUILD AND START」をクリックします。
デプロイが成功したようです。
「Domain names」のタブに移動すると、「Domain names linked to this application」の欄にFQDNが表示されています。
FQDNは以下のような形式となります。
[アプケーションID].cleverapps.io/
FQDNの右横のアイコンをクリックします。
「http://」と表示されていたURLが気になっていましが、「Information」のタブに「Force HTTPS」という設定項目があり、これが有効化されているので、特に問題はないようです。
URLの「/」にアクセスすると、 Laravel のデフォルトページにルーティングするように実装しているので、このように表示されました。
Todoリストのページのルーティングパスにアクセスすると、Todoリストの初期画面が表示されました。
Todoの追加・更新・削除が行える(DBにデータが保存される)ことも確認できました。
Dockerfile を使ったデプロイは成功しました。しかし、釈然としません。
Clever Cloud の「Hosting PHP Applications」のページには Laravel がちゃんと動きそうな感じで説明されています。
色々と Clever Cloud について調べてみると CleverCloud/laravel-postgresql-example というリポジトリを発見しました。
このリポジトリの README に「Environment Variables」の説明があり、「CC_*」という独自の環境変数を指定する必要があることがわかりました。
ビルド後のマイグレーションについては「CC_POST_BUILD_HOOK」を使って php artisan migrate --force のようにセットせよとのこと。
また、Clever Cloud の Laravel に関するドキュメントが準備されており、こちらを参照すると、フロントエンドのビルドについては「CC_PRE_RUN_HOOK」に npm install && npm run prod と指定するようです。
(最初からドキュメントを読んでおけば。。。という話ですが)対応方法がわかったので、再度「my-todo-list-app」を削除してからやり直します。
左側のメニューから「Create」を選択して、「Application」をクリックします。
デプロイ対象のリポジトリを選択します。
アプリケーションの種類を選択する画面で「PHP」を選択します。
インスタンスタイプは最小構成を選択します。
「Name」に「my-todo-list-app」と入力し、「ZONE」はデータベースと同じく「Paris France (Clever Cloud)」を選択してみます。
追加のアドオンは不要なので「I DON'T NEED ANY ADD-ONS」をクリックします。
「Environment variables」のタブに移動して、「EXPERT」をクリックします。
「EXPERT」ボタンで直接編集できるモードに切り替えて、 Laravel の動作に必要な項目(「APP_KEY」など)に加えて、以下の内容も登録します。
※「CC_PRE_RUN_HOOK」に npm ci && npm run build を設定するとなぜかテストが通らなかったので、今回は npm install && npm run build を指定しました。
CC_PRE_RUN_HOOK="npm install && npm run build"
CC_POST_BUILD_HOOK="php artisan migrate --no-interaction --force"
CC_WEBROOT="/public"
「RESTART THE APP TO APPLY CHANGES」をクリックして反映します。
「Service dependencies」のタブで「my-todo-list-db」を紐付けます。
「Overview」のタブに移動し、「RE-BUILD AND START」をクリックします。
※もしビルド中の状態であれば一旦「CANCEL DEPLOYMENT」を押してから「RE-BUILD AND START」をクリックします。
「Successfully deployed」と表示されていればデプロイ成功です。
「/up」にアクセスすると、無事に Laravel のアプリケーションが動作していることが確認できました。
まとめ
Clever Cloud のビルドの仕組みがなかなか難しく、把握するまでに時間を要してしまいました。
結果的に今回は Dockerfile によるデプロイと Clever Cloud 独自のビルドシステムによるデプロイのどちらも触ることになりました。
Laravelをデプロイする場合の公式のドキュメントを事前に読んでなかった自分が悪かったんですが、 public ディレクトリを Document Root として指定する方法や npm パッケージのインストール方法、マイグレーションの実行などを環境変数で指定するというやり方はなかなか他の PaaS では見ない仕組みだったので、少々驚きました。
Clever Cloud はフランス拠点のクラウド事業者なので、リージョンがフランスを中心としたヨーロッパ圏が主となっているため、 Scalingo の場合と同様に、この点は日本から少々使いづらい面があるかと思います。
また、画面操作を行っていると似たような操作なのに画面によってUIが異なっていたり、「Logs」のタブでデプロイ中なのにログがリアルタイムに表示されない場合があったりと、リージョンが遠いことによる原因なのか、そもそもバグっぽい動作なのかわかりませんが、若干の使いづらさを感じる面がありました。
こういった感じなので、 Clever Cloud を積極的に利用するシーンはなかなかないのかな、というのが率直な感想です。
関連記事








































































