Integrar el servidor de contenidos de calibre en otros servidores

Aquí, le mostraremos cómo integrar el servidor de contenidos de calibre en otro servidor. La razón más común para esto es hacer uso de SSL u otro tipo de autenticación más sofisticado. Existen dos técnicas principales: ejecutar el servidor de contenido calibre como un proceso independiente y utilizando un proxy inverso para conectar con el servidor principal, o ejecutar el servidor de contenido como un proceso en el servidor principal con WSGI. Los siguientes ejemplos son para Apache 2.x sobre linux, pero deberían ser fácilmente adaptables a otras plataformas.

Nota

Esto sólo se aplica a versiones de calibre >= 0.7.25

Usar un proxy inverso

Un proxy inverso es cuando el servidor principal acepta peticiones entrantes y las traslada al servidor de calibre. A continuación, lee la respuesta desde el servidor de calibre y la envía al cliente. Esto significa que sólo tiene que ejecutar el servidor de calibre de forma normal sin tratar de integrarlo estrechamente con el servidor principal y aprovechar cualquier sistema de autenticación que posea el servidor principal. Éste es el método más sencillo, ya que le permite usar la instalación de binaria de calibre sin dependencias externas o requisitos de integración en el sistema. A continuación se muestra un ejemplo de cómo lograr esto con Apache como servidor principal, pero funcionará con cualquier servidor compatible con servidores proxy inversos.

Primero active el servidor de contenidos de calibre como se muestra a continuación:

calibre-server --url-prefix /calibre --port 8080

El parámetro clave aquí es --url-prefix /calibre. Esto hace que el servidor de contenidos sirva todos los URL con el prefijo calibre. Para verlo en acción, visite http://localhost:8080/calibre en su navegador. Debería ver la página web habitual del servidor de contenido, pero ahora se ejecutará desde /calibre.

Supongamos ahora que Apache es el servidor principal. En primer lugar, habilite los módulos de proxy en Apache, añadiendo lo siguiente a httpd.conf:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

La técnica exacta para habilitar los módulos proxy variará según la instalación de Apache. Una vez que tenga los módulos proxy habilitados, agregue las siguientes reglas a httpd.conf (o, si está usando servidores virtuales, al archivo conf del servidor virtual en cuestión):

RewriteEngine on
RewriteRule ^/calibre/(.*) http://localhost:8080/calibre/$1 [proxy]
RewriteRule ^/calibre http://localhost:8080 [proxy]
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1

Eso es todo, ahora podrá acceder al servidor de contenidos de calibre bajo el URL /calibre en su servidor Apache. Las reglas anteriores pasan todas las peticiones bajo /calibre al servidor de calibre que se ejecuta en el puerto 8080 y gracias a la opción --url-prefix mencionada anteriormente, el servidor de calibre las gestiona de forma transparente.

Nota

Si está dispuesto a dedicar todo un VirtualHost para el servidor de contenidos, entonces no hay necesidad de utilizar --url-prefix y RewriteRule, simplemente use la directiva ProxyPass.

Nota

El motor del servidor que usa calibre, CherryPy, puede tener problemas cuando se utilizan proxys y peticiones KeepAlive, así que desactívelos en Apache, con las directivas SetEnv que se muestran arriba.

En proceso

El servidor de contenidos de calibre se puede ejecutar directamente, en proceso, dentro de un servidor anfitrión como Apache utilizando el marco WSGI.

Nota

Para que esto funcione, todas las dependencias requeridas por calibre deben estar instaladas en el sistema. Conseguir esto no es en absoluto trivial, y se aconseja no usar servidores en proceso. No se proporcionará ninguna ayuda para depurar problemas relacionados con servidores en proceso.

Primero, debemos crear un adaptador WSGI para el servidor de contenidos de calibre. Aquí hay una plantilla que puede utilizar para dicho propósito. Reemplace las rutas de acceso como se indica en los comentarios.

# WSGI script file to run calibre content server as a WSGI app

import sys, os


# You can get the paths referenced here by running
# calibre-debug --paths
# on your server

# The first entry from CALIBRE_PYTHON_PATH
sys.path.insert(0, '/home/kovid/work/calibre/src')

# CALIBRE_RESOURCES_PATH
sys.resources_location = '/home/kovid/work/calibre/resources'

# CALIBRE_EXTENSIONS_PATH
sys.extensions_location = '/home/kovid/work/calibre/src/calibre/plugins'

# Path to directory containing calibre executables
sys.executables_location = '/usr/bin'

# Path to a directory for which the server has read/write permissions
# calibre config will be stored here
os.environ['CALIBRE_CONFIG_DIRECTORY'] = '/var/www/localhost/calibre-config'

del sys
del os

from calibre.library.server.main import create_wsgi_app
application = create_wsgi_app(
        # The mount point of this WSGI application (i.e. the first argument to
        # the WSGIScriptAlias directive). Set to empty string is mounted at /
        prefix='/calibre',

        # Path to the calibre library to be served
        # The server process must have write permission for all files/dirs
        # in this directory or BAD things will happen
        path_to_library='/home/kovid/documents/demo library',

        # The virtual library (restriction) to be used when serving this
        # library.
        virtual_library=None
)

del create_wsgi_app

Guarde este adaptador como calibre-wsgi-adapter.py en algún lugar al que el servidor tenga acceso.

Supongamos que queremos usar WSGI en Apache. En primer lugar, habilite WSGI en Apache añadiendo lo siguiente a httpd.conf:

LoadModule wsgi_module modules/mod_wsgi.so

La técnica exacta para habilitar el módulo WSGI variará según la instalación de Apache. Una vez que tenga los módulos proxy habilitados, agregue las siguientes reglas a httpd.conf (o, si está usando servidores virtuales, en el archivo conf para el servidor virtual en cuestión):

WSGIScriptAlias /calibre /var/www/localhost/cgi-bin/calibre-wsgi-adapter.py

Cambie la ruta de calibre-wsgi-adapter.py a la ubicación donde lo haya guardado previamente (asegúrese de que Apache tenga acceso).

Eso es todo, ahora podrá acceder al servidor de contenidos de calibre bajo la dirección /calibre en su servidor Apache.

Nota

Para más ayuda en el uso de mod_wsgi en Apache, vea mod_wsgi (en inglés).