xwp/vip-go-site

WordPress VIP 网站环境


README

Travis CI Status GitHub Action CI Status

WordPress VIP 提供网站设置、开发环境和部署工具

  • 使用 Composer 添加项目依赖,包括插件和主题。
  • 使用 Composer 自动加载器在任何代码库中的任何地方使用流行的 PHP 包。
  • 包括一个基于 Docker 的本地开发环境,支持 PHP Xdebug 和邮件捕获。
  • 包括使用 Travis CI 或 GitHub Actions 到 WordPress VIP Go 的自动化构建和部署管道。

链接与资源

要求

安装依赖

我们建议在 macOS 上使用 Homebrew 或在 Windows 上使用 Chocolatey 来安装项目依赖。

brew install git php@8.2 composer node@18 mkcert nss
brew install --cask docker

代码编辑器和 Git 客户端

此存储库包括为 Visual Studio Code 编辑器 提供的建议扩展,以及在 .vscode 目录中提供 Xdebug 支持。

GitHub DesktopTower 这样的用户友好的 Git 客户端可以简化提交并简化合并冲突的解决。

概述

  • 可以将项目插件和主题作为 Composer 依赖项或手动添加到此存储库中的 plugins/your-pluginthemes/your-theme
  • 由于必须位于项目根目录的相同位置(这对于映射到服务器上的 WP 根目录的 vip-config 来说并不适用),因此 Composer 依赖项放置在 plugins/vendor
  • Composer 自动加载器 plugins/vendor/autoload.php 包含在 vip-config/vip-config.php 中。

初始设置

重要:一旦您完成了从 VIP Go 网站模板的初始设置,即可删除本节。

从本模板生成的网站项目旨在托管在 WP VIP GitHub 组织 下,因此它使用 Travis 进行部署,因为 VIP 存储库目前不支持 GitHub Actions。它还包括一个基于 GitHub Action 的工作流程,该工作流程可用于托管在支持 GitHub Actions 的任何 GitHub 组织中的项目。

VIP 平台配置

必须从 VIP Go 请求以下配置才能使用此网站存储库

  1. *-built 分支(如 master-builtdevelop-built)的部署。
  2. 跟踪 develop-built 分支的测试环境。

VIP 存储库设置

  1. 请确保 VIP 已配置网站以从 *-built 分支部署。

  2. 从此参考存储库创建一个新的本地 Git 存储库

     composer create-project xwp/vip-site-template --stability dev
    
  3. 将主题和插件添加为 Composer 依赖项

     composer require your/theme your/plugin another/plugin
    

    或手动将它们复制到 themesplugins。请记住通过在 themes/.gitignoreplugins/.gitignore 中排除它们来跟踪这些目录。

  4. 调整所有文件中的字符串和URL以匹配您的项目。搜索并替换以下字符串:xwp/vip-site-templatewpcomvip/devgo-vipXWP\Vip_Site_Templatelocal.wpenv.net

  5. 如果在此GitHub组织下托管此源仓库VIP GitHub组织,请将VIP Go上游仓库作为另一个远程仓库添加到此本地仓库,并将当前master强制推送到该上游仓库以覆盖此处的master分支。同样对develop分支执行此操作。

    如果在此GitHub组织的任何其他组织下托管此源仓库,只需将其推送到该仓库。

  6. 生成一个新的SSH密钥对,并将私钥部分添加到Travis CI配置作为DEPLOY_SSH_KEY GitHub Actions密钥,并将公钥部分作为VIP GitHub仓库的部署密钥

     ssh-keygen -f deploy-key -t rsa -b 4096 -C "technology+project-name@xwp.co"
    

    这为Travis CI或GitHub Actions提供了访问VIP仓库进行部署的权限。

  7. 根据选择的部署策略,从README中删除对Travis CI或GitHub Actions的引用。

  8. 在初始项目设置后,从README中删除这些初始设置说明。

如果部署逻辑需要访问多个私有GitHub仓库,则考虑使用专门的GitHub 机器用户进行部署,因为Travis CI仓库只能关联一个自定义密钥,而GitHub不允许在多个仓库之间共享相同的部署密钥。

