apuntes:despliegue
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
apuntes:despliegue [17/07/2020 11:52] – created Santiago Faci | apuntes:despliegue [31/03/2024 18:08] (current) – [Despliegue de aplicaciones web] Santiago Faci | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Despliegue de servicios | + | ====== Despliegue de aplicaciones |
+ | |||
+ | {{docker.png }} | ||
+ | |||
+ | Aqui vamos a ver como poner en marcha una aplicación web hecha con Spring Boot como paquete jar, de forma que no necesitemos de un servidor de aplicaciones para desplegar y ponerla en marcha. | ||
+ | |||
+ | ===== Crear una imagen docker de la API ===== | ||
+ | |||
+ | ==== Empaquetar la aplicación ==== | ||
+ | |||
+ | El primer paso será empaquetar la aplicación en formato jar | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | </ | ||
+ | |||
+ | Eso hará que se genera un fichero jar del estilo a // | ||
+ | |||
+ | ==== Crear la imagen Docker ==== | ||
+ | |||
+ | Creamos el fichero Dockerfile en la carpeta del proyecto. De acuerdo a nuestro proyecto y su fichero '' | ||
+ | |||
+ | <file bash Dockerfile> | ||
+ | FROM eclipse-temurin: | ||
+ | VOLUME /tmp | ||
+ | COPY target/ | ||
+ | ENTRYPOINT [" | ||
+ | </ | ||
+ | |||
+ | Para crear la imagen, abrimos una consola y lanzamos el siguiente comando. La imagen se creará con el nombre '' | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | </ | ||
+ | |||
+ | ==== Crear un proyecto Docker Compose para pruebas en local ==== | ||
+ | |||
+ | Nuestra API está realmente compuesta de dos partes: La propia API escrita en Java con Spring Boot y la base de datos MongoDB que utilizamos para almacenar/ | ||
+ | |||
+ | Para eso, el primer paso será crear el fichero '' | ||
+ | |||
+ | En cualquier caso, antes de eso, crearemos un fichero '' | ||
+ | |||
+ | <file bash .env> | ||
+ | MONGODB_DATABASE=reactiveapi | ||
+ | MONGODB_PORT=27017 | ||
+ | |||
+ | SPRING_PORT=8080 | ||
+ | </ | ||
+ | |||
+ | Y ahora el fichero '' | ||
+ | |||
+ | <file bash docker-compose.yaml> | ||
+ | version: " | ||
+ | name: reactive-api-mongodb | ||
+ | services: | ||
+ | mongodb: | ||
+ | image: mongo: | ||
+ | container_name: | ||
+ | restart: unless-stopped | ||
+ | env_file: ./.env | ||
+ | ports: | ||
+ | - $MONGODB_PORT: | ||
+ | volumes: | ||
+ | - db:/ | ||
+ | app: | ||
+ | image: reactive-api | ||
+ | container_name: | ||
+ | env_file: ./.env | ||
+ | ports: | ||
+ | - $SPRING_PORT: | ||
+ | environment: | ||
+ | SPRING_APPLICATION_JSON: | ||
+ | " | ||
+ | | ||
+ | depends_on: | ||
+ | - mongodb | ||
+ | restart: on-failure | ||
+ | volumes: | ||
+ | db: | ||
+ | </ | ||
+ | |||
+ | Ahora podemos lanzar nuestra API junto con su base de datos ejecutando el siguiente comando: | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | </ | ||
+ | |||
+ | Hemos mapeado los puertos de ambos contenedores a nuestro equipo local usando los mismos valores, por lo que podemos lanzar peticiones a la API haciéndolas directamente a '' | ||
+ | ===== Desplegar en AWS ===== | ||
+ | |||
+ | ===== Desplegar la API en un servidor ===== | ||
+ | |||
+ | Asi, si suponemos que nuestra máquina remota ya está en marcha y tiene asociado un dominio como // | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | </ | ||
+ | |||
+ | > También podemos subirla al servidor usando cualquier aplicación de transferencia de ficheros del estilo a [[https:// | ||
+ | |||
+ | ==== Ejecutar la aplicación en el servidor ==== | ||
+ | |||
+ | Ahora, iniciaremos sesión en la máquina remota para lanzar la aplicación: | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | santi@codeandcoke.com: | ||
+ | santi@codeandcoke.com: | ||
+ | </ | ||
+ | |||
+ | * Utlizamos el comando '' | ||
+ | * '' | ||
+ | * ''> | ||
+ | * '' | ||
+ | |||
+ | También podemos prepararnos un script bash para evitar que escribir ese comando cada vez que queramos desplegar una nueva versión (puesto que además tendremos que detener la existente) | ||
+ | |||
+ | ==== Acceder a la aplicación ==== | ||
+ | |||
+ | Suponiendo que nuestra aplicación escucha en el puerto 8080, podremos comprobar que funciona sin problemas si accedemos, desde nuestro navegador a http:// | ||
+ | |||
+ | ==== Modificar el puerto de acceso ==== | ||
+ | |||
+ | El siguiente paso interesante sería evitar que el usuario tuviera que especificar el puerto a la hora de acceder a la aplicación desde el navegador. Eso podría evitarse, por ejemplo, modificando el puerto en el que ésta escucha (y pasarlo al 80). Esto no es ningún problema si la aplicación " | ||
+ | |||
+ | ==== Configurar Apache como Proxy para la aplicación ==== | ||
+ | |||
+ | Si por el contrario tenemos algún servidor Apache funcionando, | ||
+ | |||
+ | Para eso, definimos el host virtual en Apache de forma habitual: | ||
+ | |||
+ | <code apache> | ||
+ | < | ||
+ | ServerAdmin info@codeandcoke.com | ||
+ | ServerName codeandcoke.com | ||
+ | ServerAlias www.codeandcoke.com | ||
+ | ErrorLog " | ||
+ | CustomLog " | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Y añadimos un par de líneas más para indicar que tiene que hacer de proxy con una aplicación ya desplegada: | ||
+ | |||
+ | <code apache> | ||
+ | . . . | ||
+ | ProxyPass / ajp:// | ||
+ | ProxyPassReverse / ajp:// | ||
+ | </ | ||
+ | |||
+ | Quedando la configuración del sitio virtual: | ||
+ | |||
+ | <code apache> | ||
+ | < | ||
+ | ServerName codeandcoke.com | ||
+ | ServerAlias www.codeandcoke.com | ||
+ | ErrorLog " | ||
+ | CustomLog " | ||
+ | ProxyPass / ajp:// | ||
+ | ProxyPassReverse / ajp:// | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Puede que tengamos que activar el módulo AJP de Apache si no lo está ya: | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | . . . | ||
+ | santi@zenbook: | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | > Puedes ver [[https:// | ||
+ | |||
+ | > Si estamos desplegando la aplicación como paquete //war// con un Apache Tomcat, necesitaremos configurar tanto Apache para que haga de Proxy como Tomcat para activar el protocolo AJP. Puedes ver cómo hacerlo [[https:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | (c) 2021-2023 Santiago Faci |
apuntes/despliegue.1594986745.txt.gz · Last modified: 17/07/2020 11:52 by Santiago Faci