Instalando o OpenCMS

Mascote do LinuxPro arrastando um bloco de conteúdo para montar a página no editor do OpenCMS

Nota (2026): Texto original de abril de 2017, quando a instalação era um wget do OpenCms 10.5 beta descompactado no Tomcat. Hoje a linha estável é a 21 (build 21.0.1, abril de 2026), existe imagem Docker oficial e o proxy AJP do post original virou risco de segurança. Abaixo, o caminho atual — e a história do projeto, que é mais interessante do que parece. O texto de 2017 fica preservado no fim.

O OpenCms é um gerenciador de conteúdo web escrito em Java, livre sob licença LGPL, mantido pela alemã Alkacon Software. Não é o CMS que você instala num compartilhado de R$ 20 — é o que empresa e órgão público colocam num Tomcat para gerenciar site institucional com fluxo de aprovação, versionamento e múltiplos idiomas.

De onde veio o OpenCms

A história começa antes do nome. Entre 1994 e 1998, Alexander Kandzior desenvolveu na BKM Online medien GmbH um sistema chamado MhtMeta-Hyper-Text. Era código fechado, ferramenta de uso interno de uma consultoria.

Em 1998 a BKM se fundiu e virou a mindfact interactive medien AG. E aqui está a decisão que criou o projeto: como o negócio da mindfact era consultoria de internet, não venda de software, a empresa concluiu que não fazia sentido guardar o código. A versão seguinte do Mht foi publicada como software livre.

O lançamento público aconteceu em março de 2000, sob LGPL, com nome novo: OpenCms. Depois Kandzior fundou a Alkacon Software, em Colônia, que coordena o desenvolvimento até hoje. É o mesmo padrão do OTRS and GLPI: ferramenta interna de uma empresa alemã ou francesa que vira projeto livre e ganha uma editora em volta.

O que o distingue dos dois é a plataforma. Enquanto o GLPI é PHP e o OTRS é Perl, o OpenCms sempre foi Java puro — o que explica tanto a sua força (roda em qualquer sistema com JVM, escala em container de servlet) quanto o seu nicho (você precisa de um Tomcat, e isso afasta metade do mercado).

O que ele faz

  • Edição no lugar — o editor funciona sobre a própria página, sem painel separado.
  • Fluxo de publicação — o conteúdo vive num projeto offline e só vai ao ar quando alguém publica. Nada de “salvei e foi para produção”.
  • Versionamento — histórico de cada arquivo, com rollback.
  • Conteúdo estruturado em XML — o conteúdo tem esquema, não é um campo de texto rico solto.
  • Multi-site e multi-idioma num só servidor.
  • Mercury — o template moderno, responsivo, que vem junto com a distribuição.

Requisitos em 2026

Aqui está a mudança que mais quebra instalação antiga: o OpenCms 21 exige Java 21 ou mais novo, e é compatível até o Java 25. E precisa ser o JDK, não o JRE.

  • Java: JDK 21 ou superior.
  • Contêiner de servlet: Tomcat ou Jetty.
  • Banco: MariaDB ou MySQL — com o ajuste de blob size antes de instalar, ou a instalação falha no meio.

O caminho curto: Docker

Não existia em 2017 e resolve o problema inteiro: a Alkacon publica imagem oficial, com Java e Tomcat já na versão certa.

services:
  db:
    image: mariadb:11
    restart: always
    command: --max_allowed_packet=64M --innodb_log_file_size=256M
    environment:
      MARIADB_ROOT_PASSWORD: troque-esta-senha
    volumes:
      - ./dbdata:/var/lib/mysql

  opencms:
    image: alkacon/opencms-docker:21.0.1
    restart: always
    depends_on: [db]
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - ./opencms:/usr/local/tomcat/webapps/ROOT/WEB-INF/config
docker compose up -d
# assistente de instalação: http://127.0.0.1:8080/setup/

Instalação manual no Tomcat

Se você prefere controlar cada peça, o caminho continua sendo o mesmo de 2017 — com as versões atualizadas.

1. O ajuste do banco que ninguém pode pular. O OpenCms guarda os arquivos como BLOB no banco, e o pacote padrão do MariaDB é pequeno demais. Sem isso, a instalação quebra ao importar os módulos:

sudo tee /etc/mysql/mariadb.conf.d/60-opencms.cnf >/dev/null <<'EOF'
[mysqld]
max_allowed_packet = 64M
innodb_log_file_size = 256M
EOF