设置 🛠

  1. 克隆此仓库

     git clone git@github.com:xwp/vip-site-template.git devgo-vip
    
  2. 移动到项目目录

     cd devgo-vip
    
  3. 安装项目依赖项

     npm install
    
  4. 安装SSL证书以将开发环境的证书颁发机构local/data/mkcert/rootCA.pem(见此处)添加到您的计算机上受信任列表。或者,您可以手动配置

    运行npm run install-cert

  5. 使用Docker启动开发环境

     npm run start
    

    使用npm run stop在任何时候停止虚拟环境。运行npm run start-debug以在调试模式下启动环境,其中显示容器输出的所有输出。运行npm run stop-all以停止所有正在运行的Docker容器,以防您遇到端口冲突。

  6. 使用local/public/wp-cli.yml中的配置安装本地WordPress多站点环境

     npm run setup
    

  7. 访问local.wpenv.net以查看开发环境。WordPress用户名devgo和密码devgo

  8. 访问mail.local.wpenv.net以查看WordPress发送的所有邮件。

本地开发环境使用自签名SSL证书进行HTTPS,因此可以忽略“您的连接不受保护”错误以访问网站。

解决端口冲突

Docker引擎与主机计算机共享网络接口,因此所有容器使用的端口都需要空闲且未被任何其他服务使用,例如DNS解析器在端口53、MySQL服务在端口3306或另一个在端口80上运行的Web服务器。

使用包含的npm run stop-all命令停止在主机机器上运行Docker容器的所有容器。或者,您可以调整docker-compose.yml中的端口映射,在主机机器上公开不同的端口。

贡献

  1. 按照上面“设置”部分所述设置本地环境。

  2. 在开始处理功能或错误修复时,创建一个Git分支,例如feature/namefix/vertical-scroll。将您的工作提交到该分支,直到准备进行质量保证和测试。

  3. 从您的功能分支向develop分支或预发布环境提交拉取请求

  4. 审查来自自动检查的任何反馈。请注意,您的本地环境配置为在每次提交之前自动检查任何问题,因此如果您频繁提交,应该很少有问题。

  5. 如果所有检查都通过,请在GitHub上将功能分支合并到develop分支。自动的Travis CI工作流(见下文“部署”部分以获取详细信息)或GitHub Actions工作流将部署到develop-built分支。

  6. 在VIP Go预发布服务器上测试您的功能。如果需要进行修复或更改,从同一功能分支向develop分支提交新的拉取请求。

  7. 一旦功能准备就绪,从同一功能分支向master分支提交新的拉取请求。

  8. 确保所有自动检查都通过,并合并拉取请求。自动的Travis CI工作流GitHub Action工作流将部署到master-built分支。

插件和主题

将新主题和插件作为Composer依赖项添加

composer require your/theme your/plugin another/plugin

或将它们手动复制到themespluginsclient-mu-plugins目录。请记住,通过从themes/.gitignoreplugins/.gitignore中排除,开始跟踪手动复制的目录。

使用client-mu-plugins/plugin-loader.php强制启用某些插件。

要更新作为Composer依赖项添加的插件和主题,请使用composer install package/namecomposer install --dev package/name,其中package/name是插件或主题包的名称。请确保将更新的composer.jsoncomposer.lock提交到GitHub存储库。

对于手动安装的插件和主题,用更新的文件集替换目录,并将它们提交到GitHub存储库。

本地开发环境

我们使用Docker容器来复制VIP Go生产环境,所有VIP依赖项都添加为Composer包,并映射到由docker-compose.yml中定义的容器内的特定目录。

容器主机的80端口请求被Nginx代理容器捕获,该代理容器根据HTTP主机名将所有请求路由到必要的服务容器。

导入和导出数据

使用VIP仪表板或VIP-CLI从生产环境中下载数据库数据。

  • 运行npm run vip -- export sql --output=local/public/wp/vip-export.sql将最新的可用备份下载到您的本地计算机。

  • 运行npm run cli -- wp db export导出并备份您本地开发环境的数据库,该操作将在local/public/wp目录中放置一个如wordpress-2020-03-04-448b132.sql的文件。

  • 运行npm run cli -- wp db import vip-export.sqllocal/public/wp/vip-export.sql导入到您的本地开发环境中。

  • 运行 npm run cli -- bash -c "pv import.sql | wp db query" 以导入大型数据库文件 local/public/wp/vip-export.sql,同时使用 pv(WordPress容器自带)监控进度。bash -c 前缀允许我们在容器内部运行多个命令,而不会影响主 npm run cli 命令。

