¿Cómo implementar entornos Dev, Stage y Production para sitios WordPress?

18 ene 2012, 19:22:43
Vistas: 15.7K
Votos: 43

Necesito poder tener iteraciones de desarrollo/staging/producción (en servidores separados) para un sitio WordPress. Normalmente uso git, pero obviamente esto no va a funcionar con sitios WordPress debido a la dependencia de la base de datos para la configuración principal de... bueno, casi todo.

Así que mi pregunta es: ¿cómo lo hacen ustedes? Hice una búsqueda rápida en Google y vi que hay algunos plugins, ¿es esta la única forma? ¿Cuáles hacen el mejor trabajo en términos de facilidad de uso, velocidad, confiabilidad, interfaz de usuario, etc.?

1
Comentarios

https://pantheon.io tiene entornos de desarrollo, prueba y producción para un solo dominio. Utilizan git para los archivos y transfieren la base de datos entre ellos con un solo clic. Es gratis para probar y solo pagas cuando pasas a 'producción' - https://www.youtube.com/watch?v=KpGTDeqwgX4

jgraup jgraup
2 dic 2015 19:36:28
Todas las respuestas a la pregunta 4
9
29

Tengo una configuración de la que estoy bastante orgulloso y que funciona extremadamente bien para mi equipo.

Estructura General

Mantengo toda la instalación bajo git. Todos los cambios, ya sea una actualización del sistema, agregar/actualizar un plugin, agregar/actualizar un tema, pasan por el mismo flujo de trabajo. Los cambios se pueden revertir en cualquier momento. Tengo un servidor de despliegue (un antiguo escritorio P4) ejecutando gitosis, pero podrías usar fácilmente github o gitolite. En git, tengo dos ramas "especiales", master y develop (explicadas más adelante). Mis servidores de producción y staging están basados en la nube.

Entornos de Desarrollo

Cada desarrollador ejecuta su propio servidor de desarrollo en su máquina local. En términos de bases de datos, rara vez ha sido necesario tener datos en vivo. Principalmente usamos los datos de prueba de temas unitarios. De lo contrario, exportar e importar cubre la mayoría de las necesidades. Si la parte de la base de datos fuera crucial, podrías configurar replicación o algo para sincronización bajo demanda. Cuando configuré inicialmente esta estructura, pensé que esto sería crucial, así que comencé a escribir un conjunto de herramientas para hacerlo, pero para mi sorpresa, realmente no fueron necesarias. (nota: como no fueron necesarias, nunca las pulí, así que tienen errores, por ejemplo, reemplazarán el dominio en datos serializados).

Entorno de Staging

Cuando se envían commits desde la rama develop a gitosis, se despliegan automáticamente en nuestro servidor de staging. La base de datos de staging es esclava de la base de datos de producción.

Entorno de Producción

Cuando se envían commits a gitosis en la rama master, se despliegan automáticamente al servidor de producción.

El problema de wp-config.php

Quieres que wp-config.php sea único de servidor a servidor, pero también quieres mantenerlo bajo control de versiones. Mi solución fue usar .gitignore para ignorar wp-config.php y almacenar las versiones de staging y producción como archivos con nombres diferentes. Luego, en cada servidor, creo un enlace simbólico, por ejemplo wp-config.php -> wp-config-production.php. Cada usuario mantiene su propia base de datos con sus propias credenciales, con sus propios ajustes (no rastreados) en wp-config.php.

Otras Notas

Uso Rackspace Cloud, que es fenomenal y económico. Con él puedo mantener mis servidores de staging y producción idénticos. También estoy escribiendo plugins ahora que usan su API para permitirme controlar mis servicios directamente desde WordPress, es maravilloso.

Los directorios de caché, directorios de subida de archivos, etc., se agregan a .gitignore. Si quisieras, podrías configurar una tarea cron para verificar rutinariamente las subidas y enviarlas a gitosis, pero eso nunca me pareció necesario.

La estructura master/develop está configurada para imitar parcialmente el modelo de ramificación de Vincent Driessen. También uso su extensión de git git-flow y lo recomiendo encarecidamente.

He tenido alrededor de 10 desarrolladores trabajando con esta estructura durante más de un año y ha sido un sueño trabajar con ella. Confiable, segura, rápida, funcional y ágil, ¡no se puede pedir mucho más!

13 feb 2012 06:38:14
Comentarios

Estoy a punto de configurar una instalación de WordPress de manera similar (pero usamos SVN) y quería confirmar tu proceso para actualizar plugins y WordPress: completar la actualización y verificar en desarrollo, confirmar los cambios, implementarlos en staging, verificar, implementar en producción. En resumen, ¿nunca realizas una actualización de la instalación de WordPress directamente en el servidor en vivo, sino que introduces los cambios mediante actualizaciones en el repositorio?

paullb paullb
4 feb 2013 04:34:59

¿Qué pasa con los cambios en la base de datos realizados por la rutina de actualización? ¿Cómo se aplican a la base de datos de producción?

paullb paullb
4 feb 2013 05:20:28

