Saltar al contenido
Marcos Peña
Menú
  • Acerca de…
Menú

Despliegue aplicación Spring Boot

Publicada el octubre 28, 2019octubre 28, 2019 por Marcos

Escenario

Queremos desplegar en la nube una aplicación desarrollada con Spring Boot cuyo código está bajo control de versiones. Para este artículo usaremos ubuntu 16.04 y java 8, pero el procedimiento debería ser el mismo con versiones más actuales.

Problema

Ninguno. Realmente es sencillo desplegar una aplicación de este tipo si se dispone de las herramientas adecuadas.

Solución

Instalamos java
Shell
1
$ sudo apt install default-jre
Shell
1
$ sudo apt install default-jdk
Shell
1
$ sudo apt install openjdk-8-jdk
Shell
1
$ sudo update-alternatives --config javac
Shell
1
$ sudo update-alternatives --config java
maven
Shell
1
$ sudo apt-get -y install maven
y git
Shell
1
$ sudo apt-get install git-core

Aplicación

Vamos a poner que se llama techonage, crearemos un directorio en la máquina donde la clonaremos y compilaremos:
Shell
1
2
3
4
5
6
$ sudo mkdir -p /var/app/technoage
$ sudo chown -R marcos:www-data /var/app/techonage
$ cd /var/app/techonage
$ git clone https://gitlab.com/devilcius/technoage.git .
# y generamos el jar con
$ mvn clean package
Para renforzar la seguridad crearemos un usuario que sólo tenga acceso a las aplicaciones de spring boot:
Shell
1
2
3
4
5
$ sudo useradd webapp
$ sudo passwd webapp
$ sudo chown -R webapp:webapp /var/app/technoage/src/main/resources/public/
$ sudo chown -R webapp:webapp /var/app/technoage/target/
$ sudo chmod 500 /var/app/technoage/target/technoage.jar

Instalación del servicio

Creamos el siguiente fichero en /etc/systemd/system/technoage.service
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Technoage application
After=syslog.target
 
[Service]
Environment=AWS_ACCESS_KEY_ID=secret_key
Environment=AWS_SECRET_ACCESS_KEY=secret_access_key
 
User=webapp
ExecStart=/usr/bin/java -jar /var/app/technoage/target/technoage.jar --server.port=8070 SuccessExitStatus=143
 
[Install]
WantedBy=multi-user.target
Para que el servicio pueda pasar las variables de entorno a la aplicación, estás han de estar declaradas en el fichero. A modo de ejemplo he puesto dos variables usadas por el APÌ de aws. Nótese también que especificamos el puerto por el que debe escuchar la aplicación. En el caso de technoage, el 8070. De este modo podemos tener varias aplicaciones corriendo, cada una con su puerto sin necesidad de tocar el código. Además hemos especificado el usuario dado de alta anteriormente para que controle la aplicación.
Para arrancar el servicio usaremos el comando:
Shell
1
$ sudo service technoage start
y
Shell
1
$ sudo service technoage stop
para pararlo. Cada vez que hagamos una modificación el fichero de configuración deberemos ejecutar
Shell
1
$ sudo systemctl daemon-reload
. Para que el servicio arranque automáticamente después de cada reboot:
Shell
1
$ sudo systemctl enable technoage.service.

Proxy web

Usaremos nginx para que haga de proxy para las aplicaciones del tomcat y éstas sean accesibles por los puertos http y/o https. Para obtener la última versión de nginx, hay que seguir estos pasos:
Shell
1
$ sudo nano /etc/apt/sources.list
Y añadidos estas dos líneas al final del fichero:
1
2
deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx
Importamos la clave pública de nginx para poder actualizar el repositorio, e instalamos nginx:
Shell
1
2
3
4
$ wget http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key
$ sudo apt update
$ sudo apt install nginx
Estos pasos tuve que hacerlos con ubuntu 16.04, para 18.04 basta con
Shell
1
2
$ sudo apt update
$sudo apt install nginx
Esta sería una configuración básica para technoage en /etc/nginx/conf.d/technoage.conf:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
        listen 80;
        listen [::]:80;
 
        server_name techonage.net;
 
        location / {
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_pass http://127.0.0.1:8070/;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header X-Forwarded-Proto $scheme;
             proxy_set_header X-Forwarded-Port $server_port;
        }
}

Instalación del certificado ssl