sudo systemctl restart mariadb
sudo mariadb -e "SHOW VARIABLES LIKE 'max_allowed_packet';"
sudo mariadb -e "CREATE DATABASE opencms CHARACTER SET utf8mb4;"
sudo mariadb -e "CREATE USER 'opencms'@'localhost' IDENTIFIED BY 'troque-esta-senha';"
sudo mariadb -e "GRANT ALL ON opencms.* TO 'opencms'@'localhost'; FLUSH PRIVILEGES;"

2. Java e Tomcat. Confira a versão antes de baixar qualquer coisa — é aqui que a maioria das instalações de 2017 morre hoje:

sudo apt install -y openjdk-21-jdk
java -version        # precisa ser 21 ou mais novo

3. O OpenCms. Baixe o pacote da página oficial de download — ele traz o núcleo mais o template Mercury:

sudo systemctl stop tomcat

cd /tmp
unzip opencms-*.zip
sudo mkdir -p /usr/local/tomcat/webapps/opencms
sudo unzip -d /usr/local/tomcat/webapps/opencms opencms.war
sudo chown -R tomcat:tomcat /usr/local/tomcat/webapps/opencms

sudo systemctl start tomcat
# assistente: http://SEU-SERVIDOR:8080/opencms/setup/

Terminado o assistente, apague o diretório de setup — deixá-lo no ar é convite aberto:

sudo rm -rf /usr/local/tomcat/webapps/opencms/setup

nginx na frente (e por que o AJP saiu)

O post original usava mod_proxy_ajp do Apache. Não faça mais isso. O conector AJP foi alvo do Ghostcat (CVE-2020-1938), que permitia ler arquivo arbitrário da aplicação, e desde o Tomcat 9.0.31 ele vem desabilitado por padrão — quando existe. Use HTTP simples:

server {
    listen 443 ssl;
    http2 on;
    server_name site.exemplo.com.br;

    ssl_certificate     /etc/letsencrypt/live/site.exemplo.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/site.exemplo.com.br/privkey.pem;

    client_max_body_size 200m;   # upload de mídia no editor

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

E feche a 8080 no firewall: o Tomcat nunca deve estar acessível direto da internet.

Vale a pena em 2026?

Depende de onde você está:

  • Faz sentido se a sua casa já é Java, se você precisa de fluxo de aprovação editorial de verdade, versionamento e multi-idioma, e se o site é institucional com muitos editores e regras de publicação.
  • Não faz sentido se você quer blog ou loja: o ecossistema PHP tem WordPress e Magento com uma ordem de grandeza mais de temas, plugins e gente que sabe mexer.
  • A conta de infraestrutura é outra. JVM, Tomcat e um banco com blob grande pedem mais memória do que um PHP-FPM. Não é caso de VPS de 1 GB.
  • A comunidade é pequena. Pouco mais de 500 estrelas no GitHub e uma lista de discussão de ritmo tranquilo. Em compensação, o projeto entrega versão nova pontualmente há vinte e cinco anos — e em 2026 até tradução por IA no editor de conteúdo entrou.

Timeline

  • 1994–1998 — Alexander Kandzior desenvolve o Mht (Meta-Hyper-Text) na BKM Online medien, código fechado.
  • 1998 — a BKM vira mindfact interactive medien AG, que decide abrir o código: consultoria não vive de vender software.
  • Março de 2000 — primeiro lançamento público como OpenCms, sob LGPL.
  • 2000s — Kandzior funda a Alkacon Software, em Colônia, que assume o desenvolvimento.
  • 2011 — o código vai para o GitHub, em alkacon/opencms-core.
  • 2017 — a versão 10.5, que este post originalmente ensinava a instalar.
  • Abril de 2026OpenCms 21 (build 21.0.1): exige Java 21, compatível com o 25, e traz tradução por IA no editor de XML.

O post original (abril de 2017)

Preservado como registro. O procedimento abaixo instalava o OpenCms 10.5 beta e não deve ser usado hoje — a URL saiu do ar, a versão é obsoleta e o proxy AJP não é mais recomendado:

## Aumentar o max_allowed_packet do MariaDB para 32M
FILE_DB=/etc/mysql/mariadb.conf.d/50-server.cnf
sed -i "s|max_allowed_packet= 16M|max_allowed_packet= 32M|" ${FILE_DB}
service mysql restart

systemctl stop tomcat
cd /tmp/
wget http://www.opencms.org/downloads/opencms/opencms-10.5.0_beta.zip
unzip opencms-10.5.0_beta.zip
unzip -d opencms opencms.war
mv opencms /usr/local/tomcat/webapps/
chown -R tomcat:tomcat /usr/local/tomcat/webapps/*
systemctl start tomcat
## http://seu_server:8080/opencms/setup/

Gist original: jniltinho/a7bd30288342a5d352e6

Links