Lista de verificación para crear y publicar aplicaciones web

Para crear tu propia aplicación web en nuestro tiempo no basta con poder desarrollarla. Un aspecto importante es la configuración de herramientas para el despliegue y monitoreo de aplicaciones, así como la gestión y administración del entorno en el que opera. A medida que la era de la implementación manual se desvanece en el olvido, incluso para proyectos pequeños, las herramientas de automatización pueden aportar beneficios tangibles. Al implementar "a mano", a menudo podemos olvidarnos de mover algo, tener en cuenta tal o cual matiz, ejecutar una prueba olvidada, esta lista puede continuar durante bastante tiempo.

Este artículo puede ayudar a quienes recién están aprendiendo los conceptos básicos de la creación de aplicaciones web y desean comprender un poco los términos y convenciones básicos.

Por lo tanto, la creación de aplicaciones aún se puede dividir en 2 partes: todo lo que se relaciona con el código de la aplicación y todo lo que se relaciona con el entorno en el que se ejecuta este código. El código de la aplicación, a su vez, también se divide en código de servidor (el que se ejecuta en el servidor, a menudo: lógica de negocios, autorización, almacenamiento de datos, etc.) y código de cliente (el que se ejecuta en la máquina del usuario: a menudo la interfaz y la lógica relacionada con ella).

Empecemos por el miércoles.

La base para el funcionamiento de cualquier código, sistema o software es el Sistema Operativo, por lo que a continuación veremos los sistemas más populares en el mercado de hosting y les daremos una breve descripción:

windows Server - el mismo Windows, pero en una variación de servidor. Algunas funciones disponibles en la versión cliente (normal) de Windows no están presentes aquí, por ejemplo, algunos servicios para recopilar estadísticas y software similar, pero hay un conjunto de utilidades para la administración de redes, software básico para implementar servidores (web, ftp, ...). En general, Windows Server se parece a Windows normal, se parece a Windows normal, sin embargo, cuesta 2 veces más que su contraparte normal. Sin embargo, dado que lo más probable es que implemente la aplicación en un servidor dedicado/virtual, el costo final para usted, aunque puede aumentar, no es crítico. Dado que la plataforma Windows ocupa un lugar abrumador en el mercado de sistemas operativos de consumo, su edición de servidor será la más familiar para la mayoría de los usuarios.

Unix-Sistema similar. El trabajo tradicional en estos sistemas no requiere la presencia de una interfaz gráfica familiar, ofreciendo al usuario únicamente una consola como elemento de control. Para un usuario inexperto, trabajar en este formato puede resultar complicado, pero ¿cuánto cuesta salir de un editor de texto que es bastante popular en datos? Empuje, una pregunta relacionada con esto ya ha recibido más de 6 millones de visitas en 1.8 años. Las principales distribuciones (ediciones) de esta familia son: Debian: una distribución popular, las versiones de los paquetes se centran principalmente en LTS (Soporte a largo plazo – soporte durante mucho tiempo), lo que se expresa en una confiabilidad y estabilidad bastante altas del sistema y los paquetes; Ubuntu – contiene distribuciones de todos los paquetes en sus últimas versiones, lo que puede afectar la estabilidad, pero le permite utilizar la funcionalidad que viene con las nuevas versiones; Red Hat Enterprise Linux – SO, posicionado para uso comercial, es pago, sin embargo, incluye soporte de proveedores de software, algunos paquetes propietarios y paquetes de controladores; CentOS: código abierto una variación de Red Hat Enterprise Linux, caracterizada por la ausencia de paquetes propietarios y soporte.

Para aquellos que recién comienzan a dominar esta área, mi recomendación serían los sistemas. windows ServerO Ubuntu. Si consideramos Windows, esto se debe principalmente a la familiaridad del sistema, Ubuntu – más tolerancia a las actualizaciones y, a su vez, por ejemplo, menos problemas a la hora de lanzar proyectos sobre tecnologías que requieren nuevas versiones.

Entonces, una vez decidido el sistema operativo, pasemos a un conjunto de herramientas que le permiten implementar (instalar), actualizar y monitorear el estado de la aplicación o sus partes en el servidor.

