Instalación básica de GeoNode

Descripción general

Las siguientes son las formas más fáciles y recomendadas para desplegar un servidor GeoNode full-stack en tu host.

  1. Primer paso: Implementar GeoNode en un servidor local, ejecutándolo como servicio http://localhost/. GeoServer también estará disponible en http://localhost/geoserver/

  2. Segundo paso: Implementar GeoNode en un servidor de producción, ejecutándose como servicio https://my_geonode.geonode.org/. GeoServer también estará disponible en https://my_geonode.geonode.org/geoserver/

  3. Tercer paso: Personaliza .env para que se ajuste a tus necesidades

  4. Cuarto paso: Asegura tu implementación de producción; cambiar las contraseñas admin y las claves OAUth2

  5. Mejoras Adicionales para Producción

Primer paso: implementar GeoNode en un servidor local

Configuración de Docker para Ubuntu (22.04)

# install OS level packages..
sudo add-apt-repository universe
sudo apt-get update -y
sudo apt-get install -y git-core git-buildpackage debhelper devscripts python3.10-dev python3.10-venv virtualenvwrapper
sudo apt-get install -y apt-transport-https ca-certificates curl lsb-release gnupg gnupg-agent software-properties-common vim

# add docker repo and packages...
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update -y
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose
sudo apt autoremove --purge

# add your user to the docker group...
sudo usermod -aG docker ${USER}
su ${USER}

Crea una instancia de tu geonode-project

Digamos que tu proyecto se llama my_geonode realiza los siguientes pasos:

git clone https://github.com/GeoNode/geonode-project.git

# Checkout the desired branch. For example, 4.2.2 to generate a project for GeoNode 4.2.2

git checkout -b 4.2.2

# Ubuntu
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
mkvirtualenv --python=/usr/bin/python3 my_geonode

Alterantively you can also create the virtual env like below
python3.8 -m venv /home/geonode/dev/.venvs/my_geonode
source /home/geonode/dev/.venvs/my_geonode/bin/activate

pip install Django==3.2.13

# CentOS
virtualenv -p python3 my_geonode
source my_geonode/bin/activate

django-admin startproject --template=./geonode-project -e py,sh,md,rst,json,yml,ini,env,sample,properties -n monitoring-cron -n Dockerfile my_geonode

# If the previous command does not work for some reason, try the following one
python -m django startproject --template=./geonode-project -e py,sh,md,rst,json,yml,ini,env,sample,properties -n monitoring-cron -n Dockerfile my_geonode

Prepara el archivo .env

GeoNode utiliza un .env donde se deben configurar las variables de entorno requeridas por Docker y el propio GeoNode. Una forma sencilla de generar un .env básico es usar el comando de utilidad create-envfile.py. Si se ejecuta sin argumentos, generará un .env válido para una implementación local.

cd my_geonode
python create-envfile.py

El comando acepta los siguientes argumentos:

  • –https: Enable SSL. Está deshabilitado por defecto

  • –env_type:
    • Cuando se establece en prod, DEBUG está deshabilitado y se solicita la creación de un SSL válido al servidor ACME de Letsencrypt

    • Cuando se establece en «test», «DEBUG» está deshabilitado y se genera un certificado de prueba «SSL» para pruebas locales

    • Cuando se establece en dev, DEBUG está habilitado y no se genera ningún certificado SSL

  • –hostname: La URL que servirá a GeoNode (localhost por defecto)

  • –email: El correo electrónico del administrador. Tenga en cuenta que se requiere un correo electrónico real y configuraciones SMPT válidas si –env_type está configurado en prod. Letsencrypt utiliza el correo electrónico para emitir el certificado SSL

  • –geonodepwd: contraseña de administrador de GeoNode. Se establece un valor aleatorio si se deja vacío

  • –geoserverpwd: contraseña de administrador de GeoNode. Se establece un valor aleatorio si se deja vacío

  • –pgpwd: Contraseña de administrador de PostgreSQL. Se establece un valor aleatorio si se deja vacío

  • –dbpwd: contraseña del rol de usuario de GeoNode DB. Se establece un valor aleatorio si se deja vacío

  • –geodbpwd: Contraseña del rol de usuario de la base de datos de datos GeoNode. Se establece un valor aleatorio si se deja vacío

  • –clientid: ID del cliente GeoNode Oauth2 de Geoserver. Se establece un valor aleatorio si se deja vacío

  • –clientsecret: Secreto del cliente OAuth2 de GeoNode en GeoServer. Se establece un valor aleatorio si se deja vacío

