Utilice Docker para instalar rápidamente tomcat en el servidor en la nube e implementar el proyecto SSM

Prefacio

SpringBoot está integrado con tomcat y el servicio se puede iniciar rápidamente con un comando. Recientemente, aprendí SSM honestamente en clase. El proyecto SSM está implementado y en línea, y debe empaquetarse como un paquete de guerra y colocarse en el tomcat del servidor. Por supuesto, es mejor instalar y configurar Tomcat con la ayuda de Docker. Es muy conveniente descargar, instalar y desinstalar. Un día Tomcat se rompe, elimínelo si dice que se eliminó, y la configuración aún se puede conservar. .

Docker de inicio rápido: https://blog.csdn.net/qq_43290318/article/details/107743188

Instalar y ejecutar tomcat

1. Extraiga la imagen más reciente

docker pull tomcat

2. Ejecute un contenedor Tomcat para realizar pruebas.

# 随便运行一个tomcat容器
docker run --name tomcat01 -p 8080:8080 -d tomcat

# 进入容器内部
docker exec -it tomcat01 /bin/bash

¿Por qué ejecutar un contenedor Tomcat (que se puede eliminar más adelante)? Porque necesitamos saber cuál es la estructura de directorios en el contenedor tomcat, de modo que la próxima vez que se ejecute oficialmente el contenedor, el directorio clave en el contenedor se montará en el host. Luego modifique la configuración, copie el paquete war del proyecto en el futuro, ingrese el contenedor fuera de servicio y opere directamente en el directorio de la máquina host, ¡incluso sin reiniciar el contenedor para que surta efecto! ! !

 Ingrese al contenedor tomcat01 y vea la estructura de directorios como arriba. Aquí solo necesitamos enfocarnos en 4 directorios:

1. conf: relacionada con la configuración, necesitamos modificar el archivo de configuración server.xml en este directorio al implementar el proyecto

2. registros: almacena los archivos de registro generados por el proyecto

3. webapps.dist: interfaz predeterminada, etc.

4. webapps: Tenga en cuenta que después de iniciar el contenedor, informará 404 cuando visite ip: 8080 , y no verá el logotipo y la mascota de Tomcat, el gatito macho amarillo. La razón es que en tomcat9, aunque el puerto predeterminado 8080 apunta al directorio webapps, webapps está vacío. Sus recursos reales se encuentran en el directorio webapps.dist. Así que solo necesitamos copiar todo el contenido de webapps.dist a webapps y visitar ip: 8080 para ver la página predeterminada. Esto se explica en detalle a continuación. 

3. Copie todo el contenido de / usr / local / tomcat en el contenedor al host

También hemos visto en lo anterior que nuestro proyecto de implementación debe prestar atención para visitar los 4 directorios en 2. Para mayor comodidad, planeamos montar / usr / local / tomcat directamente  en / data / tomcat del host (opcional). ¡El montaje se basa en la máquina host! ! ! En otras palabras, si el / data / tomcat del host está vacío, entonces monte / usr / local / tomcat en / data / tomcat del host, luego / usr / local / tomcat dentro del contenedor estará todo vacío, porque toma el host como punto de referencia, cómo se obtiene el directorio correspondiente del host, es cómo se obtiene.

Entonces, antes de ejecutar oficialmente el contenedor tomcat para el montaje, debemos copiar todo el contenido de / usr / local / tomcat en el contenedor de prueba a / data / tomcat.

docker cp tomcat01:/usr/local/tomcat /data/tomcat

4. Ejecute oficialmente el contenedor tomcat

# 停止测试容器
docker stop tomcat01
# 删除测试容器
docker rm tomcat01

# 正式运行我们的tomcat容器
docker run --privileged=true -v /data/tomcat:/usr/local/tomcat -p 8080:8080 -p 8688:8688 -p 80:80 --name tomcat01 -d tomcat

No voy a presentar mucho los parámetros de comando de Docker Run. Mira el blog en el prefacio. ¿Por qué necesitamos realizar un mapeo de puertos múltiples? Porque al implementar varios proyectos en un solo Tomcat, hay dos opciones:

1. Utilice diferentes puertos para distinguir varios proyectos

2. Varios proyectos comparten el puerto 80, pero se distinguen por el nombre de dominio

Entonces, para evitar que implementemos varios proyectos más adelante, asigné el puerto 80 además del puerto predeterminado 8080. Por supuesto, puede mapear algunos otros puertos en caso de que necesite usarlos más adelante. Si desea utilizarlo más tarde, pero la asignación de puertos correspondiente no se realiza cuando el contenedor se está ejecutando, ¿qué debe hacer? Elimine este contenedor directamente y ejecute un nuevo contenedor a través de Docker Run nuevamente. Como montamos el directorio antes, los recursos del proyecto y la configuración del contenedor eliminado no se perderán. ! !

Configurar tomcat

1. Configurar la página predeterminada de Tomcat

El puerto predeterminado de tomcat es 8080 y puede acceder a la página predeterminada visitando el puerto 8080. Después de iniciar el contenedor, visite ip: 8080 e informará 404. No vi el logotipo y la mascota de Tomcat, el gatito macho amarillo. La razón es que en tomcat9, aunque el puerto predeterminado 8080 apunta al directorio webapps, webapps está vacío. Sus recursos reales se encuentran en el directorio webapps.dist. Así que solo necesitamos copiar todo el contenido de webapps.dist a webapps y visitar ip: 8080 para ver la página predeterminada.

