Подготовка загрузки данных для сервера 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