GeoNode Vainilla

Descripción general

Los siguientes pasos lo guiarán hacia una nueva configuración de GeoNode.

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

Advertencia

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 LTS

Esta parte de la documentación describe el proceso de configuración completo de GeoNode en un entorno limpio Ubuntu 22.04.1LTS 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.

1. Instalar las dependencias

En esta sección, instalaremos todos los paquetes y herramientas básicos necesarios para una instalación completa de GeoNode.

Advertencia

Para seguir esta guía, se requieren conocimientos básicos sobre la configuración del servidor Ubuntu y cómo trabajar con un shell.

Nota

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 -y

Instalación de paquetes

Nota

No necesita instalar los paquetes del sistema si desea ejecutar el proyecto usando Docker

Usaremos ejemplo.org como nombre de dominio ficticio.

Primero, instalaremos todos los paquetes del sistema necesarios para la configuración de GeoNode.Inicie sesión en la máquina de destino y ejecute los siguientes comandos:

# Install packages from GeoNode core
sudo apt install -y --allow-downgrades build-essential \
  python3-gdal=3.4.1+dfsg-1build4 gdal-bin=3.4.1+dfsg-1build4 libgdal-dev=3.4.1+dfsg-1build4 \
  python3-all-dev python3.10-dev python3.10-venv virtualenvwrapper \
  libxml2 libxml2-dev gettext libmemcached-dev zlib1g-dev \
  libxslt1-dev libjpeg-dev libpng-dev libpq-dev \
  software-properties-common build-essential \
  git unzip gcc zlib1g-dev libgeos-dev libproj-dev \
  sqlite3 spatialite-bin libsqlite3-mod-spatialite libsqlite3-dev

# Install Openjdk
sudo apt install openjdk-11-jdk-headless default-jdk-headless -y

# Verify GDAL version
gdalinfo --version
  $> GDAL 3.4.1, released 2021/12/27

# Verify Python version
python3.10 --version
  $> Python 3.10.4

which python3.10
  $> /usr/bin/python3.10

# Verify Java version
java -version
  $> openjdk version "11.0.16"

# Install VIM
sudo apt install -y vim

# Cleanup the packages
sudo apt update -y; sudo apt autoremove --purge

Advertencia

GeoNode 4.4.x no es compatible con Python <3.7

2. Instalación de GeoNode

Esta es la instalación más básica de GeoNode.No utilizará ningún servidor externo como Apache Tomcat, PostgreSQL o HTTPD.

En primer lugar, debemos preparar un nuevo entorno virtual de Python.

Dado que geonode necesita una gran cantidad de bibliotecas y paquetes de Python diferentes, se recomienda utilizar un entorno virtual de Python para evitar conflictos de dependencias con paquetes de Python de todo el sistema y otro software instalado.Consulte también la documentación del paquete Virtualenvwrapper para obtener más información.

Nota

El entorno virtual GeoNode debe crearse sólo la primera vez.No necesitarás crearlo nuevamente cada vez.

which python3.10  # copy the path of python executable

# Create the GeoNode Virtual Environment (first time only)
export WORKON_HOME=~/.virtualenvs
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
mkvirtualenv --python=/usr/bin/python3.10 geonode  # Use the python path from above

# Alterantively you can also create the virtual env like below
mkdir -p ~/.virtualenvs
python3.10 -m venv ~/.virtualenvs/geonode
source ~/.virtualenvs/geonode/bin/activate

En este punto, su símbolo del sistema muestra un prefijo (geonode), esto indica que su virtualenv está activo.

Nota

La próxima vez que necesite acceder al entorno virtual, simplemente ejecute

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
workon geonode

# Alterantively you can also create the virtual env like below
source ~/.virtualenvs/geonode/bin/activate

Nota

Para guardar permanentemente el entorno virtualenvwrapper

vim ~/.bashrc

# Write to the bottom of the file the following lines
export WORKON_HOME=~/.virtualenvs
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
# Let's create the GeoNode core base folder and clone it
sudo mkdir -p /opt/geonode/; sudo usermod -a -G www-data $USER; sudo chown -Rf $USER:www-data /opt/geonode/; sudo chmod -Rf 775 /opt/geonode/

# Clone the GeoNode source code on /opt/geonode
cd /opt; git clone https://github.com/GeoNode/geonode.git -b 4.4.x geonode
# Install the Python packages
cd /opt/geonode
pip install -r requirements.txt --upgrade
pip install -e . --upgrade
pip install pygdal=="`gdal-config --version`.*"

Edite /opt/geonode/apio-cmd.

CELERY__STATE_DB=${CELERY__STATE_DB:-"/opt/geonode/worker@%h.state"}

Edite /opt/geonode/geonode/settings.py.

FILE_UPLOAD_DIRECTORY_PERMISSIONS = 0o777
FILE_UPLOAD_PERMISSIONS = 0o777

Edite /opt/geonode/uwsgi.ini.

chdir = /opt/geonode/

touch-reload = /opt/geonode/geonode/wsgi.py

3. Configuración de la base de datos Postgis

Asegúrese de haber completado con éxito todos los pasos de la sección 1. Instalar las dependencias.

En esta sección, configuraremos usuarios y bases de datos para GeoNode en PostgreSQL.

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.1 (focal)
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 --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, geonode y geonode_data, pertenecientes al rol 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 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.

Crear base de datos geonode y geonode_data con el propietario geonode

sudo -u postgres createdb -O geonode geonode
sudo -u postgres createdb -O geonode geonode_data

A continuación, creemos extensiones PostGIS.

sudo -u postgres psql -d geonode -c 'CREATE EXTENSION postgis;'
sudo -u postgres psql -d geonode -c 'GRANT ALL ON geometry_columns TO PUBLIC;'
sudo -u postgres psql -d geonode -c 'GRANT ALL ON spatial_ref_sys TO PUBLIC;'
sudo -u postgres psql -d geonode -c 'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO geonode;'
sudo -u postgres psql -d geonode -c 'GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO geonode;'