La siguiente decisión importante será la ubicación de su aplicación y el servidor correspondiente. Actualmente, las más habituales son 3 formas:

  • Alojar (mantener) un servidor por su cuenta es la opción más económica, pero tendrá que solicitar una IP estática a su proveedor para que su recurso no cambie su dirección con el tiempo.
  • Alquile un servidor dedicado (VDS), adminístrelo y escale las cargas de forma independiente
  • Paga (muchas veces te dan la oportunidad de probar la funcionalidad de la plataforma de forma gratuita) por una suscripción a algún alojamiento en la nube, donde el modelo de pago por los recursos utilizados es bastante común. Los representantes más destacados de esta dirección: Amazon AWS (ofrecen un año gratis de uso de los servicios, pero con un límite mensual), Google Cloud (dan $300 a la cuenta, que se pueden gastar durante el año en servicios de alojamiento en la nube) , Yandex.Cloud (dan 4000 rublos por 2 meses), Microsoft Azure (brindan acceso gratuito a servicios populares durante un año, + 12 500 rublos por cualquier servicio durante un mes). Así, podrás probar cualquiera de estos proveedores sin gastar un céntimo, pero obteniendo una opinión aproximada sobre la calidad y el nivel del servicio prestado.

Dependiendo del camino elegido, lo único que cambiará en el futuro es quién es el mayor responsable de tal o cual área de la administración. Si se hospeda usted mismo, debe comprender que cualquier interrupción en la electricidad, Internet, el servidor en sí, el software implementado en él, todo esto recae enteramente sobre sus hombros. Sin embargo, para entrenamiento y pruebas, esto es más que suficiente.

Si no tiene una máquina adicional que pueda desempeñar el papel de servidor, entonces querrá utilizar la segunda o tercera forma. El segundo caso es idéntico al primero, con la excepción de que usted transfiere la responsabilidad de la disponibilidad del servidor y su poder a los hombros del proveedor de alojamiento. La administración del servidor y del software todavía está bajo su control.

Y por último, la opción de alquilar la capacidad de proveedores de nube. Aquí puedes configurar el control automatizado de casi cualquier cosa sin entrar en demasiados detalles técnicos. Además, en lugar de una máquina, puede tener varias instancias en ejecución paralelas, que pueden, por ejemplo, ser responsables de diferentes partes de la aplicación, sin diferir mucho en costo de poseer un servidor dedicado. ¡Y además, hay herramientas para orquestación, contenerización, implementación automática, integración continua y mucho más! Veremos algunas de estas cosas a continuación.

En general, la infraestructura del servidor se ve así: tenemos el llamado "orquestador" ("orquestación" es el proceso de administrar varias instancias del servidor), que gestiona los cambios ambientales en una instancia del servidor, un contenedor de virtualización (opcional, pero bastante de uso frecuente), que le permite dividir la aplicación en capas lógicas aisladas, y software de integración continua, que permite actualizaciones del código alojado a través de "scripts".

Por lo tanto, la orquestación le permite ver el estado de los servidores, implementar o revertir actualizaciones en el entorno del servidor, etc. Al principio, es poco probable que este aspecto te afecte, ya que para orquestar algo necesitas varios servidores (puedes tener uno, pero ¿por qué es necesario?), y para tener varios servidores, los necesitas. Entre las herramientas en esta dirección, la más popular es Kubernetes, desarrollado por Google.

El siguiente paso es la virtualización a nivel del sistema operativo. Hoy en día se ha generalizado el concepto de “dockerización”, que proviene de la herramienta Docker, que proporciona la funcionalidad de contenedores aislados entre sí, pero lanzados en el contexto de un sistema operativo. Qué significa esto: en cada uno de estos contenedores puedes ejecutar una aplicación, o incluso un conjunto de aplicaciones, que creerán que son las únicas en todo el sistema operativo, sin siquiera sospechar la existencia de alguien más en esta máquina. Esta función es muy útil para ejecutar aplicaciones idénticas de diferentes versiones, o simplemente aplicaciones en conflicto, así como para dividir partes de una aplicación en capas. Esta capa se puede escribir posteriormente en una imagen, que se puede utilizar, por ejemplo, para implementar una aplicación. Es decir, al instalar esta imagen e implementar los contenedores que contiene, obtendrá un entorno listo para ejecutar su aplicación. En los primeros pasos, puedes utilizar esta herramienta tanto con fines informativos como para obtener beneficios muy reales al dividir la lógica de la aplicación en diferentes capas. Pero vale la pena decir aquí que no todo el mundo necesita la dockerización, y no siempre. La dockerización se justifica en los casos en que la aplicación está "fragmentada", dividida en pequeñas partes, cada una responsable de su propia tarea, la llamada "arquitectura de microservicio".

Además, además de proporcionar el entorno, debemos garantizar una implementación competente de la aplicación, que incluye todo tipo de transformaciones de código, instalación de bibliotecas y paquetes relacionados con la aplicación, ejecución de pruebas, notificaciones sobre estas operaciones, etc. Aquí debemos prestar atención a un concepto como "Integración continua" (CI – Integración Continua). Las principales herramientas en esta área en este momento son Jenkins (el software CI escrito en Java puede parecer un poco complicado al principio), Travis CI (escrito en Ruby, subjetivo, algo más simple Jenkins, sin embargo, aún se requieren algunos conocimientos en el campo de la configuración de implementación), CI de Gitlab (escrito en rubí y vamos).

