
wget de OpenCms 10.5 beta descomprimido en Tomcat. Hoy la línea estable es la 21 (build 21.0.1, abril de 2026), existe imagen Docker oficial y el proxy AJP del post original se convirtió en un riesgo de seguridad. A continuación, el camino actual — y la historia del proyecto, que es más interesante de lo que parece. El texto de 2017 queda preservado al final.OpenCms es un gestor de contenido web escrito en Java, libre bajo licencia LGPL, mantenido por la alemana Alkacon Software. No es el CMS que instalas en un compartido de R$ 20 — es el que una empresa u organismo público coloca en un Tomcat para gestionar un sitio institucional con flujo de aprobación, versionado y múltiples idiomas.
De dónde viene OpenCms
La historia empieza antes del nombre. Entre 1994 y 1998, Alexander Kandzior desarrolló en BKM Online medien GmbH un sistema llamado Mht — Meta-Hyper-Text. Era código cerrado, una herramienta de uso interno de una consultoría.
En 1998 BKM se fusionó y se convirtió en mindfact interactive medien AG. Y aquí está la decisión que dio origen al proyecto: como el negocio de mindfact era la consultoría de internet, no la venta de software, la empresa concluyó que no tenía sentido guardar el código. La siguiente versión de Mht se publicó como software libre.
El lanzamiento público tuvo lugar en marzo de 2000, bajo LGPL, con nuevo nombre: OpenCms. Después Kandzior fundó Alkacon Software, en Colonia, que coordina el desarrollo hasta hoy. Es el mismo patrón de OTRS y de GLPI: herramienta interna de una empresa alemana o francesa que se convierte en proyecto libre y gana una editora a su alrededor.
Lo que lo distingue de los dos es la plataforma. Mientras GLPI es PHP y OTRS es Perl, OpenCms siempre ha sido Java puro — lo que explica tanto su fortaleza (se ejecuta en cualquier sistema con JVM, escala en contenedor de servlets) como su nicho (necesitas un Tomcat, y eso aleja a la mitad del mercado).
Qué hace
- Edición en el lugar — el editor funciona sobre la propia página, sin un panel separado.
- Flujo de publicación — el contenido vive en un proyecto offline y solo se publica cuando alguien lo activa. Nada de “guardé y ya está en producción”.
- Versionado — historial de cada archivo, con rollback.
- Contenido estructurado en XML — el contenido tiene esquema, no es un campo de texto enriquecido suelto.
- Multisitio y multiidioma un solo servidor.
- Mercury — la plantilla moderna y responsiva que viene con la distribución.
Requisitos en 2026
Aquí está el cambio que más rompe las instalaciones antiguas: el OpenCms 21 requiere Java 21 o más reciente, y es compatible hasta Java 25. Y debe ser el JDK, no el JRE.
- Java: JDK 21 o superior.
- Contenedor de servlet: Tomcat o Jetty.
- Base de datos: MariaDB o MySQL — con el ajuste de blob size antes de instalar, o la instalación falla a mitad de proceso.
El camino corto: Docker
No existía en 2017 y resuelve el problema por completo: Alkacon publica imagen oficial, con Java y Tomcat ya en la versión correcta.
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/
Instalación manual en Tomcat
Si prefieres controlar cada pieza, el camino sigue siendo el mismo de 2017 — con las versiones actualizadas.
1. El ajuste de la base de datos que nadie puede saltarse. OpenCms guarda los archivos como BLOB en la base de datos, y el paquete predeterminado de MariaDB es demasiado pequeño. Sin esto, la instalación se rompe al importar los 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 y Tomcat. Comprueba la versión antes de descargar nada — aquí es donde muere hoy la mayoría de instalaciones de 2017:
sudo apt install -y openjdk-21-jdk
java -version # precisa ser 21 ou mais novo
3. OpenCms. Descarga el paquete de la página oficial de descargas — trae el núcleo más la plantilla 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 el asistente, borra el directorio de setup — dejarlo accesible es una invitación abierta:
sudo rm -rf /usr/local/tomcat/webapps/opencms/setup
nginx delante (y por qué AJP salió)
La publicación original usaba mod_proxy_ajp de Apache. No hagas más eso. El conector AJP fue objetivo de Ghostcat (CVE-2020-1938), que permitía leer archivos arbitrarios de la aplicación, y desde Tomcat 9.0.31 viene deshabilitado por defecto — cuando existe. Usa HTTP simple:
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;
}
}
Y cierra el 8080 en el firewall: Tomcat nunca debe estar accesible directamente desde internet.
¿Merece la pena en 2026?
Depende de dónde estés:
- Tiene sentido si tu casa ya es Java, si necesitas un flujo de aprobación editorial de verdad, versionado y multi-idioma, y si el sitio es institucional con muchos editores y reglas de publicación.
- No tiene sentido si quieres un blog o tienda: el ecosistema PHP tiene WordPress y Magento con un orden de magnitud más de temas, plugins y gente que sabe manejarlos.
- La cuenta de infraestructura es otra. JVM, Tomcat y una base de datos con blobs grandes piden más memoria que un PHP-FPM. No es un caso para un VPS de 1 GB.
- La comunidad es pequeña. Poco más de 500 estrellas en GitHub y una lista de correo de ritmo tranquilo. A cambio, el proyecto lanza nuevas versiones puntualmente desde hace veinticinco años, y en 2026 hasta la traducción por IA en el editor de contenidos entró.
Línea de tiempo
- 1994–1998 — Alexander Kandzior desarrolla el Mht (Meta-Hyper-Text) en BKM Online medien, código cerrado.
- 1998 — BKM se convierte en mindfact interactive medien AG, que decide abrir el código: una consultora no vive de vender software.
- Marzo de 2000 — primer lanzamiento público como OpenCms, bajo LGPL.
- 2000s — Kandzior funda la Alkacon Software, en Colonia, que asume el desarrollo.
- 2011 — el código va a GitHub, en
alkacon/opencms-core. - 2017 — la versión 10.5, que esta entrada originalmente enseñaba a instalar.
- Abril de 2026 — OpenCms 21 (build 21.0.1): requiere Java 21, compatible con 25, e incluye traducción mediante IA en el editor XML.
El post original (abril de 2017)
Preservado como registro. El procedimiento siguiente instalaba OpenCms 10.5 beta y no debe usarse hoy — la URL dejó de estar disponible, la versión está obsoleta y el proxy AJP ya no se recomienda:
## 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