脚本 🧰

我们使用 npm 作为标准的任务运行器,用于执行文件检查和创建发布包等任务。Composer 脚本(在 composer.json 中定义)仅用于与 PHP 相关的任务,并在 package.json 中有一个包装的 npm 脚本,以保持与其他注册任务的统一。

  • 使用 npm run startnpm run stop 启动和停止本地开发环境。运行 npm run start-debug 以在调试模式下启动环境,此时容器所有输出都会显示。运行 npm run stop-all 以停止所有活动的 Docker 容器,以防出现端口冲突。运行 npm run stop -- --volumes 以停止项目容器并删除数据库数据卷。

  • 使用 npm run lint 检查源代码是否符合定义的编码标准。

  • 使用 npm run cli -- wp help,其中 wp help 是在 WordPress docker 容器内运行的任何命令。例如,运行 npm run cli -- wp plugin list 以列出所有可用的插件,或运行 npm run cli -- composer update 使用容器内的 PHP 二进制文件更新 Composer 依赖项,而不是使用主机机的依赖项。运行 npm run cli -- wp user create devgo local@devgo.vip --role=administrator --user_pass=devgo 以创建一个新的管理员用户,用户名为 devgo,密码也为 devgo

  • 使用 npm run vip 在预发布和生产环境中运行 VIP CLI 命令。

  • 使用 npm run install-cert 将本地开发环境中的自签名 SSL 证书权威机构(位于 local/certs/rootCA.pem)标记为可信。请确保您的计算机上已安装 mkcert。此命令可避免在访问站点时出现“您的连接不安全”错误。在运行此命令之前停止本地环境,并在安装证书并重新启动环境后再重新启动浏览器/标签页。

部署 🚀

部署过程始终从相同的干净状态开始,这使得在不同环境(如本地开发机器和持续集成服务)之间可以重复构建。

将代码合并到 master 分支以用于生产或 develop 分支以用于预发布后,部署到 VIP 上游仓库由 Travis CI 构建过程GitHub Actions 工作流程 自动处理。

CI 过程会将代码与 VIP 编码标准 进行比较,构建发布包,并将更改推送到用于生产的 master-built 分支或用于预发布的 develop-built 分支。

┌──────────┐   ┌───────────────────────────┐   ┌────────────────┐
│  master  ├──►│  Travis / GitHub Actions  ├──►│  master-built  │
└──────────┘   └───────────────────────────┘   └────────────────┘

内部运行 local/scripts/deploy.sh 脚本,该脚本会对部署源分支进行干净检出到 local/deploy/src,运行构建过程,并使用 rsync 将项目文件与发布工件一起复制到 deploy/dist。然后,它将更改提交到匹配的 *-built 分支,VIP Go 服务器随后导入此分支。

NewRelic 部署标记

该仓库包括在每次部署后支持发布NewRelic部署标记的功能,如果Travis CI或GitHub Actions环境中配置了NEW_RELIC_API_KEY。请注意,我们没有使用官方的NewRelic部署标记GitHub操作,因为它对于多个App GUID的配置更加困难。

npm run newrelic-mark-deploy -- --search "*-production" --api_key "${{ secrets.NEW_RELIC_API_KEY }}" --commit "${{ github.sha }}" --user "${{ github.actor }}" --description "$(git log -1 --pretty=%B)"

其中:

  • --search是用于通过应用名称查找NewRelic应用GUID的搜索词。应用名称在vip-config/vip-config.php中设置为$_SERVER['HTTP_HOST']-VIP_GO_APP_ENVIRONMENT,因此我们使用通配符搜索*-VIPENVNAME,其中VIPENVNAME是环境名称,例如stagingproduction
  • --api_key是用于与New Relic进行认证的API密钥
  • --commit是要用于部署的提交哈希。
  • --user是与部署关联的用户。
  • --description是用于部署的描述。