sudo -u postgres psql -d geonode_data -c 'CREATE EXTENSION postgis;'
sudo -u postgres psql -d geonode_data -c 'GRANT ALL ON geometry_columns TO PUBLIC;'
sudo -u postgres psql -d geonode_data -c 'GRANT ALL ON spatial_ref_sys TO PUBLIC;'
sudo -u postgres psql -d geonode_data -c 'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO geonode;'
sudo -u postgres psql -d geonode_data -c 'GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO geonode;'

El último paso es cambiar las políticas de acceso de usuarios para conexiones locales en el archivo pg_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 (trusted)» 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 geonode
# This should not ask for any password

psql -U geonode geonode
# This should ask for the password geonode

# Repeat the test with geonode_data DB
psql -U postgres geonode_data
psql -U geonode geonode_data

4. Instale GeoServer

En esta sección, vamos a instalar el contenedor Servlet Java Apache Tomcat 8, que se iniciará de forma predeterminada en el puerto interno 8080.

También realizaremos varias optimizaciones para:

  1. Configure correctamente las opciones de Java VM, como la memoria dinámica disponible y las opciones del recolector de basura.

  2. Externalizar los catálogos GeoServer y GeoWebcache para permitir futuras actualizaciones sin el riesgo de eliminar nuestros conjuntos de datos.

Nota

Esta sigue siendo una configuración básica de esos componentes.Se proporcionarán más detalles en las secciones de la documentación relacionadas con el refuerzo del sistema en un entorno de producción.Sin embargo, necesitarás modificar un poco esa configuración de acuerdo con tu sistema actual.Por ejemplo, si su máquina no tiene suficiente memoria, deberá reducir la cantidad inicial de memoria dinámica disponible.**Las advertencias** y las notas se colocarán debajo de las declaraciones que requerirán su atención.

Instalar Apache Tomcat

La versión de referencia de Tomcat para Geoserver para GeoNode es Tomcat 9.

Los siguientes pasos han sido adaptados de https://yallalabs.com/linux/ubuntu/how-to-install-apache-tomcat-9-ubuntu-20-04/

Advertencia

Apache Tomcat 9 y Geoserver requieren que Java 11 o una versión posterior esté instalada en el servidor.Verifique los pasos anteriores para asegurarse de tener OpenJDK 11 correctamente instalado en su sistema.

Primero, no se recomienda ejecutar Apache Tomcat como usuario root, por lo que crearemos un nuevo usuario del sistema que ejecutará el servidor Apache Tomcat.

sudo useradd -m -U -d /opt/tomcat -s /bin/bash tomcat
sudo usermod -a -G www-data tomcat

Advertencia

Ahora, vaya al sitio web oficial de Apache Tomcat https://tomcat.apache.org/ y descargue la versión más reciente del software a su servidor.Pero no utilice Tomcat10 porque todavía hay algunos errores entre Geoserver y Tomcat.

VERSION=9.0.65; wget https://archive.apache.org/dist/tomcat/tomcat-9/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz

Una vez que se complete la descarga, extraiga el archivo tar al directorio /opt/tomcat:

sudo mkdir /opt/tomcat
sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/; rm apache-tomcat-${VERSION}.tar.gz

Apache Tomcat se actualiza periódicamente.Entonces, para tener más control sobre las versiones y actualizaciones, crearemos un enlace simbólico como se muestra a continuación:

sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest

Ahora, cambiemos la propiedad de todos los archivos de Apache Tomcat como se muestra a continuación:

sudo chown -R tomcat:www-data /opt/tomcat/

Haga ejecutables los scripts de shell dentro del directorio bin:

sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh'

Cree un archivo systemd con el siguiente contenido:

# Check the correct JAVA_HOME location
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
echo $JAVA_HOME
  $> /usr/lib/jvm/java-11-openjdk-amd64/

# Let's create a symbolic link to the JDK
sudo ln -s /usr/lib/jvm/java-1.11.0-openjdk-amd64 /usr/lib/jvm/jre

# Let's create the tomcat service
sudo vim /etc/systemd/system/tomcat9.service
[Unit]
Description=Tomcat 9 servlet container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"

Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

Ahora puede iniciar el servidor Apache Tomcat 9 y habilitarlo para que se inicie en el momento del arranque usando el siguiente comando:

sudo systemctl daemon-reload
sudo systemctl start tomcat9.service
sudo systemctl status tomcat9.service
sudo systemctl enable tomcat9.service

Para verificación, escriba el siguiente comando ss, que le mostrará el número de puerto abierto 8080, el puerto abierto predeterminado reservado para el servidor Apache Tomcat.

ss -ltn

En un Ubuntu 22.04.1 limpio, es posible que no se encuentre el comando ss y primero se debe instalar la biblioteca iproute2.

sudo apt install iproute2
# Then run the ss command
ss -ltn

En un Ubuntu 22.04.1 limpio, es posible que no se encuentre el comando ss y primero se debe instalar la biblioteca iproute2.

sudo apt install iproute2
# Then run the ss command
ss -ltn

Si su servidor está protegido por un firewall y desea acceder a Tomcat desde el exterior de su red local, debe abrir el puerto 8080.

Utilice el siguiente comando para abrir el puerto necesario:

sudo ufw allow 8080/tcp

Advertencia

Generalmente, cuando ejecuta Tomcat en un entorno de producción, debe utilizar un equilibrador de carga o un proxy inverso.

Es una buena práctica permitir el acceso al puerto 8080 solo desde su red interna.

Usaremos NGINX para proporcionar Apache Tomcat a través del puerto estándar HTTP.

Nota

Alternativamente, puede definir el servicio Tomcat de la siguiente manera, en caso de que desee utilizar systemctl

sudo vim /usr/lib/systemd/system/tomcat9.service
[Unit]
Description=Apache Tomcat Server
After=syslog.target network.target

[Service]
Type=forking
User=tomcat
Group=tomcat

Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=JAVA_OPTS=-Djava.security.egd=file:///dev/urandom
Environment=CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat/latest
Environment=CATALINA_BASE=/opt/tomcat/latest

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh

RestartSec=30
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable tomcat9.service
sudo systemctl start tomcat9.service

