PHP: 入门指南

如何在 Stackhero 上快速开始使用 PHP

👋 欢迎来到 Stackhero 文档!

Stackhero 提供现成的 PHP 云 解决方案,具有多种优势,包括:

  • 通过简单的 git push 在几秒钟内 部署您的应用程序。
  • 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
  • 享受自动备份一键更新以及简单、透明和可预测的定价带来的安心。
  • 通过私有和专用的 VM获得最佳的性能和强大的安全性

节省时间简化您的生活:只需 5 分钟即可试用 Stackhero 的 PHP 云托管 解决方案!

在 Stackhero 上部署您的 PHP 应用程序既简单又强大。只需几个步骤,您的项目就能上线并投入使用。本指南将以友好、循序渐进的方式,带您完成 PHP 服务的创建、配置和部署。

首先,您可以直接在 Stackhero 控制台上创建 PHP 服务。界面设计简洁直观,能够让您快速完成操作。

在开始之前,请确保您已准备好以下工具:

  1. Git。可从 https://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

此后,macOS 推送代码时将不再询问密钥密码。

在生产和预发布环境中,建议将敏感数据(如令牌和密码)安全存储。请勿将敏感信息硬编码在仓库中,建议使用环境变量。您可以在 Stackhero 控制台添加环境变量,然后在代码中访问。例如,若创建了名为 mySecret 的环境变量,可在 PHP 中这样获取:

getenv("mySecret")

每次推送代码时,Stackhero 的部署脚本会读取您的 composer.json 文件,并自动通过 Composer 安装所需依赖。

如果您的应用需要存储文件(如用户上传的图片),建议使用对象存储方案。这有助于多服务间共享文件,并将上传文件与代码分离。您可以考虑 MinIO,它是一款高性能、可靠且兼容 S3 的解决方案。

如果您更倾向于本地存储,可使用 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/ 文件夹内。

如果实例重启或推送代码变更,存储在持久化存储之外的数据可能会丢失。