oskarmodig/lando-scripts

使用lando设置和部署WordPress主题和插件的辅助脚本


README

先决条件

  • PHP 8.2(或更高版本)
  • Composer
  • jq(使用sudo apt install jq安装)

Windows

您需要运行WSL 2,默认正确的发行版(使用wsl --list --verbosewsl --set-default Ubuntu检查,例如)。

此外,您可能需要将此添加到您的/etc/wsl.conf文件中(在WSL中)

[automount]
options = "metadata,umask=22,fmask=11"

然后,请确保您有一个不是root的Linux用户,尽管可能需要sudo权限。还要确保您的Linux用户是项目文件的拥有者。

您应该能够使用modlan setup运行设置。

用法

Lando脚本

这些是在Lando容器中运行的脚本。您可以在.lando.yml文件中设置它们,并使用lando <script-name>运行它们。它们通过modig-lando.sh脚本运行,输入变量通过MOD_INP_ENVMOD_INP_SCRIPT变量设置。

  • deploy - 将包部署到服务器

  • make-pot - 为翻译创建.pot文件

  • 示例

  deploy:
      cmd:
        - appserver: modig-lando.sh MOD_INP_ENV=app_env MOD_INP_SCRIPT=deploy

Unix

  • WordPress设置使用modlan.sh setup运行
  • WordPress销毁使用modlan.sh destroy运行

Windows

  • WordPress设置使用modlan setup运行
  • WordPress销毁使用modlan destroy运行
  • 启动ngrok使用modlan ngrok运行
  • 停止ngrok使用modlan ngrokk运行

对于上述所有命令,如果您不是WSL中的默认用户,也可以将您的Linux用户名作为第二个参数传递。

环境设置

这是一份关于首次设置本地开发环境的指南,而不是针对每个项目。假设您已安装了先决条件。

  1. 安装Lando(这将安装所需的Docker版本)
  2. 全局安装WordPress编码标准规则集composer global require oskarmodig/wpcs
    1. 当它要求时,请信任它以执行代码
  3. 安装用于构建和部署项目的脚本composer global require oskarmodig/lando-scripts
  4. 将全局Composer bin文件夹添加到您的PATH中
    1. 在Windows上,这是%APPDATA%\Composer\vendor\bin
    2. 在Unix上,这是~/.composer/vendor/bin
  5. 将composer config process-timout更新为0 composer global config process-timeout 0

注意,在Windows/WSL中,必须同时在Windows和WSL中安装oskarmodig/lando-scripts

项目设置

环境变量文件

有两种类型的环境变量文件,一种是为每个包特定的("包环境文件"),另一种是为lando应用程序全局的("全局环境文件")。如果您使用全局环境文件,它们的名称必须是.modig.lando.global.env(可以包含在git中)和/或.modig.lando.local.env(不应包含在git中)。它们必须放在与您的.lando.yml文件相同的目录中。

包环境文件可以按您的喜好命名和放置,但最好在包根目录中。建议的名称是lando.global.envlando.local.env,同样遵循上述git规则。

可以在全局和包环境文件中放置的内容,在环境变量部分有描述。

lando应用程序

以下是'.lando.yml'文件的模板,这是项目的Lando配置文件

#
# SETUP INSTRUCTIONS can be found at https://github.com/oskarmodig/modig-lando-scripts
#
name: app-name
recipe: wordpress
proxy:
  appserver:
    - app-name.lndo.site
    - second.app-name.lndo.site
    - third.app-name.lndo.site
  pma:
    - pma.app-name.lndo.site
  mailhog:
    - mail.app-name.lndo.site
config:
  webroot: wordpress
  php: '8.2'
excludes: # This is only needed for a WSL setup. Excludes folders from the Docker file sync, which greatly improves performance
  - wordpress # Excludes the entire WordPress folder
  - node_modules # You can remove this if not using Node.js
  - vendor # You can remove this if not using Composer
services:
  appserver:
    build:
      - composer global require oskarmodig/lando-scripts # Installs the deploy scripts in the container.
    extras:
      - apt-get update -y
      - apt-get install zip -y
      - apt-get install nano -y
  pma:
    type: phpmyadmin
    host:
      - database
  mailhog:
    type: mailhog
    hogfrom:
      - appserver
