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
y 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 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 ignorar wp-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 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!