Construir y ejecutar

docker compose build
docker compose up -d
  • Puedes seguir el inicio de los contenedores ejecutando los siguientes comandos desde la carpeta raíz my_geonode:

    # GeoNode Container
    docker-compose logs -f django
    
    # GeoServer Container
    docker-compose logs -f geoserver
    
    # DB Container
    docker-compose logs -f db
    
    # NGINX Container
    docker-compose logs -f geonode
    
  • Si se produce algún error, intenta capturar la traza de la pila de errores ejecutando los siguientes comandos desde la carpeta raíz de my_geonode:

    # GeoNode “entrypoint.sh” Logs
    tail -F -n 300 invoke.log
    

Conéctate a http://localhost/

El inicio suele tardar algún tiempo, así que ten paciencia…

Si todo va bien, deberías poder ver en los registros de inicio de GeoNode una línea similar a la siguiente:

<some date> [UWSGI] Uwsgi running...

Conéctate a http://localhost/

Las credenciales predeterminadas son:

  • GeoNode (http://localhost/) admin:

    nombre de usuario: admin contraseña: admin

  • GeoServer (http://localhost/geoserver/) admin:

    nombre de usuario: admin contraseña: geoserver

Segundo paso: implementar GeoNode en un servidor de producción

En el caso de que desees implementar en, digamos, https://my_geonode.geonode.org/, deberás cambiar .env de la siguiente manera:

DOCKER_ENV=production
SITEURL=https://my_geonode.geonode.org/
NGINX_BASE_URL=https://my_geonode.geonode.org/
ALLOWED_HOSTS=['django',]
GEOSERVER_WEB_UI_LOCATION=https://my_geonode.geonode.org/geoserver/
GEOSERVER_PUBLIC_LOCATION=https://my_geonode.geonode.org/geoserver/
HTTP_HOST=
HTTPS_HOST=my_geonode.geonode.org
HTTP_PORT=80
HTTPS_PORT=443
LETSENCRYPT_MODE=production # This will use Letsencrypt and the ACME server to generate valid SSL certificates

Estas variables son configuradas automáticamente por el script create-envfile.py si se utilizan las variables --https y --hostname.

Advertencia

Cuando LETSENCRYPT_MODE está configurado en production, se requiere un correo electrónico válido y un servidor SMPT de correo electrónico para que el sistema genere un certificado válido.

Reiniciar los contenedores

Siempre que cambie algo en el archivo .env, necesitarás reconstruir el contenedor

Advertencia

Observa que el siguiente comando descarta cualquier cambio que hayas realizado manualmente dentro de los contenedores, excepto los volúmenes estáticos.

docker-compose up -d

Solución de problemas

Si por alguna razón no puedes acceder al servidor en el canal HTTPS, verifica los archivos de configuración NGINX a continuación:

  1. Ingresar al contenedor NGINX

    docker-compose exec geonode sh
    
  2. Instalar un editor si no está presente

    apk add nano
    
  3. Verificar que el enlace nginx.https.enabled.conf se haya creado correctamente

    ls -lah
    
    ../../_images/throubleshooting_prod_001.png

    Si la lista no coincide exactamente con la figura anterior, ejecuta los siguientes comandos y verifica nuevamente

    rm nginx.https.enabled.conf
    ln -s nginx.https.available.conf nginx.https.enabled.conf
    
  4. Inspeccionar el contenido de nginx.https.enabled.conf

    nano nginx.https.enabled.conf
    

    Asegúrate que el contenido coincida con lo siguiente

    Advertencia

    Cambiar Hostname en consecuencia. ¡Esto es sólo un ejemplo!

    # NOTE : $VARIABLES are env variables replaced by entrypoint.sh using envsubst
    # not to be mistaken for nginx variables (also starting with $, but usually lowercase)
    
    # This file is to be included in the main nginx.conf configuration if HTTPS_HOST is set
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
    
    # this is the actual HTTPS host
    server {
        listen              443 ssl;
        server_name         my_geonode.geonode.org;
        keepalive_timeout   70;
    
        ssl_certificate     /certificate_symlink/fullchain.pem;
        ssl_certificate_key /certificate_symlink/privkey.pem;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;
    
        include sites-enabled/*.conf;
    }
    
    # if we try to connect from http, we redirect to https
    server {
        listen 80;
        server_name  my_geonode.geonode.org; # TODO : once geoserver supports relative urls, we should allow access though both HTTP and HTTPS at the same time and hence remove HTTP_HOST from this line
    
        # Except for let's encrypt challenge
        location /.well-known {
            alias /geonode-certificates/.well-known;
            include  /etc/nginx/mime.types;
        }
    
        # Redirect to https
        location / {
        return 302 https://my_geonode.geonode.org/$request_uri; # TODO : we should use 301 (permanent redirect, but not practical for debug)
        }
    }
    

    Advertencia

    ¡Guarda los cambios, si los hay, y sal!

  5. Vuelva a cargar la configuración de NGINX

    nginx -s reload
    2020/06/24 10:00:11 [notice] 112#112: signal process started
    /etc/nginx# exit
    
  6. Puede resultar útil desactivar https para aislar el origen de los errores. Después de revertir los cambios relacionados con HTTPS en el archivo .env, repite los pasos anteriores y asegúrate que el enlace nginx.http.enabled.conf se haya creado correctamente.

    ln -s nginx.conf nginx.http.enabled.conf
    nano nginx.http.enabled.conf
    

Personaliza .env para que se ajuste a tus necesidades

En el caso de que desees modificar el comportamiento de GeoNode, utiliza siempre el archivo .env para actualizar settings.

Si necesitas cambiar una configuración que no existe en .env, puedes forzar los valores dentro de my_geonode/settings.py

Consulta la sección: configuración

Puedes agregar aquí cualquier propiedad referida como

Env: PROPERTY_NAME

Reiniciar los contenedores

Siempre que cambies algo en el archivo .env, necesitarás reconstruir los contenedores.

Advertencia

¡Ten cuidado! El siguiente comando descarta cualquier cambio que hayas realizado manualmente dentro de los contenedores, excepto los volúmenes estáticos.

docker-compose up -d django

[Opcional] Configura tus certificados SSL

En el modo de implementación de producción, GeoNode utiliza por defecto los certificados Let’s Encrypt

Es posible que desees proporcionar tus propios certificados a GeoNode

docker exec -it nginx4my_geonode_geonode sh -c 'mkdir /geonode-certificates/my_geonode'

wget --no-check-certificate 'http://<url_to_your_chain.crt>' \
    -O chain.crt

wget --no-check-certificate 'http://<url_to_your_key.key>' \
    -O my_geonode.key

docker cp chain.crt nginx4my_geonode_geonode:/geonode-certificates/my_geonode

docker cp my_geonode.key nginx4my_geonode_geonode:/geonode-certificates/my_geonode

docker-compose exec geonode sh
apk add vim

vim nginx.https.enabled.conf
-ssl_certificate     /certificate_symlink/fullchain.pem;
-ssl_certificate_key /certificate_symlink/privkey.pem;
+ssl_certificate       /geonode-certificates/my_geonode/chain.crt;
+ssl_certificate_key   /geonode-certificates/my_geonode/my_geonode.key;
nginx -s reload
exit