{"id":127,"date":"2017-04-14T22:01:03","date_gmt":"2017-04-15T01:01:03","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2017\/04\/instalando-tomcat-9-no-ubuntu\/"},"modified":"2026-09-09T11:54:53","modified_gmt":"2026-09-09T14:54:53","slug":"instalando-tomcat-9-no-ubuntu","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/instalando-tomcat-9-no-ubuntu\/","title":{"rendered":"Instalando Tomcat 9 no Linux"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro instalando um m\u00f3dulo de aplica\u00e7\u00e3o em um rack de servidores Apache Tomcat\" src=\"\/wp-content\/uploads\/2026\/09\/tomcat-openjdk-v4.webp\" width=\"1486\" height=\"856\" \/><\/p>\n<div style=\"background:#fff8e1;border-left:4px solid #8b1a1a;padding:.8em 1em;margin:1em 0\"><strong>Nota (2026):<\/strong> Artigo original de abril de 2017 (Tomcat 9.0.0.M21 + JRE 8 da Oracle). O t\u00edtulo e a URL foram mantidos porque est\u00e3o indexados; o procedimento abaixo instala o <strong>Apache Tomcat 11.0.25<\/strong> com <strong>OpenJDK 25 LTS<\/strong>, as vers\u00f5es atuais em setembro de 2026.<\/div>\n<p>O Tomcat continua sendo o container servlet mais usado em servidores Linux. Este howto instala a linha atual a partir do tarball oficial da Apache, com usu\u00e1rio dedicado e unidade systemd \u2014 no Ubuntu 24.04\/22.04 e Debian equivalentes.<\/p>\n<p><!-- more --><\/p>\n<h2>Qual vers\u00e3o usar<\/h2>\n<p>Em setembro de 2026 a Apache mant\u00e9m tr\u00eas linhas est\u00e1veis. Para instala\u00e7\u00e3o nova, use a 11:<\/p>\n<table>\n<thead>\n<tr>\n<th>Tomcat<\/th>\n<th>Java m\u00ednimo<\/th>\n<th>API<\/th>\n<th>Situa\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>11.0.25<\/strong><\/td>\n<td>17+<\/td>\n<td>Jakarta EE 11 (<code>jakarta.*<\/code>)<\/td>\n<td>atual \u2014 use este<\/td>\n<\/tr>\n<tr>\n<td>10.1.59<\/td>\n<td>11+<\/td>\n<td>Jakarta EE 10 (<code>jakarta.*<\/code>)<\/td>\n<td>suportado<\/td>\n<\/tr>\n<tr>\n<td>9.0.121<\/td>\n<td>8+<\/td>\n<td>Java EE 8 (<code>javax.*<\/code>)<\/td>\n<td>EOL em 31\/03\/2027<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>O Tomcat 11 implementa Servlet 6.1 \/ JSP 4.0 e exige Java 17 ou superior. O OpenJDK 25 \u00e9 o LTS mais novo e roda nessa linha. Aplica\u00e7\u00f5es escritas para Tomcat 9 (<code>javax.*<\/code>) <strong>n\u00e3o sobem direto<\/strong> no 10\/11 \u2014 precisam migrar o namespace com a <a href=\"https:\/\/github.com\/apache\/tomcat-jakartaee-migration\">ferramenta oficial<\/a>. Se a app ainda for <code>javax.*<\/code> e voc\u00ea n\u00e3o pode migrar agora, veja a se\u00e7\u00e3o do Tomcat 9 no final.<\/p>\n<h2>Instalando o OpenJDK 25<\/h2>\n<p>Esque\u00e7a o tarball da Oracle com cookie de licen\u00e7a: no Ubuntu\/Debian o OpenJDK entra pelo <code>apt<\/code> e recebe atualiza\u00e7\u00e3o de seguran\u00e7a junto com o sistema. No servidor, a variante <em>headless<\/em> basta (sem bibliotecas gr\u00e1ficas).<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install -y openjdk-25-jdk-headless\njava -version\n<\/code><\/pre>\n<p>Se o pacote <code>openjdk-25-jdk-headless<\/code> n\u00e3o existir na sua release, instale o 21 (<code>openjdk-21-jdk-headless<\/code>) \u2014 o Tomcat 11 aceita qualquer Java \u2265 17. Confira o <code>JAVA_HOME<\/code> (o caminho muda entre amd64 e arm64):<\/p>\n<pre><code class=\"language-bash\">JAVA_HOME=$(dirname \"$(dirname \"$(readlink -f \"$(which java)\")\")\")\necho \"$JAVA_HOME\"\n# exemplo amd64: \/usr\/lib\/jvm\/java-25-openjdk-amd64\n<\/code><\/pre>\n<h2>Criando o grupo e o usu\u00e1rio tomcat<\/h2>\n<p>O processo n\u00e3o deve rodar como root. Conta de sistema, sem login e sem home extra:<\/p>\n<pre><code class=\"language-bash\">sudo groupadd --system tomcat\nsudo useradd --system --no-create-home --gid tomcat \n  --shell \/usr\/sbin\/nologin --home-dir \/usr\/local\/tomcat tomcat\n<\/code><\/pre>\n<h2>Baixando e instalando o Tomcat 11<\/h2>\n<p>Pegue o tarball no CDN oficial e confira o SHA-512. A vers\u00e3o abaixo \u00e9 a 11.0.25 (12\/08\/2026); se j\u00e1 houver uma 11.0.x mais nova em <a href=\"https:\/\/tomcat.apache.org\/download-11.cgi\">tomcat.apache.org\/download-11.cgi<\/a>, troque o <code>VER<\/code>.<\/p>\n<pre><code class=\"language-bash\">VER=11.0.25\ncd \/tmp\ncurl -fLO \"https:\/\/dlcdn.apache.org\/tomcat\/tomcat-11\/v${VER}\/bin\/apache-tomcat-${VER}.tar.gz\"\ncurl -fLO \"https:\/\/downloads.apache.org\/tomcat\/tomcat-11\/v${VER}\/bin\/apache-tomcat-${VER}.tar.gz.sha512\"\nsha512sum -c \"apache-tomcat-${VER}.tar.gz.sha512\"\n\nsudo mkdir -p \/usr\/local\/tomcat\nsudo tar -xzf \"apache-tomcat-${VER}.tar.gz\" -C \/usr\/local\/tomcat --strip-components=1\nsudo chown -R tomcat:tomcat \/usr\/local\/tomcat\nsudo find \/usr\/local\/tomcat -type d -exec chmod 750 {} ;\nsudo find \/usr\/local\/tomcat -type f -exec chmod 640 {} ;\nsudo chmod 750 \/usr\/local\/tomcat\/bin\/*.sh\n<\/code><\/pre>\n<p>Mem\u00f3ria da JVM fica no <code>setenv.sh<\/code>, que o <code>catalina.sh<\/code> carrega sozinho \u2014 assim voc\u00ea n\u00e3o mistura op\u00e7\u00e3o com espa\u00e7o dentro do systemd:<\/p>\n<pre><code class=\"language-bash\">sudo tee \/usr\/local\/tomcat\/bin\/setenv.sh &gt; \/dev\/null &lt;&lt; 'EOF'\nexport CATALINA_OPTS=\"-Xms512M -Xmx1024M -server\"\nexport JAVA_OPTS=\"-Djava.awt.headless=true -Djava.security.egd=file:\/dev\/.\/urandom\"\nEOF\nsudo chown tomcat:tomcat \/usr\/local\/tomcat\/bin\/setenv.sh\nsudo chmod 750 \/usr\/local\/tomcat\/bin\/setenv.sh\n<\/code><\/pre>\n<p>Ajuste <code>-Xmx<\/code> \u00e0 RAM da m\u00e1quina. 1 GB \u00e9 um ponto de partida razo\u00e1vel para um host pequeno.<\/p>\n<h2>Unidade systemd<\/h2>\n<p><code>Type=simple<\/code> com <code>catalina.sh run<\/code> deixa o Java em primeiro plano, que \u00e9 o modo que o systemd espera. (Os <a href=\"\/2026\/09\/dominando-o-systemd-comandos-essenciais\/\">comandos essenciais do systemd<\/a> cobrem start\/stop\/status com mais detalhe.)<\/p>\n<pre><code class=\"language-bash\">JAVA_HOME=$(dirname \"$(dirname \"$(readlink -f \"$(which java)\")\")\")\n\nsudo tee \/etc\/systemd\/system\/tomcat.service &gt; \/dev\/null &lt;&lt; EOF\n[Unit]\nDescription=Apache Tomcat 11\nAfter=network.target\n\n[Service]\nType=simple\nUser=tomcat\nGroup=tomcat\nEnvironment=JAVA_HOME=${JAVA_HOME}\nEnvironment=CATALINA_HOME=\/usr\/local\/tomcat\nEnvironment=CATALINA_BASE=\/usr\/local\/tomcat\nWorkingDirectory=\/usr\/local\/tomcat\nExecStart=\/usr\/local\/tomcat\/bin\/catalina.sh run\nSuccessExitStatus=143\nRestart=on-failure\nRestartSec=10\nUMask=0007\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\nsudo systemctl daemon-reload\nsudo systemctl enable --now tomcat\nsudo systemctl status tomcat --no-pager\n<\/code><\/pre>\n<h2>Conferindo se subiu<\/h2>\n<pre><code class=\"language-bash\">ss -lntp | grep 8080\ncurl -I http:\/\/127.0.0.1:8080\/\nsudo journalctl -u tomcat -e --no-pager\n<\/code><\/pre>\n<p>A p\u00e1gina padr\u00e3o do Tomcat deve responder 200 em <code>http:\/\/IP:8080\/<\/code>. Se a porta n\u00e3o abrir, o log em <code>\/usr\/local\/tomcat\/logs\/catalina.out<\/code> e o <code>journalctl<\/code> mostram o motivo (JAVA_HOME errado \u00e9 o mais comum).<\/p>\n<p>Abra a 8080 no firewall s\u00f3 se o Tomcat for acessado de fora. Com proxy reverso na mesma m\u00e1quina, deixe a 8080 s\u00f3 em localhost:<\/p>\n<pre><code class=\"language-bash\"># acesso direto (se precisar)\nsudo ufw allow 8080\/tcp comment 'Tomcat'\n<\/code><\/pre>\n<h2>Manager (opcional)<\/h2>\n<p>O Manager e o Host Manager v\u00eam desligados para o mundo: o <code>RemoteAddrValve<\/code> nas apps <code>manager<\/code> e <code>host-manager<\/code> s\u00f3 aceita localhost. Crie um usu\u00e1rio com senha forte \u2014 nunca <code>admin\/admin<\/code>:<\/p>\n<pre><code class=\"language-bash\">SENHA=$(openssl rand -base64 18)\necho \"senha do manager: $SENHA\"\n\nsudo tee \/usr\/local\/tomcat\/conf\/tomcat-users.xml &gt; \/dev\/null &lt;&lt; EOF\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;tomcat-users xmlns=\"https:\/\/tomcat.apache.org\/xml\"\n              xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n              xsi:schemaLocation=\"https:\/\/tomcat.apache.org\/xml tomcat-users.xsd\"\n              version=\"1.0\"&gt;\n  &lt;role rolename=\"manager-gui\"\/&gt;\n  &lt;role rolename=\"admin-gui\"\/&gt;\n  &lt;user username=\"admin\" password=\"${SENHA}\" roles=\"manager-gui,admin-gui\"\/&gt;\n&lt;\/tomcat-users&gt;\nEOF\nsudo chown tomcat:tomcat \/usr\/local\/tomcat\/conf\/tomcat-users.xml\nsudo chmod 640 \/usr\/local\/tomcat\/conf\/tomcat-users.xml\nsudo systemctl restart tomcat\n<\/code><\/pre>\n<p>Acesse <code>http:\/\/127.0.0.1:8080\/manager\/html<\/code> (SSH tunnel se o host for remoto). N\u00e3o abra o Manager para a internet.<\/p>\n<h2>Porta 80: nginx na frente, n\u00e3o iptables<\/h2>\n<p>Em 2017 este artigo redirecionava 80\u21928080 com <code>iptables NAT<\/code>. Hoje o caminho certo \u00e9 um proxy reverso: TLS, Host header e logs no nginx, Tomcat s\u00f3 em 127.0.0.1:8080.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name app.exemplo.com;\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:8080;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n<\/code><\/pre>\n<p>Se voc\u00ea realmente quiser o NAT antigo (sem nginx):<\/p>\n<pre><code class=\"language-bash\">sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080\n# persista a regra no firewall da distro (nftables\/iptables-persistent\/ufw),\n# n\u00e3o no \/etc\/rc.local.\n<\/code><\/pre>\n<h2>Ainda precisa do Tomcat 9?<\/h2>\n<p>Apps antigas em <code>javax.*<\/code> (Spring Boot 2, Java EE 8) n\u00e3o rodam no Tomcat 11. Duas sa\u00eddas:<\/p>\n<ul>\n<li><strong>Migrar<\/strong> o WAR com o <a href=\"https:\/\/github.com\/apache\/tomcat-jakartaee-migration\">Tomcat Migration Tool for Jakarta EE<\/a> e subir no 11.<\/li>\n<li><strong>Ficar no 9.0.x<\/strong> enquanto a app n\u00e3o migra. A linha 9.0 recebe corre\u00e7\u00e3o at\u00e9 <strong>31\/03\/2027<\/strong>; o procedimento \u00e9 o mesmo deste artigo, trocando a URL de download para a 9.0.121 em <a href=\"https:\/\/tomcat.apache.org\/download-90.cgi\">download-90.cgi<\/a> (Java 8+; OpenJDK 21 tamb\u00e9m serve).<\/li>\n<\/ul>\n<h2>V\u00eddeo original (2017)<\/h2>\n<p>A grava\u00e7\u00e3o abaixo \u00e9 da instala\u00e7\u00e3o original (Tomcat 9 milestone). O fluxo \u2014 usu\u00e1rio dedicado, tarball, servi\u00e7o no boot \u2014 continua o mesmo; as vers\u00f5es e o Java, n\u00e3o.<\/p>\n<p><iframe style=\"width:100%;aspect-ratio:16\/9;border:0\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/MZnoJliLOFc\" allowfullscreen loading=\"lazy\"><\/iframe><\/p>\n<h2>Refer\u00eancias<\/h2>\n<ul>\n<li><a href=\"https:\/\/tomcat.apache.org\/download-11.cgi\">Download do Tomcat 11<\/a><\/li>\n<li><a href=\"https:\/\/tomcat.apache.org\/whichversion.html\">Which version? (tabela oficial)<\/a><\/li>\n<li><a href=\"https:\/\/tomcat.apache.org\/tomcat-11.0-doc\/\">Documenta\u00e7\u00e3o do Tomcat 11<\/a><\/li>\n<li><a href=\"https:\/\/tomcat.apache.org\/tomcat-9.0.x-eos.html\">Fim do suporte do Tomcat 9.0.x<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/apache\/tomcat-jakartaee-migration\">Migra\u00e7\u00e3o javax \u2192 jakarta<\/a><\/li>\n<li><a href=\"https:\/\/ubuntu.com\/developers\/docs\/reference\/availability\/java\/\">OpenJDK nos reposit\u00f3rios Ubuntu<\/a><\/li>\n<\/ul>\n<p>Com isso voc\u00ea tem Tomcat 11 + OpenJDK 25 como servi\u00e7o, conferido por checksum, sem JRE propriet\u00e1rio e com atualiza\u00e7\u00e3o pelo <code>apt<\/code> no lado Java. Na pr\u00f3xima corre\u00e7\u00e3o da linha 11.0.x, basta trocar o tarball e repetir o <code>chown<\/code> \u2014 o <code>JAVA_HOME<\/code> e a unidade systemd continuam iguais.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Tomcat continua sendo o container servlet mais usado em servidores Linux. Este howto instala a linha atual a partir do tarball oficial da Apache, com usu\u00e1rio dedicado e unidade systemd \u2014 no Ubuntu 24.04\/22.04 e Debian equivalentes. Qual vers\u00e3o &#8230; <a title=\"Instalando Tomcat 9 no Linux\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/instalando-tomcat-9-no-ubuntu\/\" aria-label=\"Read more about Instalando Tomcat 9 no Linux\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,120,3],"tags":[14,64,4,141,123,63,5],"class_list":["post-127","post","type-post","status-publish","format-standard","hentry","category-linux","category-servidores","category-ubuntu","tag-howto","tag-java","tag-linux","tag-openjdk","tag-systemd","tag-tomcat","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=127"}],"version-history":[{"count":9,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/127\/revisions"}],"predecessor-version":[{"id":1496,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/127\/revisions\/1496"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}