2011-06-03 14 views
25

En el pasado, he estado desarrollando de una manera muy poco profesional, lo que significa que tenía una máquina local, donde he desarrollado y probado de código y una máquina de producción a la que he copiado el código cuando estaba hecho. Recientemente modifiqué esto ligeramente a donde me desarrollé localmente, verifiqué el código en SVN y luego actualicé la máquina de producción a través de SVN.Consejos de despliegue Código PHP

Ahora me gustaría comenzar un nuevo proyecto y mejorar mi flujo de trabajo. Lo ideal sería que tenía en cuenta lo siguiente:

  • tener uno o más entornos dev locales
  • desarrollar y probar en la máquina local (s)
  • Use SVN (o Git) como repositorio de código
  • Utilice un herramienta de compilación para configurar nuevos entornos (ya sea desarrollo, montaje o producción) e implementar código

Como no estoy muy familiarizado con este proceso, estoy buscando sugerencias sobre cómo configurar mejor esta idea y las herramientas para usar, especialmente cuando se trata de las herramientas de construcción. Estaba investigando a Ant y Phing (posiblemente), pero soy tan nuevo en esto que realmente me gustaría obtener una guía. ¿Hay buenos tutoriales o libros sobre la implementación de PHP, especialmente para principiantes? Lo que interesa especialmente son los siguientes temas:

  • despliegue a diferentes tipos de servidores con diferentes configuraciones (por ejemplo dev utiliza diferentes db, contraseñas db, el informe de errores de PHP que la producción o la puesta en escena).
  • Despliegue que extrae automáticamente el código de SVN.
  • Despliegue que establece temporalmente una página de "Mantenimiento" para el entorno de producción.
  • Una vez que domine lo anterior, tal vez incluso realice algunas pruebas en el proceso de compilación.

Sé que mi pregunta puede sonar bastante confusa ... Lo admito, soy nuevo en esto y podría estar un poco fuera de lugar en lo que realmente necesito. Es por eso que cualquier ayuda es muy apreciada.

+0

que se están convirtiendo en un verdadero desarrollador en esta etapa, 1 para esto. También creo que esta pregunta ya está respondida aquí en SO – dynamic

+0

+1, también estoy interesado en esto. – cabaret

+0

http://programmers.stackexchange.com/questions/62852/php-project-deployment – OnesimusUnbound

Respuesta

3

Yo sugeriría hacer que su estrategia de despliegue de las pruebas de un script de instalación-listo para la producción - ya que usted va a necesitar uno de los modos con el tiempo.

algunos consejos que puede parecer obvio para algunos, pero vale la pena señalar:

  • su archivo de configuración guardada en sus VCS debe ser una plantilla, y debe tener otro nombre del archivo que contendrá finalmente la configuración real. P.ej. config-dist.php o config-sample.conf o sample/config-mysql.php o algo similar. De lo contrario, terminará por verificar accidentalmente un archivo de configuración específico del servidor sobre su plantilla.
  • Para la implementación de PHP, anticipe que algunos usuarios no podrán ejecutar scripts del lado del servidor a través de ningún mecanismo que no sea el servidor web. Un instalador basado en PHP es casi no negociable.
  • Debe incluir un mecanismo de actualización amigable para el consumidor, y para eso, WordPress es un gran ejemplo de un proyecto para emular. Un script PHP puede (a) descargar la última versión, (b) usar las funciones ftp para actualizar los archivos de su aplicación, y (c) ejecutar un script de actualización que realiza los cambios apropiados en la base de datos, etc.
  • Por el amor de Dios no haga como [redactado] y haga que sus usuarios descarguen e instalen parches por separado para cada punto de publicación. Haga que descarguen la última versión (final) que contiene todas las actualizaciones hasta la fecha y aplica las funciones correctas de ALTER TABLE en secuencia.

Tanto si los archivos se implementan mediante SVN como a través de FTP, el mecanismo de instalación/actualización debe ser el mismo: obtenga los últimos archivos, ejecute el script de actualización. El actualizador usa la versión que figura en el script PHP y la versión que figura en el DB, y utiliza ese conocimiento para aplicar los parches DB adecuados en orden. En cuanto a cómo generar esos parches, hay other questions aquí que puede consultar para obtener más información.

En cuanto a la página "Mantenimiento", simplemente use el truco de versión mencionado anteriormente para activarlo (compare la versión en el DB con la versión en el código PHP). También es útil poder marcar un sitio como "inactivo" para el público pero hacerlo visible para los administradores (como lo hace Joomla), que se puede activar a través de indicadores de bases de datos o sistemas de archivos.

En cuanto a extraer automáticamente el código de SVN, diría que es mejor con un script cron o con commit triggers que trabajando en su aplicación, ya que no sería relevante para los usuarios finales.

+0

Como nota: el mecanismo de actualización de Wordpress es vulnerable a los ataques man-in-the-middle, si un atacante puede "meterse" entre los servidores de implementación de wordpress y el servidor web que aloja la instalación de wordpress que se está actualizando actualmente. – damianb

+0

@Obsidian: Lo mismo es cierto para literalmente cada pieza de información a la que se accede a través de Internet. La única forma de combatirlo es usar firmas criptográficas (sockets seguros o archivos firmados), que puede realizar como parte de su proceso de actualización si es paranoico. – tylerl

3

Esto no es exactamente parte de su pregunta, pero es relevante:

Si usted entra en la distribución de código destinado a un público amplio, yo le aconsejaría que ir con la construcción y la distribución de paquetes PHAR firmados-OpenSSL. Puede distribuirlos a través de HTTP sin ningún problema, y ​​dado que están firmados por OpenSSL, también está mitigando el riesgo de ataques intermedios y protegiendo a los usuarios finales/clientes/clientes de alguien que inyecta código si desea configurar una actualización automática o con un clic.

Hay un conjunto de herramientas que he contribuido en el pasado que funcionan muy bien para esto, pero necesitarás PHP 5.3, o necesitarás PHP 5.2 con PHAR instalado a través de PECL. https://github.com/koto/phar-util

En cuanto a las pruebas, PHPUnit es el estándar de facto.

+1

Esto es todo exacto. Pero recomendaría evitar imponer el requisito de que los usuarios instalen un paquete pecl (o incluso pera) para usar su software a menos que sea absolutamente necesario. Al menos tener un respaldo (p.la verificación de firma solo se admite si instala PHAR, pero no es necesario para usar el software). Claro que es * simple * instalar un paquete pecl, pero no todos los usuarios tienen esa libertad. – tylerl

+0

@tylerl Seré sincero, esa es una de las dos razones por las que solo apoyo PHP 5.3 (el otro es que incluso Zend no lo admite ahora). Como PHAR es nativo en 5.3, me permite simplemente empujar la distribución PHAR para las cosas oficiales y si alguien quiere tomar un tarball fuente de github, puede (pero tienen que modificarlo para trabajar fuera del PHAR). – damianb

0

Si está interesado en usar Git entonces usted debe comprobar fuera de este sistema de construcción de CodeMeme. Por lo que describes, parece que sería una buena opción. Puede agregarlo a cualquier proyecto como un submódulo y con el código incluido puede adaptar un script de compilación que se implementará en diferentes servidores múltiples en múltiples entornos. Utiliza Git para construir el código para la implementación, pero desafortunadamente SVN no es compatible.

https://github.com/CodeMeme/Phingistrano