Instalación

Teniendo en cuenta la dificultad de implementación e incluso la cantidad de pasos para lograr un deploy existoso, existen dos formas de instalar esta distribución de CKAN.

  • Si no tenés muchos conocimientos de CKAN, Docker o de administracién de servidores en general, es recomendable usar la instalación simplificada de Andino. Está pensada para que, en la menor cantidad de pasos y de manera sencilla, tengas un portal de datos funcionando.
  • Si ya conocés la plataforma, tenés experiencia con Docker o, simplemente, querés entender cómo funciona esta implementación, te sugiero que revises la instalacion avanzada de Andino

Indice

Dependencias

  • DOCKER: Guía de instalación.
  • Versión mínima testeada: 1.13.1
  • Docker Compose: Guía de instalación.
  • Versión mínima testeada: 1.12.0
  • En caso de contar únicamente con la version más moderna de Docker compose (Docker compose V2 integrada en Docker Engine e invocable mediante el comando $docker compose , es decir sin el guión intermedio) es necesario instalar la version standalone de docker compose siguiendo las Instrucciones para adaptar scripts a Docker Compose V2, que son un extracto de la documentación oficial de docker (Ver apartado 'Compose standalone' en Install the plugin manually).
  • Python: Es necesario tener instalada cualquier versión de Python 3 para poder utilizar los scripts de instalacion simplificada.

Instalación simplificada de andino

La idea detrás de esta implementación de CKAN es que sólo te encargues de tus datos, nada más. Por eso, si "copiás y pegás" el comando de consola, en sólo unos momentos, tendrás un Andino listo para usar. Esta clase de instalación no requiere que clones el repositorio, ya que usamos contenedores alojados en DockerHub

  • Ubuntu|Debian|RHEL|CentOS:
  • Instalación:

Para la instalación, usamos un script de python llamado install.py. El mismo requiere algunos parámetros específicos, y existen otros que son opcionales:

# Parametros de install.py
    [-h]                    Mostrar la ayuda del script
    --error_email           Email donde se mandaran los errores del portal de ser necesario
    --site_host             Dominio o IP del la aplicación *sin el protocolo*
    --database_user         Nombre del usuario de la base de datos a crear
    --database_password     Contraseña de la base de datos a crear
    --datastore_user        Nombre del usuario de la base de datos del datastore a crear
    --datastore_password    Contraseña de la base de datos del datastore a crear
    [--nginx-extended-cache]
        Configura nginx con una configuración extendida y configura el hook de
        invalidación de cache de Andino para notificar a nginx
    [--nginx_ssl]
        Aplica la configuración HTTPS en nginx. Requiere ambos archivos del certificado SSL para poder lograrlo; en 
        caso contrario, se utilizará la configuración default
    [--ssl_key_path SSL_KEY_PATH]
        Path dentro del host donde está ubicado el archivo .key para el certificado SSL; será copiado al contenedor 
        de nginx si tanto éste como el .crt pueden ser encontrados
    [--ssl_crt_path SSL_CRT_PATH]
        Path dentro del host donde está ubicado el archivo .crt para el certificado SSL; será copiado al contenedor 
        de nginx si tanto éste como el .key pueden ser encontrados
    [--nginx_port NGINX_PORT]
        Puerto del servidor "Host" que se desea que se tome para recibir llamadas HTTP.
        Por defecto es el 80.
    [--nginx_ssl_port NGINX_SSL_PORT]
        Puerto del servidor "Host" que se desea que se tome para recibir llamadas HTTPS.
        Por defecto es el 443.
        Es importante para los administradores saber que Andino tomará el puerto especificado (o el default) ya sea que el portal use o no use HTTPS. En caso de no querer usar HTTPS y que el host tenga erl puerto 443 tomado por un servidor web, es requisito especificar un puerto distinto (ejemplo: 8443) que será reservado por Andino, pero no utilizado.
    [--datastore_port DATASTORE_PORT]
        Puerto del servidor "Host" que se desea que se tome para recibir llamadas HTTP al "datastore".
        Por defecto es el 8800.
    [--install_directory INSTALL_DIRECTORY]
        Directorio donde se desea instalar la aplicación.
        Por defecto es `/etc/portal` (recomendado)
    [--file_size_limit FILE_SIZE_LIMIT]
        Configura el límite de tamaño para subida de archivos en recursos. 

Para esta instalación de ejemplo, usaremos estos parámetros para la aplicación. Para los demás, usaremos los valores por defecto:

  • Email donde se mandarán los errores. EMAIL=admin@example.com
  • Dominio o IP de la aplicación sin el protocolo: HOST=datos.gob.ar
  • Usuario de la base de datos: DB_USER=<my db user>
  • Password de la base de datos: DB_PASS=<my db pass>
  • Usuario del datastore: STORE_USER=<my datastore user>
  • Password del datastore: STORE_PASS=<my datastore password>

Nota: Si usamos una IP para la variable HOST, el envío de mails no funcionará. Postfix require un "fully-qualified domain name (FQDN)". Ver la documentación de Postfix para más detalles.

