VERTEP Вход

Подготовка загрузки данных для сервера Tegola.

14 сентября 2021 г. 0:37,

Tegola это сервер векторных тайлов.

Задача: отобразить на сайте векторную карту OSM.

Подготовка выполнялась по мануалу

Условия:

  • Требуемая версия ОС: Ubuntu 20 (на 18 не смог установить требуемую версию GDAL (нужен GDAL >= 3.0.2))
  • Требуемая версия БД: Postgresql 13 (иначе могут быть проблемы с пакетом локализации osml10n)

Конфигурация "железа"

lscpu

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              24
On-line CPU(s) list: 0-23
Thread(s) per core:  2
Core(s) per socket:  12
Socket(s):           1
NUMA node(s):        1
Vendor ID:           AuthenticAMD
CPU family:          23
Model:               113
Model name:          AMD Ryzen 9 3900 12-Core Processor
Stepping:            0
CPU MHz:             2196.345
CPU max MHz:         3100.0000
CPU min MHz:         2200.0000
BogoMIPS:            6188.28
Virtualization:      AMD-V
L1d cache:           32K
L1i cache:           32K
L2 cache:            512K
L3 cache:            16384K
NUMA node0 CPU(s):   0-23

vmstat -s

132001200 K total memory

lsb_release -a

Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

Устновка docker для OpenMapTiles toolchain

sudo apt-get update
sudo apt-get install docker.io docker-compose
sudo usermod -aG docker <your username>

После этого необходимо перелогиниться.

Установка Go (для imposm3)

sudo snap install go --classic

Установка imposm3

