2009-08-15 12 views
5

He trabajado en una empresa de desarrollo web donde teníamos nuestras máquinas locales, un servidor intermedio y varios servidores de producción. Trabajamos en Mac en Perl y usamos svn para comprometernos con scripts de escenario y Perl para cargar en servidores de producción. Ahora estoy trabajando en mi propio proyecto y me gustaría encontrar buenas prácticas para el desarrollo web al usar alojamiento web compartido y no trabajar desde un entorno basado en Unix (con toda la magia que podría hacer con perl/bash scripting/cron jobs, etc.)¿Mejores prácticas para la implementación de (php/mysql) en el alojamiento compartido?

Así que mi pregunta es dado mis condiciones, que son:

  • estoy usando una sola norma común de alojamiento web de un proveedor externo (con acceso SSH)
  • estoy trabajando con al menos otra persona y la intención de utilizar SVN para el control de origen
  • Estoy desarrollando php/mysql en Windows (pero usando Linux es una posibilidad)

¿Qué configuración sugiere para probar, implementar, migrar código/datos? Tengo un servidor xampp instalado en mi máquina local, pero no estaba seguro de qué métodos usar para migrar datos, etc. en Windows.

Respuesta

10

Tengo algunos proyectos personales de PHP en alojamiento compartido; aquí hay un par de pensamientos, de lo que estoy haciendo en uno de esos (el que es el más activo, y necesita alguna forma de sincronización al menos semiautomatizada):

Algunas palabras sobre mi configuración :

  • Hace algún tiempo, tenía todo en SVN; ahora, estoy usando bazaar; pero la idea es exactamente la misma (excepto, en el Bazar, tengo la historia local y todo eso)
  • tengo un acceso ssh al servidor de producción, como lo hace
  • trabajo en Linux exclusivly (por lo , lo que hago podría no ser tan fácil con ventanas)

Ahora, Mi forma de trabajar:

  • Todo lo que tiene te estar en el servidor de producción (código fuente, imágenes, .. .) se obliga a SVN/Bazarr/lo que sea
  • trabajo a nivel local, con Apache/PHP/MySQL (yo uso un volcado de la base de datos de producción que importo localmente vez en cuando)
  • soy el único trabajando en ese proyecto; probablemente estaría bien para un pequeño equipo de 2/3 desarrolladores, pero no más.

lo que hice antes:

  • que tenía algún script PHP que comprueba el servidor SVN para la modificación entre "última revisión empujado a la producción" y HEAD
    • supongo esta hecha en casa El script PHP se parece al script Perl que está utilizando actualmente ^^
  • Ese script creó una lista de directorios/archivos para cargar en la producción
  • Y los subí a través de acceso FTP
  • Esto no fue muy satisfactorio (supongo que hubo errores en mi script; Nunca tomé tiempo para corregirlos); y me obligó a recordar el número de revisión de la hora de la última Empujé a la producción (así, se almacena automáticamente en un archivo de la secuencia de comandos, por lo que no es tan difícil ^^)

Lo que hago ahora:

  • al cambiar al bazar, que no quería volver a escribir el guión, que no funcionaba muy bien de todos modos
  • he dejado caer el guión totalmente
  • Como tengo acceso ssh al servidor de producción , Uso rsync para sincronizar desde mi máquina de desarrollo al servidor de producción, cuando lo que tengo localmente se considera estable/listo para producción.

Un par de notas sobre esa manera de hacer las cosas:

  • no tengo un servidor de ensayo: mi configuración local es lo suficientemente cerca de uno
  • No tener un servidor de ensayo de la producción está bien para un proyecto sencillo con uno o dos desarrolladores de
  • Si tuviera un servidor de ensayo, probablemente me quedo con:
    • hacer un "svn update" en él cuando se quiere sta ge
    • cuando está bien, poner en marcha el comando rsync desde el servidor de ensayo (que se ba en la última revisión "estable", por lo que bien para ser empujado a la producción)
  • Con un proyecto más grande, con más desarrolladores, probablemente no vaya con ese tipo de configuración; pero me parece bastante bien para un proyecto personal (no demasiado grande).