environment:
  PATH: "/var/www/.composer/vendor/bin:$PATH" # Adds the global composer bin folder to the PATH, so you can run the scripts from the container. 

env_file: # Run 'lando rebuild' for changes here in these files to take effect
  - .lando.public.env
  - .lando.secret.env

events:
  post-start:
    - appserver: composer global update # Updates the global composer packages when the container starts    

tooling:
  composer:
    service: appserver
  mount:
      cmd:
        - appserver: cd /app/wordpress/wp-content/plugins/ && ln -snf ../../../app-name app-name # Symlinks the app to the WordPress plugins folder

  deploy:
      cmd:
        - appserver: modig-lando.sh MOD_INP_ENV=app_env MOD_INP_SCRIPT=deploy # Runs the deploy script

  deploy-test:
      cmd:
        - appserver: modig-lando.sh MOD_INP_ENV=app_env MOD_INP_SCRIPT=deploy MOD_INP_TEST=true # Runs the deploy script with the test flag

  make-pot:
    cmd:
      - appserver: modig-lando.sh MOD_INP_ENV=app_env MOD_INP_SCRIPT=make-pot # Creates a .pot file for translations

多个包

上面的路径假设只有一个包,WordPress 和 lando 应用程序已设置在包目录中。如果有多个包,可以将包(git 仓库)放置在子文件夹中,并在项目根目录中有一个单独的 .lando.yml 文件。

您需要按照以下方式修改 lando 文件

  1. env_file - 将特定包的环境文件添加到 env_file 列表中。
    • 示例
    env_file: # Run 'lando rebuild' for changes here in these files to take effect
      - plugin-dir/.lando.public.env
      - plugin-dir/.lando.secret.env
      - theme-dir/.lando.public.env
      - theme-dir/.lando.secret.env
  2. mount - 为每个包添加挂载命令。
    • 示例
      mount:
        cmd:
          - appserver: cd /app/wordpress/wp-content/plugins/ && ln -snf ../../../plugin-dir plugin-dir
          - appserver: cd /app/wordpress/wp-content/theme/ && ln -snf ../../../theme-dir theme-dir
  3. tooling - 为每个包添加工具命令。
    • 示例
      deploy-plugin:
          cmd:
            - appserver: modig-lando.sh MOD_INP_ENV=plugin_env MOD_INP_SCRIPT=deploy
      deploy-theme:
          cmd:
            - appserver: modig-lando.sh MOD_INP_ENV=theme_env MOD_INP_SCRIPT=deploy

输入变量

输入变量在调用 lando 脚本时设置,主要用于确定运行哪个环境和脚本。使用 MOD_INP_ENVMOD_INP_SCRIPT 变量来确定要运行的环境和脚本。

有关如何运行脚本的示例,请参阅 .lando.yml 文件 中的 lando 工具部分。

环境变量

全局环境变量

同样,这些变量是按 lando 应用程序设置的,而不是按包设置。它们主要用于 Windows 和 Linux 脚本(modlan.bat 和 modlan.sh),在 lando 应用程序容器外运行。

一般全局环境变量
设置全局环境变量

用于站点设置的变量,通过 modlan.sh setupmodlan.bat setup 运行。

NGROK 全局环境变量

包环境变量

由于 Lando 应用程序可能包含多个包,以下所有环境变量都可以包含包标识符,以区分不同包的变量。例如,MOD_VAR_PACKAGE_NAME 可以在同一文件中设置为 MOD_VAR__PACKAGE1__PACKAGE_NAMEMOD_VAR__PACKAGE2__PACKAGE_NAME。使用的变量由 MOD_INP_ENV 输入变量 确定。

除了按包设置变量外,还可以将它们设置为测试变量,变量名中包含 __TEST__。例如 MOD_VAR__TEST__PACKAGE_NAMEMOD_VAR__PACKAGE1_TEST__PACKAGE_NAME

一般包环境变量
部署包环境变量
发布包环境变量
Git 标签包环境变量

部署的默认排除列表

除了这些默认排除项外,还可以设置 MOD_VAR_EXTRA_EXCLUDES 环境变量,将其设置为逗号分隔的字符串,以包含额外的排除项。