PHP: はじめに
StackheroでPHPを始める方法
👋 Stackheroのドキュメントへようこそ!
Stackheroは、数多くの利点を提供する使いやすいPHPクラウドソリューションを提供しています。
- 簡単な
git pushでアプリケーションを数秒でデプロイ。- 独自のドメイン名を使用し、HTTPS証明書の自動設定による強化されたセキュリティを享受。
- 自動バックアップ、ワンクリックアップデート、そしてシンプルで透明性のある予測可能な価格設定で安心を提供。
- プライベートで専用のVMによる最適なパフォーマンスと強固なセキュリティを実現。
時間を節約し、生活を簡素化:StackheroのPHPクラウドホスティングソリューションを試すのに5分しかかかりません!
StackheroでPHPアプリケーションを立ち上げるのは、シンプルでありながら強力です。わずか数ステップで、プロジェクトをオンラインにしてすぐに利用開始できます。このガイドでは、PHPサービスの作成、設定、デプロイまでを、分かりやすく段階的にご案内します。
PHPサービスを開始する
まずは、StackheroのダッシュボードからPHPサービスを作成できます。インターフェースは、迅速かつ直感的に操作できるよう設計されています。
前提条件
始める前に、以下のツールが用意されていることをご確認ください:
- Git。 https://git-scm.com/downloads からダウンロードできます。
- Windows Terminal(Windowsユーザー向け・任意)。このターミナルはより快適な操作体験を提供します。Microsoft Storeから入手可能です。
サービスの設定
主な設定項目は、SSH公開鍵です。以下のいずれかのコマンドで公開鍵を取得できます:
cat ~/.ssh/id_rsa.pub
または
cat ~/.ssh/id_ed25519.pub
まだSSH鍵ペアをお持ちでない場合は、LinuxやmacOSでは ssh-keygen、Windowsでは ssh-keygen.exe を使って生成できます。
公開鍵を取得したら、StackheroダッシュボードでPHPサービスを選択し、設定ページに進み、指定されたフィールドに鍵を貼り付けてください。
Tip: すべての今後のサービスにSSH公開鍵を適用したい場合は、グローバル設定が可能です。ダッシュボード右上のプロフィール画像をクリックし、「Your profile」に進んで、SSH公開鍵を貼り付けてください。
サンプルのクローン
スムーズに始められるよう、サンプルPHPアプリケーションを用意しています。以下のコマンドでリポジトリをクローンできます:
git clone https://github.com/stackhero-io/phpGettingStarted.git stackhero-php-getting-started
cd stackhero-php-getting-started
リモートリポジトリサーバーの設定
Stackheroでは、Gitを使ったアプリケーションのデプロイが簡単です。ダッシュボードのPHPサービスの最初のページに表示されている git remote コマンドをコピーしてください。以下のような形式です:
git remote add stackhero ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git
PHPコードのデプロイ
これでアプリケーションのデプロイ準備が整いました。以下のコマンドでコードをプッシュできます:
git push stackhero main
初回プッシュ時には、鍵フィンガープリントの承認を求められます。「yes」と入力してください。少し待つと、アプリケーションがオンラインになります。Stackheroダッシュボードに表示されているURL(通常は https://<XXXXXX>.stackhero-network.com)でステータスを確認できます。
アプリケーションを更新する場合は、www/index.php(または必要なファイル)を修正し、以下のコマンドで再デプロイしてください:
git add -A .
git commit -m "Update www/index.php"
git push stackhero main
既存アプリケーションのデプロイ
すでにPHPアプリケーションをお持ちの場合は、リモートリポジトリをプロジェクトに追加するだけです(リモートリポジトリサーバーの設定 を参照)。その後、以下のコマンドで変更をプッシュできます:
git push stackhero main
デフォルトでは、Stackheroは www ディレクトリ内のPHPコードおよび静的ファイルを参照します。たとえば、yourdomain.com/myphoto.jpg にアクセスがあった場合、www/myphoto.jpg からファイルが提供されます。アプリケーションで別の公開ディレクトリを使用している場合は、PHPサービスの設定でこの項目を変更できます。
エラー「failed to push some refs to '[...]'」の対処
デプロイ時に次のようなエラーが表示された場合:
error: failed to push some refs to '[...]'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
このメッセージは、リモートGitリポジトリにローカルに存在しない変更があることを意味します。リモートの内容をローカルのバージョンで上書きしたい場合は、以下のコマンドで強制プッシュできます:
git push -f stackhero main
エラー「src refspec main does not match any」の対処
次のエラーが表示された場合:
error: src refspec main does not match any
error: failed to push some refs to 'ssh://<XXXXXX>.stackhero-network.com:222/project.git'
これは通常、ローカルに main ブランチが存在しないことを示します。その場合は、代わりに master ブランチをプッシュしてください:
git push stackhero master
プッシュ時に「Everything up-to-date」と表示される場合の対処
Gitが Everything up-to-date と表示され、変更がデプロイされない場合は、変更をコミットし忘れている可能性が高いです。以下のコマンドで解決できます:
git add -A .
git commit -m "Your commit message"
git push stackhero main
コードを変更していないがデプロイを強制したい場合は、空のコミットを作成できます:
git commit --allow-empty -m "Force update"
git push stackhero main
main以外のブランチをデプロイする
別のブランチ(例:production)をデプロイしたい場合は、以下のコマンドを使用します:
git push stackhero production:main
タグをデプロイする
特定のタグ(例:v1.0)をデプロイするには、次のコマンドを実行します:
git push stackhero 'v1.0^{}:main'
^{} を付けることで、タグに関連付けられたコミットが正しくプッシュされます。
ロールバックや特定のコミットをデプロイする
特定のコミットをデプロイしたい場合は、まず git log でハッシュ値を確認し、以下のコマンドでそのコミットを強制プッシュできます:
git push -f stackhero <HASH>:main
複数環境へのデプロイ
本番環境やステージング環境など、用途ごとにサービスを分けるのが一般的です。リモートリポジトリのリネームや追加で管理できます。
現在のリモート名を stackhero から stackhero-staging に変更するには:
git remote rename stackhero stackhero-staging
次に、ダッシュボードから本番用の新しいPHPサービスを作成し、以下のコマンドで追加します:
git remote add stackhero-production ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git
これで、以下のコマンドで任意の環境にデプロイできます:
git push stackhero-production main
または
git push stackhero-staging main
macOSのキーチェーンにSSH秘密鍵のパスワードを保存する
macOSをご利用で、コードをプッシュするたびにSSH鍵のパスワード入力を求められる場合、鍵のパスワードを削除する必要はありません。macOSのキーチェーンに安全に保存できます。以下のコマンドを実行してください:
/usr/bin/ssh-add --apple-use-keychain ~/.ssh/id_rsa
これ以降、コードをプッシュする際にパスワード入力は不要になります。
シークレットの管理
本番環境やステージング環境では、トークンやパスワードなどの機密データを安全に保管することが重要です。リポジトリに直接記載するのではなく、環境変数の利用を推奨します。Stackheroダッシュボードで環境変数を追加し、コード内で取得できます。たとえば、mySecret という環境変数を作成した場合、PHPでは次のように取得できます:
getenv("mySecret")
PHP依存関係の管理
コードをプッシュすると、Stackheroのデプロイスクリプトが composer.json を読み込み、Composerで指定された依存パッケージを自動的にインストールします。
ファイルの保存
アプリケーションでファイル(例:ユーザーがアップロードした写真など)を保存する必要がある場合、オブジェクトストレージの利用がおすすめです。この方法なら複数サービス間でファイル共有が容易になり、アップロードファイルとコードを分離できます。高速・信頼性が高く、S3互換の MinIO などを検討してみてください。
ローカルストレージを利用したい場合は、PHPインスタンスに付属する永続ストレージ /persistent/storage/ をご利用いただけます。
たとえば、アップロードファイルを保存するには、move_uploaded_file 関数を次のように使います:
move_uploaded_file($_FILES['image']['tmp_name'], '/persistent/storage/image.jpg');
PHPでのファイルアップロードについては、公式ドキュメントもご参照ください:https://www.php.net/manual/en/features.file-upload.php
注意: データは必ず
/persistent/storage/フォルダ内に保存してください。インスタンスの再起動やコードのプッシュ時、永続ストレージ以外に保存されたデータは失われる可能性があります。