Перейти до змісту

Використання контейнера Docker⚓︎

Якщо ви тільки бажаєте потестувати або ви використовуєте іншу операційну систему (відмінну від Ubuntu), або ви вже використовуєте Docker для контейнеризації – ви можете спробувати цю інструкцію. Вона базується на інструкції звідси і вже має готовий до використання контейнер.

Docker⚓︎

Якщо у вас ще не встановлено Docker, ви можете скористатись різноманітними порадами щодо його встановлення, наприклад, одна з них в щоденниках OSM, що посилається на це керівництво.

Вам знадобиться близько 30 Гб дискового простору навіть для невеликих екстрактів, через додавання даних про кордони по всьому світу, що мають значний обсяг.

Дані OpenStreetmap⚓︎

Для демонстрації тут, завантажимо дані для Замбії та імпортуємо їх, але має спрацювати будь-який файл OSM .pbf. Для тесту спробуйте якийсь невеликий файл .pbf, для початку. Увійдіть з правами звичайного користувача до вашої системи та завантажте дані для Замбії:

cd ~
wget https://download.geofabrik.de/africa/zambia-latest.osm.pbf

Створіть docker volume для даних:

docker volume create osm-data

Встановіть контейнер та імпортуйте дані:

time \
    docker run \
    -v /home/renderaccount/zambia-latest.osm.pbf:/region.osm.pbf \
    -v osm-data:/data/database/ \
    overv/openstreetmap-tile-server import

Шлях до файлу даних має бути абсолютним шляхом – він не може бути відносним шляхом. У цьому прикладі він знаходиться в кореневій теці користувача renderaccount. Крім того, якщо щось піде не так, вам потрібно буде виконати команду docker volume rm osm-data та розпочати з docker volume create osm-data вище. Наприкінці процесу ви повинні побачити:

INFO:root: Import complete

Якщо ви бачите наступне:

/data/region.osm.pbf: Is a directory

або

createuser: error: creation of new role failed: ERROR: role "renderer" already exists

схоже у вас щось не так; використовуйте docker ps -a для визначення несправного контейнера; для вилучення контейнера – docker rm (за яким іде ідентифікатор контейнера), а потім видаліть і повторно створіть osm-data, як описано вище.

Як довго це триватиме – залежить від швидкості вашого зʼєднання з мережею та розміру ділянки для завантаження. Замбія, яку ми обрали для прикладу, має досить не багато даних.

Зауважте, що якщо щось піде не так, повідомлення про помилки можуть бути дещо загадковими, і, на жаль, процес імпорту не можна буде перезапустити після помилки. Також зауважте, що новіші версії контейнера Docker можуть використовувати новіші версії postgres, тому osm-data, створений за допомогою попередньої версії, може не працювати – можливо, вам доведеться видалити його за допомогою docker volume rm osm-data і створіть заново.

Для отримання докладної інформації про те, що на справді відбуватиметься, ознайомтесь з файлом опису контейнера. Ви побачите, що він дуже схожий на інструкцію з “розгортання тайлового сервера вручну”, з незначними змінами, такими як URL для тайлів та використання внутрішнього облікового запису. Ви можете побачити що в середині контейнера використовується Ubuntu 22.04. Хоча вам і не треба взаємодіяти з системою безпосередньо ви можете зробити це за допомогою команди docker exec -it mycontainernumber bash.

Для запуску тайлового сервера скористайтесь командою:

docker run \
    -p 8080:80 \
    -v osm-data:/data/database \
    -d overv/openstreetmap-tile-server \
    run

та перевірте чи він працює відкривши посилання в оглядачі в режимі інкогніто:

http://адреса.вашого.сервера/tile/0/0/0.png

Ви маєте побачити мапу світу у вашому оглядачі. Потім спробуйте:

http://your.server.ip.address:8080

для мапи, яку можна збільшувати та зменшувати. Для появи тайлів (особливо при загальних рівнях масштабування) знадобиться короткий проміжок часу.

Додаткова інформація⚓︎

Цей докер-контейнер насправді підтримує набагато більше можливостей ніж наведено тут в прикладі, дивіться readme, щоб дізнатись деталі про оновлення, налаштування та таке інше.

Перегляд тайлів⚓︎

Для перегляду простої “рухомої мапи” скористаємось файлом sample_leaflet.html, який знаходиться в теці extra mod_tile’а. Змініть hot в URL у файлі на tile, і відкрийте його в оглядачі на компʼютері де встановлено контейнер docker. Якщо це не можливо через відсутність встановленого вебоглядача, вам доведеться замінити у файлі 127.0.0.1 на IP адресу сервера та скопіювати його в /var/www/html на цьому сервері.

Якщо ви хочете завантажити іншу територію, просто повторіть процес із wget вище. На жаль, необхідно видаляти та заново створювати osm-data кожного разу, коли ви хочете завантажити нові дані.