Use o Docker para instalar rapidamente o tomcat no servidor em nuvem e implantar o projeto SSM

Prefácio

SpringBoot está integrado ao tomcat e o serviço pode ser iniciado rapidamente com um comando. Recentemente, aprendi SSM honestamente em sala de aula. O projeto SSM está implantado e online e precisa ser empacotado como um pacote de guerra e colocado no tomcat do servidor. Claro, é melhor instalar e configurar o tomcat com a ajuda do docker. É muito conveniente baixar, instalar e desinstalar. Um dia o tomcat está quebrado, exclua-o se você disser que foi excluído, e a configuração ainda pode ser mantida .

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

Instale e execute o tomcat

1. Puxe a imagem mais recente

docker pull tomcat

2. Execute um contêiner tomcat para teste

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

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

Por que executar um contêiner Tomcat (que pode ser excluído posteriormente)? Porque precisamos saber qual é a estrutura do diretório no contêiner do tomcat, para que na próxima vez que o contêiner for oficialmente executado, o diretório-chave no contêiner será montado no host. Em seguida, modifique a configuração, copie o pacote war do projeto no futuro, entre no contêiner fora de ordem e opere diretamente no diretório da máquina host, mesmo sem reiniciar o contêiner para fazer efeito! ! !

 Entre no contêiner tomcat01 e veja a estrutura do diretório como acima. Aqui, precisamos nos concentrar apenas em 4 diretórios:

1. conf: relacionado à configuração, precisamos modificar o arquivo de configuração server.xml neste diretório ao implantar o projeto

2. logs: Armazene os arquivos de log gerados pelo projeto

3. webapps.dist: interface padrão, etc.

4. webapps: Observe que após iniciar o contêiner, você relatará 404 quando visitar o ip: 8080 , e não verá o logotipo e mascote do Tomcat, o gatinho macho amarelo. O motivo é que no tomcat9, embora a porta padrão 8080 aponte para o diretório webapps, webapps está vazio. Seus recursos reais são colocados no diretório webapps.dist. Portanto, só precisamos copiar todo o conteúdo de webapps.dist para webapps e visitar ip: 8080 para ver a página padrão. Isso é explicado em detalhes abaixo. 

3. Copie todo o conteúdo de / usr / local / tomcat do contêiner para o host

Também vimos acima que nosso projeto de implantação precisa prestar atenção para visitar os 4 diretórios em 2. Por conveniência, planejamos montar diretamente  / usr / local / tomcat no / data / tomcat do host (opcional). A montagem é baseada na máquina host! ! ! Em outras palavras, se o / data / tomcat do host estiver vazio, monte / usr / local / tomcat no / data / tomcat do host, então / usr / local / tomcat dentro do contêiner estará todo vazio, porque está tomando o host como referência, como o diretório correspondente do host é obtido, é como ele é obtido.

Portanto, antes de executar oficialmente o contêiner do tomcat para montagem, precisamos copiar todo o conteúdo em / usr / local / tomcat no contêiner de teste para / data / tomcat.

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

4. Execute oficialmente o contêiner do 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

Não vou apresentar muito os parâmetros de comando do docker run. Olhe o blog no prefácio. Por que precisamos realizar o mapeamento de várias portas? Porque ao implantar vários projetos em um tomcat, existem duas opções:

1. Use portas diferentes para distinguir vários projetos

2. Vários projetos compartilham a porta 80, mas são diferenciados pelo nome de domínio

Portanto, para evitar que implantemos vários projetos posteriormente, mapeei a porta 80, além da porta padrão 8080. Obviamente, você pode mapear algumas outras portas caso precise usá-las posteriormente. Se quiser usá-lo posteriormente, mas o mapeamento da porta correspondente não for executado quando o contêiner estiver em execução, o que você deve fazer? Exclua este contêiner diretamente e execute um novo contêiner por meio do docker run novamente. Como montamos o diretório antes, os recursos do projeto e a configuração do contêiner excluído não serão perdidos! ! !

Configurar o tomcat

1. Configure a página padrão do tomcat

A porta padrão do tomcat é 8080, e você pode acessar a página padrão visitando a porta 8080. Depois de inicializar o container, visite ip: 8080 e ele reportará 404. Não vi o logotipo e mascote do Tomcat, o gatinho amarelo. O motivo é que no tomcat9, embora a porta padrão 8080 aponte para o diretório webapps, webapps está vazio. Seus recursos reais são colocados no diretório webapps.dist. Portanto, só precisamos copiar todo o conteúdo de webapps.dist para webapps e visitar ip: 8080 para ver a página padrão.

