Estoy comenzando un nuevo proyecto en PHP y me encantaría recibir comentarios de otros desarrolladores sobre su estrategia preferida para la implementación de PHP. Me encantaría automatizar un poco las cosas para que, una vez que se confirmen los cambios, puedan migrarse rápidamente a un servidor de desarrollo o producción.
Tengo experiencia con implementaciones utilizando Capistrano con Ruby, así como algunos scripts de shell básicos.
Antes de sumergirme por mi cuenta, sería genial escuchar cómo otros han abordado esto en sus proyectos.
Más información
Actualmente, los desarrolladores trabajan en instalaciones locales del sitio y envían cambios a un repositorio de subversión. Las implementaciones iniciales se realizan exportando una versión etiquetada de svn y cargándola al servidor.
Los cambios adicionales generalmente se hacen poco a poco cargando manualmente los archivos modificados.
fuente
Respuestas:
Para PHP, SVN con scripts de compilación Phing son el camino a seguir. Phing es similar a ANT pero está escrito en PHP, lo que hace que sea mucho más fácil para los desarrolladores de PHP modificar según sus necesidades.
Nuestra rutina de implementación es la siguiente:
También hay phpUnderControl , que es un servidor de integración continua. No me pareció muy útil para los proyectos web para ser honesto.
fuente
Actualmente estoy implementando PHP usando Git . Una simple producción de git push es todo lo que se necesita para actualizar mi servidor de producción con la última copia de Git. Es fácil y rápido porque Git es lo suficientemente inteligente como para enviar solo los diferenciales y no todo el proyecto nuevamente. También ayuda a mantener una copia redundante del repositorio en el servidor web en caso de falla de hardware de mi parte (aunque también presiono a GitHub para estar seguro).
fuente
Usamos Webistrano , una interfaz web para Capistrano, y estamos muy contentos con él.
Webistrano permite implementaciones de múltiples etapas y entornos múltiples desde SVN, GIT y otros. Tiene soporte de reversión incorporado, soporte para roles de servidor separados como web, db, aplicación, etc., y se implementa en paralelo. Le permite anular los parámetros de configuración en múltiples niveles, como por etapa, y registra los resultados de cada implementación, opcionalmente enviándola por correo.
A pesar de que Capistrano y Webistrano son aplicaciones de Ruby, la sintaxis de las 'recetas' de implementación es lo suficientemente fácil y potente como para ser entendida por cualquier programador de PHP. Originalmente, Capistrano se creó para proyectos de Ruby on Rails, pero se adapta fácilmente a proyectos PHP.
Una vez configurado, es incluso bastante fácil de usar por personas que no son programadores, como los probadores que implementan una versión provisional.
Para proporcionar la implementación más rápida posible, instalamos el método fast_remote_cache , que actualiza una caché de copia de trabajo svn en el servidor remoto y luego vincula el resultado.
fuente
Utilizo Apache Ant para implementar en diferentes objetivos (dev, QA y live). Ant está diseñado para funcionar para la implementación de Java, pero proporciona una solución de caso general bastante útil para la implementación de archivos arbitrarios.
La sintaxis del archivo build.xml es bastante fácil de aprender: usted define diferentes objetivos y sus dependencias que se ejecutan cuando llama al programa ant en la línea de comandos.
Por ejemplo, tengo objetivos para dev, QA y live, cada uno de los cuales depende del objetivo de cvsbuild que comprueba la última revisión de cabeza de nuestro servidor CVS, copia los archivos apropiados en el directorio de compilación (usando la etiqueta del conjunto de archivos), y luego rsyncs el directorio de compilación al servidor apropiado. Hay algunas peculiaridades para aprender, y la curva de aprendizaje no es totalmente plana, pero lo he estado haciendo durante años sin problemas, por lo que lo recomendaría para su situación, aunque tengo curiosidad por saber qué otras respuestas tengo. Veré en este hilo.
fuente
Hago cosas manualmente usando Git. Un repositorio para el desarrollo, que se
git push --mirror
envía a un repositorio público, y el servidor en vivo es un tercer repositorio extraído de eso. Esta parte, supongo, es lo mismo que su propia configuración.La gran diferencia es que uso ramas para casi todos los cambios en los que estoy trabajando (tengo alrededor de 5 en este momento), y tiendo a alternar entre ellos. La rama maestra no se cambia directamente, excepto para fusionar otras ramas.
Ejecuto el servidor en vivo directamente desde la rama maestra, y cuando termine con otra rama y esté listo para fusionarlo, volteo el servidor a esa rama por un tiempo. Si se rompe, volver a ponerlo en master toma segundos. Si funciona, se fusiona en maestro y el código en vivo se actualiza. Supongo que una analogía de esto en SVN sería tener dos copias de trabajo y señalar la en vivo a través de un enlace simbólico.
fuente
Sé Phing ha sido mencionado varias veces, pero he tenido mucha suerte con phpUnderControl . Para nosotros nosotros
fuente
una alternativa a las secuencias de comandos de implementación caseras es implementar en una plataforma como servicio que abstraiga gran parte de ese trabajo para usted. Un PaaS generalmente ofrecerá su propia herramienta de implementación de código, así como escalamiento, tolerancia a fallas (p. Ej., No se cae cuando falla el hardware), y generalmente un excelente conjunto de herramientas para monitoreo, verificación de registros, etc. También existe el beneficio de implementar buena configuración conocida que se mantendrá actualizada con el tiempo (un dolor de cabeza menos para usted).
El PaaS que recomendaría es dotCloud , además de PHP ( vea su inicio rápido de PHP ) también puede implementar MySQL, MongoDB y un montón de servicios adicionales. También tiene buenas características como implementación de tiempo de inactividad cero, reversión instantánea, soporte completo para SSL y websocket, etc. Y hay un nivel gratuito que siempre es bueno :)
¡Por supuesto que soy un poco parcial ya que trabajo allí! Otras opciones que vale la pena ver además de dotCloud son Pagodabox y Orchestra (ahora parte de Engine Yard).
¡Espero que esto ayude!
Salomón
fuente
Que realice cambios de forma automática y ciega de un repositorio a servidores de producción parece peligroso. ¿Qué pasa si su código comprometido contiene un error de regresión, por lo que su aplicación de producción se vuelve defectuosa?
Pero, si desea un sistema de integración continua para PHP, supongo que Phing es la mejor opción para PHP. Sin embargo, no lo he probado yo mismo, ya que hago cosas de forma manual, por ejemplo, scp.
fuente
Llego tarde a la fiesta, pero pensé que compartiría nuestros métodos. Utilizamos Phing con Phingistrano , que proporciona una funcionalidad similar a Capistrano a Phing a través de archivos de compilación preconstruidos. Es muy bueno, pero solo funciona si usas Git en este momento.
fuente
Tengo una copia de trabajo de una rama de lanzamiento de SVN en el servidor. Actualizar el sitio (cuando no hay cambios de esquema) es tan fácil como emitir un comando de actualización SVN. Ni siquiera tengo que desconectar el sitio.
fuente
Phing es probablemente su mejor opción, si puede soportar el dolor de los archivos de configuración xml. El marco de Symfony tiene su propio puerto de rastrillo (pake), que funciona bastante bien, pero está bastante unido al resto de Symfony (aunque probablemente podría separarlos).
Otra opción es usar Capistrano. Obviamente, no se integra tan bien con PHP, como lo hace con Ruby, pero aún puede usarlo para muchas cosas.
Por último, siempre puedes escribir scripts de shell. Hasta ahora, eso es lo que he hecho.
fuente
http://controltier.org/wiki/Main_Page
lo vamos a usar para implementaciones y mantenimiento de servidores múltiples.
fuente
Un año tarde pero ... En mi caso, la implementación no es automática. Me resulta peligroso implementar código y ejecutar scripts de migración de base de datos automáticamente.
En cambio, los ganchos de subversión se usan para implementar solo en el servidor de prueba / preparación. El código se implementa en la producción al final de una iteración, después de haber realizado pruebas y asegurarse de que todo funcione. Para la implementación en sí, utilizo un Makefile personalizado que usa rsync para transferir archivos. El Makefile también puede ejecutar los scripts de migración en el servidor remoto, pausar / reanudar servidores web y de bases de datos.
fuente
En mi trabajo, mi equipo y yo hemos desarrollado un reemplazo orientado a Phing para el despliegue de capistrano y también hemos incorporado algunos de los beneficios disponibles en phing como PHPUnit testing, phpcs y PHPDocumentor. Lo convertimos en un repositorio de git que se puede agregar a un proyecto como un submódulo en git y funciona muy bien. Lo adjunté a un puñado de proyectos y es lo suficientemente modular como para que sea fácil hacer que funcione con cualquier proyecto en cualquiera de nuestros diversos entornos (puesta en escena, pruebas, producción, etc.).
Con los scripts de compilación de phing, puede ejecutarlos desde la línea de comandos manualmente, y también he tenido éxito automatizando las rutinas de compilación / implementación con Hudson y ahora Jenkins ci.
No puedo publicar ningún enlace ahora porque el repositorio aún no es público, pero me han dicho que a veces abriremos el código abierto, así que no dude en ponerse en contacto conmigo si está interesado o si tiene cualquier pregunta sobre la automatización de su implementación con phing y git.
fuente
Supongo que la implementación de SVN no es muy buena. Porque:
Necesita abrir el acceso SVN para todo el mundo
tener muchos .svn en los servidores web de producción
Creo que Phing para producir una rama + combinar todos los js / css + reemplazar stage config + ssh upload a todos los servidores www es la mejor manera.
El servidor ssh a 10 www y svn up también es un problema.
fuente