Instalación básica de GeoNode

Descripción general

Las siguientes son las formas más fáciles y recomendadas de implementar un servidor GeoNode de pila completa en su host.

  1. Primer paso: Implementar GeoNode en un servidor local, ejecutándolo como servicio http://localhost/.:guilabel: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/.:guilabel: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: Asegure su implementación de producción;cambiar las contraseñas admin y las claves OAUth2

  5. Más mejoras en la 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-proyecto

Digamos que su proyecto se llama my_geonode realice 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

Prepare 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.

El comando acepta los siguientes argumentos:

  • –https: Habilitar 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 «prueba», «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

  • –geoservpwd: 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 GeoNode Oauth2 de Geoserver.Se establece un valor aleatorio si se deja vacío

Construir y ejecutar

docker compose build
docker compose up -d
  • Puede 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, intente detectar el seguimiento de pila del error ejecutando los siguientes comandos desde la carpeta raíz my_geonode:

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

Conéctese a http://localhost/

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

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

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

Conéctese a http://localhost/

Las credenciales predeterminadas son:

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

    username: admin password: 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 desee implementar en, digamos, https://my_geonode.geonode.org/, deberá 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 producción, se requiere un correo electrónico válido y un servidor SMTP 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á reconstruir el contenedor

Advertencia

Observe que el siguiente comando descarta cualquier cambio que haya 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 puede acceder al servidor en el canal HTTPS, verifique los archivos de configuración NGINX a continuación:

  1. Ingrese el contenedor NGINX

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

    apk add nano
    
  3. Verifique 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, ejecute los siguientes comandos y verifique 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úrese de que el contenido coincida con lo siguiente

    Advertencia

    Cambiar el 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

    ¡Guarde los cambios, si los hay, y salga!

  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, repita los pasos anteriores y asegúrese de que el enlace nginx.http.enabled.conf se haya creado correctamente.

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

Personalice .env para que se ajuste a sus necesidades

En el caso de que desee modificar el comportamiento del GeoNode, utilice siempre el archivo .env para actualizar settings.

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

Consulte la sección: configuración

Puede agregar aquí cualquier propiedad referida como

Env: PROPERTY_NAME

Reiniciar los contenedores

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

Advertencia

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

docker-compose up -d django

[Opcional] Configure sus certificados SSL

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

Es posible que desee proporcionar sus 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