Instalar GeoServer en Tomcat

Exterioricemos el GEOSERVER_DATA_DIR y los logs

# Create the target folders
sudo mkdir -p /opt/data
sudo chown -Rf $USER:www-data /opt/data
sudo chmod -Rf 775 /opt/data
sudo mkdir -p /opt/data/logs
sudo chown -Rf $USER:www-data /opt/data/logs
sudo chmod -Rf 775 /opt/data/logs

# Download and extract the default GEOSERVER_DATA_DIR
GS_VERSION=2.24.2
sudo wget "https://artifacts.geonode.org/geoserver/$GS_VERSION/geonode-geoserver-ext-web-app-data.zip" -O data-$GS_VERSION.zip

sudo unzip data-$GS_VERSION.zip -d /opt/data/

sudo mv /opt/data/data/ /opt/data/geoserver_data
sudo chown -Rf tomcat:www-data /opt/data/geoserver_data
sudo chmod -Rf 775 /opt/data/geoserver_data

sudo mkdir -p /opt/data/geoserver_logs
sudo chown -Rf tomcat:www-data /opt/data/geoserver_logs
sudo chmod -Rf 775 /opt/data/geoserver_logs

sudo mkdir -p /opt/data/gwc_cache_dir
sudo chown -Rf tomcat:www-data /opt/data/gwc_cache_dir
sudo chmod -Rf 775 /opt/data/gwc_cache_dir

# Download and install GeoServer
sudo wget "https://artifacts.geonode.org/geoserver/$GS_VERSION/geoserver.war" -O geoserver-$GS_VERSION.war
sudo mv geoserver-$GS_VERSION.war /opt/tomcat/latest/webapps/geoserver.war

Ahora configuremos JAVA_OPTS, es decir, los parámetros para ejecutar el contenedor de servlet, como memoria dinámica, recolector de basura, etc.

sudo sed -i -e 's/xom-\*\.jar/xom-\*\.jar,bcprov\*\.jar/g' /opt/tomcat/latest/conf/catalina.properties

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
echo 'JAVA_HOME='$JAVA_HOME | sudo tee --append /opt/tomcat/latest/bin/setenv.sh
sudo sed -i -e "s/JAVA_OPTS=/#JAVA_OPTS=/g" /opt/tomcat/latest/bin/setenv.sh

echo 'GEOSERVER_DATA_DIR="/opt/data/geoserver_data"' | sudo tee --append /opt/tomcat/latest/bin/setenv.sh
echo 'GEOSERVER_LOG_LOCATION="/opt/data/geoserver_logs/geoserver.log"' | sudo tee --append /opt/tomcat/latest/bin/setenv.sh
echo 'GEOWEBCACHE_CACHE_DIR="/opt/data/gwc_cache_dir"' | sudo tee --append /opt/tomcat/latest/bin/setenv.sh
echo 'GEOFENCE_DIR="$GEOSERVER_DATA_DIR/geofence"' | sudo tee --append /opt/tomcat/latest/bin/setenv.sh
echo 'TIMEZONE="UTC"' | sudo tee --append /opt/tomcat/latest/bin/setenv.sh

echo 'JAVA_OPTS="-server -Djava.awt.headless=true -Dorg.geotools.shapefile.datetime=false -DGS-SHAPEFILE-CHARSET=UTF-8 -XX:+UseParallelGC -XX:ParallelGCThreads=4 -Dfile.encoding=UTF8 -Duser.timezone=$TIMEZONE -Xms512m -Xmx4096m -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -DGEOSERVER_CSRF_DISABLED=true -DPRINT_BASE_URL=http://localhost:8080/geoserver/pdf -DGEOSERVER_DATA_DIR=$GEOSERVER_DATA_DIR -Dgeofence.dir=$GEOFENCE_DIR -DGEOSERVER_LOG_LOCATION=$GEOSERVER_LOG_LOCATION -DGEOWEBCACHE_CACHE_DIR=$GEOWEBCACHE_CACHE_DIR -Dgwc.context.suffix=gwc"' | sudo tee --append /opt/tomcat/latest/bin/setenv.sh

Nota

Después de la ejecución de las declaraciones anteriores, debería poder ver las nuevas opciones escritas en la parte inferior del archivo /opt/tomcat/latest/bin/setenv.sh.

...
# If you run Tomcat on port numbers that are all higher than 1023, then you
# do not need authbind.  It is used for binding Tomcat to lower port numbers.
# (yes/no, default: no)
#AUTHBIND=no
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
GEOSERVER_DATA_DIR="/opt/data/geoserver_data"
GEOSERVER_LOG_LOCATION="/opt/data/geoserver_logs/geoserver.log"
GEOWEBCACHE_CACHE_DIR="/opt/data/gwc_cache_dir"
GEOFENCE_DIR="$GEOSERVER_DATA_DIR/geofence"
TIMEZONE="UTC"
JAVA_OPTS="-server -Djava.awt.headless=true -Dorg.geotools.shapefile.datetime=false -DGS-SHAPEFILE-CHARSET=UTF-8 -XX:+UseParallelGC -XX:ParallelGCThreads=4 -Dfile.encoding=UTF8 -Duser.timezone=$TIMEZONE -Xms512m -Xmx4096m -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -DGEOSERVER_CSRF_DISABLED=true -DPRINT_BASE_URL=http://localhost:8080/geoserver/pdf -DGEOSERVER_DATA_DIR=$GEOSERVER_DATA_DIR -Dgeofence.dir=$GEOFENCE_DIR -DGEOSERVER_LOG_LOCATION=$GEOSERVER_LOG_LOCATION -DGEOWEBCACHE_CACHE_DIR=$GEOWEBCACHE_CACHE_DIR"

Esas opciones pueden actualizarse o cambiarse manualmente en cualquier momento, según sus necesidades.

Advertencia

