Dado que SpringBoot es un marco de microservicio, su método de implementación de producción debe ser lo más simple posible, lo cual es una gran diferencia con respecto a las aplicaciones web convencionales. Puede incrustar un contenedor web, como Tomcat, Jetty, etc., y ya no necesita empaquetar la aplicación en un formulario específico especificado por el contenedor.
Para SpringBoot, se puede iniciar un paquete JAR simple y se puede iniciar directamente con Java -jar. Esta es una forma muy elegante, pero también trae ciertos problemas, como: ¿Cómo detener la aplicación? En el pasado, las aplicaciones se implementaron en contenedores específicos, y los scripts proporcionados por el contenedor podrían descontinuarse elegantemente, pero ahora el contenedor está integrado y los scripts desaparecen. ¿Qué tengo que hacer? El asesinato directo es una forma, pero parece demasiado grosero y puede traer muchos problemas inesperados.
Como podemos pensar en problemas, ¿los fabricantes de marco, entonces, ¿nos han preparado soluciones para nosotros? Hay sí, y presentaré algunas soluciones que he aprendido a continuación.
1. Use puntos finales
En la Parte 4 de la documentación oficial de Springboot, se introducen varias características preparadas para la producción de lanzamiento de la aplicación. Entre ellos, a través del punto final HTTP de Actuator, los desarrolladores pueden monitorear y administrar fácilmente las aplicaciones.
Presente el paquete de inicio especificado:
"org.springframework.boot: spring-boot-starter-actuator: $ {springbootversion}"Abra las siguientes dos configuraciones en Application.yml para detener la aplicación a través de la solicitud HTTP
Gestión: Seguridad: habilitada: falseEndpoints: apagado: habilitado: verdadero
Los comandos de operación son los siguientes:
curl -x post http: // host: puerto/shutdown
Pero este método tiene un problema muy grave, es decir, cualquiera puede controlar la parada de la aplicación, lo que sin duda es inaceptable para una aplicación de producción. Algunas personas pueden pensar que la dirección de enlace es demasiado simple ahora, y los no mantenidos pueden adivinar fácilmente si este problema se puede evitar si se usa una dirección muy compleja. Muy buena, esta propuesta es buena, echemos un vistazo a las configuraciones relevantes proporcionadas por SpringBoot.
Puntos finales: apagado: habilitado: ruta verdadera: /xxx
Después de completar la configuración, el comando anterior ya no está disponible. El comando debe actualizarse como:
curl -x post http: // host: puerto/xxx
Por supuesto, xxx es solo uno que configuré casualmente, puede establecer cualquier dirección. Aunque la seguridad es un poco más alta, dicho nivel de seguridad aún no está disponible para aplicarse al entorno de producción. Entonces, ¿hay otras medidas de protección? Sí, además de modificar la ruta de cierre, también podemos agregar un contexto unificado a todas las operaciones de administración, configurar puertos independientes y restringir el acceso IP especificado (generalmente limitado a la máquina nativa). La configuración es la siguiente:
Gestión: Seguridad: habilitada: Falso Puerto: 9001 Dirección: 127.0.0.1 Path de contexto: /Admin
El comando de interrupción de servicio cambiado es:
Curl -x Post http://127.0.0.1:9001/admin/xxx
Esto es realmente lo suficientemente seguro. Para garantizar aún más la seguridad del sistema, agregue una capa de autenticación básica HTTP.
Aumentar las dependencias de seguridad:
"org.springframework.boot: Spring-Boot-Starter-Security: $ {SpringBootVersion}"Modificar el archivo de configuración de la siguiente manera:
Puntos finales: apagado: habilitado: verdadero ruta: /xxxmanagement: Seguridad: habilitado: verdadero puerto: 9001 Dirección: 127.0.0.1 Path de contexto: /Adminsecurity: Básico: habilitado: Ruta verdadera: /Administrador Usuario: Nombre: Contraseña de raíz: 123456
Después de completar la configuración, el comando de interrupción final es:
curl -x post -u raíz: 123456 http://127.0.0.1:9001/admin/xxx
2. Regístrese como servicio del sistema
Además de ejecutar aplicaciones SpringBoot con Java -jar, puede registrarse fácilmente como un servicio de sistema Linux/Unix con init.d o Systemd, lo que hace que sea muy fácil instalar y administrar aplicaciones SpringBoot en un entorno de producción.
En el proyecto Maven, para crear un frasco "totalmente ejecutable", se deben introducir los siguientes complementos:
<glugin> <MoupRupid> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> <version> 1.5.2.release </versions> <Configuration> <secutable> true </secutable> </figuration> </tugin> </tugin>
En el proyecto Gradle, la configuración equivalente es la siguiente:
complementos {id 'org.springframework.boot' versión '1.5.2.release'} springboot {execute = true}Después de completar la configuración, puede ejecutar la aplicación integrada a través de ./Application-name.jar.
Finalmente, necesitamos instalar la aplicación empaquetada en un servicio init.d, para que pueda administrarse fácilmente utilizando UNIX/Linux. El método de operación es muy simple. Simplemente solo necesita vincular la aplicación a init.d (donde las fondos es mi propio nombre de aplicación, y debe reemplazarla de acuerdo con la situación al experimentar).
ln -s /app/funda/funda.jar /etc/init.d/funda
Compruebe si el enlace se establece correctamente
ls -l /etc/init.d/funda
Inicie el servicio y el registro de la aplicación puede ver el archivo /var/log/funda.log
Inicio de fondos de servicio
Otros comandos comunes
# Verifique la aplicación ESTADO DE ESTADO DE ESTADO SERVICIO DE FONDA# Detener el servicio de solicitud FundA Stop
Resumen de preguntas:
Después de que el enlace sea exitoso, la aplicación no se puede iniciar con éxito. Se solicita que no pueda encontrar Java. Use el siguiente comando para vincular el comando jdk java a /sbin /java.
ln -s /usr/local/jdk1.8.0_131/bin/java/sbin/java
Enlace de referencia:
Puntos finales
Monitoreo y gestión a través de HTTP
Servicios de Unix/Linux
Incapaz de encontrar Java #5690
Enlace del proyecto:
Github: https://github.com/qchery/funda
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.