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.?
svn
version-control
staging
deployment
Rob Vermeer
fuente
fuente
Respuestas:
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"
master
ydevelop
(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
develop
enví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
master
rama, se implementa automáticamente en el servidor de producción.El problema wp-config.php
Desea
wp-config.php
ser único de servidor a servidor, pero también desea mantenerlo bajo control de versiones. Mi solución fue usar.gitignore
para ignorarwp-config.php
y almacenar las versiones de preparación y producción como archivos con nombres diferentes. Luego, en cada servidor, hago un enlace simbólico, por ejemplowp-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!
fuente
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.
fuente
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.
fuente
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
.gitignore
ogit 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 )
fuente