wget https://github.com/omniscale/imposm3/releases/download/v0.11.1/imposm-0.11.1-linux-x86-64.tar.gz
sudo mkdir /opt/imposm3
sudo tar -C "/opt/imposm3" -xvzf imposm-0.11.1-linux-x86-64.tar.gz
sudo mv /opt/imposm3/imposm-0.11.1-linux-x86-64/* /opt/imposm3
sudo rmdir /opt/imposm3/imposm-0.11.1-linux-x86-64

Установка GDAL/OGR (бинарная версия)

sudo apt install software-properties-common
sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt-get update
sudo apt-get install gdal-bin

Проверка:

ogrinfo --version
GDAL 3.2.1, released 2020/12/29

Установка postgresql 13

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" |sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt update
sudo apt -y install postgresql-13 postgresql-server-dev-13 postgresql-contrib-13 libpq-dev postgresql-13-hypopg
pg_ctlcluster 13 main start

Настройка postgresql

sudo nano /etc/postgresql/13/main/postgresql.conf

Добавить в конец файла:

# Add settings for extensions here
listen_addresses = '*'                  # what IP address(es) to listen on;
max_connections = 200                   # (change requires restart)
# optimize loading data:
shared_buffers = 1GB
work_mem = 50MB
maintenance_work_mem = 10GB
autovacuum_work_mem = 2GB
wal_level = minimal
checkpoint_timeout = 60min
max_wal_size = 10GB
checkpoint_completion_target = 0.9
max_wal_senders = 0
random_page_cost = 1.0
# remove after data load:
fsync = off

Для подключения к БД:

sudo nano /etc/postgresql/13/main/pg_hba.conf

Добавить в конец файла:

host        all         all             0.0.0.0/0               md5

После изменения конфигурационных файлов необходим перезапуск БД:

sudo service postgresql restart

Установка postgis-3

wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install postgis postgresql-13-postgis-3

Подготовим каталог для установки расширений БД

sudo mkdir /osm
sudo chown :sudo /osm
sudo chmod g+w /osm
cd /osm

Установка PG GZip Extension

sudo git clone https://github.com/pramsey/pgsql-gzip
cd pgsql-gzip
sudo apt-get install build-essential zlib1g-dev postgresql-server-dev-all pkg-config
sudo make
sudo make install

Проверка установки:

ls $(pg_config --sharedir)/extension | grep gzip
# вывод должен быть такой:
gzip--1.0.sql
gzip.control

Установка OSM Localization Extension

cd ..
sudo git clone https://github.com/giggls/mapnik-german-l10n
cd mapnik-german-l10n
sudo apt-get install devscripts equivs
sudo mk-build-deps -i debian/control
sudo pip3 install tltk
sudo make deb

Вывод результатов произойдёт в родительский каталог (/osm). Нужно найти созданный deb-пакет и запустить установку расширения в БД:

cd /osm 
ls
# Вывод будет примерно таким:
mapnik-german-l10n             pgsql-gzip
osml10n_2.5.9_amd64.buildinfo  postgresql-13-osml10n_2.5.9_amd64.deb
osml10n_2.5.9_amd64.changes    postgresql-13-osml10n-dbgsym_2.5.9_amd64.ddeb

Запускаем установку deb

sudo dpkg --install postgresql-13-osml10n_2.5.9_amd64.deb

После окончания надо убедиться, что расширения появились

ls $(pg_config --sharedir)/extension | grep osml10n
# Вывод будет примерно таким:
osml10n--2.5.8--2.5.9.sql
osml10n--2.5.9.sql
osml10n.control
osml10n_country_osm_grid.data
osml10n_thai_transcript--2.5.8--2.5.9.sql
osml10n_thai_transcript--2.5.9.sql
osml10n_thai_transcript.control

Подготовка БД для данных

Создадим юзера osm с паролем osm, новую базу данных с названием osm и владельцем - юзером osm и подключим необходимые расширения:

sudo -u postgres psql -c "CREATE USER osm SUPERUSER PASSWORD 'osm';"
sudo -u postgres createdb -E UTF8 -O osm osm
sudo -u postgres psql -d osm -c "CREATE EXTENSION postgis;"
sudo -u postgres psql -d osm -c "CREATE EXTENSION hstore;"
sudo -u postgres psql -d osm -c "CREATE EXTENSION gzip;"
sudo -u postgres psql -d osm -c "CREATE EXTENSION osml10n CASCADE;"
# это на всякий случай:
sudo -u postgres psql -d osm -c "GRANT ALL ON ALL TABLES IN SCHEMA public TO osm;"
sudo -u postgres psql -d osm -c "ALTER DEFAULT PRIVILEGES FOR USER osm IN SCHEMA public GRANT ALL ON TABLES TO osm;";
sudo -u postgres psql -d osm -c "ALTER DEFAULT PRIVILEGES FOR USER osm IN SCHEMA public GRANT ALL ON SEQUENCES TO osm;";

Для того, чтобы запускаемые в дальнейшем инструменты загрузки данных могли подключаться к БД, создадим специальный файл с описанием переменных окружения

nano ~/.osmenv

и заполним необходимой информацией

export PGUSER=osm
export PGPASSWORD=osm
export PGHOST=<IP_address_of_host>
export PGPORT=<postgresql_db_listen_port>
export PGDATABASE=osm
  • IP_address_of_host не должнен быть 127.0.0.1, лучше использовать IP сетевой карты хоста
  • postgresql_db_listen_port по умолчанию 5432

Установим обязательные атрибуты файла и выполним команды из него:

chmod 700 ~/.osmenv
source ~/.osmenv

Установка и настройка OpenMapTiles toolchain

cd /osm
git clone https://github.com/openmaptiles/openmaptiles
cd openmaptiles
make

Необходимо проверить, что в файле docker-compose.yml значение ports не равно порту на котором слушает postgresql, иначе при загрузке данных будут ошибки

nano docker-compose.yml

Ищем ветку

services:
 postgres:
   image: "${POSTGIS_IMAGE:-openmaptiles/postgis}:${TOOLS_VERSION}"
   volumes:
     - pgdata:/var/lib/postgresql/data
   networks:
     - postgres_conn
   ports:
     - "2345"    # здесь
   env_file: .env-postgres

По умолчанию postgresql слушает порт 5432 и, если здесь такое значение (или то, с которым работает наш postgresql сервер), нужно изменить на любой свободный порт, здесь 2345.

Теперь необходимо создать файл с переменными окружения для OpenMapTiles (имя файла указано в параметре env_file ниже, в нашем случае: .env)

nano .env

Значения те же, что и в созданном ранее файле ~/.osmenv

PGUSER=osm
PGPASSWORD=osm
PGHOST=<IP_address_of_host>
PGPORT=<postgresql_db_listen_port>
PGDATABASE=osm

Подготовка закончена, можно производить загрузку данных.



Категории: Tegola


Категории