
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 Mht — Meta-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 y de 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.
Linha do tempo
- 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 2026 — OpenCms 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