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 "%r" %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: 80Connector 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 olocalhost
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 configuramoswebapps-项目名
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