Entonces, habiendo hablado sobre el entorno en el que funcionará su aplicación, es hora de finalmente mirar qué herramientas nos ofrece el mundo moderno para crear estas mismas aplicaciones.

Empecemos con lo básico: Backend (backend) – parte del servidor. La elección del idioma, el conjunto de funciones básicas y la estructura predefinida (marco) aquí está determinada principalmente por preferencias personales, pero aún así vale la pena mencionarlo para su consideración (la opinión del autor sobre los idiomas es bastante subjetiva, aunque con un reclamo a una descripción imparcial):

  • Python es un lenguaje bastante amigable para un usuario inexperto, perdona algunos errores, pero también puede ser bastante estricto con el desarrollador para que no haga nada malo. Ya es un lenguaje bastante maduro y significativo, que apareció en 1991.
  • Go es un lenguaje de Google que también es bastante amigable y conveniente, es bastante fácil de compilar y obtener un archivo ejecutable en cualquier plataforma. Puede ser simple y agradable o complejo y serio. Fresco y joven, apareció hace relativamente poco tiempo, en 2009.
  • Rust es un poco mayor que su colega anterior, lanzado en 2006, pero todavía es bastante joven en comparación con sus pares. Dirigido a desarrolladores más experimentados, aunque todavía intenta solucionar muchas tareas de bajo nivel para el programador.
  • Java es un veterano del desarrollo comercial, se introdujo en 1995 y es uno de los lenguajes más utilizados en el desarrollo de aplicaciones empresariales en la actualidad. Con sus conceptos básicos y su complicada configuración, el tiempo de ejecución puede resultar bastante desafiante para un principiante.
  • ASP.net es una plataforma de desarrollo de aplicaciones lanzada por Microsoft. Para escribir funcionalidades, se utiliza principalmente el lenguaje C# (pronunciado C Sharp), que apareció en el año 2000. Su complejidad es comparable al nivel entre Java y Rust.
  • PHP, utilizado originalmente para el preprocesamiento de HTML, actualmente, aunque ostenta un liderazgo absoluto en el mercado de los lenguajes, hay una tendencia a la disminución de su uso. Tiene un umbral de entrada bajo y facilidad para escribir código, pero al mismo tiempo, al desarrollar aplicaciones bastante grandes, la funcionalidad del lenguaje puede no ser suficiente.

Bueno, la parte final de nuestra aplicación, la más tangible para el usuario, Frontend (frontend) – es la cara de su aplicación; es con esta parte con la que el usuario interactúa directamente.

Sin entrar en detalles, el frontend moderno se basa en tres pilares, marcos (y no tanto), para la creación de interfaces de usuario. En consecuencia, los tres más populares son:

  • ReactJS no es un marco, sino una biblioteca. En realidad, el marco se diferencia de su orgulloso título sólo por la ausencia de algunas funciones "listas para usar" y la necesidad de instalarlas manualmente. Por lo tanto, existen varias variaciones de la “preparación” de esta biblioteca, formando marcos únicos. Puede resultar un poco difícil para un principiante, debido a algunos principios básicos y a una configuración bastante agresiva del entorno de construcción. Sin embargo, para un comienzo rápido, puede utilizar el paquete "create-react-app".
  • VueJS es un marco para crear interfaces de usuario. De esta trinidad, toma con razón el título de marco más fácil de usar; para el desarrollo en Vue, la barrera de entrada es más baja que la de los otros hermanos mencionados. Además, es el más joven de ellos.
  • Angular se considera el más complejo de estos frameworks, el único que requiere Mecanografiado (complemento para lenguaje Javascript). A menudo se utiliza para crear aplicaciones empresariales grandes.

Resumiendo lo escrito anteriormente, podemos concluir que ahora implementar una aplicación es radicalmente diferente de cómo se desarrollaba este proceso antes. Sin embargo, nadie le impide realizar la “implementación” a la antigua usanza. Pero, ¿merece la pena el poco tiempo ahorrado al principio por la enorme cantidad de errores que tendrá que cometer un desarrollador que elija este camino? Creo que la respuesta es no. Al dedicar un poco más de tiempo a familiarizarse con estas herramientas (y no necesita más que eso, porque necesita comprender si las necesita en su proyecto actual o no), puede lograrlo, reduciendo significativamente, por ejemplo , casos de errores fantasma que dependen del entorno y que aparecen solo en el servidor de producción, análisis nocturno de qué provocó la caída del servidor y por qué no arranca, y mucho más.

Fuente: habr.com

Añadir un comentario