Nota 2: Si se utiliza el nombre 'localhost' para la variable site_host, es posible que ocurra un error al intentar subir un archivo perteneciente a un recurso al Datastore. Para evitar este problema, se debe utilizar un hostname diferente.

# Primero especificamos los valores necesarios

EMAIL=admin@example.com
HOST=andino.midominio.com.ar
DB_USER=my_database_user
DB_PASS=my_database_pass
STORE_USER=my_data_user
STORE_PASS=my_data_pass

wget https://raw.github.com/datosgobar/portal-andino/master/install/{install,installation_manager}.py

sudo python ./install.py \
    --error_email "$EMAIL" \
    --site_host="$HOST" \
    --database_user="$DB_USER" \
    --database_password="$DB_PASS" \
    --datastore_user="$STORE_USER" \
    --datastore_password="$STORE_PASS"

Instrucciones para adaptar scripts a Docker Compose V2

Los scripts de instalación y actualización simplificada utilizan/invocan a Compose siguiendo la interfaz de docker compose V1 , es decir utilizando la notación docker-compose ${COMMAND} ${OPTIONS}.

Si el sistema donde se instalará Andino sólo dispone de compose V2, se debe contar con un comando reconocible según la sintaxis correspondiente a V1 (docker-compose) que apunte al binario de la versión de docker instalada. Esto se puede hacer siguiendo las instrucciones de instalación de la versión standalone en la documentación de docker compose, que replicamos a continuación:

$curl -SL https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
  

A continuación debemos darle permisos de ejecución al archivo mediante

sudo chmod 755 /usr/local/bin/docker-compose
    

Una vez hecho el paso anterior , se puede chequear el correcto funcionamiento invocando el comando junto al flag de chequeo de versión. Debería verse algo parecido al siguiente snippet, por supuesto con el detalle de que la versión indicada será la correspondiente.

$ docker-compose --version
      Docker Compose version v2.7.0
    

Para ver instrucciones sobre este mismo procedimiento en Windows Server u otras alternativas de instalacion consultar apartado 'Compose standalone' en Install the plugin manually

Instalación avanzada de andino

La instalación avanzada está pensada para usuarios que quieren ver cómo funciona internamente Andino

Para instalar y ejecutar Andino, seguiremos estos pasos:

  • Paso 1: Clonar repositorio.
sudo mkdir /etc/portal
cd /etc/portal
sudo git clone https://github.com/datosgobar/portal-andino.git .
  • Paso 2: Especificar las variables de entorno para el contenedor de postgresql.

NOTA: Debemos usar un dominio válido para la variable DOMINIO, de otra forma el envio de mails no funcionará. Postfix require un "fully-qualified domain name (FQDN)". Ver la documentación de Postfix para más detalles.

DB_USER=<my user>
DB_PASS=<my pass>
DOMINIO=andino.midominio.com.ar
ANDINO_VERSION=<version que deseamos instalar>
sudo su -c "echo POSTGRES_USER=$DB_USER > .env"
sudo su -c "echo POSTGRES_PASSWORD=$DB_PASS >> .env"
sudo su -c "echo NGINX_HOST_PORT=80 >> .env"
sudo su -c "echo DATASTORE_HOST_PORT=8800 >> .env"
sudo su -c "echo maildomain=$DOMINIO >> .env"
sudo su -c "echo ANDINO_TAG=$ANDINO_VERSION >> .env"
sudo su -c "echo NGINX_HOST_SSL_PORT=443 >> .env"
sudo su -c "echo SITE_HOST=$DOMINIO >> .env"
  • Paso 3: Construir y lanzar los contenedor de servicios usando el archivo latest.yml: docker-compose -f latest.yml up -d db postfix redis solr
  • Paso 4: Construir y lanzar el contenedor de andino usando el archivo latest.yml: docker-compose -f latest.yml up -d portal
  • Paso 5: Inicializar la base de datos y la configuración de la aplicación:
EMAIL=admin@example.com
HOST=datos.gob.ar
DB_USER=<my db user>
DB_PASS=<my db pass>
STORE_USER=<my datastore user>
STORE_PASS=<my datastore password>
docker-compose -f latest.yml exec portal /etc/ckan_init.d/init.sh -e "$EMAIL" -h "$HOST" \
        -p "$DB_USER" -P "$DB_PASS" \
        -d "$STORE_USER" -D "$STORE_PASS"
  • Paso 6: Construir el contenedor de nginx usando el archivo latest.yml: `docker-compose -f latest.yml up -d nginx

Desinstalar andino

Esta secuencia de comandos va a ELIMINAR TODOS LOS CONTENEDORES, IMÁGENES y VOLUMENES de la aplicación de la vm donde está instalada la plataforma.

Esta operación no es reversible. Perderás todos tus datos si realizas esta operación.

app_dir="/etc/portal/"
cd $app_dir
docker-compose -f latest.yml down -v
cd ~/
sudo rm $app_dir -r