Érase una vez, había un archivo. Estaba en tu computadora y querías tenerla en un servidor.
¿Alguna vez te has preguntado por qué hay tantas formas de hacerlo? Explicaremos algunos de los conceptos básicos de la implementación en este artículo para que sepa cuándo usar qué. Empecemos!
FTP, o Protocolo de transferencia de archivos, es considerado por muchas personas como la manera de la vieja escuela de "instalar un sitio". Es un protocolo, lo que básicamente significa que hay un conjunto de reglas que tanto la computadora local como la máquina host aceptan y pueden enviar mensajes. FTP no es un "programa" per se, sino más bien una línea telefónica..
Por lo tanto, si FTP es una línea telefónica de la vieja escuela (que todavía funciona bien), SFTP es como una red 4G
Ofrece un nuevo protocolo para que las dos máquinas hablen (aunque no es necesariamente más rápido). SFTP está alimentado por SSH, que esencialmente encripta los mensajes que se pasan entre las dos máquinas; por lo tanto, cualquier red maliciosa de terceros o que no sea de confianza no puede retener sus datos en bruto durante la transferencia.
Si no lo has captado, FTP y SFTP son protocolos de transferencia de archivos. Sin embargo, SFTP (y otros protocolos de transferencia basados en SSH) transfieren archivos y Encripta la transferencia. "No necesito cifrado", puedes decir. Mucha gente piensa de la misma manera; sin embargo, los desarrolladores con visión de futuro y las herramientas modernas se inclinarán hacia métodos más seguros. Lo has escuchado antes - Más vale prevenir que curar.
Pero no tengo ganas de pasar por el problema..
En primer lugar, si este es tu trabajo, apómalo. Puedes seguir con tu zona de confort (ya sabes, el FTP aún funciona, al igual que tu teléfono fijo). ¿Pero no quieres mejorar? Después de todo, por eso estás aquí, ¿verdad??
Ahora, si todavía eres un poco perezoso pero te gusta la idea de una adopción fácil, puedes usar SFTP con casi cualquier cliente FTP. Es más seguro. Asegúrese de que su servidor admita SSH (el puerto 22, comúnmente, debe estar abierto), y debería estar listo. Pero el objetivo de este artículo no es para que piense en el cifrado y la seguridad de transferencia; Es para que piense en una estrategia de implementación más robusta..
"Pero no tengo ganas de pasar por el problema". ... Si este es tu trabajo, apágalo.
Si ha estado desarrollando durante un tiempo, es probable que haya pasado por la tarea de crear un sitio y constantemente arrastrar y soltar sus archivos a su cliente FTP (o hacer doble clic, o presionar "sincronizar", o ...). Esta es Técnicamente una estrategia de despliegue, aunque no muy robusta. Por supuesto, muchas veces este tipo de estrategia funcionará bien, especialmente si eres la única persona que alguna vez tocará los archivos, y mágicamente nunca has sobrescrito o eliminado un archivo importante. Pero, una vez más, estás aquí para mejorar, ¿verdad? Y tu eres un mago.
Despliegue, en su forma más simple, es tomar algún código y convertirlo en código "en vivo". Al transferir un index.html
archivo en su directorio de servicio, está desplegando. De hecho, al final del día, todas las estrategias de implementación (a menos que esté utilizando un sistema de aplicación compilado) esencialmente mueven los archivos o las versiones de los archivos al "directorio de trabajo actual", o cambian los que ya están allí. Por ejemplo, podrías hacer cambios a ese mismo index.html
archivo directamente en el servidor, y eso efectivamente "desplegaría" esos cambios al público. Pero la implementación puede ser mucho más.
¿Alguna vez su equipo ha configurado un sistema que requiere que notifique a todos cuando haya insertado un archivo en el servidor a través de FTP? O quizás tenga que reiniciar un servidor Django o Rails después de cambiar el código. Si hace esto como parte de la rutina de hacer que su sitio refleje los cambios que ha hecho, eso es parte de su proceso de implementación..
Por lo tanto, si la implementación significa hacer que un conjunto de códigos y archivos en vivo, ¿cómo puede haber mucho más que SFTP? "¿Qué es Git y por qué debería importarte?" te estas preguntando Git es un sistema de control de versiones, o un VCS. Es uno de los muchos VCS que hemos elegido sin vergüenza como nuestro favorito. Más adelante explicaremos por qué, pero primero vamos a hablar de qué es.
Los sistemas de control de versiones realizan muchas tareas, pero la más importante es proporcionar una red de seguridad a los desarrolladores, especialmente a los equipos de desarrollo. Anteriormente mencionamos cómo FTP y SFTP pueden estar perfectamente bien si eres perfecto y nunca sobrescribirás un archivo o eliminarás una carpeta importante involuntariamente. Pero si aún no lo has hecho, no te preocupes, esto sucederá tarde o temprano. Es casi seguro que le haya pasado a su equipo si no ha descubierto un sistema de solución alternativa. Pero incluso esos sistemas de solución son un dolor. Por ejemplo, ¿su directorio CSS se ha visto así??
Si es así, estás guardando versiones de hojas de estilo que eventualmente unir juntos. Por cierto, Git hace esto, pero lo hace mucho mejor, más rápido y más robusto que usted mismo. ¿Mantiene un archivo CSS diferente cada vez que realiza algunos cambios? ¿En caso de que quiera volver exactamente a cómo estaba ese archivo en un determinado momento? Por supuesto que no Pero Git hará exactamente eso por ti, y no tienes un montón de archivos esparcidos y sistemas de nombres oscuros en todas partes. Más allá de esto, Git es lo suficientemente inteligente como para saber cómo tomar su estilos.css
Archivo y fusionarlo con Mary o John's estilos.css
expediente. Además, las versiones de Git son no archivos enteros; en cambio, se almacenan en deltas, que es esencialmente una representación de código de bajo nivel de las diferencias entre un archivo y otro archivo. Esto significa que las diferentes versiones son mucho más pequeñas y mucho más rápidas de transferir cuando llega el momento de implementarlas.
Pero nada de esto tiene nada que ver con el despliegue, ¿tu dices? Tienes razón, los sistemas de control de versiones en gran parte simplemente hacen lo que su nombre sugiere: mantener las versiones en orden. Pero, también tienen la capacidad de comunicarse a través de los diferentes protocolos que hemos discutido anteriormente. Git puede leer a través de HTTP y leer y escribir a través de SSH. (Lea más sobre los protocolos de transferencia aquí.)
Entonces, si Git tiene estas conexiones directas a través de protocolos de transferencia, puede enviar versiones con su equipo a través de un servidor local, GitHub o su propio servidor en vivo. Y así es como Git encaja en el despliegue. Usted presiona su código, Mary y John presionan su código, y quienquiera que esté a cargo de la implementación en su equipo iniciará sesión en el servidor y combinará el código con el entorno en vivo. Git ofrece la posibilidad de tener múltiples destinos y ramas de código para impulsar diferentes versiones a diferentes lugares. Una práctica común es tener un servidor "de prueba", donde se empuja el código para verificarlo en un entorno en vivo en un dominio de desarrollo privado. Otro posible flujo de trabajo es nunca conectar los repositorios locales de su equipo al repositorio en vivo, y en su lugar, solo le permite a la máquina de pruebas la capacidad de enviar al servidor en vivo. Esto crea un sistema para revisión que no se puede omitir.
Las diferentes versiones son mucho más pequeñas y mucho más rápidas de transferir, cuando llega el momento de implementarlas.
Más allá de la puesta en escena, las sucursales, los múltiples destinos de implementación y el robusto control de versiones, Git ofrece enlaces, como "post-receive", que pueden realizar cualquier tipo de acción que puedan realizar juntos. Tal vez usted quiera una rama "araña", donde cuando el código llega a un punto de su servidor, la recepción posterior empuja ese código en múltiples ubicaciones (remotas o de otro tipo). Aún más, el uso de una plataforma como GitHub ofrece una excelente interfaz gráfica para configurar enlaces. Dígale a GitHub que le envíe correos electrónicos (o si es creativo, conecte una notificación de Growl) cada vez que reciba un impulso de un miembro del equipo, por ejemplo.
Hay literalmente miles de formas de desarrollar una estrategia de implementación con Git. Puede ver rápidamente que el uso de un VCS para la implementación ofrece algunas ventajas, protección y potencia muy amplias para su implementación. Una vez que se tome el tiempo de aprender lo suficiente sobre Git para establecer un flujo de trabajo (y cometer algunos errores con él), su proceso de desarrollo se beneficiará enormemente..
Los siguientes comandos configurarán un repositorio en una máquina remota, configurarán un repositorio en su máquina local, agregarán el repositorio remoto como "origen", desproteger una rama llamada "mybranch" que se fusionará en el servidor, presione "mybranch" al remoto, "origin", y finalmente vuelve a iniciar sesión en el servidor para fusionar "mybranch" con la rama "master" predeterminada.
local> ssh username@remotemachine.com remoto> cd path / to / project remote / path / to / project> git init remote / path / to / project> exit local> cd path / to / local / project local / path / to / local / project> git init local / path / to / local / project> git add. local / ruta / a / local / proyecto> git commit -m "comisionado inicial" local / ruta / a / local / proyecto> git checkout mybranch local / ruta / a / local / proyecto> git remoto agregar origen username@remotemachine.com : ruta / a / proyecto local / ruta / a / local / proyecto> git push origin mybranch local / ruta / a / local / proyecto> ssh username@remotemachine.com remoto> cd ruta / a / proyecto remoto / ruta / a / proyecto> git merge mybranch
Además de crear su propio flujo de trabajo con Git e integrarlo en su propio servidor, puede utilizar otros servicios gratuitos, como Heroku ;. Heroku es una solución de alojamiento que le permite ejecutar algunas líneas desde su aplicación controlada por Git y desplegarla en la "nube" (en este caso, un clúster remoto de servidores Linux) sobre Git casi sin esfuerzo. Tómese unos minutos para configurar algunas cosas, y estará listo para las carreras con solo unas pocas líneas de código para una implementación simple. En serio, se ve algo como esto.
# trabaje un poco, manténgalo controlado por la versión con Git ... luego> heroku crea --stack cedar # el --stack cedar básicamente le permite crear múltiples tipos de aplicaciones, incluyendo PHP y Node # ... Heroku le dirá que está creando cosas , entonces te dirá que agregó un control remoto de heroku a tu git repo> git push heroku master # y eso es todo. Abra la aplicación desplegada en su navegador> heroku abierto
Otras herramientas similares incluyen Pagoda Box, que se centra en las arquitecturas basadas en LAMP, y AppFog y PHPFog, que es muy similar a Heroku.
Mientras no haya errores en su configuración y haya seguido las pautas de Heroku para configurar las aplicaciones, puede tener las aplicaciones Rails, PHP o Node en funcionamiento en unos momentos. Ah, ¿y mencionamos que puedes hacer aplicaciones simples basadas en Heroku gratis? No es hasta que actualice a más instancias o memoria, o necesite agregar una base de datos, que incurra en cargos de Heroku. Otras herramientas similares incluyen Pagoda Box, que se enfoca en arquitecturas basadas en LAMP, y AppFog y PHPFog, que es muy similar a Heroku. Estas opciones ofrecen servicios similares e integración de Git, con diferentes estructuras de precios. Los tres ofrecen una opción gratuita para poder de servidor limitado. Estos son claramente grandes beneficios, ya que se necesita una gran inversión de tiempo para configurar su propio servidor con arquitecturas de aplicaciones más complejas, como Rails o Node. Más allá de eso, la escala se vuelve muy simple, ya que estos tres servicios ofrecen equilibrio de carga y escala a múltiples instancias con el clic de un botón. Estos servicios se ocupan de la administración del servidor fuerte para usted, por lo que puede concentrarse en crear aplicaciones, sabiendo que existe una estrategia de implementación segura, rápida y bien documentada para que la use cuando esté listo para hacerlo público.
Con suerte, este artículo ha eliminado algunas confusiones sobre las diferencias entre Git (y otros VCS) y FTP / SFTP, y lo que significa el concepto de implementación. Además, espero que esto lo haya alentado a desarrollar su propia estrategia de implementación, con ayuda de herramientas, como Git y Heroku. Si ya tiene una estrategia, ¿qué tipo de cosas hace durante la implementación??