Dado que montamos el directorio cuando iniciamos el contenedor anteriormente, solo necesitamos operar bajo / data / tomcat en el host, y entrará en vigencia sin reiniciar el contenedor después de que se complete la operación. Actualizar ip: 8080, puede ver la página predeterminada.

# 此时处于宿主机的 /data/tomcat 
cp -r webapps.dist/* webapps/

2. Configurar la interfaz de administración web de Tomcat

(1) La URL de acceso de la página de administración es: ip: 8080 / manager / html , pero no se puede acceder a la interfaz de administración de forma remota de forma predeterminada y debe desactivar las restricciones relevantes. Abra webapps / manager / META-INF / context.xml y comente lo siguiente:

<Context antiResourceLocking="false" privileged="true" >
<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>

(2) Configure el nombre de usuario y la contraseña del administrador. Abra conf / tomcat-users.xml y modifique la siguiente configuración:

<tomcat-users>
<!--
    Comments
-->
   <role rolename="admin-gui"/>
   <role rolename="manager-gui"/>
   <user username="自定义的用户名" password="自定义的密码" roles="admin-gui,manager-gui"/>

</tomcat-users>

(3) Visite la página de administración

Implementar proyecto SSM

1. Configuración del proyecto

La forma más sencilla de implementar un proyecto es usar el puerto predeterminado 8080 de tomcat, nombrar el paquete war ROOT.war y luego colocarlo directamente en webapps y reemplazar el código del proyecto con la interfaz de administración predeterminada actual. Luego, puede acceder a su proyecto visitando el puerto 8080. Este método es simple, pero es demasiado intrusivo y no se recomienda, porque es posible que deba volver a usar la página de administración en el futuro.

Al implementar varios proyectos en un solo gato, hay dos opciones:

1. Utilice diferentes puertos para distinguir varios proyectos

2. Varios proyectos comparten el puerto 80, pero se distinguen por el nombre de dominio

El mismo principio se aplica al host virtual de Apache. En el caso de no adquirir un nombre de dominio, utilice diferentes números de puerto para distinguir. Si ya ha comprado un nombre de dominio, si todavía utiliza diferentes proyectos con diferentes números de puerto, al acceder a diferentes proyectos a través de "nombre de dominio: número de puerto", el nombre de dominio va seguido de un número de puerto, lo que parece ser una infracción.

Entonces, esta vez usamos el segundo método, por lo que agregué un mapeo del puerto 80 al ejecutar el contenedor antes. ¿Por qué utilizar el puerto 80 en lugar de otros puertos? No te lo explicaré.

Abra conf / server.xml  y agregue la siguiente configuración entre las etiquetas <Server>:

<Service name="Catalina-项目名">
    <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8689" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="域名">
        <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
        </Realm>
        <Host name="域名" appBase="webapps-项目名" unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs/项目名" prefix="access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Host>
    </Engine>
</Service>
  • El nombre del proyecto de Catalina en el nodo raíz   es uno de nuestros nombres. Parece que debe comenzar con Catalina, siempre que no se repita, puede agregar múltiples configuraciones como se indicó anteriormente en el archivo de configuración.
  • Connector HTTP/1.1: Configuración del enlace HTTP, aquí se configura nuestro puerto, lo configuramos como: 80
  • Connector AJP/1.3: Usado para reenviar la configuración a otros servidores, la configuración del puerto es: 8689 ; generalmente se usa para la comunicación entre apache y tomcat.
  • Service La configuración del puerto en, si hay varios  nodos de servicio diferentes  , nuestros puertos se pueden configurar como el mismo, siempre que los nombres de dominio sean diferentes.
  • Engine-defaultHost: Este es el lugar para configurar el nombre de dominio. Para el Servicio configurado con el mismo puerto,   se pueden usar diferentes nombres de dominio para resolver el problema de redirección, pero cuando ambos están configurados con el  localhost mismo nombre de dominio, use puertos diferentes.
  • Engine-Realm: No es necesario administrar este nodo.
  • Engine-Host-name: Aquí también configuramos el nombre de dominio que han comprado la configuración anterior del nombre de dominio y el nombre de dominio es el mismo que puede ser.
  • Engine-Host-appBase: Aquí está el punto clave, configuramos una carpeta para la configuración de nuestro proyecto; la carpeta de la interfaz de gestión predeterminada es  webapps , aquí la configuramos  webapps-项目名 para distinguir diferentes proyectos.
  • Engine-Host-Valve: En este nodo configuramos principalmente el directorio donde se generan los logs, y otras configuraciones relacionadas

2. El proyecto se marca como un paquete de guerra y se envía al servidor.

Diferentes IDE tienen diferentes métodos de empaque, y Baidu está bien. Empuje el paquete war al servidor, puede usar xftp o winscp.

Vale la pena señalar que antes de que se lance el paquete war, debido a que el entorno del servidor es diferente del entorno local, es necesario modificar la configuración correspondiente, como: configuración relacionada con la base de datos, versión del paquete del controlador de la base de datos, etc. He pisado estos pozos. . . .

3. Cambie el nombre del paquete war a ROOT.war y colóquelo bajo "webapps-project name"

Al acceder al proyecto a través del nombre de dominio, ROOT.war se descomprimirá automáticamente en la carpeta ROOT. Si accede a él e informa un error 500, o descubre que el paquete war no se puede descomprimir automáticamente, puede intentar descomprimirlo usted mismo a través del comando linux. Me he encontrado con este problema antes.

https://blog.csdn.net/qq_43290318/article/details/104769757

 

Supongo que te gusta

Origin blog.csdn.net/qq_43290318/article/details/109792232
Recomendado
Clasificación