Despliegue de desarrollo, etapa y producción para sitios de WordPress


41

Entonces, necesito poder tener iteraciones de desarrollo / etapa / producción (en servidores separados) para un sitio web de WordPress, utilizo git por lo general, pero esto obviamente no va a funcionar con los sitios de WordPress debido a la dependencia de la base de datos para el principal configuración de ... bueno, casi todo.

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


pantheon.io tiene dev, prueba y vive 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 paga cuando va 'en vivo' - youtube.com/watch?v=KpGTDeqwgX4
jgraup

Respuestas:


27

Tengo una configuración de la que estoy muy 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 antiguo escritorio P4) que ejecuta gitosis, pero podría usar github o gitolite con la misma facilidad . En git, tengo dos ramas "especiales" mastery develop(explicado más abajo). Mis servidores de producción y preparación 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. Utilizamos principalmente los datos de prueba de la unidad temática . De lo contrario, exportar e importar cubre la mayoría de las cosas. Si la pieza de DB era crucial, podría configurar la replicación o configurar algo para la sincronización a pedido. Cuando inicialmente configuré esta estructura, pensé que sería crucial, así que comencé a escribir un conjunto de herramientas para hacerlo, pero para mi sorpresa, realmente no eran necesarias. (nota: como no eran necesarios, nunca los pulí, por lo que hay errores, por ejemplo, reemplazará el dominio en datos serializados).

Ambiente de estadificación

Cuando las confirmaciones se developenvían desde la rama a la gitosis, se implementan automáticamente en nuestro servidor de ensayo. La base de datos provisional es esclava de la base de datos de producción.

Entorno de producción

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

El problema wp-config.php

Desea wp-config.phpser único de servidor a servidor, pero también desea mantenerlo bajo control de versiones. Mi solución fue usar .gitignorepara ignorar wp-config.phpy almacenar las versiones de preparación y producción como archivos con nombres diferentes. Luego, en cada servidor, hago 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 su propia configuración wp-config.php (sin seguimiento).

Otras notas

Utilizo Rackspace Cloud , que es fenomenal y económico. Con él puedo mantener mis servidores de producción y preparación idénticos. También estoy escribiendo complementos en este momento que usan su API para permitirme controlar mis servicios directamente desde WordPress, es maravilloso.

Los directorios de caché, los directorios de carga de archivos, etc., se agregan a .gitignore. Si lo desea, puede configurar una tarea cron para verificar rutinariamente las cargas y llevarlas a la gitosis, pero eso nunca me pareció necesario.

La estructura maestra / desarrollada está configurada para imitar parcialmente el modelo de ramificación de Vincent Driessen . También uso su extensión git git-flow y también lo recomendaría.

He tenido más o menos 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 puede pedir mucho más!


Estoy a punto de configurar una instalación de wp de manera similar (pero usamos svn) y quería confirmar su proceso para actualizar los complementos y wp: complete la actualización y verifique el desarrollo, confirme los cambios, impleméntelos en la puesta en escena, verifique, Deply en vivo. En resumen, ¿nunca realizas una actualización de instalación de wp en el servidor en vivo que traes los cambios a través de actualizaciones en el repositorio?
paullb

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

Ese flujo de trabajo es correcto @paullb, y no tiene que preocuparse por las actualizaciones de DB. De la forma en que funciona WordPress, las actualizaciones se activan después de que se detecta el cambio, por lo que funciona exactamente de la misma manera que funciona una actualización manual (al núcleo o un complemento).
Matthew Boynes

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

No lo hago, pero solo porque no es aplicable a los proyectos en los que trabajo actualmente, que en su mayoría están alojados en WordPress.com VIP. Si fuera aplicable, aún lo usaría (y de hecho, la compañía para la que trabajé anteriormente continúa usándolo).
Matthew Boynes

4

Primero, creo que es importante tener en cuenta lo que vas a hacer con el Control de versiones. Recomendaría no colocar todo el directorio WP en VC. Creo que tiene más sentido poner wp-content / themes / YourThemeName en 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 fuera absolutamente necesario, podría incluir wp-content / uploads. Las respuestas a continuación cambiarán un poco, dependiendo de lo que controle su versión.

Dado eso, esto es lo que uso:

Local: configure una pila LAMP en su máquina. Use la misma URL que su sitio de desarrollo. Utilice VirtualHosts y entradas de archivos .host para simular el entorno de desarrollo desde un punto de vista de URL. Si solo está VC'ing su tema, considere 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: Extraiga 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 pobre).

Producción: Echa un vistazo a una etiqueta de versión con nombre que representa un candidato final Cuando necesite usar una nueva versión, cambie la etiqueta y actualice el repositorio.


Un entorno de desarrollo es muy adecuado para probar compilaciones nocturnas, y el git wordpress se actualiza automáticamente cada 30 minutos, además de estar descentralizado y funciona mejor para los equipos, no conozco a nadie que haya pasado a git / hg que haya retrocedido a usar svn.
Wyck

1
Solo por su razonamiento para no poner todo el directorio WP bajo control de versiones. Eso parece un cuello de botella en el flujo de trabajo. Al poner WP en el repositorio, todos los desarrolladores tienen la misma base de código y la misma versión de WP. También permite la coherencia en todos los entornos. Vea el enlace de Wyck (en su respuesta) a archivos condicionales wp-config.
Brian Fegter

2

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


2

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

Opción 1.

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

Use .gitignoreo 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 config.php que verifique la url y aplique las credenciales correctas, en la línea de "if server url = dev, use las credenciales A, de lo contrario use las credenciales B", etc.

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.