Usaremos letsencrypt porque funciona muy bien y es gratuito.
Shell
1
2
3
$ sudo add-apt-repository ppa:certbot/certbot`
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx
Una vez instalado, obtenemos el certificado (siempre usando el ejemplo de technoage) con el siguiente comando:
Shell
1
2
3
$ sudo certbot --nginx -d technoage.net
# y reiniciamos el proxy:
sudo systemctl restart nginx
Si seguimos las instrucciones de cerbot y escogemos que se fuerce el tráfico por https, éste modificará el fichero de configuración de nginx con las directivas pertinentes. Debería tener esta pinta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
server {
 
        server_name technoage.net;
 
        location / {
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_pass http://127.0.0.1:8070/;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header X-Forwarded-Proto $scheme;
             proxy_set_header X-Forwarded-Port $server_port;
        }
 
    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/technoage.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/technoage.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
server {
    if ($host = technoage.net) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
 
 
        listen 80;
        listen [::]:80;
        
    server_name technoage.net;
    return 404; # managed by Certbot
}

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Artículos

  • abril 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • junio 2021
  • mayo 2021
  • abril 2021
  • marzo 2021
  • febrero 2021
  • enero 2021
  • diciembre 2020
  • noviembre 2020
  • octubre 2020
  • septiembre 2020
  • agosto 2020
  • julio 2020
  • junio 2020
  • mayo 2020
  • abril 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • diciembre 2019
  • noviembre 2019
  • octubre 2019
  • septiembre 2019
  • agosto 2019
  • julio 2019
  • junio 2019
  • mayo 2019
  • abril 2019
  • marzo 2019
  • febrero 2019
  • enero 2019
  • noviembre 2018
  • octubre 2018
  • julio 2016
  • mayo 2016
  • abril 2016
  • agosto 2015
  • febrero 2014
  • junio 2013
  • febrero 2013
  • noviembre 2012
  • octubre 2012
  • septiembre 2012
  • abril 2012
  • enero 2012

Categorías

  • Cómo
  • Consejos
  • Hacks
  • Sin sentido
  • Tutorial

Etiquetas

apache API aws cache Centos Codeigniter EAC firefox flash freebsd freenas gmail Google guacamole java Javascript jQuery kubuntu Linux mysql nas4free nginx php plesk postfix python react rtorrent Seguridad sftp sonata-admin spring spring-boot sql ssh ssl symfony symfony2 symfony4 thymeleaf ubuntu vnc wget windows wine

Entradas recientes

  • Confirmación antes de apagar
  • cURL error 60: SSL certificate problem: unable to get local issuer certificate
  • Oracle JDK 7 is NOT installed.
  • ssh: connect to host: Connection refused
  • Restringir acceso a un bucket de AWS s3 por IP

Comentarios recientes

  • Marcos en Deobbing flash
  • Irosales en Deobbing flash
  • Instalación certificado SSL de un vendedor – Marcos Peña en Instala un certificado SSL en tres pasos
  • gerMdz en Cómo instalar un certificado letsencrypt para un sitio gestionado por Cloudflare
  • Jose Olalla en Cómo ampliar el espacio en disco en 1and1

Archivos

  • abril 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • junio 2021
  • mayo 2021
  • abril 2021
  • marzo 2021
  • febrero 2021
  • enero 2021
  • diciembre 2020
  • noviembre 2020
  • octubre 2020
  • septiembre 2020
  • agosto 2020
  • julio 2020
  • junio 2020
  • mayo 2020
  • abril 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • diciembre 2019
  • noviembre 2019
  • octubre 2019
  • septiembre 2019
  • agosto 2019
  • julio 2019
  • junio 2019
  • mayo 2019
  • abril 2019
  • marzo 2019
  • febrero 2019
  • enero 2019
  • noviembre 2018
  • octubre 2018
  • julio 2016
  • mayo 2016
  • abril 2016
  • agosto 2015
  • febrero 2014
  • junio 2013
  • febrero 2013
  • noviembre 2012
  • octubre 2012
  • septiembre 2012
  • abril 2012
  • enero 2012

Categorías

  • Cómo
  • Consejos
  • Hacks
  • Sin sentido
  • Tutorial

Meta

  • Acceder
  • Feed de entradas
  • Feed de comentarios
  • WordPress.org
© 2022 Marcos Peña | Funciona con Minimalist Blog Tema para WordPress