Multisitio

Trellis asume que la configuración de WordPress ya ha sido realizada. En caso de no ser así, asegúrese que los siguientes valores serán ubicados en algún lugar del archivo de Bedrock config/application.php antes de provisionar el servidor:

/* Multisitio */
Config::define('WP_ALLOW_MULTISITE', true);
Config::define('MULTISITE', true);
Config::define('SUBDOMAIN_INSTALL', false); // Escriba true si utiliza subdominios
Config::define('DOMAIN_CURRENT_SITE', env('DOMAIN_CURRENT_SITE'));
Config::define('PATH_CURRENT_SITE', env('PATH_CURRENT_SITE') ?: '/');
Config::define('SITE_ID_CURRENT_SITE', env('SITE_ID_CURRENT_SITE') ?: 1);
Config::define('BLOG_ID_CURRENT_SITE', env('BLOG_ID_CURRENT_SITE') ?: 1);

También deberás actualizar la configuración del Multisitio en (group_vars/<environment>/wordpress_sites.yml):

multisite:
  enabled: true
  subdomains: false # Elija true si va a estar realizando una instalación con subdomnios.

A su vez, querrás definir la variable env para multisitios las configuraciones DOMAIN_CURRENT_SITE o PATH_CURRENT_SITE.

env:
  domain_current_site: store1.example.com

Ese env será unido a los defaults de Trellis, por lo que no deberás preocuparte por re-definir todas las propiedades.

Aquí un ejemplo de una configuración completa para el multisitio:

# group_vars/production/wordpress_sites.yml
wordpress_sites:
  example.com:
    site_hosts:
      - canonical: example.com
    local_path: ../site # ruta apuntando al directorio del sitio en Bedrock (relativo a la raíz de Ansible)
    admin_email: admin@example.com
    multisite:
      enabled: true
      subdomains: true
    ssl:
      enabled: false
    cache:
      enabled: false
    env:
      domain_current_site: store1.example.com

Luego de provisionar el servidor remoto y haciendo un deploy del sitio, debes instalar WordPress como paso final en los entornos de producción y staging. Ingresa mediante SSH a tu servidor con el usuario web ssh web@<domain> y en el directorio /srv/www/<domain>/current/ corre el siguiente comando WP-CLI para instalar WordPress:

$ wp core multisite-install --title="site title" --admin_user="username" --admin_password="password" --admin_email="you@example.com"

Notarás que la URL principal de la red contiene un /wp/ en la ruta de posts y páginas. Este es un problema en el core de WP que ocurre cuando WordPress se encuentra en un subdirectorio, como sucede en el caso de Bedrock. Ver issue de Bedrock #250 para más detalles, así cóomo también el plugin Multisite Fixes que arregla este inconveniente.

Si utilizas Let's Encrypt como tu proveedor SSL y tu instalación Multisitio utiliza subdominios, deberás generar certificados individuales para cada subdominio. Esto debería cambiar pronto ya que Let's Encrypt comenzará a expedir certificados wildcars en enero de 2018. Puedes generar certificados SSL para tus subdominios si conoces estos subdominios de antemano al provisionar el servidor. Para hacer esto, defina multiples entradas canonical sobre site_hosts en tu correspondiente archivo wordpress_sites.yml:

site_hosts:
  - canonical: example.com
    redirects:
      - www.example.com
  - canonical: subdomain.example.com
    redirects:
      - www.subdomain.example.com

Subdominios locales

Para subdominios locales, deberás actualizar las entradas DNS para cada subdominio/host. El plugin de Vagrant Landrush puede ayudarte. Instalalo via:

$ vagrant plugin install landrush

Landrush crea un pequeño servidor DNS que te permite utilizar wildcards de subdominios, uno de los requerimientos para instalaciones multisitio con subdominios.

Algunos usuarios pueden llegar a tener problemas de DNS externos cuando utilizan Landrush. Si tienes este inconveniente, agrega esto a tu Vagrantfile:

config.landrush.guest_redirect_dns = false

Vea issue #511 para mayores detalles.

Depurando Landrush

Si algo falla con Landrush, como un sitio no siendo resuelto desde el guest:

$ vagrant landrush list

Elimina cualquier entrada extraña y prueba nuevamente.