PHP: はじめに

StackheroでPHPを始める方法

👋 Stackheroのドキュメントへようこそ!

Stackheroは、数多くの利点を提供する使いやすいPHPクラウドソリューションを提供しています。

  • 簡単なgit pushでアプリケーションを数秒でデプロイ
  • 独自のドメイン名を使用し、HTTPS証明書の自動設定による強化されたセキュリティを享受。
  • 自動バックアップワンクリックアップデート、そしてシンプルで透明性のある予測可能な価格設定で安心を提供。
  • プライベートで専用のVMによる最適なパフォーマンスと強固なセキュリティを実現。

時間を節約し、生活を簡素化:StackheroのPHPクラウドホスティングソリューションを試すのに5分しかかかりません

StackheroでPHPアプリケーションを立ち上げるのは、シンプルでありながら強力です。わずか数ステップで、プロジェクトをオンラインにしてすぐに利用開始できます。このガイドでは、PHPサービスの作成、設定、デプロイまでを、分かりやすく段階的にご案内します。

まずは、StackheroのダッシュボードからPHPサービスを作成できます。インターフェースは、迅速かつ直感的に操作できるよう設計されています。

始める前に、以下のツールが用意されていることをご確認ください:

  1. Githttps://git-scm.com/downloads からダウンロードできます。
  2. 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

これでアプリケーションのデプロイ準備が整いました。以下のコマンドでコードをプッシュできます:

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サービスの設定でこの項目を変更できます。

デプロイ時に次のようなエラーが表示された場合:

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

次のエラーが表示された場合:

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

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

別のブランチ(例: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のキーチェーンに安全に保存できます。以下のコマンドを実行してください:

/usr/bin/ssh-add --apple-use-keychain ~/.ssh/id_rsa

これ以降、コードをプッシュする際にパスワード入力は不要になります。

本番環境やステージング環境では、トークンやパスワードなどの機密データを安全に保管することが重要です。リポジトリに直接記載するのではなく、環境変数の利用を推奨します。Stackheroダッシュボードで環境変数を追加し、コード内で取得できます。たとえば、mySecret という環境変数を作成した場合、PHPでは次のように取得できます:

getenv("mySecret")

コードをプッシュすると、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/ フォルダ内に保存してください。

インスタンスの再起動やコードのプッシュ時、永続ストレージ以外に保存されたデータは失われる可能性があります。