xwp / vip-go-site
WordPress VIP 网站环境
Requires
- php: >=8.2
- composer/installers: ^1.12
- wpackagist-theme/twentytwenty: ^2.5
Requires (Dev)
- automattic/vip-go-mu-plugins: dev-master
- automattic/vipwpcs: ^3.0
- dealerdirect/phpcodesniffer-composer-installer: ^1.0
- johnpbloch/wordpress: dev-master
- phpunit/phpunit: ^9.6.13
- wp-cli/wp-cli-bundle: ^2.8
- wp-phpunit/wp-phpunit: ^6.4.2
- xwp/wait-for: ^0.0.2
- yoast/phpunit-polyfills: ^2.0
- dev-master
- dev-renovate/phpunit-phpunit-9.x
- dev-renovate/npm-run-all2-6.x
- dev-renovate/wp-phpunit-wp-phpunit-6.x
- dev-renovate/elasticsearch-7.x
- dev-renovate/jwilder-nginx-proxy-1.x
- dev-renovate/wp-cli-wp-cli-bundle-2.x
- dev-renovate/node-18.x
- dev-renovate/automattic-vip-2.x
- dev-renovate/wordpress-monorepo
- dev-renovate/npm-run-all2-5.x
- dev-add/simplify-setup
- dev-feature/lint-yaml
- dev-feature/js-deploy
This package is auto-updated.
Last update: 2024-09-19 11:36:04 UTC
README
为 WordPress VIP 提供网站设置、开发环境和部署工具
- 使用 Composer 添加项目依赖,包括插件和主题。
- 使用 Composer 自动加载器在任何代码库中的任何地方使用流行的 PHP 包。
- 包括一个基于 Docker 的本地开发环境,支持 PHP Xdebug 和邮件捕获。
- 包括使用 Travis CI 或 GitHub Actions 到 WordPress VIP Go 的自动化构建和部署管道。
链接与资源
要求
- PHP 8.2
- Composer
- Node.js 版本 18
- Docker 和 Docker Compose
- rsync 用于部署
安装依赖
我们建议在 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 Desktop 或 Tower 这样的用户友好的 Git 客户端可以简化提交并简化合并冲突的解决。
概述
- 可以将项目插件和主题作为 Composer 依赖项或手动添加到此存储库中的
plugins/your-plugin
和themes/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 请求以下配置才能使用此网站存储库
- 从
*-built
分支(如master-built
和develop-built
)的部署。 - 跟踪
develop-built
分支的测试环境。
VIP 存储库设置
-
请确保 VIP 已配置网站以从
*-built
分支部署。 -
从此参考存储库创建一个新的本地 Git 存储库
composer create-project xwp/vip-site-template --stability dev
-
将主题和插件添加为 Composer 依赖项
composer require your/theme your/plugin another/plugin
或手动将它们复制到
themes
或plugins
。请记住通过在themes/.gitignore
和plugins/.gitignore
中排除它们来跟踪这些目录。 -
调整所有文件中的字符串和URL以匹配您的项目。搜索并替换以下字符串:
xwp/vip-site-template
、wpcomvip/devgo-vip
、XWP\Vip_Site_Template
、local.wpenv.net
。 -
如果在此GitHub组织下托管此源仓库VIP GitHub组织,请将VIP Go上游仓库作为另一个远程仓库添加到此本地仓库,并将当前
master
强制推送到该上游仓库以覆盖此处的master
分支。同样对develop
分支执行此操作。如果在此GitHub组织的任何其他组织下托管此源仓库,只需将其推送到该仓库。
-
生成一个新的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仓库进行部署的权限。
-
根据选择的部署策略,从README中删除对Travis CI或GitHub Actions的引用。
-
在初始项目设置后,从README中删除这些初始设置说明。
如果部署逻辑需要访问多个私有GitHub仓库,则考虑使用专门的GitHub 机器用户进行部署,因为Travis CI仓库只能关联一个自定义密钥,而GitHub不允许在多个仓库之间共享相同的部署密钥。
设置 🛠
-
克隆此仓库
git clone git@github.com:xwp/vip-site-template.git devgo-vip
-
移动到项目目录
cd devgo-vip
-
安装项目依赖项
npm install
-
安装SSL证书以将开发环境的证书颁发机构
local/data/mkcert/rootCA.pem
(见此处)添加到您的计算机上受信任列表。或者,您可以手动配置。运行
npm run install-cert
-
使用Docker启动开发环境
npm run start
使用
npm run stop
在任何时候停止虚拟环境。运行npm run start-debug
以在调试模式下启动环境,其中显示容器输出的所有输出。运行npm run stop-all
以停止所有正在运行的Docker容器,以防您遇到端口冲突。 -
使用
local/public/wp-cli.yml
中的配置安装本地WordPress多站点环境npm run setup
。
-
访问local.wpenv.net以查看开发环境。WordPress用户名
devgo
和密码devgo
。 -
访问mail.local.wpenv.net以查看WordPress发送的所有邮件。
本地开发环境使用自签名SSL证书进行HTTPS,因此可以忽略“您的连接不受保护”错误以访问网站。
解决端口冲突
Docker引擎与主机计算机共享网络接口,因此所有容器使用的端口都需要空闲且未被任何其他服务使用,例如DNS解析器在端口53、MySQL服务在端口3306或另一个在端口80上运行的Web服务器。
使用包含的npm run stop-all
命令停止在主机机器上运行Docker容器的所有容器。或者,您可以调整docker-compose.yml
中的端口映射,在主机机器上公开不同的端口。
贡献
-
按照上面“设置”部分所述设置本地环境。
-
在开始处理功能或错误修复时,创建一个Git分支,例如
feature/name
或fix/vertical-scroll
。将您的工作提交到该分支,直到准备进行质量保证和测试。 -
从您的功能分支向
develop
分支或预发布环境提交拉取请求。 -
审查来自自动检查的任何反馈。请注意,您的本地环境配置为在每次提交之前自动检查任何问题,因此如果您频繁提交,应该很少有问题。
-
如果所有检查都通过,请在GitHub上将功能分支合并到
develop
分支。自动的Travis CI工作流(见下文“部署”部分以获取详细信息)或GitHub Actions工作流将部署到develop-built
分支。 -
在VIP Go预发布服务器上测试您的功能。如果需要进行修复或更改,从同一功能分支向
develop
分支提交新的拉取请求。 -
一旦功能准备就绪,从同一功能分支向
master
分支提交新的拉取请求。 -
确保所有自动检查都通过,并合并拉取请求。自动的Travis CI工作流或GitHub Action工作流将部署到
master-built
分支。
插件和主题
将新主题和插件作为Composer依赖项添加
composer require your/theme your/plugin another/plugin
或将它们手动复制到themes
、plugins
或client-mu-plugins
目录。请记住,通过从themes/.gitignore
和plugins/.gitignore
中排除,开始跟踪手动复制的目录。
使用client-mu-plugins/plugin-loader.php
强制启用某些插件。
要更新作为Composer依赖项添加的插件和主题,请使用composer install package/name
或composer install --dev package/name
,其中package/name
是插件或主题包的名称。请确保将更新的composer.json
和composer.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.sql
将local/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 start
和npm 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
是环境名称,例如staging
或production
。--api_key
是用于与New Relic进行认证的API密钥。--commit
是要用于部署的提交哈希。--user
是与部署关联的用户。--description
是用于部署的描述。