La única cosa "especial" aquí, lo que podría ser "linux-oriented" es el uso de rsync; una búsqueda rápida parece indicar que hay un ejecutable rsync que se puede instalar en Windows: http://www.itefix.no/i2/node/10650

No lo he probado nunca.


Como comentario, aquí es lo que mi comando rsync es así:

rsync --checksum \ 
    --ignore-times \ 
    --human-readable \ 
    --progress \ 
    --itemize-changes \ 
    --archive \ 
    --recursive \ 
    --update \ 
    --verbose \ 
    --executability \ 
    --delay-updates \ 
    --compress --skip-compress=gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg/png/gif \ 
    --exclude-from=/SOME_LOCAL_PATH/ignore-rsync.txt \ 
    /LOCAL_PATH/ \ 
    [email protected]:/REMOTE_PATH/ 

estoy usando teclas MECANISMO privado/público, por lo que rsync no pide una contraseña, por cierto.

Y, por supuesto, por lo general utiliza el mismo comando en el modo de "funcionamiento en seco" en primer lugar, para ver lo que va a ser synchorised, con la opción "--dry-run"

Y el ignore-rsync.txt contiene una lista de archivos que no quieren ser empujados a la producción:

.svn 
cache/cbfeed/* 
cache/cbtpl/* 
cache/dcstaticcache/* 
cache/delicious.cache.html 
cache/versions/* 

Aquí, sólo evitar que los directorios de caché para ser empujado a la producción - parece lógico no envía los que, según los datos de la producción no es lo mismo que el desarrollo datos.

(sólo estoy notando aún existe la ".svn" en este archivo ... trasladase los que, como yo no uso SVN más para ese proyecto ^^)


Esperanza esto ayuda un poco ...

+1

Gracias mucho. Todavía me asombra a veces el esfuerzo que la gente como usted pone en las respuestas con tanto detalle y claridad. – zenna

+1

De nada :-) (Algunas respuestas que recibo y/o veo también me sorprenden ;-) entonces, cuando puedo ayudar ... bueno, ¡para eso está SO!) –

1

En cuanto a SVN, sugiero que vaya con un host SVN dedicado como beanstalk o utilice la misma máquina servidor para ejecutar un servidor SVN para que ambos desarrolladores puedan solucionarlo.

En este último caso, su script de implementación simplemente movería los bits a una carpeta web provisional (accesible a través de beta.mysite.com) y luego otra secuencia de comandos de implementación podría mover eso al directorio web en vivo. Desplegar directamente en el sitio en vivo obviamente no es una buena idea.

Si decide ir con un host dedicado o desea implementar desde su máquina al servidor, use rsync. Esta también es mi configuración actual. RSync tiene sincronizaciones diferenciales (a través de SSH) por lo que es rápido y fue creado para este tipo de cosas.

A medida que crezca, puede comenzar a usar herramientas de compilación con pruebas unitarias y otras cosas. Esto solo deja el problema de sincronización de datos.

Solo sincronizo datos de remote -> local y uso un archivo de lote de DOS que hace esto sobre SSH usando mysqldump. Cygwin es útil para máquinas con Windows, pero puede omitirlo. El script de importación de SQL también ejecuta una consulta de una línea para actualizar algunas celdas, como el nombre de host y la raíz web para la implementación local.

Una vez que tenga esta configuración, puede enfocarse solo en escribir código y la implementación remota o la sincronización local y la implementación se convierte en un proceso de un solo clic.

+0

Gracias, he estado usando assembla para el host SVN, por lo que realmente no puedo ejecutar scripts en ese servidor. – zenna

+0

Como el código está sincronizado en su máquina, puede ejecutar los scripts desde su propia máquina (o su socio puede ejecutarlos en su máquina). Los scripts también se pueden registrar en el depósito. – aleemb

1

Una opción es utilizar un marco dedicado para la tarea. Capistrano se adapta muy bien a los lenguajes de scripting como php. Está basado en Ruby, pero si haces una búsqueda, deberías poder encontrar instrucciones sobre cómo usarlo para implementar aplicaciones de php.

Cuestiones relacionadas