Las opciones predeterminadas que vamos a agregar al contenedor de servlets suponen que puede reservar al menos 4 GB de RAM para GeoServer (consulte la opción -Xmx4096m).Debe asegurarse de que su máquina tenga suficiente memoria para ejecutar GeoServer y GeoNode, lo que en este caso significa al menos 4GB para GeoServer más al menos 2GB para GeoNode.Un total de al menos 6 GB de RAM disponibles en su máquina.Si no tiene suficiente RAM disponible, puede reducir los valores -Xms512m -Xmx4096m.Considere que con menos RAM disponible, el rendimiento de sus servicios se verá muy afectado.

# Create the Logrotate config
sudo tee /etc/logrotate.d/geoserver <<EOF
/opt/data/geoserver_logs/geoserver.log
/opt/tomcat/apache-tomcat-*/logs/*.log
/opt/tomcat/apache-tomcat-*/logs/*.out
/opt/tomcat/apache-tomcat-*/logs/*.txt
{
  copytruncate
  daily
  rotate 5
  delaycompress
  missingok
  su tomcat tomcat
}
EOF

Configurar la base de datos de geocerca

Antes de iniciar el servicio, se debe configurar Geofence para conectarse a la base de datos PostgreSQL, donde se almacenarán sus reglas.

Advertencia

En versiones anteriores, este paso era opcional y se podía utilizar una base de datos H2 basada en archivos.Esta opción se ha descartado ya que se desaconseja el uso de H2.

Abra el archivo gefence-datasource-ovr.properties para editarlo:

sudo vim /opt/data/geoserver_data/geofence/geofence-datasource-ovr.properties

Y pegue el siguiente código reemplazando los marcadores de posición con los archivos requeridos

ggeofenceVendorAdapter.databasePlatform=org.hibernate.spatial.dialect.postgis.PostgisDialect
geofenceDataSource.driverClassName=org.postgresql.Driver
geofenceDataSource.url=jdbc:postgresql://localhost:5432/geonode_data
geofenceDataSource.username=geonode
geofenceDataSource.password=geonode
geofenceEntityManagerFactory.jpaPropertyMap[hibernate.default_schema]=public

geofenceDataSource.testOnBorrow=true
geofenceDataSource.validationQuery=SELECT 1
geofenceEntityManagerFactory.jpaPropertyMap[hibernate.testOnBorrow]=true
geofenceEntityManagerFactory.jpaPropertyMap[hibernate.validationQuery]=SELECT 1

geofenceDataSource.removeAbandoned=true
geofenceDataSource.removeAbandonedTimeout=60
geofenceDataSource.connectionProperties=ApplicationName=GeoFence;

Para que los cambios sean efectivos, deberá reiniciar el contenedor de servlets.

# Restart the server
sudo systemctl restart tomcat9.service

# Follow the startup logs
sudo tail -F -n 300 /opt/data/geoserver_logs/geoserver.log

Si puedes ver en los logs algo parecido a esto, sin errores

...
2019-05-31 10:06:34,190 INFO [geoserver.wps] - Found 5 bindable processes in GeoServer specific processes
2019-05-31 10:06:34,281 INFO [geoserver.wps] - Found 89 bindable processes in Deprecated processes
2019-05-31 10:06:34,298 INFO [geoserver.wps] - Found 31 bindable processes in Vector processes
2019-05-31 10:06:34,307 INFO [geoserver.wps] - Found 48 bindable processes in Geometry processes
2019-05-31 10:06:34,307 INFO [geoserver.wps] - Found 1 bindable processes in PolygonLabelProcess
2019-05-31 10:06:34,311 INFO [geoserver.wps] - Blacklisting process ras:ConvolveCoverage as the input kernel of type class javax.media.jai.KernelJAI cannot be handled
2019-05-31 10:06:34,319 INFO [geoserver.wps] - Blacklisting process ras:RasterZonalStatistics2 as the input zones of type class java.lang.Object cannot be handled
2019-05-31 10:06:34,320 INFO [geoserver.wps] - Blacklisting process ras:RasterZonalStatistics2 as the input nodata of type class it.geosolutions.jaiext.range.Range cannot be handled
2019-05-31 10:06:34,320 INFO [geoserver.wps] - Blacklisting process ras:RasterZonalStatistics2 as the input rangeData of type class java.lang.Object cannot be handled
2019-05-31 10:06:34,320 INFO [geoserver.wps] - Blacklisting process ras:RasterZonalStatistics2 as the output zonal statistics of type interface java.util.List cannot be handled
2019-05-31 10:06:34,321 INFO [geoserver.wps] - Found 18 bindable processes in Raster processes
2019-05-31 10:06:34,917 INFO [ows.OWSHandlerMapping] - Mapped URL path [/TestWfsPost] onto handler 'wfsTestServlet'
2019-05-31 10:06:34,918 INFO [ows.OWSHandlerMapping] - Mapped URL path [/wfs/*] onto handler 'dispatcher'
2019-05-31 10:06:34,918 INFO [ows.OWSHandlerMapping] - Mapped URL path [/wfs] onto handler 'dispatcher'
2019-05-31 10:06:42,237 INFO [geoserver.security] - Start reloading user/groups for service named default
2019-05-31 10:06:42,241 INFO [geoserver.security] - Reloading user/groups successful for service named default
2019-05-31 10:06:42,357 WARN [auth.GeoFenceAuthenticationProvider] - INIT FROM CONFIG
2019-05-31 10:06:42,494 INFO [geoserver.security] - AuthenticationCache Initialized with 1000 Max Entries, 300 seconds idle time, 600 seconds time to live and 3 concurrency level
2019-05-31 10:06:42,495 INFO [geoserver.security] - AuthenticationCache Eviction Task created to run every 600 seconds
2019-05-31 10:06:42,506 INFO [config.GeoserverXMLResourceProvider] - Found configuration file in /opt/data/gwc_cache_dir
2019-05-31 10:06:42,516 INFO [config.GeoserverXMLResourceProvider] - Found configuration file in /opt/data/gwc_cache_dir
2019-05-31 10:06:42,542 INFO [config.XMLConfiguration] - Wrote configuration to /opt/data/gwc_cache_dir
2019-05-31 10:06:42,547 INFO [geoserver.importer] - Enabling import store: memory

Su GeoServer debería estar funcionando a las

http://localhost:8080/geoserver/

Advertencia

En caso de errores o de que no se cree el archivo geoserver.log, verifique los registros de Catalina para intentar comprender qué sucedió.

sudo less /opt/tomcat/latest/logs/catalina.out

5. Servidor web

Hasta ahora hemos visto cómo iniciar GeoNode en modo DEBUG desde la línea de comando, a través de las utilidades paver.Por supuesto, esta no es la mejor manera de empezar.Además, necesitará un servidor HTTPD dedicado que se ejecute en el puerto 80 si desea exponer su servidor al mundo.

In this section we will see:

  1. Cómo configurar el servidor HTTPD NGINX para alojar GeoNode y GeoServer.En la configuración inicial seguiremos ejecutando los servicios en http://localhost

  2. Actualice la configuración para vincular GeoNode y GeoServer a la base de datos PostgreSQL.

  3. Actualice la configuración para actualizar los servicios GeoNode y GeoServer que se ejecutan en una IP pública o nombre de host.

  4. Instale y habilite la conexión segura HTTPS a través del proveedor Let's Encrypt.

Instalar y configurar NGINX

Advertencia

Parece posible que NGINX funcione con Python 3.6 y no con 3.8.

# Install the services
sudo apt install -y nginx uwsgi uwsgi-plugin-python3

Sirviendo {“geonode”, “geoserver”} a través de NGINX

# Create the UWSGI config
sudo vim /opt/geonode/uwsgi.ini
[uwsgi]
# uwsgi-socket = 0.0.0.0:8000
http-socket = 0.0.0.0:8000
logto = /var/log/geonode.log
# pidfile = /tmp/geonode.pid

chdir = /opt/geonode/
module = geonode.wsgi:application

strict = false
master = true
enable-threads = true
vacuum = true                        ; Delete sockets during shutdown
single-interpreter = true
die-on-term = true                   ; Shutdown when receiving SIGTERM (default is respawn)
need-app = true
thunder-lock = true

touch-reload = /opt/geonode/geonode/wsgi.py
buffer-size = 32768

harakiri = 600                       ; forcefully kill workers after 600 seconds
py-callos-afterfork = true           ; allow workers to trap signals

max-requests = 1000                  ; Restart workers after this many requests
max-worker-lifetime = 3600           ; Restart workers after this many seconds
reload-on-rss = 2048                 ; Restart workers after this much resident memory
worker-reload-mercy = 60             ; How long to wait before forcefully killing workers

cheaper-algo = busyness
processes = 128                      ; Maximum number of workers allowed
cheaper = 8                          ; Minimum number of workers allowed
cheaper-initial = 16                 ; Workers created at startup
cheaper-overload = 1                 ; Length of a cycle in seconds
cheaper-step = 16                    ; How many workers to spawn at a time

cheaper-busyness-multiplier = 30     ; How many cycles to wait before killing workers
cheaper-busyness-min = 20            ; Below this threshold, kill workers (if stable for multiplier cycles)
cheaper-busyness-max = 70            ; Above this threshold, spawn new workers
cheaper-busyness-backlog-alert = 16  ; Spawn emergency workers if more than this many requests are waiting in the queue
cheaper-busyness-backlog-step = 2    ; How many emergency workers to create if there are too many requests in the queue

# daemonize = /var/log/uwsgi/geonode.log
# cron = -1 -1 -1 -1 -1 /usr/local/bin/python /usr/src/geonode/manage.py collect_metrics -n
# Create the UWSGI system service
sudo vim /etc/systemd/system/geonode-uwsgi.service

Advertencia

!¡IMPORTANTE!

¡Cambie la línea ExecStart=... a continuación con su directorio de inicio de usuario actual!

por ejemplo: Si el usuario es geosolutions entonces ExecStart=/home/geosolutions/.virtualenvs/geonode/bin/uwsgi --ini /opt/geonode/uwsgi.ini

[Unit]
Description=GeoNode UWSGI Service
After=rc-local.service

[Service]
EnvironmentFile=/opt/geonode/.env
User=geosolutions
Group=geosolutions
PIDFile=/run/geonode-uwsgi.pid
ExecStart=/home/geosolutions/.virtualenvs/geonode/bin/uwsgi --ini /opt/geonode/uwsgi.ini
PrivateTmp=true
Type=simple
Restart=always
KillMode=process
TimeoutSec=900

[Install]
WantedBy=multi-user.target
# Enable the UWSGI service
sudo systemctl daemon-reload
sudo systemctl start geonode-uwsgi.service
sudo systemctl status geonode-uwsgi.service
sudo systemctl enable geonode-uwsgi.service
# Create the Logrotate config
sudo tee /etc/logrotate.d/uwsgi-geonode <<EOF
"/var/log/geonode.log" {
  copytruncate
  daily
  rotate 5
  delaycompress
  missingok
  notifempty
  su root root
}
EOF
# Backup the original NGINX config
sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig

# Create the GeoNode Default NGINX config
sudo vim /etc/nginx/nginx.conf
# Make sure your nginx.config matches the following one
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
  worker_connections 768;
  # multi_accept on;
}

http {
  ##
  # Basic Settings
  ##

  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;
  # server_tokens off;

  # server_names_hash_bucket_size 64;
  # server_name_in_redirect off;

  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  ##
  # SSL Settings
  ##

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
  ssl_prefer_server_ciphers on;

  ##
  # Logging Settings
  ##

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  ##
  # Gzip Settings
  ##

  gzip on;
  gzip_vary on;
  gzip_proxied any;
  gzip_http_version 1.1;
  gzip_disable "MSIE [1-6]\.";
  gzip_buffers 16 8k;
  gzip_min_length 1100;
  gzip_comp_level 6;
  gzip_types video/mp4 text/plain application/javascript application/x-javascript text/javascript text/xml text/css image/jpeg;

  ##
  # Virtual Host Configs
  ##

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
}
# Remove the Default NGINX config
sudo rm /etc/nginx/sites-enabled/default

# Create the GeoNode App NGINX config
sudo vim /etc/nginx/sites-available/geonode
uwsgi_intercept_errors on;

upstream geoserver_proxy {
  server localhost:8080;
}

# Expires map
map $sent_http_content_type $expires {
  default                    off;
  text/html                  epoch;
  text/css                   max;
  application/javascript     max;
  ~image/                    max;
}

server {
  listen 80 default_server;
  listen [::]:80 default_server;

  root /var/www/html;
  index index.html index.htm index.nginx-debian.html;

  server_name _;

  charset utf-8;

  etag on;
  expires $expires;
  proxy_read_timeout 600s;
  # set client body size to 2M #
  client_max_body_size 50000M;

  location / {
    etag off;
    proxy_pass http://127.0.0.1:8000;
    include proxy_params;
  }

  location /static/ {
    alias /opt/geonode/geonode/static_root/;
  }

  location /uploaded/ {
    alias /opt/geonode/geonode/uploaded/;
  }

  location /geoserver {
    proxy_pass http://geoserver_proxy;
    include proxy_params;
  }
}
# Prepare the uploaded folder
sudo mkdir -p /opt/geonode/geonode/uploaded
sudo chown -Rf tomcat:www-data /opt/geonode/geonode/uploaded
sudo chmod -Rf 777 /opt/geonode/geonode/uploaded/

sudo touch /opt/geonode/geonode/.celery_results
sudo chmod 777 /opt/geonode/geonode/.celery_results

# Enable GeoNode NGINX config
sudo ln -s /etc/nginx/sites-available/geonode /etc/nginx/sites-enabled/geonode

# Restart the services
sudo service tomcat9 restart
sudo service nginx restart

Actualice la configuración para utilizar la base de datos PostgreSQL

Advertencia

Asegúrese de haber instalado y configurado la base de datos como se explica en las secciones anteriores.

Nota

En lugar de utilizar local_settings.py, puede controlar el comportamiento del GeoNode a través de las variables .env*;vea como instancia el archivo ./paver_dev.sh o ./manage_dev.sh para entender cómo usarlos.En ese caso no es necesario crear el archivo local_settings.py;puedes quedarte con el decault, que tomará los valores del ENV.Tendemos a preferir este método en un sistema de producción/dockerizado.

workon geonode
cd /opt/geonode

# Initialize GeoNode
chmod +x *.sh
./paver_local.sh reset
./paver_local.sh setup
./paver_local.sh sync
./manage_local.sh collectstatic --noinput
sudo chmod -Rf 777 geonode/static_root/ geonode/uploaded/

Antes de finalizar la configuración necesitaremos actualizar la configuración de UWSGI

Reinicie UWSGI y actualice OAuth2 usando el nuevo geonode.settings

# As superuser
sudo su

# Restart Tomcat
service tomcat9 restart

# Restart UWSGI
pkill -9 -f uwsgi

# Update the GeoNode ip or hostname
cd /opt/geonode

# This must be done the first time only
cp package/support/geonode.binary /usr/bin/geonode
cp package/support/geonode.updateip /usr/bin/geonode_updateip
chmod +x /usr/bin/geonode
chmod +x /usr/bin/geonode_updateip

# Refresh GeoNode and GeoServer OAuth2 settings
source .env_local
PYTHONWARNINGS=ignore VIRTUAL_ENV=$VIRTUAL_ENV DJANGO_SETTINGS_MODULE=geonode.settings GEONODE_ETC=/opt/geonode/geonode GEOSERVER_DATA_DIR=/opt/data/geoserver_data TOMCAT_SERVICE="service tomcat9" APACHE_SERVICE="service nginx" geonode_updateip -p localhost

# Go back to standard user
exit

Compruebe si hay algún error con

sudo tail -F -n 300 /var/log/geonode.log

Vuelva a cargar la configuración de UWSGI con

touch /opt/geonode/geonode/wsgi.py

6. Actualice la configuración para actualizar los servicios GeoNode y GeoServer que se ejecutan en una IP pública o nombre de host

Advertencia

Antes de exponer sus servicios a Internet, asegúrese de que su sistema esté reforzado y lo suficientemente seguro.Consulte la sección de documentación específica para más detalles.

Supongamos que desea ejecutar sus servicios en una IP o dominio público, p.``www.ejemplo.org``.Deberá actualizar ligeramente sus servicios para reflejar el nuevo nombre del servidor.

En concreto los pasos a seguir son:

  1. Actualice la configuración de NGINX para servir el nuevo nombre de dominio.

sudo vim /etc/nginx/sites-enabled/geonode

# Update the 'server_name' directive
server_name example.org www.example.org;

# Restart the service
sudo service nginx restart
  1. Update .env with the new domain name.

vim /opt/geonode/.env

# Change everywhere 'localhost' to the new hostname
:%s/localhost/www.example.org/g
:wq

# Restart the service
sudo systemctl restart geonode-uwsgi
  1. Actualice la configuración de OAuth2 para acceder al nuevo nombre de host.

workon geonode
sudo su
cd /opt/geonode

# Update the GeoNode ip or hostname
PYTHONWARNINGS=ignore VIRTUAL_ENV=$VIRTUAL_ENV DJANGO_SETTINGS_MODULE=geonode.settings GEONODE_ETC=/opt/geonode/geonode GEOSERVER_DATA_DIR=/opt/data/geoserver_data TOMCAT_SERVICE="service tomcat9" APACHE_SERVICE="service nginx" geonode_updateip -l localhost -p www.example.org

exit
  1. Actualice los enlaces GeoNode existentes para acceder al nuevo nombre de host.

workon geonode

# To avoid spatialite conflict if using postgresql
vim $VIRTUAL_ENV/bin/postactivate

# Add these to make available. Change user, password and server information to yours
export DATABASE_URL='postgresql://<postgresqluser>:<postgresqlpass>@localhost:5432/geonode'

# Close virtual environment and aopen it again to update variables
deactivate

workon geonode
cd /opt/geonode

# Update the GeoNode ip or hostname
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py migrate_baseurl --source-address=http://localhost --target-address=http://www.example.org

Nota

Si al final obtiene un error de «puerta de enlace incorrecta» al acceder a su sitio de geonode, verifique el registro de uwsgi con sudo tail -f /var/log/geonode.log y si hay un error relacionado con el puerto 5432 verifique la configuración de escucha del servidor postgresql y permita el tráfico entrante desde el geonode.

7. Instale y habilite la conexión segura HTTPS a través del proveedor Let’s Encrypt.

# Install Let's Encrypt Certbot
# sudo add-apt-repository ppa:certbot/certbot  # for ubuntu 18.04 and lower
sudo apt update -y; sudo apt install python3-certbot-nginx -y

# Reload NGINX config and make sure the firewall denies access to HTTP
sudo systemctl reload nginx
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

# Create and dump the Let's Encrypt Certificates
sudo certbot --nginx -d example.org -d www.example.org
# ...choose the redirect option when asked for

A continuación, los pasos a realizar son:

  1. Actualice GeoNode OAuth2 Redirect URIs en consecuencia.

Desde el Panel de administración de GeoNode, vaya a Inicio Django/GeoNode OAuth Toolkit Aplicaciones GeoServer

../../../_images/ubuntu-https-001.png

Redireccionar URI

  1. Actualice GeoServer Proxy Base URL en consecuencia.

From the GeoServer Admin GUI go to About & Status > Global

../../../_images/ubuntu-https-002.png

URL base del proxy

  1. Actualice GeoServer Role Base URL en consecuencia.

Desde la GUI de administración de GeoServer, vaya a Seguridad > Usuarios, grupos, roles > servicio de rol REST del geonode

../../../_images/ubuntu-https-003.png

URL base de funciones

  1. Actualice los GeoServer OAuth2 Service Parameters en consecuencia.

Desde la GUI de administración de GeoServer, vaya a Seguridad > Autenticación > Filtros de autenticación > geonode-oauth2

../../../_images/ubuntu-https-004.png

Parámetros del servicio OAuth2

  1. Actualice el archivo .env

vim /opt/geonode/.env

# Change everywhere 'http' to 'https'
%s/http/https/g

# Restart the service
sudo systemctl restart geonode-uwsgi

8. Habilitación de tareas totalmente asincrónicas

Instale y configure «rabbitmq-server»

Ver también

Una publicación de blog de marzo de 2021 de RabbitMQ proporciona instalaciones alternativas para otros sistemas.

Instalar el servidor Rabbitmq

Referencia: lindevs.com/install-rabbitmq-on-ubuntu/ & www.rabbitmq.com/install-debian.html/

sudo apt install curl -y

## Import GPG Key
sudo apt update
sudo apt install curl software-properties-common apt-transport-https lsb-release
echo 'deb [signed-by=/etc/apt/keyrings/erlang.gpg] http://binaries2.erlang-solutions.com/ubuntu/ jammy-esl-erlang-26 contrib' | sudo tee /etc/apt/sources.list.d/erlang.list
curl -fsSL https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | sudo gpg --dearmor -o /etc/apt/keyrings/erlang.gpg

## Add Erlang Repository to Ubuntu
sudo apt update
sudo apt install esl-erlang

## Add RabbitMQ Repository to Ubuntu
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash

## Install RabbitMQ Server
sudo apt install rabbitmq-server

# check the status (it should already be running)
sudo systemctl status rabbitmq-server

# check the service is enabled (it should already be enabled)
sudo systemctl is-enabled rabbitmq-server.service

# enable the web frontend and allow access through firewall
# view this interface at http://<your ip>:15672
sudo rabbitmq-plugins enable rabbitmq_management
sudo ufw allow proto tcp from any to any port 5672,15672

Crear usuario administrador

Este es el usuario que GeoNode utilizará para comunicarse con el servidor Rabbitmq.

sudo rabbitmqctl delete_user guest
sudo rabbitmqctl add_user admin <your_rabbitmq_admin_password_here>
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl add_vhost /localhost
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
sudo rabbitmqctl set_permissions -p /localhost admin ".*" ".*" ".*"

Administrando RabbitMQ

Puedes gestionar el servicio Rabbitmq-server como cualquier otro servicio:

sudo systemctl stop rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl restart rabbitmq-server

Puede administrar el nodo del servidor Rabbitmq con rabbitmqctl.Por ejemplo, para restablecer completamente el servidor, utilice estos comandos:

sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl start_app

Después del reinicio, necesitarás volver a crear el usuario admin (ver arriba).

Demonizar y configurar Celery

Crear la unidad Systemd

sudo vim /etc/systemd/system/celery.service
[Unit]
Description=Celery
After=network.target

[Service]
Type=simple
# the specific user that our service will run as
EnvironmentFile=/opt/geonode/.env
User=geosolutions
Group=geosolutions
# another option for an even more restricted service is
# DynamicUser=yes
# see http://0pointer.net/blog/dynamic-users-with-systemd.html
RuntimeDirectory=celery
WorkingDirectory=/opt/geonode
ExecStart=bash -c 'source /home/geosolutions/.virtualenvs/geonode/bin/activate && /opt/geonode/celery-cmd'
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always
TimeoutSec=900
TimeoutStopSec=60
PrivateTmp=true

[Install]
WantedBy=multi-user.target
# Create the Logrotate config
sudo tee /etc/logrotate.d/celery <<EOF
"/var/log/celery.log" {
  copytruncate
  daily
  rotate 5
  delaycompress
  missingok
  notifempty
  su root root
}
EOF

Administrar Celery

Reiniciar el Celery

# Restart Celery
sudo systemctl restart celery

# Kill old celery workers (if any)
sudo pkill -f celery

Inspeccionar los registros

# Check the celery service status
sudo systemctl status celery

# Check the celery logs
sudo tail -F -n 300 /var/log/celery.log

Solución de problemas

El apio puede fallar durante el inicio con este error:

looking for plugins in '/usr/lib64/sasl2', failed to open directory, error: No such file or directory

La solución es un enlace simbólico en esa ruta.

ln -sfn /usr/lib/x86_64-linux-gnu/sasl2/ /usr/lib64/sasl2

Instalar Memcached

sudo apt install memcached

sudo systemctl start memcached
sudo systemctl enable memcached

sudo systemctl restart celery
sudo systemctl status celery

Docker

En esta sección, enumeraremos los pasajes necesarios para implementar un GeoNode estándar con Docker. Puede seguir las instrucciones en Docker Setup for Ubuntu (22.04) para preparar un servidor Ubuntu 22.04 con Docker y Docker Compose.

1. Clonar GeoNode

# Let's create the GeoNode core base folder and clone it
sudo mkdir -p /opt/geonode/
sudo usermod -a -G www-data geonode
sudo chown -Rf geonode:www-data /opt/geonode/
sudo chmod -Rf 775 /opt/geonode/

# Clone the GeoNode source code on /opt/geonode
cd /opt
git clone https://github.com/GeoNode/geonode.git

2. Prepare el archivo .env

Siga las instrucciones en Docker crear archivo env

3. Construir y ejecutar

Siga las instrucciones en Docker build and run

Pruebe la instancia y siga los registros.

Si ejecuta los contenedores demonizados (con la opción -d), puede ejecutar comandos específicos de Docker para seguir los registros de inicio e inicialización o ingresar la imagen shell y verificar los registros de GeoNode.

Para seguir los registros de inicio e inicialización, deberá ejecutar el siguiente comando desde la carpeta del repositorio

cd /opt/geonode
docker logs -f django4geonode

Alternativamente:

cd /opt/geonode
docker-compose logs -f django

Debería poder ver varios mensajes de inicialización.Una vez que el contenedor esté en funcionamiento, verá las siguientes declaraciones

...
789 static files copied to '/mnt/volumes/statics/static'.
static data refreshed
Executing UWSGI server uwsgi --ini /usr/src/app/uwsgi.ini for Production
[uWSGI] getting INI configuration from /usr/src/app/uwsgi.ini

Para salir simplemente presiona CTRL+C.

Este mensaje significa que los contenedores GeoNode se han iniciado.Al navegar a http://localhost/ se mostrará la página de inicio de GeoNode.Debería poder iniciar sesión correctamente con el usuario administrador predeterminado (admin / admin) y comenzar a usarlo de inmediato.

Con Docker también es posible ejecutar un shell en el contenedor y seguir los registros exactamente igual que lo implementó en un host físico.Para lograr esta carrera

docker exec -it django4geonode /bin/bash

# Once logged in the GeoNode image, follow the logs by executing
tail -F -n 300 /var/log/geonode.log

Alternativamente:

docker-compose exec django /bin/bash

Para salir, simplemente presione CTRL+C y salir para regresar al host.

Anule las variables ENV para implementar en una IP o dominio público

Si desea iniciar los contenedores en una IP pública o dominio, digamos www.example.org, puede seguir las instrucciones en Implementar en producción

variables para personalizar la instancia de GeoNode.Consulte la sección Configuración de GeoNode para obtener una lista de las opciones disponibles.

Elimine todos los datos y lleve su implementación de GeoNode en ejecución a la etapa inicial

Este procedimiento le permite detener todos los contenedores y restablecer todos los datos con la eliminación de todos los volúmenes.

cd /opt/geonode

# stop containers and remove volumes
docker-compose down -v

Deshágase de las imágenes y volúmenes antiguos de Docker (restablezca el entorno por completo)

Nota

Para obtener más detalles sobre los comandos de Docker, consulte la documentación oficial de Docker.

Es posible permitir que Docker muestre qué contenedores se están ejecutando actualmente (agregue -a para todos los contenedores, también los detenidos)

# Show the currently running containers
docker ps

CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS                   PORTS                                                                      NAMES
4729b3dd1de7   geonode/geonode:4.0        "/usr/src/geonode/en…"   29 minutes ago   Up 5 minutes             8000/tcp                                                                   celery4geonode
418da5579b1a   geonode/geonode:4.0        "/usr/src/geonode/en…"   29 minutes ago   Up 5 minutes (healthy)   8000/tcp                                                                   django4geonode
d6b043f16526   geonode/letsencrypt:4.0    "./docker-entrypoint…"   29 minutes ago   Up 9 seconds             80/tcp, 443/tcp                                                            letsencrypt4geonode
c77e1fa3ab2b   geonode/geoserver:2.19.6   "/usr/local/tomcat/t…"   29 minutes ago   Up 5 minutes (healthy)   8080/tcp                                                                   geoserver4geonode
a971cedfd788   rabbitmq:3.7-alpine        "docker-entrypoint.s…"   29 minutes ago   Up 5 minutes             4369/tcp, 5671-5672/tcp, 25672/tcp                                         rabbitmq4geonode
a2e4c69cb80f   geonode/nginx:4.0          "/docker-entrypoint.…"   29 minutes ago   Up 5 minutes             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443-    >443/tcp, :::443->443/tcp   nginx4geonode
d355d34cac4b   geonode/postgis:13         "docker-entrypoint.s…"   29 minutes ago   Up 5 minutes             5432/tcp                                                                   db4geonode

Detenga todos los contenedores ejecutando

docker-compose stop

Forzar la eliminación de todos los contenedores ejecutando

docker kill $(docker ps -q)

Si desea limpiar todos los contenedores e imágenes, sin eliminar los volúmenes estáticos (es decir, la DB y el GeoServer catalog), ejecute los siguientes comandos

# Remove all containers
docker rm $(docker ps -a -q)

# Remove all docker images
docker rmi $(docker images -q)

# Prune the old images
docker system prune -a

Si desea eliminar un volumen también

# List of the running volumes
docker volume ls

# Remove the GeoServer catalog by its name
docker volume rm -f geonode-gsdatadir

# Remove all dangling docker volumes
docker volume rm $(docker volume ls -qf dangling=true)

# update all images, should be run regularly to fetch published updates
for i in $(docker images| awk 'NR>1{print $1":"$2}'| grep -v '<none>'); do docker pull "$i" ;done