{"id":125,"date":"2017-04-06T10:05:03","date_gmt":"2017-04-06T13:05:03","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2017\/04\/instalando-opencms\/"},"modified":"2026-09-08T10:05:34","modified_gmt":"2026-09-08T13:05:34","slug":"instalando-opencms","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/instalando-opencms\/","title":{"rendered":"Instalando o OpenCMS"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro arrastando um bloco de conte\u00fado para montar a p\u00e1gina no editor do OpenCMS\" src=\"\/wp-content\/uploads\/2026\/09\/opencms-v3.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> Texto original de abril de 2017, quando a instala\u00e7\u00e3o era um <code>wget<\/code> do OpenCms 10.5 beta descompactado no Tomcat. Hoje a linha est\u00e1vel \u00e9 a <strong>21<\/strong> (build 21.0.1, abril de 2026), existe imagem Docker oficial e o proxy AJP do post original virou risco de seguran\u00e7a. Abaixo, o caminho atual \u2014 e a hist\u00f3ria do projeto, que \u00e9 mais interessante do que parece. O texto de 2017 fica preservado no fim.<\/div>\n<p>O OpenCms \u00e9 um gerenciador de conte\u00fado web escrito em <strong>Java<\/strong>, livre sob licen\u00e7a <strong>LGPL<\/strong>, mantido pela alem\u00e3 Alkacon Software. N\u00e3o \u00e9 o CMS que voc\u00ea instala num compartilhado de R$ 20 \u2014 \u00e9 o que empresa e \u00f3rg\u00e3o p\u00fablico colocam num Tomcat para gerenciar site institucional com fluxo de aprova\u00e7\u00e3o, versionamento e m\u00faltiplos idiomas.<\/p>\n<h2>De onde veio o OpenCms<\/h2>\n<p>A hist\u00f3ria come\u00e7a antes do nome. Entre <strong>1994 e 1998<\/strong>, <strong>Alexander Kandzior<\/strong> desenvolveu na BKM Online medien GmbH um sistema chamado <strong>Mht<\/strong> \u2014 <em>Meta-Hyper-Text<\/em>. Era c\u00f3digo fechado, ferramenta de uso interno de uma consultoria.<\/p>\n<p>Em 1998 a BKM se fundiu e virou a <strong>mindfact interactive medien AG<\/strong>. E aqui est\u00e1 a decis\u00e3o que criou o projeto: como o neg\u00f3cio da mindfact era consultoria de internet, n\u00e3o venda de software, a empresa concluiu que n\u00e3o fazia sentido guardar o c\u00f3digo. A vers\u00e3o seguinte do Mht foi publicada como software livre.<\/p>\n<p>O lan\u00e7amento p\u00fablico aconteceu em <strong>mar\u00e7o de 2000<\/strong>, sob <strong>LGPL<\/strong>, com nome novo: OpenCms. Depois Kandzior fundou a <strong>Alkacon Software<\/strong>, em Col\u00f4nia, que coordena o desenvolvimento at\u00e9 hoje. \u00c9 o mesmo padr\u00e3o do <a href=\"\/2026\/09\/a-historia-do-otrs\/\">OTRS<\/a> e do <a href=\"\/2026\/09\/a-historia-do-glpi\/\">GLPI<\/a>: ferramenta interna de uma empresa alem\u00e3 ou francesa que vira projeto livre e ganha uma editora em volta.<\/p>\n<p>O que o distingue dos dois \u00e9 a plataforma. Enquanto o GLPI \u00e9 PHP e o OTRS \u00e9 Perl, o OpenCms sempre foi <strong>Java puro<\/strong> \u2014 o que explica tanto a sua for\u00e7a (roda em qualquer sistema com JVM, escala em container de servlet) quanto o seu nicho (voc\u00ea precisa de um Tomcat, e isso afasta metade do mercado).<\/p>\n<h2>O que ele faz<\/h2>\n<ul>\n<li><strong>Edi\u00e7\u00e3o no lugar<\/strong> \u2014 o editor funciona sobre a pr\u00f3pria p\u00e1gina, sem painel separado.<\/li>\n<li><strong>Fluxo de publica\u00e7\u00e3o<\/strong> \u2014 o conte\u00fado vive num projeto <em>offline<\/em> e s\u00f3 vai ao ar quando algu\u00e9m publica. Nada de &#8220;salvei e foi para produ\u00e7\u00e3o&#8221;.<\/li>\n<li><strong>Versionamento<\/strong> \u2014 hist\u00f3rico de cada arquivo, com <em>rollback<\/em>.<\/li>\n<li><strong>Conte\u00fado estruturado em XML<\/strong> \u2014 o conte\u00fado tem esquema, n\u00e3o \u00e9 um campo de texto rico solto.<\/li>\n<li><strong>Multi-site e multi-idioma<\/strong> num s\u00f3 servidor.<\/li>\n<li><strong>Mercury<\/strong> \u2014 o template moderno, responsivo, que vem junto com a distribui\u00e7\u00e3o.<\/li>\n<\/ul>\n<h2>Requisitos em 2026<\/h2>\n<p>Aqui est\u00e1 a mudan\u00e7a que mais quebra instala\u00e7\u00e3o antiga: o <strong>OpenCms 21 exige Java 21 ou mais novo<\/strong>, e \u00e9 compat\u00edvel at\u00e9 o Java 25. E precisa ser o <strong>JDK<\/strong>, n\u00e3o o JRE.<\/p>\n<ul>\n<li><strong>Java<\/strong>: JDK 21 ou superior.<\/li>\n<li><strong>Cont\u00eainer de servlet<\/strong>: <a href=\"\/2017\/04\/instalando-tomcat-9-no-ubuntu\/\">Tomcat<\/a> ou Jetty.<\/li>\n<li><strong>Banco<\/strong>: MariaDB ou MySQL \u2014 com o ajuste de <em>blob size<\/em> antes de instalar, ou a instala\u00e7\u00e3o falha no meio.<\/li>\n<\/ul>\n<h2>O caminho curto: Docker<\/h2>\n<p>N\u00e3o existia em 2017 e resolve o problema inteiro: a Alkacon publica imagem oficial, com Java e Tomcat j\u00e1 na vers\u00e3o certa.<\/p>\n<pre><code class=\"language-yaml\">services:\n  db:\n    image: mariadb:11\n    restart: always\n    command: --max_allowed_packet=64M --innodb_log_file_size=256M\n    environment:\n      MARIADB_ROOT_PASSWORD: troque-esta-senha\n    volumes:\n      - .\/dbdata:\/var\/lib\/mysql\n\n  opencms:\n    image: alkacon\/opencms-docker:21.0.1\n    restart: always\n    depends_on: [db]\n    ports:\n      - \"127.0.0.1:8080:8080\"\n    volumes:\n      - .\/opencms:\/usr\/local\/tomcat\/webapps\/ROOT\/WEB-INF\/config<\/code><\/pre>\n<pre><code class=\"language-bash\">docker compose up -d\n# assistente de instala\u00e7\u00e3o: http:\/\/127.0.0.1:8080\/setup\/<\/code><\/pre>\n<h2>Instala\u00e7\u00e3o manual no Tomcat<\/h2>\n<p>Se voc\u00ea prefere controlar cada pe\u00e7a, o caminho continua sendo o mesmo de 2017 \u2014 com as vers\u00f5es atualizadas.<\/p>\n<p><strong>1. O ajuste do banco que ningu\u00e9m pode pular.<\/strong> O OpenCms guarda os arquivos como BLOB no banco, e o pacote padr\u00e3o do MariaDB \u00e9 pequeno demais. Sem isso, a instala\u00e7\u00e3o quebra ao importar os m\u00f3dulos:<\/p>\n<pre><code class=\"language-bash\">sudo tee \/etc\/mysql\/mariadb.conf.d\/60-opencms.cnf &gt;\/dev\/null &lt;&lt;'EOF'\n[mysqld]\nmax_allowed_packet = 64M\ninnodb_log_file_size = 256M\nEOF\n\nsudo systemctl restart mariadb\nsudo mariadb -e \"SHOW VARIABLES LIKE 'max_allowed_packet';\"<\/code><\/pre>\n<pre><code class=\"language-bash\">sudo mariadb -e \"CREATE DATABASE opencms CHARACTER SET utf8mb4;\"\nsudo mariadb -e \"CREATE USER 'opencms'@'localhost' IDENTIFIED BY 'troque-esta-senha';\"\nsudo mariadb -e \"GRANT ALL ON opencms.* TO 'opencms'@'localhost'; FLUSH PRIVILEGES;\"<\/code><\/pre>\n<p><strong>2. Java e Tomcat.<\/strong> Confira a vers\u00e3o antes de baixar qualquer coisa \u2014 \u00e9 aqui que a maioria das instala\u00e7\u00f5es de 2017 morre hoje:<\/p>\n<pre><code class=\"language-bash\">sudo apt install -y openjdk-21-jdk\njava -version        # precisa ser 21 ou mais novo<\/code><\/pre>\n<p><strong>3. O OpenCms.<\/strong> Baixe o pacote da <a href=\"https:\/\/www.opencms.org\/en\/download\/opencms.html\" target=\"_blank\" rel=\"noopener\">p\u00e1gina oficial de download<\/a> \u2014 ele traz o n\u00facleo mais o template Mercury:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl stop tomcat\n\ncd \/tmp\nunzip opencms-*.zip\nsudo mkdir -p \/usr\/local\/tomcat\/webapps\/opencms\nsudo unzip -d \/usr\/local\/tomcat\/webapps\/opencms opencms.war\nsudo chown -R tomcat:tomcat \/usr\/local\/tomcat\/webapps\/opencms\n\nsudo systemctl start tomcat\n# assistente: http:\/\/SEU-SERVIDOR:8080\/opencms\/setup\/<\/code><\/pre>\n<p>Terminado o assistente, <strong>apague o diret\u00f3rio de setup<\/strong> \u2014 deix\u00e1-lo no ar \u00e9 convite aberto:<\/p>\n<pre><code class=\"language-bash\">sudo rm -rf \/usr\/local\/tomcat\/webapps\/opencms\/setup<\/code><\/pre>\n<h2>nginx na frente (e por que o AJP saiu)<\/h2>\n<p>O post original usava <code>mod_proxy_ajp<\/code> do Apache. <strong>N\u00e3o fa\u00e7a mais isso.<\/strong> O conector AJP foi alvo do <em>Ghostcat<\/em> (CVE-2020-1938), que permitia ler arquivo arbitr\u00e1rio da aplica\u00e7\u00e3o, e desde o Tomcat 9.0.31 ele vem desabilitado por padr\u00e3o \u2014 quando existe. Use HTTP simples:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 443 ssl;\n    http2 on;\n    server_name site.exemplo.com.br;\n\n    ssl_certificate     \/etc\/letsencrypt\/live\/site.exemplo.com.br\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/site.exemplo.com.br\/privkey.pem;\n\n    client_max_body_size 200m;   # upload de m\u00eddia no editor\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}<\/code><\/pre>\n<p>E feche a 8080 no firewall: o Tomcat nunca deve estar acess\u00edvel direto da internet.<\/p>\n<h2>Vale a pena em 2026?<\/h2>\n<p>Depende de onde voc\u00ea est\u00e1:<\/p>\n<ul>\n<li><strong>Faz sentido<\/strong> se a sua casa j\u00e1 \u00e9 Java, se voc\u00ea precisa de fluxo de aprova\u00e7\u00e3o editorial de verdade, versionamento e multi-idioma, e se o site \u00e9 institucional com muitos editores e regras de publica\u00e7\u00e3o.<\/li>\n<li><strong>N\u00e3o faz sentido<\/strong> se voc\u00ea quer blog ou loja: o <a href=\"\/2017\/05\/linguagens-de-programacao\/\">ecossistema PHP<\/a> tem WordPress e Magento com uma ordem de grandeza mais de temas, plugins e gente que sabe mexer.<\/li>\n<li><strong>A conta de infraestrutura \u00e9 outra.<\/strong> JVM, Tomcat e um banco com blob grande pedem mais mem\u00f3ria do que um PHP-FPM. N\u00e3o \u00e9 caso de VPS de 1 GB.<\/li>\n<li><strong>A comunidade \u00e9 pequena.<\/strong> Pouco mais de 500 estrelas no GitHub e uma lista de discuss\u00e3o de ritmo tranquilo. Em compensa\u00e7\u00e3o, o projeto entrega vers\u00e3o nova pontualmente h\u00e1 vinte e cinco anos \u2014 e em 2026 at\u00e9 tradu\u00e7\u00e3o por IA no editor de conte\u00fado entrou.<\/li>\n<\/ul>\n<h2>Linha do tempo<\/h2>\n<ul>\n<li><strong>1994\u20131998<\/strong> \u2014 Alexander Kandzior desenvolve o <strong>Mht<\/strong> (Meta-Hyper-Text) na BKM Online medien, c\u00f3digo fechado.<\/li>\n<li><strong>1998<\/strong> \u2014 a BKM vira mindfact interactive medien AG, que decide abrir o c\u00f3digo: consultoria n\u00e3o vive de vender software.<\/li>\n<li><strong>Mar\u00e7o de 2000<\/strong> \u2014 primeiro lan\u00e7amento p\u00fablico como <strong>OpenCms<\/strong>, sob LGPL.<\/li>\n<li><strong>2000s<\/strong> \u2014 Kandzior funda a <strong>Alkacon Software<\/strong>, em Col\u00f4nia, que assume o desenvolvimento.<\/li>\n<li><strong>2011<\/strong> \u2014 o c\u00f3digo vai para o GitHub, em <code>alkacon\/opencms-core<\/code>.<\/li>\n<li><strong>2017<\/strong> \u2014 a vers\u00e3o 10.5, que este post originalmente ensinava a instalar.<\/li>\n<li><strong>Abril de 2026<\/strong> \u2014 <strong>OpenCms 21<\/strong> (build 21.0.1): exige Java 21, compat\u00edvel com o 25, e traz tradu\u00e7\u00e3o por IA no editor de XML.<\/li>\n<\/ul>\n<hr \/>\n<h2>O post original (abril de 2017)<\/h2>\n<p>Preservado como registro. O procedimento abaixo instalava o OpenCms 10.5 beta e <strong>n\u00e3o deve ser usado hoje<\/strong> \u2014 a URL saiu do ar, a vers\u00e3o \u00e9 obsoleta e o proxy AJP n\u00e3o \u00e9 mais recomendado:<\/p>\n<pre><code class=\"language-bash\">## Aumentar o max_allowed_packet do MariaDB para 32M\nFILE_DB=\/etc\/mysql\/mariadb.conf.d\/50-server.cnf\nsed -i \"s|max_allowed_packet= 16M|max_allowed_packet= 32M|\" ${FILE_DB}\nservice mysql restart\n\nsystemctl stop tomcat\ncd \/tmp\/\nwget http:\/\/www.opencms.org\/downloads\/opencms\/opencms-10.5.0_beta.zip\nunzip opencms-10.5.0_beta.zip\nunzip -d opencms opencms.war\nmv opencms \/usr\/local\/tomcat\/webapps\/\nchown -R tomcat:tomcat \/usr\/local\/tomcat\/webapps\/*\nsystemctl start tomcat\n## http:\/\/seu_server:8080\/opencms\/setup\/<\/code><\/pre>\n<p>Gist original: <a href=\"https:\/\/gist.github.com\/jniltinho\/a7bd30288342a5d352e6\" target=\"_blank\" rel=\"noopener\">jniltinho\/a7bd30288342a5d352e6<\/a><\/p>\n<h2>Links<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.opencms.org\/\" target=\"_blank\" rel=\"noopener\">opencms.org<\/a> \u00b7 <a href=\"https:\/\/www.opencms.org\/en\/download\/opencms.html\" target=\"_blank\" rel=\"noopener\">download<\/a> \u00b7 <a href=\"https:\/\/documentation.opencms.org\/\" target=\"_blank\" rel=\"noopener\">documenta\u00e7\u00e3o<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/alkacon\/opencms-core\" target=\"_blank\" rel=\"noopener\">github.com\/alkacon\/opencms-core<\/a> \u00b7 <a href=\"https:\/\/www.alkacon.com\/\" target=\"_blank\" rel=\"noopener\">Alkacon Software<\/a><\/li>\n<li>Aqui no blog: <a href=\"\/2017\/04\/instalando-tomcat-9-no-ubuntu\/\">Instalando o Tomcat no Linux<\/a> \u00b7 <a href=\"\/2026\/09\/nginx-varias-versoes-php-debian-ubuntu\/\">Nginx como proxy reverso<\/a> \u00b7 <a href=\"\/2017\/05\/linguagens-de-programacao\/\">As principais linguagens de programa\u00e7\u00e3o<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>O OpenCms \u00e9 um gerenciador de conte\u00fado web escrito em Java, livre sob licen\u00e7a LGPL, mantido pela alem\u00e3 Alkacon Software. N\u00e3o \u00e9 o CMS que voc\u00ea instala num compartilhado de R$ 20 \u2014 \u00e9 o que empresa e \u00f3rg\u00e3o p\u00fablico &#8230; <a title=\"Instalando o OpenCMS\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/instalando-opencms\/\" aria-label=\"Read more about Instalando o OpenCMS\">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],"tags":[65,14,64,4,63],"class_list":["post-125","post","type-post","status-publish","format-standard","hentry","category-linux","tag-cms","tag-howto","tag-java","tag-linux","tag-tomcat"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/125","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=125"}],"version-history":[{"count":6,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/125\/revisions"}],"predecessor-version":[{"id":1309,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/125\/revisions\/1309"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}