Como montamos o diretório quando iniciamos o contêiner anteriormente, só precisamos operar em / data / tomcat no host, e isso terá efeito sem reiniciar o contêiner após a conclusão da operação. Atualizar ip: 8080, você pode ver a página padrão.

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

2. Configure a interface de gerenciamento da Web do Tomcat

(1) O url de acesso da página de gerenciamento é: ip: 8080 / manager / html , mas a interface de gerenciamento não pode ser acessada remotamente por padrão e você precisa desligar as restrições relevantes. Abra webapps / manager / META-INF / context.xml e comente o seguinte:

<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 o nome de usuário e senha do administrador. Abra conf / tomcat-users.xml e modifique a seguinte configuração:

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

</tomcat-users>

(3) Visite a página de gerenciamento

Implantar projeto SSM

1. Configuração do projeto

A maneira mais simples de implantar um projeto é usar a porta padrão 8080 do tomcat, nomear o pacote war como ROOT.war e colocá-lo diretamente em webapps e substituir o código do projeto pela interface de gerenciamento padrão atual. Depois, você pode acessar seu projeto visitando a porta 8080. Este método é simples, mas é muito intrusivo e não é recomendado, porque você pode precisar usar a página de gerenciamento novamente no futuro.

Ao implantar vários projetos em um tomcat, existem duas opções:

1. Use portas diferentes para distinguir vários projetos

2. Vários projetos compartilham a porta 80, mas são diferenciados pelo nome de domínio

O mesmo princípio se aplica ao host virtual do Apache. No caso de não adquirir um nome de domínio, use números de porta diferentes para fazer a distinção. Se você já comprou um nome de domínio, se ainda usa projetos diferentes com números de porta diferentes, ao acessar projetos diferentes através de "nome de domínio: número da porta", o nome de domínio é seguido por um número de porta, o que parece ser uma violação.

Desta vez, usamos o segundo método, e é por isso que adicionei um mapeamento da porta 80 ao executar o contêiner anteriormente. Por que usar a porta 80 em vez de outras portas? Não vou explicar.

Abra conf / server.xml  e adicione a seguinte configuração entre as tags <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>
  • O nome do projeto Catalina no nó raiz   é um dos nossos nomes. Parece que precisa começar com Catalina, desde que não se repita, você pode adicionar várias configurações como acima no arquivo de configuração.
  • Connector HTTP/1.1: Configuração do link HTTP, nossa porta é configurada aqui, configuramos como: 80
  • Connector AJP/1.3: Usado para encaminhar a configuração para outros servidores, a configuração da porta é: 8689 ; geralmente usada para comunicação entre o apache e o tomcat.
  • Service A configuração da porta, se houver vários  nós de serviço diferentes  , nossas portas podem ser configuradas como iguais, desde que os nomes de domínio sejam diferentes.
  • Engine-defaultHost: Este é o local para configurar o nome de domínio. Para o serviço configurado com a mesma porta,   nomes de domínio diferentes podem ser usados ​​para resolver o problema de redirecionamento, mas quando ambos estão configurados com o  localhost mesmo nome de domínio, use portas diferentes.
  • Engine-Realm: Este nó não precisa ser gerenciado.
  • Engine-Host-name: Aqui também configuramos o nome de domínio que adquiriram a configuração acima do nome de domínio e o nome de domínio é o mesmo que pode ser.
  • Engine-Host-appBase: Aqui está o ponto chave, configuramos uma pasta para a configuração do nosso projeto; a pasta da interface de gerenciamento padrão é  webapps , aqui nós configuramos  webapps-项目名 para distinguir diferentes projetos.
  • Engine-Host-Valve: Neste nó, configuramos principalmente o diretório onde os logs são gerados e outras configurações relacionadas

2. O projeto é marcado como um pacote de guerra e enviado para o servidor

IDEs diferentes têm métodos de embalagem diferentes, e o Baidu é adequado. Envie o pacote war para o servidor, você pode usar xftp ou winscp.

É importante notar que antes do pacote war ser lançado, porque o ambiente do servidor é diferente do ambiente local, a configuração correspondente precisa ser modificada, como: configuração relacionada ao banco de dados, versão do pacote do driver do banco de dados, etc. Eu pisei nesses poços. . . .

3. Renomeie o pacote war para ROOT.war e coloque-o sob "nome do projeto webapps"

Ao acessar o projeto através do nome de domínio, ROOT.war será automaticamente descompactado para a pasta ROOT. Se você acessá-lo e relatar um erro 500, ou descobrir que o pacote war não pode ser descompactado automaticamente, você pode tentar descompactá-lo por meio do comando linux. Eu já encontrei esse problema antes.

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

 

Acho que você gosta

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