Configuración del servidor

Este artículo reúne los pasos necesarios para la configuración de un servidor con Prontus, y detalla algunas opciones de configuración para lograr un ambiente más seguro, estable y performante.

Publicado: Martes 25 de septiembre de 2018 por David García
Última modificación: Viernes 11 de agosto de 2023
Requerimientos

Lo primero que debes hacer antes de instalar Prontus es asegurarte de que tu servidor cumpla con los requerimientos  mínimos de sistema.

Creación y configuración de la base de datos

Prontus usa internamente una base de datos, y para eso necesita un servidor de bases de datos MySQL o MariaDB. La base de datos de Prontus tiene una estructura muy sencilla y sus prestaciones prácticamente no tienen impacto en el sitio público, por lo que normalmente no es necesaria una optimización particular. Prontus puede crearla durante la instalación de tu sitio si proporcionas las credenciales de un usuario de MySQL con derechos para crear de bases de datos, o puedes crearla tú, vacía, y luego ingresar en el asistente de instalación un usuario con derechos de creación y visualización de tablas y registros.

Un detalle a considerar es que los buscadores de artículos en el panel de administración normalmente pueden descartar palabras muy breves. Esto se debe a que Prontus usa "Full-Text Search" para buscar texto, y este modo de búsqueda tiene un límite mínimo para considerar una "palabra" configurado en una variable del servidor de base de datos. La variable en cuestión se llama ft_min_word_len, y su valor por defecto es de 4 caracteres, por lo que buscar un texto como "FID" no devolvería datos. Para saber el valor de esta variable puedes usar el siguiente comando en tu servidor MySQL:

mysql > SHOW VARIABLES LIKE 'ft_min_word_len';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| ft_min_word_len | 4 |
+-----------------+-------+
1 row in set (0.00 sec)

Para poder buscar por palabras mas cortas (por ejemplo, 2), debes cambiar el valor de esta variable en la configuración de MySQL (para que el cambio sea permanente):

ft_min_word_len = 2

Luego de cambiar ese valor y reiniciar el servidor MySQL debes regenerar los índices, por ejemplo usando este comando luego de haber seleccionado la base de datos de tu Prontus.

REPAIR TABLE ART QUICK;

Configuración del webserver - Apache

Para que las CGIs de Prontus funcionen correctamente sobre un webserver Apache, la configuración de éste debe contener al menos este bloque dentro de la definición del host:

<VirtualHost:80>
    PerlRequire /var/www/html/cgi-cpn/prontus_apache_startup.pl
PerlModule Apache2::Reload
PerlInitHandler Apache2::Reload
PerlSetVar ReloadDirectories "/var/www/html/cgi-cpn/ /var/www/html/cgi-bin/"
PerlSetVar ReloadTouchFile /var/www/html/cgi-cpn/prontus_varglb.pm
ScriptAlias /cgi-cpn/ /var/www/html/cgi-cpn/ <Directory "/var/www/html/cgi-cpn/">
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
PerlSendHeader On
Order allow,deny
Allow from all
</Directory> ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/ <Directory "/var/www/html/cgi-bin/">
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
PerlSendHeader On
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Esta configuración es necesaria si se usará mod-perl para manejar los scripts Perl que componen Prontus. De otro modo no es necesario activar todas las instrucciones Perl*. El script prontus_apache_startup.pl forma parte de la instalación normal de Prontus. El uso de /var/www/html como document root es solamente para ejemplificar.

En caso de no usar mod-perl, la configuración necesaria -siempre a modo indicativo- es la siguiente:

<VirtualHost:80>
ScriptAlias /cgi-cpn/ /var/www/sitio.cl/cgi-cpn/
<Directory /var/www/sitio.cl/cgi-cpn>
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
ScriptAlias /cgi-bin/ /var/www/sitio.cl/cgi-bin/
<Directory /var/www/sitio.cl/cgi-bin>
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
</VirtualHost>

Y para procesar SSI agregar:

 # Interpreta SSI
Options +IncludesNOEXEC +FollowSymLinks
AddOutputFilter INCLUDES html cgi

Configuración del webserver - Nginx

En el caso del webserver Nginx, la configuración que uses debe al menos considerar código como el siguiente:

