Blog sobre desarrollo WordPress en Español Desarrollo WordPress en Español
wp-config.php

Archivo wp-config.php para diferentes entornos

Local, desarrollo, pre-producción, producción… entornos de desarrollo habituales en cualquier proyecto web.

Entornos con características diferentes, configuraciones diferentes, distintos usuarios de base de datos, distintos permisos, etc…

Aunque necesarios, probablemente en más de una ocasión nos hayan dado más de un dolor de cabeza. Y más que probable es que hayamos tirado de nuestra frase preferida: ¡en mi local funciona!

Uno de los archivos que cambiará en función del entorno es el wp-config.php, que es donde se configuran el nombre de la base de datos, usuario, contraseña, etc… (entre otras cosas que también pueden ser diferentes como el debug, table_prefix…). Estos datos suelen ser diferentes en los 4 entornos habituales de desarrollo: local, desarrollo, pre (o staging) y pro.

Es decir, el archivo wp-config.php debe ser diferente en estos 4 entornos. El problema se acentúa además cuando sois varias personas en el mismo equipo de trabajo y utilizáis control de versiones. Puede que mi usuario/clave/nombre bbdd en mi local sea diferente al de los compañeros/as, y ese archivo bajo un control de versiones se convierte en un caos.

Voy a ser sincero, desde que trabajo con WordPress bajo control de versiones he probado diferentes métodos que explico a continuación:

 

Añadir el wp-config.php a .gitignore

Fue la primera opción que probamos…y que tardamos poco en descartar. La ventaja es que ese archivo no entra dentro del control de versiones, por lo tanto cada miembro del equipo de trabajo y cada entorno de desarrollo pueden tener su fichero wp-config.php diferente.

En su ventaja está implícito su inconveniente: Al no estar bajo el control de versiones cada persona del equipo de trabajo debe descargarse a parte este archivo, o pasárselo de unos a otros. Además implica el subir manualmente por FTP a cada entorno este archivo configurado de manera independiente.

El problema es que cada persona y cada entorno tendrán un wp-config.php distinto, y si se define una constante o se realiza alguna configuración adicional, hay que avisar a todos los miembros del equipo e ir entorno por entorno realizando el mismo cambio en ese archivo.

 

Añadir un condicional en wp-config.php

Éste método simplemente implica sustituir la definición de las constantes de conexión a la base de datos, debug, caché y table_prefix por algo como esto:

Es un if donde preguntamos por en nombre del servidor: $_SERVER[‘SERVER_NAME’], y en función de éste parámetro se establecen las distintas constantes. También podríamos preguntar por $_SERVER[‘HTTP_HOST’].

De esta manera el archivo wp-config.php puede volver al control de versiones sin problema, ¿o no? Pues no del todo, la parte local puede ser diferente entre los miembros del equipo de trabajo.

Esto podemos solucionarlo con variables de entorno en el Virtual Host. Cada miembro del equipo de trabajo deberá crear una variables de entorno en su vhost, teniendo algo parecido a:

Y en el wp-config.php, dentro del if de entorno local recuperaremos los valores de estas variables de entorno:

De este modo cada miembro del equipo podrá tener configurado de manera independiente sus datos de acceso a la base de datos, y el fichero wp-config.php será el mismo para todos.

 

Una solución más “elegante”

La configuración de variables y entornos de trabajo no es algo inherente a WordPress. En muchos frameworks tienen diferentes archivos que se cargan en función de un entorno u otro. ¿Cómo podríamos aplicar esto a WordPress?

Podemos crear en la raíz de nuestra instalación un directorio llamado wp-config, y dentro incluir los ficheros:

  • wp-db-local.php
  • wp-db-dev.php
  • wp-db-pre.php
  • wp-db-pro.php

 

En cada uno de estos ficheros se configurarán las constantes correspondientes a cada entorno. Por ejemplo para wp-db-local.php quedaría algo así:

En nuestro wp-config.php incluiremos estas líneas:

Comprobaremos en qué entorno estamos y cargaremos el archivo de configuración correspondiente. De este modo podemos tener todo organizado en archivos independientes.

 

¿Y qué pasa con la línea de comandos?

Pero como no todo va a ser un camino de rosas, si optas por utilizar variables de entorno y utilizas WP-CLI en tu día a día verás que deja de funcionarte y te salta algo como esto:

Error: Error al establecer una conexión con la base de datos. Esto significa que, o la información de nombre de usuario y contraseña de tu archivo ‘wp-config.php’ es incorrecto o que no podemos contactar con el servidor de la base de datos en ”. Esto podría significar que el servidor de tu base de datos está caído.

Para solucionar esto, al menos en linux, dirígete al archivo environment que encontrarás en la carpeta /etc. Debemos configurar las constantes.

La pega es que tenemos los datos de acceso a base de datos en dos sitios diferentes: /etc/environment y virtual host. Además deberemos hacer la llamada al fichero /etc/environment desde nuestro .profile para que estén disponibles estas variables desde la línea de comandos.

Puede que también te interese

Cómo crear una puerta trasera para entrar en WordPress
Cómo crear una puerta trasera para entrar en WordPress
En esta entrada vamos a ver cómo crear una puerta trasera o backdoor en WordPress. Reitero, vamos a ver el cómo, el porqué hacerlo es…
Revisiones y autoguardados en WordPress
Revisiones y autoguardados en WordPress
Qué son las revisiones? Las revisiones son un control de versiones de las entradas y páginas que WordPress guarda en base de datos. Cada vez…
Seguridad WordPress: proteger el archivo wp-login.php
Seguridad WordPress: proteger el archivo wp-login.php
En una entrada anterior vimos cómo proteger el acceso a wp-admin. Vamos a ver ahora cómo proteger el archivo wp-login.php, situado en la raíz de…
Ciclo de carga en WordPress
Ciclo de carga en WordPress
Una de las primeras cosas que debes tener en cuenta si te vas a poner a desarrollar un tema o plugin para WordPress es su…