with tutorial framework español djangoproject desde con cero applications php version-control deployment ftp web-deployment-project

php - tutorial - Mejores prácticas de implementación de aplicaciones web: cómo administrar archivos locales y en vivo?



tutorial django (7)

Estoy escribiendo aplicaciones web de php, y simplemente las despliego a través de FTP. Para que funcione, a menudo tengo que realizar algunos ajustes / depuraciones dado que tengo poco control sobre el servidor web (gratuito) que me hospeda, por lo que lo que funciona en mi entorno local podría no funcionar en vivo.

Por ejemplo, conservo un archivo php separado que contiene class_db_myapp.php que extiende un class_db.php con parámetros de DB específicos: nombre de db, nombre de usuario, contraseña que no serán los mismos locales ni en vivo. (Para información: Últimamente comencé a usar git para el control de versiones)

A medida que mi aplicación evoluciona, algunos archivos se renombran / eliminan / crean. Cuando llega el momento de cargar una nueva versión, tengo que confiar en mi memoria para saber qué tengo que cargar / eliminar o simplemente eliminar todo / cargar todo. Pero en el segundo caso, debo evitar borrar el archivo class_db_myapp.php ...

No he encontrado una solución adecuada para esto.

¿Cuáles son las mejores prácticas en este dominio?

Puede que me haya perdido una discusión existente sobre este tema, de ser así, indíquemela.

Gracias.


Mover archivos

Está buscando rsync , o algo así como rsync. Rsync es un programa / sistema que te permitirá sincronizar un conjunto de archivos con otro. En términos simplificados, puede ver su código fuente y su código de producción, y solo cargará archivos que sean diferentes.

rsync -av --cvs-exclude /soure/dir [email protected]:./source/dir

El distintivo --cvs-exclude se denomina un poco engañoso. Hará que rsync ignore los archivos que ignora el programa rcs cvs, no solo los directorios .cvs. Puede obtener más información sobre las banderas ejecutando

rsync --help

El servidor en el que está alojando su aplicación deberá ejecutar un demonio rsync, pero eso es lo normal en este momento.

Si quieres ser realmente inteligente, puedes configurar rsync usando las teclas SSH, y ni siquiera necesitarás ingresar una contraseña. Sin embargo, esto de ninguna manera es necesario.

Información de configuración diferente

Separe toda la información de configuración que variará entre sus servidores locales y en vivo en un solo archivo, o un solo conjunto de archivos. Puede transferir estos archivos al servidor en vivo a través de FTP, y usar la opción --exclude para decirle a rsync que ignore estos archivos.


1) Para resolver el problema de "configuración diferente en servidores de desarrollo y servidores en vivo" uso esto:

// Change ''localhost'' to your dev server''s address define(''IS_LIVE'', ''localhost'' != $_SERVER[''HTTP_HOST'']); // Database configuration $db_cfg = IS_LIVE? array(...): // Live server config array(...); // Dev server config

2) Para mantener sincronizados los archivos dev y live, uso Beyond Compare , una herramienta visual diff que me permite comparar directorios completos, incluidos los remotos a través de (S) FTP.

Configuré un perfil para que la ventana izquierda muestre los archivos en el servidor de desarrollo, el de la derecha muestra los archivos en el servidor activo. De esta forma puedo ver las diferencias que existen entre los servidores (archivos modificados, faltantes o agregados) y me permite copiar fácilmente directorios enteros, archivos o líneas específicas en archivos entre ellos. Muy útil.

También le permite ''ignorar'' determinados directorios que no desea sincronizar, como los que tienen archivos o registros generados por el usuario.


No estoy seguro de si es ideal, pero por ejemplo, dentro de mi configuración de inicio de sesión de DB, tengo que detectar en qué servidor se está ejecutando el código (solo un recorte parcial a continuación):

$active_group = "default"; if($_SERVER[''SERVER_NAME''] == ''argent.local'' || $_SERVER[''SERVER_NAME''] == ''beta.website.com'') $active_group = "development"; $db[''default''][''hostname''] = "localhost"; $db[''default''][''username''] = "username"; $db[''default''][''password''] = "password"; $db[''default''][''database''] = "dbname"; $db[''default''][''dbdriver''] = "mysql"; $db[''development''][''hostname''] = "localhost"; $db[''development''][''username''] = "username_dev"; $db[''development''][''password''] = "password_dev"; $db[''development''][''database''] = "dbname_dev"; $db[''development''][''dbdriver''] = "mysql";

(argent.local aquí es mi caja de desarrollo local) Hago esto en algunos otros lugares también, como en la clase principal habilito / deshabilito la salida de error PHP dependiendo de si el servidor es de producción o dev local (dado que la salida de error es muy útil durante dev, pero nunca quiero que se publique en producción):

if($_SERVER[''SERVER_NAME''] == ''argent.local'' || $_SERVER[''SERVER_NAME''] == ''beta.website.com'') error_reporting(E_ALL); else error_reporting(0);

De esta forma, el código que verifico en SVN funcionará tanto en los cuadros en vivo como en los dev sin tener que hacer un seguimiento de dónde desplegarlos. De esta forma puedo borrar todos los archivos existentes y volver a implementarlos sin tener que preocuparme de mover ningún archivo.


ya que no tiene acceso ssh, pruebe y comprometa todo en su máquina local. entonces podría usar la función de comparación de directorios de ftp client filezilla, que le permite ver qué archivos se han modificado. no necesitarás recordar nada.

las mejores prácticas serían presionar a su servidor con git push . pero dado que sus opciones son limitadas, la solución mencionada funcionará perfectamente.


Recomendaría Capistrano, que es una herramienta de implementación generalizada del mundo de Rails. Básicamente está diseñado desde cero para administrar implementaciones. Aquí está la página de Capistrano:

http://capify.org/

y aquí hay un par de sitios que muestran cómo otros usan Capistrano para la implementación de PHP:

http://www.simplisticcomplexity.com/2006/08/16/automated-php-deployment-with-capistrano/

http://donc.wordpress.com/2006/10/29/deploying-php-with-capistrano/

Nota: deberá escribir / personalizar su secuencia de comandos de implementación, pero Capistrano debería permitirle hacer lo que necesita.


Una herramienta de compilación como phing o hormiga debería ser capaz de hacer lo que estás buscando hacer. Con un poco de secuencias de comandos, debe poder automatizar los pasos que está tomando actualmente para obtener la configuración de la aplicación y cargar la aplicación con un solo comando.


Si el servidor ftp admite enlaces simbólicos, puede usar la siguiente técnica:

  1. Convierta la carpeta public_html en un enlace simbólico a la carpeta que contiene la versión actual. ("version1" por ejemplo)
  2. Cargue la nueva versión en una nueva carpeta.
  3. Cuando finalice la carga, modifique el enlace simbólico para que la nueva versión se active.

Si algo salió mal, puede volver fácilmente a la versión anterior modificando el enlace simbólico nuevamente.

Para la base de datos y otras configuraciones que son diferentes en el entorno en vivo, hay varias opciones:

  • Cree un archivo que contenga el entorno: "en vivo" o "local" y coloque "if statement" en el código en función de la configuración del entorno.
  • Si puedes descifrar el entorno en php, úsalo en lugar de un archivo.
  • Coloque todas las configuraciones en un archivo fuera de las carpetas "versionX".