# Include NGINX para prontus
# Considera UTF-8
# Friendly URL
# Proteccion a directorios iniciados con _ , /cgi-cpn/ y /cpan/
# Interpretacion de .cgi con fcgiwrap
# Interpretacion de .html y .php como php con php-fastcgi charset utf-8;
rewrite ^/[^\/]+/([^\/]+)/([0-9]+)-([0-9]+)-([0-9]+)/([0-9]+)\.html /$1/site/artic/$2$3$4/pags/$2$3$4$5.html;
rewrite ^/([^\/]+)/site/artic/(\d+)/imag/([a-z\d_]+)/([a-zA-Z\d_\-]+)\.([a-z]+) /$1/site/artic/$2/imag/$3_$4.$5;
rewrite "^\/([^\/]+)\/?.*?\/([^\/\.]{2})([^\/\.]{2})([^\/\.]+?)\/?$" /$1/site/friendly/links/$2/$3/$2$3$4.html;
location ~ /_.*/ {
deny all;
}
location ~ /site/artic/.*/xml/ {
deny all;
}
location ~ /cgi-cpn/|/cpan/ {
#auth_basic "Restricted"; # debes configurar la autenticación al CPAN como sea oportuno
#auth_basic_user_file $document_root/cpan/psw_man/.htpasswd;
location ~ \.cgi {
include global/cgi.conf;
}
location ~ \.pm {
return 404;
}
location ~ \.pl {
return 404;
}
}
location ~ ^/cgi-bin/ {
location ~ \.cgi {
include global/cgi.conf;
}
location ~ \.pm {
return 404;
location ~ ^/cgi-bin/ {
location ~ \.cgi {
include global/cgi.conf;
}
location ~ \.pm {
return 404;
}
location ~ \.pl {
return 404;
}
}

El contenido del archivo global/cgi.conf puede ser el siguiente:

# incluye este archivo donde desees interpretar CGIs
fastcgi_pass   unix:/var/run/fcgiwrap.socket;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
if ($tamanio_maximo_upload = false) {
set $tamanio_maximo_upload ""; # Es importante configurar esta variable con el valor correcto de MAX_UPLOAD_SIZE para pasarlo a las CGIs y formularios Prontus.
}
fastcgi_param MAX_UPLOAD_SIZE $tamanio_maximo_upload; # PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

Securizar tu instalación

Te sugerimos seguir los consejos que listamos en el artículo Asegurar la plataforma para minimizar los riesgos de intrusiones en tu sistema. Prontus es de por sí un software seguro, pero en algunos casos, hay precauciones extra que es bueno tomar.

Configuración de URLs amigables

Prontus te permite generar URLs amigables para tus artículos de distintas formas, y para esto requiere que configures correctamente tu servidor web según el caso. Puedes ver los detalles en los artículos Friendly URLs y Friendly URLs para imágenes.

Configuración de multivistas

Si necesitas que tu sitio Prontus soporte vistas separadas para distintos dispositivos, como computadores de escritorio, tablets y smartphones, o si necesitas por ejemplo presentar los artículos de tu sitio en distintos idiomas, deberás configurar y habilitar la funcionalidad de Multivistas. Describimos estas tareas en el artículo Configuración de multivistas.

Configuración para tags jerárquicos

Prontus te permite implementar un sistema de tags jerárquicos, ofreciéndote la flexibilidad de los tags con el orden jerárquico de las taxonomías. Esta es la configuración que debes aplicar en Nginx (por ejemplo en el archivo /etc/nginx/sites-available/default, en la sección server) para que un Prontus soporte tags jerárquicos usando URLs amigables:

# Rewrite multitag
rewrite ^/([^\/]+)/seccion/([^\/]+)/p/(\d+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&s=$2&p=$3;
rewrite ^/([^\/]+)/tema/([^\/]+)/p/(\d+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&t=$2&p=$3;
rewrite ^/([^\/]+)/subtema/([^\/]+)/p/(\d+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&st=$2&p=$3;
rewrite ^/([^\/]+)/seccion/([^\/]+)/tema/([^\/]+)/p/(\d+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&s=$2&t=$3&p=$4;
rewrite ^/([^\/]+)/seccion/([^\/]+)/subtema/([^\/]+)/p/(\d+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&s=$2&st=$3&p=$4;
rewrite ^/([^\/]+)/seccion/([^\/]+)/tema/([^\/]+)/subtema/([^\/]+)/p/(\d+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&s=$2&t=$3&st=$4&p=$5;
rewrite ^/([^\/]+)/tema/([^\/]+)/subtema/([^\/]+)/p/(\d+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&t=$2&st=$3&p=$4;
# /Rewrite multitag

Esta es la configuración que debes aplicar en Apache para que un Prontus soporte tags jerárquicos usando URLs amigables:

# Rewrite multitag
RewriteRule ^/?([^\/]+)/seccion/([^\/]+)/p/([0-9]+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&s=$2&p=$3 [PT]
RewriteRule ^/?([^\/]+)/tema/([^\/]+)/p/([0-9]+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&t=$2&p=$3 [PT]
RewriteRule ^/?([^\/]+)/subtema/([^\/]+)/p/([0-9]+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&st=$3&p=$3 [PT]
RewriteRule ^/?([^\/]+)/seccion/([^\/]+)/tema/([^\/]+)/p/([0-9]+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&s=$2&t=$3&p=$4 [PT]
RewriteRule ^/?([^\/]+)/seccion/([^\/]+)/subtema/([^\/]+)/p/([0-9]+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&s=$2&st=$3&p=$4 [PT]
RewriteRule ^/?([^\/]+)/tema/([^\/]+)/subtema/([^\/]+)/p/([0-9]+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&t=$2&st=$3&p=$4 [PT]
RewriteRule ^/?([^\/]+)/seccion/([^\/]+)/tema/([^\/]+)/subtema/([^\/]+)/p/([0-9]+)$ /cgi-bin/multitag/prontus_multitag_list.cgi?prontus_id=$1&s=$2&t=$3&st=$4&p=$5 [PT]
# / Rewrite multitag

Con estas instrucciones, Prontus puede entender las requests hechas con URLs amigables para cualquier combinación de tags jerárquicos.

Configuración para transcodificación de multimedia

Prontus almacena internamente los archivos de video en formato MP4. Si necesitas cargar archivos codificados con otros formatos, deberás habilitar las funcionalidades de transcodificación de video, y para esto Prontus requiere que en el servidor esté instalado el software ffmpeg con soporte para la librería x264. En concreto, necesita que estos paquetes y sus dependencias estén instalados correctamente:

  • ffmpeg v2.1.0 o superior.
  • libx264
  • python

Para verificar la versión instalada de ffmpeg, puedes usar el comando ffmpeg -version. Esto además te mostrará si soporta la librería x264:

ffmpeg version 3.4.5 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 4.9.2 (Debian 4.9.2-10)
configuration: --pkg-config-flags=--static --prefix=/home/vagrant/ffmpeg_build --extra-cflags=-I/home/vagrant/ffmpeg_build/include --extra-ldflags=-L/home/vagrant/ffmpeg_build/lib
--extra-ldexeflags=-static --bindir=/home/vagrant/bin --enable-gpl --enable-libfreetype --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264
--enable-libfdk-aac --enable-nonfree
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

En el caso de que no veas la configuración --enable-libx264 en la salida de este comando, significa que ffmpeg no está compilado con la librería libx264, y deberás instalar otra versión o compilarlo con el soporte necesario.

La versión del software ffmpeg puede ser mayor o igual a 2.1.0, pero no inferior. En caso de tener una versión inferior, deberás actualizarlo.

2. Luego de verificar que ffmpeg fue compilado con la librería x264, para verificar la capacidad de compresión en h264 de ffmpeg, puedes ejecutar el siguiente comando:

$ ffmpeg -codecs | grep 264

Lo cual, entregará algo como esto:

 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_vdpau h264_cuvid ) (encoders: libx264 libx264rgb h264_nvenc h264_vaapi nvenc nvenc_h264 )

La E indica encoder, si sólo aparece D (decoder), significa que no se podrá codificar en h264. Debe existir al menos una linea con E.

En el caso de que no aparezca una linea con la letra E, quiere decir que FFmpeg no tiene soporte para h264, por lo cual será necesario verificar si fue compilado con soporte para dicha librería como mencionamos arriba.

Si todo está correcto, la transcodificación debería funcionar sin problemas.

Puedes probar que el proceso funcione desde una terminal usando el comando siguiente con los videos incluídos en el archivo adjunto a este articulo.

ffmpeg -i VideoPrueba.avi -y -vcodec libx264 -b 600000 -acodec aac -ar 44100 -ab 96k -f mp4 VideoPrueba.mp4
Configuración de URLs amigables

Si se instala Prontus sobre Apache2 usando modperl2 es posible implementar url friendly v5, totalmente arbitrarias con la siguiente configuración:

# Modulo que entrega los friendlies 5.
PerlModule prontus_route_friendly
<If "! -f %{REQUEST_FILENAME}">
# El handler actua si el archivo no existe.
SetHandler perl-script
PerlResponseHandler prontus_route_friendly
</If>
Configuración de taxports dinámicas

Así mismo, en apache2 con modperl2 se pueden implementar taxport dinámicas con la siguiente configuración:

# Generacion de taxports dinamicas.
PerlModule prontus_dintax
<LocationMatch /site/tax/port/.*>
<If "! -f %{REQUEST_FILENAME}">
PerlHeaderParserHandler prontus_dintax
</If>
</LocationMatch>
Instalación de Prontus

El proceso normal de instalación de Prontus implica usar un paquete .deb o .rpm descargable desde prontus.cl. Como alternativa, si eres un ingeniero de AltaVoz o si ya tienes un ambiente con Prontus, puedes hacer lo siguiente:

  • copiar los archivos de los directorios cgi-bin/, cgi-cpn/ y wizard_prontus/ del ambiente donde esté instalado tu Prontus al ambiente donde necesitas instalar el nuevo sitio.
  • asegurarte que las cgis de Prontus copiadas tienen permisos de ejecución y están asignadas al usuario correcto. Asumiendo que tu sitio estará instalado en el directorio /var/www/misitio.cl/web/, y que el usuario asignado al webserver es www-data, deberías ejecutar los comandos siguientes:
    find /var/www/misitio.cl/web/cgi-cpn -name "*.cgi" | xargs chmod +x chmod -R
    find /var/www/misitio.cl/web/cgi-bin -name "*.cgi" | xargs chmod +x chmod -R
    chown -R www-data: /var/www/misitio.cl/web/

Luego de esto, ya puedes usar el asistente para instalar Prontus visitando la página http://[dominio]/wizard_prontus/ en tu navegador.

Al finalizar la instalación asegúrate de actualizar Prontus a la versión más reciente, si es posible.