¿Implementación de desarrollo, etapa y producción para sitios de WordPress?

41

Por lo tanto, necesito poder tener iteraciones de desarrollo / etapa / desarrollo (en servidores separados) para un sitio web de WordPress. Normalmente uso git, pero obviamente esto no funcionará con los sitios de WordPress debido a la dependencia de la base de datos. para la configuración principal de ... bueno, casi todo.

Entonces mi pregunta es ¿cómo lo hacen ustedes? Tuve un Google rápido y vi que había algunos complementos, ¿es esta la única manera? ¿Cuáles son las que mejor hacen el trabajo en términos de facilidad de uso, velocidad, confiabilidad, ui, etc.?

    
pregunta Rob Vermeer 18.01.2012 - 18:22

4 respuestas

27

Tengo una configuración de la que estoy bastante orgulloso, y 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 complemento, agregar / actualizar un tema, pasan por el mismo flujo de trabajo. Los cambios se pueden revertir en cualquier momento. Tengo un servidor de implementación (un escritorio P4 antiguo) ejecutando gitosis pero podría usar github o gitolite . En git, tengo dos sucursales "especiales", master y develop (explicadas más abajo). Mis servidores de producción y de ensayo están basados en la nube.

Entornos de desarrollo

Cada desarrollador ejecuta su propio servidor de desarrollo en su propia máquina. En términos de bases de datos, la necesidad de datos en vivo casi nunca ha sido un problema. Principalmente utilizamos los datos de prueba de la unidad temática . De lo contrario, la exportación e importación cubre la mayoría de las cosas. Si la pieza de la base de datos era crucial, podría configurar la replicación o configurar algo para la sincronización bajo demanda. Cuando instalé esta estructura inicialmente, pensé que esto sería crucial, así que comencé a escribir un conjunto de herramientas para haz esto, pero para mi sorpresa realmente no eran necesarias. (nota: ya que no eran necesarios, nunca los pulí, así que hay errores, por ejemplo, que reemplazarán el dominio en los datos serializados).

Entorno de ensayo

Cuando las confirmaciones se transfieren de la rama develop a gitosis, se implementan automáticamente en nuestro servidor de pruebas. La base de datos provisional es un esclavo de la base de datos de producción.

Entorno de producción

Cuando las confirmaciones se envían a gitosis en la rama master , se implementa automáticamente en el servidor de producción.

El problema wp-config.php

Desea que wp-config.php sea único de un servidor a otro, pero también desea mantenerlo bajo el control de versiones. Mi solución fue utilizar .gitignore para ignorar wp-config.php , y almacenar las versiones de prueba y producción como archivos con nombres diferentes. Luego en cada servidor, enlace simbólico, por ejemplo. %código%. Cada usuario mantiene su propia base de datos con sus propias credenciales, con su propia configuración wp-config.php (sin seguimiento).

Otras notas

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

Los directorios de caché, directorios de carga de archivos, etc., se agregan a .gitignore. Si lo desea, puede configurar una tarea cron para verificar las subidas de forma rutinaria y enviarlas a gitosis, pero eso nunca me pareció necesario.

La estructura maestra / desarrollada está configurada para imitar parcialmente modelo de bifurcación de Vincent Driessen . También utilizo su extensión git git-flow y también lo sugiero.

He tenido alrededor de 10 desarrolladores trabajando en esta estructura durante más de un año y ha sido un sueño trabajar con ellos. Fiable, seguro, rápido, funcional y ágil, ¡no puedes pedir mucho más!

    
respondido por el Matthew Boynes 13.02.2012 - 05:38
4

Primero, creo que es importante tener en cuenta qué vas a utilizar Control de versiones. Recomendaría en contra de poner todo el directorio de WP en VC. Creo que tiene más sentido poner wp-content / themes / YourThemeName bajo VC. Para un sitio grande con una gran cantidad de complementos complejos, podría ver el caso de incluir también wp-content / plugins. Si es absolutamente necesario, puedes incluir wp-content / uploads. Las respuestas a continuación cambiarán un poco, dependiendo de lo que controle la versión.

Dado que, aquí está lo que uso:

Local: configura una pila LAMP en tu máquina. Use la misma URL que su sitio de desarrollo. Utilice las entradas de archivos VirtualHosts y .host para simular el entorno de desarrollo desde un punto de vista de URL. Si solo estás VC'ing tu tema, considera usar SSHFS para vincular a wp-content / plugins, wp-content / uploads. Considere usar la base de datos en su instalación de desarrollo del proyecto a menos que realmente esté haciendo un trabajo pesado.

Desarrollo: Obtenga una copia de trabajo de su Repo en su entorno WP. Configure un enlace POST-COMMIT en SVN para actualizar este repositorio en cada confirmación. Esto lo mantendrá sincronizado. (Considérelo la integración continua de un hombre pobre.)

Producción: verifique una etiqueta de versión con nombre que represente a un candidato final. Cuando necesite utilizar una nueva versión, cambie la etiqueta y actualice el repositorio.

    
respondido por el Ethan Seifert 19.01.2012 - 01:48
2

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

    
respondido por el lkraav 04.02.2012 - 17:56
2

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

Opción 1.

El único problema es el archivo config.php, que puedes decirle a git que ignore en push o antes de init.

Use .gitignore o git update-index --assume-unchanged config.php (lea un poco sobre el comando supuesto sin cambios antes de usarlo)

Opciones 2.

Use un condicional en el archivo config.php que verifica la url y aplica las credenciales correctas, en la línea de "si el servidor url = dev luego use las credenciales A, de lo contrario use las credenciales B", etc.

Mark explica esto mejor, enlace

ps. También puede enviar los archivos directamente desde un repositorio remoto en lugar de tener un "servidor de archivos" tradicional. (El video realmente aburrido que hice sobre este enlace )

    
respondido por el Wyck 04.02.2012 - 20:22

Lea otras preguntas en las etiquetas