Un tile server de Paraguay
Categoría: Servidores
Este post es técnico, pero muy útil si quieren instalar un servidor de tiles con datos OSM de Paraguay.
Obs:
- Se utiliza Ubuntu Server 18.04.4 LTS de 64 bits.
- Instalamos y usamos:
- PostgreSQL 10 y PostGIS 2.4
- Mapnik 3
- Node.js 10
- Apache2
Hardware usado:
- 4 Núcleos.
- 4 GB de memoria RAM.
- 30 GB de disco duro.
Consiste en 5 componentes:
- Mod_tile
- Renderd
- Mapnik
- osm2pgsql
- Base de datos PostgreSQL/PostGIS
Entramos a la terminal y tecleamos lo siguiente:
sudo apt update && sudo apt install libboost-all-dev git-core tar unzip wget bzip2 build-essential autoconf libtool libxml2-dev libgeos-dev libgeos++-dev libpq-dev libbz2-dev libproj-dev munin-node munin libprotobuf-c0-dev protobuf-c-compiler libfreetype6-dev libtiff5-dev libicu-dev libgdal-dev libcairo-dev libcairomm-1.0-dev apache2 apache2-dev libagg-dev liblua5.2-dev ttf-unifont lua5.1 liblua5.1-dev libgeotiff-epsg
Instalar PostgreSQL/PostGIS
sudo apt-get install postgresql postgresql-contrib postgis postgresql-10-postgis-2.4 postgresql-10-postgis-scripts
sudo apt-get autoremove && sudo apt clean && sudo apt autoclean
Crear base de datos
sudo -u postgres -i
createuser renderaccount
createdb -E UTF8 -O renderaccount gis
psql
\c gis
CREATE EXTENSION postgis;
CREATE EXTENSION hstore;
ALTER TABLE geometry_columns OWNER TO renderaccount;
ALTER TABLE spatial_ref_sys OWNER TO renderaccount;
ALTER user postgres WITH password 'passSeguro123456PY#';
\q
exit
Crear usuario
sudo useradd -m renderaccount
sudo passwd renderaccount
Instalar osm2pgsql
sudo apt install make cmake g++ libboost-dev libboost-system-dev libboost-filesystem-dev libexpat1-dev zlib1g-dev libbz2-dev libpq-dev libgeos-dev libgeos++-dev libproj-dev lua5.2 liblua5.2-dev
sudo apt-get autoremove && sudo apt clean && sudo apt autoclean
mkdir ~/repositoriosGIT
cd ~/repositoriosGIT
git clone git://github.com/openstreetmap/osm2pgsql.git
cd osm2pgsql
mkdir build && cd build
cmake ..
make -j4
sudo make install
Instalar Mapnik library
sudo apt install autoconf apache2-dev libtool libxml2-dev libbz2-dev libgeos-dev libgeos++-dev libproj-dev gdal-bin libmapnik-dev mapnik-utils python-mapnik
sudo apt-get autoremove && sudo apt clean && sudo apt autoclean
Verificar que mapnik este instalado correctamente. Tecleamos en la terminal lo siguiente:
python
import mapnik
Si no sale algún error es porque esta instalado correctamente. Volvemos a teclear en la terminal:
quit()
Instalar el mod_tile
cd ~/repositoriosGIT
git clone git://github.com/openstreetmap/mod_tile.git
cd mod_tile
./autogen.sh
./configure
make -j4
sudo make install
sudo make install-mod_tile
sudo ldconfig
Instalar Node.js
cd ~
sudo apt install curl
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install -y nodejs
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
sudo apt update
sudo apt-get autoremove && sudo apt clean && sudo apt autoclean
Carto:
Entramos a la terminal y tecleamos lo siguiente:
cd ~/repositoriosGIT
git clone git://github.com/gravitystorm/openstreetmap-carto.git
cd openstreetmap-carto
sudo npm install -g carto
carto -v
Sale por pantalla:
1.2.0
Volvemos a teclear en la terminal:
carto project.mml > mapnik.xml
Cargar datos al servidor
El país es Paraguay, pero ya depende de vos lo que queres importar.
Volvemos a teclear en la terminal:
cd ~
mkdir data
cd data
sudo wget -c http://download.geofabrik.de/south-america/paraguay-latest.osm.pbf
Importar datos OSM a la base de datos
sudo osm2pgsql -d gis -U postgres -W -P 5432 -H localhost --create --slim -G --hstore --tag-transform-script ~/repositoriosGIT/openstreetmap-carto/openstreetmap-carto.lua -C 3000 --number-processes 4 -S ~/repositoriosGIT/openstreetmap-carto/openstreetmap-carto.style ~/data/paraguay-latest.osm.pbf
Shapes
cd ~/repositoriosGIT/openstreetmap-carto/
scripts/get-shapefiles.py
Fuentes
sudo apt install fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted ttf-unifont
sudo apt-get autoremove && sudo apt clean && sudo apt autoclean
Configuración del servidor web
Volvemos a entrar a l terminal y tecleamos lo siguiente:
sudo nano /usr/local/etc/renderd.conf
Cambiar lo siguiente:
plugins_dir=/usr/lib/mapnik/3.0/input
XML=/home/proyectosbeta/repositoriosGIT/openstreetmap-carto/mapnik.xml
URI=/hot/
Ahora guardamos los cambios (control + o) y luego cerramos el editor (control + x).
Configurar Apache
Volvemos a teclear en la terminal:
sudo mkdir /var/lib/mod_tile
sudo chown renderaccount /var/lib/mod_tile
sudo mkdir /var/run/renderd
sudo chown renderaccount /var/run/renderd
Configurar mod_tile
Volvemos a entrar a la terminal y tecleamos lo siguiente:
sudo nano /etc/apache2/conf-available/mod_tile.conf
Agregamos la siguiente linea:
LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so
Ahora guardamos los cambios (control + o) y luego cerramos el editor (control + x). Volvemos a teclear en la terminal:
sudo a2enconf mod_tile
Volvemos a teclear en la terminal:
sudo nano /etc/apache2/sites-available/000-default.conf
Agregamos entre «ServerAdmin» and «DocumentRoot»:
LoadTileConfigFile /usr/local/etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
# Timeout before giving up for a tile to be rendered
ModTileRequestTimeout 0
# Timeout before giving up for a tile to be rendered that is otherwise missing
ModTileMissingRequestTimeout 30
Ahora guardamos los cambios (control + o) y luego cerramos el editor (control + x). Volvemos a teclear en la terminal:
sudo service apache2 reload
sudo service apache2 reload
Permisos de base de datos
sudo su
su postgres
psql
ALTER DATABASE gis OWNER TO renderaccount;
GRANT ALL PRIVILEGES ON DATABASE gis TO renderaccount;
\c gis
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO renderaccount;
ALTER TABLE geometry_columns OWNER TO renderaccount;
\q
exit
exit
Cambiamos de usuario
su renderaccount
Correr el rendered por primera vez:
renderd -f -c /usr/local/etc/renderd.conf
Entramos a nuestro navegador y tecleamos en la barra de direcciones:
http://192.168.1.204/hot/0/0/0.png

Usar en tu app de mapas:
http://192.168.1.204/hot/{z}/{x}/{y}.png


2 Comments
Patronews
25 abril 2020 en 6:53 pmMuchas gracias por todo el aporte en cuanto a OSM, clases totalmente magistrales..
admin
26 abril 2020 en 1:48 amPor nada Patronews. Se tiene que mostrar las ventajas del proyecto OSM para que visualicen el gran potencial.