Proyecto GeoNode¶
Descripción general¶
Los siguientes pasos lo guiarán hacia una nueva configuración de GeoNode Project.Todas las guías primero instalarán y configurarán el sistema para ejecutarlo en modo DEBUG (también conocido como modo DESARROLLO) y luego configurarán un servidor HTTPD para servir a GeoNode a través del puerto estándar HTTP (80).
Esas guías no están destinadas a usarse en un sistema de producción.Habrá capítulos dedicados que le mostrarán algunos consejos para optimizar GeoNode para una máquina lista para producción.En cualquier caso, recomendamos encarecidamente consultar a un DevOp o Administrador del sistema experimentado antes de exponer su servidor a la WEB.
Ubuntu 22.04¶
Esta parte de la documentación describe el proceso de configuración completo de GeoNode en un entorno limpio Ubuntu 22.04 de 64 bits (escritorio o servidor).Todos los ejemplos utilizan comandos de shell que debe ingresar en una terminal local o en un shell remoto.- Si tiene un entorno de escritorio gráfico, puede abrir la aplicación de terminal después de iniciar sesión;- si está trabajando en un servidor remoto, el proveedor o administrador del sistema debería haberle dado acceso a través de un cliente ssh.
Instalar las dependencias¶
En esta sección, instalaremos todos los paquetes y herramientas básicos necesarios para una instalación completa de GeoNode.Para seguir esta guía, se requieren conocimientos básicos sobre la configuración del servidor Ubuntu y el trabajo con un shell.Esta guía utiliza vim como editor;Llénelo gratis para usar nano, gedit u otros.
Paquetes de sistema de actualización¶
Verifique que su sistema ya esté actualizado con el repositorio ejecutando los siguientes comandos:
sudo apt update
Crear un usuario dedicado¶
En los siguientes pasos se utiliza un usuario llamado geonode: para ejecutar los comandos de instalación, el usuario debe estar en el grupo sudo.
Crear usuario geonode si no está presente:
# Follow the prompts to set the new user's information.
# It is fine to accept the defaults to leave all of this information blank.
sudo adduser geonode
# The following command adds the user geonode to group sudo
sudo usermod -aG sudo geonode
# make sure the newly created user is allowed to login by ssh
# (out of the scope of this documentation) and switch to User geonode
su geonode
Instalación de paquetes¶
Agregue los paquetes GIS de Ubuntu antes de instalar los otros paquetes del sistema.
sudo apt update
Nota
No necesita instalar los paquetes del sistema si desea ejecutar el proyecto usando Docker
Primero, instalaremos todos los paquetes del sistema necesarios para la configuración de GeoNode.
# Install packages from GeoNode core
sudo apt install -y python3-gdal=3.3.2+dfsg-2~focal2 gdal-bin=3.3.2+dfsg-2~focal2 libgdal-dev=3.3.2+dfsg-2~focal2
sudo apt install -y python3-pip python3-dev python3-virtualenv python3-venv virtualenvwrapper
sudo apt install -y libxml2 libxml2-dev gettext
sudo apt install -y libxslt1-dev libjpeg-dev libpng-dev libpq-dev libmemcached-dev
sudo apt install -y software-properties-common build-essential
sudo apt install -y git unzip gcc zlib1g-dev libgeos-dev libproj-dev
sudo apt install -y sqlite3 spatialite-bin libsqlite3-mod-spatialite
# Install Openjdk
sudo -i apt update
sudo apt install openjdk-8-jdk-headless default-jdk-headless -y
# Remember to select the correct java version /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
sudo update-alternatives --config java
sudo apt update -y
sudo apt autoremove -y
sudo apt autoclean -y
sudo apt purge -y
sudo apt clean -y
# Install Packages for Virtual environment management
sudo apt install -y virtualenv virtualenvwrapper
# Install text editor
sudo apt install -y vim
Instalación del proyecto Geonode¶
El proyecto Geonode es la forma adecuada de ejecutar una instalación personalizada de Geonode.El repositorio de geonode-project contiene un conjunto mínimo de archivos que siguen la estructura de un proyecto django.El propio Geonode se instalará como requisito de su proyecto.Dentro de la estructura del proyecto es posible ampliar, reemplazar o modificar todos los componentes del geonode (por ejemplo, css y otros archivos estáticos, plantillas, modelos…) e incluso registrar nuevas aplicaciones de Django sin tocar el código original del Geonode.
Nota
Puedes llamar a tu proyecto de geonode como desees siguiendo las convenciones de nomenclatura para paquetes de Python (generalmente minúsculas con guiones bajos (_)). En los ejemplos siguientes, reemplaza my_geonode con el nombre que desees para tu proyecto.
Consulte también el archivo README en el repositorio geonode-project
En primer lugar, debemos preparar un nuevo entorno virtual de Python.
Preparar el ambiente
sudo mkdir -p /opt/geonode_custom/
sudo usermod -a -G www-data geonode
sudo chown -Rf geonode:www-data /opt/geonode_custom/
sudo chmod -Rf 775 /opt/geonode_custom/
Clonar el código fuente
cd /opt/geonode_custom/
git clone https://github.com/GeoNode/geonode-project.git
Esto clonará la rama master branch. Tendrás que cambiar a la rama o etiqueta deseada. Por ejemplo, si quieres generar un proyecto para GeoNode 4.2.2, debes usar el comando docker.
git checkout -b 4.2.2
Haga una instancia a partir de la Plantilla Django
Nota
Llamaremos a nuestra instancia my_geonode.Puede cambiar el nombre a su conveniencia.
vim ~/.bashrc
# add the following line to the bottom
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
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
django-admin startproject --template=./geonode-project -e py,sh,md,rst,json,yml,ini,env,sample,properties -n monitoring-cron -n Dockerfile my_geonode
# Install the Python packages
cd /opt/geonode_custom/my_geonode
pip install -r src/requirements.txt --upgrade
pip install -e src/ --upgrade
# Install GDAL Utilities for Python
pip install pygdal=="`gdal-config --version`.*"
# Dev scripts
mv .override_dev_env.sample src/.override_dev_env
mv src/manage_dev.sh.sample src/manage_dev.sh
mv src/paver_dev.sh.sample src/paver_dev.sh
Instalar y configurar el sistema de base de datos PostgreSQL¶
En esta sección vamos a instalar los paquetes PostgreSQL junto con la extensión PostGIS.Esos pasos deben realizarse solo si aún no tiene la base de datos instalada en su sistema.
# Ubuntu 22.04
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
sudo wget --no-check-certificate --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update -y; sudo apt install -y postgresql-13 postgresql-13-postgis-3 postgresql-13-postgis-3-scripts postgresql-13 postgresql-client-13
Ahora debemos crear dos bases de datos, my_geonode y my_geonode_data, pertenecientes al rol my_geonode.
Advertencia
Esta es nuestra configuración predeterminada.Puede utilizar cualquier base de datos o rol que necesite.Los parámetros de conexión deben estar correctamente configurados en settings, como veremos más adelante en este apartado.
Bases de datos y permisos¶
Primero, cree el usuario del geonode. GeoNode utilizará este usuario para acceder a la base de datos.
sudo service postgresql start
sudo -u postgres createuser -P my_geonode
# Use the password: geonode
Se le pedirá que establezca una contraseña para el usuario.**Ingrese geonode como contraseña**.
Advertencia
Esta es una contraseña de ejemplo utilizada por simplicidad.Esta contraseña es muy débil y debe cambiarse en un entorno de producción.
Cree la base de datos my_geonode y my_geonode_data con el propietario my_geonode
sudo -u postgres createdb -O my_geonode my_geonode
sudo -u postgres createdb -O my_geonode my_geonode_data
A continuación, creemos extensiones PostGIS.
sudo -u postgres psql -d my_geonode -c 'CREATE EXTENSION postgis;'
sudo -u postgres psql -d my_geonode -c 'GRANT ALL ON geometry_columns TO PUBLIC;'
sudo -u postgres psql -d my_geonode -c 'GRANT ALL ON spatial_ref_sys TO PUBLIC;'
sudo -u postgres psql -d my_geonode -c 'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_geonode;'
sudo -u postgres psql -d my_geonode_data -c 'CREATE EXTENSION postgis;'
sudo -u postgres psql -d my_geonode_data -c 'GRANT ALL ON geometry_columns TO PUBLIC;'
sudo -u postgres psql -d my_geonode_data -c 'GRANT ALL ON spatial_ref_sys TO PUBLIC;'
sudo -u postgres psql -d my_geonode_data -c 'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_geonode;'
El último paso es cambiar las políticas de acceso de usuarios para conexiones locales en el archivopg_hba.conf
sudo vim /etc/postgresql/13/main/pg_hba.conf
Desplácese hasta el final del documento.Queremos que la conexión local sea «confiable» para el usuario predeterminado.
Asegúrate de que tu configuración se parezca a la siguiente.
...
# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local all postgres trust
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
Advertencia
Si su base de datos PostgreSQL reside en una máquina separada/remota, tendrá que permitir el acceso remoto a las bases de datos en /etc/postgresql/13/main/pg_hba.conf al usuario de geonode y decirle a PostgreSQL que acepte conexiones no locales en su archivo /etc/postgresql/13/main/postgresql.conf
Reinicie PostgreSQL para que el cambio sea efectivo.
sudo service postgresql restart
PostgreSQL ya está listo.Para probar la configuración, intente conectarse a la base de datos geonode como función geonode.
psql -U postgres my_geonode
# This should not ask for any password
psql -U my_geonode my_geonode
# This should ask for the password geonode
# Repeat the test with geonode_data DB
psql -U postgres my_geonode_data
psql -U my_geonode my_geonode_data
Ejecute el proyecto GeoNode por primera vez en modo DEBUG¶
Advertencia
Asegúrese de haber completado con éxito todos los pasos de la sección Instalar las dependencias.
Este comando ejecutará GeoNode y GeoServer localmente después de haber preparado la base de datos Spatialite.El servidor se iniciará en modo DEBUG (o DESARROLLO) e iniciará los siguientes servicios:
GeoNode en
http://localhost:8000/GeoServer en
http://localhost:8080/geoserver/
Esta modalidad es beneficiosa para depurar problemas y/o desarrollar nuevas funciones, pero no se puede utilizar en un sistema de producción.
# Prepare the GeoNode Spatialite database (the first time only)
cd src/
chmod +x paver_dev.sh
./paver_dev.sh setup
./paver_dev.sh sync
Nota
En caso de que quieras empezar de nuevo desde una situación limpia, simplemente ejecuta
./paver_dev.sh reset_hard
Advertencia
Esto hará estallar completamente su local_settings, eliminará la base de datos SQLite y eliminará el directorio de datos de GeoServer.
# Run the server in DEBUG mode
./paver_dev.sh start
Una vez que el servidor haya terminado la inicialización e imprima en la consola la frase GeoNode ya está disponible., puedes abrir un navegador e ir a:
http://localhost:8000/
Inicia sesión con:
user: admin
password: admin
De ahora en adelante, todo lo ya dicho para GeoNode Core (consulte la sección configure_dbs_core y siguientes), se aplica a un Proyecto GeoNode.
Tenga cuidado de utilizar las nuevas rutas y nombres en todas partes:
Cada vez que encuentre la palabra clave
geonode, deberá utilizar el nombre personalizado de su geonode (en este ejemplo,my_geonode).Cada vez que encuentre rutas que apunten a
/opt/geonode/, deberá actualizarlas para que apunten a su proyecto personalizado (en este ejemplo,/opt/geonode_custom/my_geonode).
Docker¶
Advertencia
Antes de continuar con esta sección, debería haber leído y comprendido claramente las secciones INSTALACIÓN > GeoNode Core, y en particular la de Docker.Todo lo dicho para GeoNode Core Vanilla se aplica aquí también, excepto que los nombres de los contenedores Docker serán ligeramente diferentes.Por ejemplo, si nombró su proyecto my_geonode, sus contenedores se llamarán:
'django4my_geonode' instead of 'django4geonode' and so on...
Implementar una instancia de una plantilla Django de proyecto de geonode con Docker en localhost¶
Preparar el ambiente
sudo mkdir -p /opt/geonode_custom/
sudo usermod -a -G www-data geonode
sudo chown -Rf geonode:www-data /opt/geonode_custom/
sudo chmod -Rf 775 /opt/geonode_custom/
Clonar el código fuente
cd /opt/geonode_custom/
git clone https://github.com/GeoNode/geonode-project.git
Esto clonará la ramamaster branch. Tendrás que cambiar a la rama o etiqueta deseada. Por ejemplo, si quieres generar un proyecto para GeoNode 4.2.2, debes usar el comando docker.
git checkout -b 4.2.2
Haga una instancia a partir de la Plantilla Django
Nota
Llamaremos a nuestra instancia my_geonode.Puede cambiar el nombre a su conveniencia.
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
django-admin startproject --template=./geonode-project -e py,sh,md,rst,json,yml,ini,env,sample,properties -n monitoring-cron -n Dockerfile my_geonode
cd /opt/geonode_custom/my_geonode
Crea el archivo .env
Se requiere un archivo .env para ejecutar la aplicación.Se puede crear desde .env.sample ya sea manualmente o con el script create-envfile.py.
El script acepta varios parámetros para crear el archivo, en detalle:
nombre de host: p.e.master.demo.geonode.org, host local predeterminado
https: (booleano), el valor predeterminado es Falso
correo electrónico: correo electrónico del administrador (esto es obligatorio si https está configurado en Verdadero, ya que Letsencrypt certbot requiere un correo electrónico válido)
emv_type: prod, test o dev.Establecerá la variable DEBUG en False (prod, test) o True (dev)
geonodepwd: Contraseña de administrador de GeoNode (requerida dentro del .env)
geoserverpwd: Contraseña de administrador de Geoserver (requerida dentro del .env)
pgpwd: Contraseña de PostgreSQL (requerida dentro del .env)
dbpwd: Contraseña de usuario de GeoNode DB (requerida dentro del .env)
geodbpwd: Contraseña de usuario de la geodatabase (requerida dentro del .env)
clientid: ID de cliente Oauth2 (requerido dentro del .env)
clientsecret: secreto del cliente Oauth2 (requerido dentro del .env)
clave secreta: clave secreta de Django (requerida dentro del .env)
sample_file: ruta absoluta a un archivo env_sample utilizado para crear el env_file.Si no se proporciona, se utiliza el que está dentro del proyecto GeoNode.
archivo: ruta absoluta a un archivo json que contiene toda la configuración anterior
Nota
Si se pasa la misma configuración en el archivo json y como argumento, la CLI sobrescribirá la del archivo JSON.Si no se proporciona algún valor, se utiliza una cadena aleatoria
Ejemplo de USO
```bash
python create-envfile.py -f /opt/core/geonode-project/file.json \
--hostname localhost \
--https \
--email random@email.com \
--geonodepwd gn_password \
--geoserverpwd gs_password \
--pgpwd pg_password \
--dbpwd db_password \
--geodbpwd _db_password \
--clientid 12345 \
--clientsecret abc123
```
Ejemplo JSON esperado:
```JSON
{
"hostname": "value",
"https": "value",
"email": "value",
"geonodepwd": "value",
"geoserverpwd": "value",
"pgpwd": "value",
"dbpwd": "value",
"geodbpwd": "value",
"clientid": "value",
"clientsecret": "value"
}
```
Modifique el código y las plantillas y reconstruya los contenedores Docker.
docker-compose -f docker-compose.yml build --no-cache
Finalmente, ejecute los contenedores.
docker-compose -f docker-compose.yml up -d
Implementar una instancia de una plantilla Django de proyecto de geonode con Docker en un dominio¶
Nota
Usaremos www.example.org como ejemplo.Puede cambiar el nombre a su conveniencia.
Detener los contenedores
cd /opt/geonode_custom/my_geonode
docker-compose -f docker-compose.yml stop
Edite el archivo de anulación ENV para implementarlo en www.example.org
Reemplace en todas partes localhost con www.example.org
vim .env
# e.g.: :%s/localhost/www.example.org/g
Nota
Es posible anular aquí aún más variables para personalizar la instancia de GeoNode.Consulte la sección Configuración de GeoNode para obtener una lista de las opciones disponibles.
Ejecute los contenedores en modo demonio.
docker-compose -f docker-compose.yml -f docker-compose.override.example-org.yml up --build -d
Probar proyecto de geonode con Vagrant¶
Nota
Dentro de los archivos del proyecto geonode encontrará un archivo llamado Vagrantfile.compose y otro llamado Vagrantfile.stack, copie uno de ellos en el archivo Vagrantfile para usarlos con vagrant.
apt-get install -y vagrant
#choose what to test (in this case docker-compose.yml)
cp Vagrantfile.compose Vagrantfile
#this will start a vargant virtual machine, generate and build geonode-project
vagrant up
# check services are up upon reboot
vagrant ssh geonode-compose -c 'docker ps'
vagrant destroy -f
# test docker swarm
cp Vagrantfile.stack Vagrantfile
vagrant up
# check services are up upon reboot
vagrant ssh geonode-vagrant -c 'docker service ls'
vagrant destroy -f
Nota
Vagrant generará un proyecto dummi llamado «antani» dentro de vagrant, comenzando con el código base del proyecto geonode, de esta manera es posible probar dentro de vagrant casi instantáneamente lo que se modifica en el proyecto geonode.