Ese flujo de trabajo es correcto @paullb, y no tienes que preocuparte por las actualizaciones de la base de datos. La forma en que funciona WordPress, las actualizaciones se activan después de que se detecta el cambio, por lo que esto funciona exactamente de la misma manera que una actualización manual (del núcleo o de un plugin) ¡funcionaría!

Matthew Boynes Matthew Boynes
5 feb 2013 20:04:11

@MatthewBoynes, hola. ¿Sigues utilizando este flujo de trabajo para tu desarrollo? Si es así, voy a aplicar este flujo de trabajo a mi proyecto. Gracias :)

khakiout khakiout
20 jul 2014 09:44:32

Ya no lo uso, pero solo porque no es aplicable a los proyectos en los que trabajo actualmente, que están principalmente alojados en WordPress.com VIP. Si fuera aplicable, todavía lo usaría (y de hecho, la empresa para la que trabajaba anteriormente sigue usándolo).

Matthew Boynes Matthew Boynes
21 jul 2014 16:49:29

Excelente contenido aquí. ¿Cómo gestionas los cambios realizados en publicaciones existentes, etc., en el entorno de staging? ¿Cómo subes una edición a producción?

Lucky Luke Lucky Luke
3 dic 2015 11:19:33

@MatthewBoynes ¿Qué pasa con los ajustes de los plugins? Estos también están en la base de datos, pero queremos probarlos localmente antes de cambiarlos en producción (y preferimos no cambiarlos dos veces, ya que esta forma es propensa a errores).

Aaron Aaron
11 ago 2016 05:58:39

No pude usar la variante del enlace simbólico para el config.php; no funcionó con vvv.

Kuronashi Kuronashi
5 dic 2021 17:40:58

Parece que este flujo de trabajo ya no es realmente práctico.

Eric Eric
23 sept 2022 03:04:42
Mostrar los 4 comentarios restantes
2

En primer lugar, creo que es importante considerar qué vas a incluir en el control de versiones. Recomendaría no poner todo el directorio de WP bajo VC. Creo que tiene más sentido poner wp-content/themes/NombreDeTuTema bajo control de versiones. Para un sitio grande con muchos plugins complejos, podría verse el caso de incluir también wp-content/plugins. Si fuera absolutamente necesario, podrías incluir wp-content/uploads. Las respuestas a continuación cambiarán un poco dependiendo de lo que controles en versiones.

Dicho esto, esto es lo que yo uso:

Local: Configura un stack LAMP en tu máquina. Usa la misma URL que tu sitio de desarrollo. Utiliza VirtualHosts y entradas en el archivo .host para simular el entorno de desarrollo desde el punto de vista de la URL. Si solo estás controlando versiones de tu tema, considera usar SSHFS para enlazar con wp-content/plugins, wp-content/uploads. Considera usar la base de datos de tu instalación de desarrollo del proyecto a menos que estés haciendo un trabajo realmente intensivo.

Desarrollo: Haz checkout de una copia de trabajo de tu repositorio en tu entorno WP. Configura un Hook POST-COMMIT en SVN para actualizar este repositorio en cada commit. Esto lo mantendrá sincronizado. (Considéralo una forma básica de integración continua).

Producción: Haz checkout de una etiqueta de versión nombrada que represente un candidato final. Cuando necesites usar una nueva versión, cambia la etiqueta y actualiza el repositorio.

19 ene 2012 02:48:20
Comentarios

Un entorno de desarrollo es muy adecuado para probar versiones nocturnas, y el git de WordPress se actualiza automáticamente cada 30 minutos, además de ser descentralizado y funcionar mejor para equipos. No conozco a nadie que haya migrado a git/hg y haya vuelto a usar svn.

Wyck Wyck
4 feb 2012 21:31:06

Solo por curiosidad, me pregunto tu razonamiento para no poner todo el directorio de WP bajo control de versiones. Eso parece un cuello de botella en el flujo de trabajo. Poner WP en el repositorio le da a todos los desarrolladores la misma base de código y versión de WP. También permite consistencia entre entornos. Mira el enlace de Wyck (en su respuesta) sobre archivos wp-config condicionales.

Brian Fegter Brian Fegter
5 feb 2012 09:37:10
0

Recientemente descubrimos RAMP. Nota: esto es solo una parte de todo el proceso, pero sincronizar bases de datos de contenido entre servidores es probablemente la parte más difícil del mismo.

4 feb 2012 18:56:16
0

Yo hago esto con git y mercurial, solo asegúrate de usar un repositorio privado.

Opción 1.

El único problema es el config.php, al cual puedes indicarle a git que lo ignore al hacer push o antes del init.

Usa .gitignore o git update-index --assume-unchanged config.php (lee un poco sobre el comando assumed-unchanged antes de usarlo)

Opción 2.

Usa un condicional en el config.php que verifique la URL y aplique las credenciales correctas, algo como "si la URL del servidor = dev entonces usa credenciales A, sino usa credenciales B", etc.

Mark lo explica mejor, http://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/

PD. También puedes servir los archivos directamente desde un repositorio remoto en lugar de tener un "servidor de archivos" tradicional. (video realmente aburrido que hice sobre esto http://www.youtube.com/watch?v=8ZEiFi4thDI)

4 feb 2012 21:22:18