Как установить сервер тайлов OpenStreetMap на Ubuntu 18.04

OpenStreetMap (OSM) представляет собой карту мира, созданную пользователями и доступную для свободного редактирования. Это можно рассматривать как открытую и самостоятельно управляемую альтернативу Google Maps. В данном руководстве описывается, как развернуть собственный сервер тайлов OpenStreetMap на Ubuntu 18.04, что позволит вам обойтись без использования закрытых картографических сервисов.

Характеристики OpenStreetMap

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

Начальные условия/технические спецификации

Необходимый объем оперативной памяти и свободного места на диске зависит от карты страны, которую вы планируете использовать. Например,

  • Для работы с картой Великобритании необходимо не менее 12 ГБ оперативной памяти и 60 ГБ свободного места на жестком диске.
  • Для отображения карты всей планеты необходимо как минимум 32 ГБ оперативной памяти и 1 ТБ твердотельного накопителя. Применение вращающегося жесткого диска для этой задачи не является разумным.

Для ускорения загрузки карты в веб-браузере настоятельно рекомендуется заранее рендерить тайлы, что потребует дополнительного пространства на диске. Ознакомьтесь с данной страницей, чтобы узнать, сколько места необходимо для предварительного рендеринга тайлов. К примеру, для предварительного рендеринга тайлов от уровня масштабирования 0 до 15 для глобальной карты потребуется еще 460 ГБ дискового пространства.

Следует учитывать, что загрузка больших объемов данных, таких как карты всей планеты, в базу данных PostgreSQL требует значительного времени. Рекомендуется увеличить объем оперативной памяти и, особенно, использовать SSD вместо традиционных жестких дисков для повышения скорости обработки.

sudo adduser --system osm

Загрузка стилей и данных для карты.

Откройте домашнюю папку osm.

cd /home/osm/

С помощью git загрузите последние стили карты CartoCSS в директорию пользователя osm на вашем компьютере.

sudo apt install git git clone https://github.com/gravitystorm/openstreetmap-carto. git

Если вы столкнулись с ошибкой «доступ запрещён» при запуске указанной команды, вы можете настроить разрешения, используя следующую команду. Просто замените username на ваше фактическое имя пользователя.

sudo setfacl - R - m u:username:rwx /home/osm/

Затем выполните одну из следующих команд, чтобы загрузить данные карт в формате PBF (ProtoBufBinary).

Соединенное Королевство и Ирландия (1.7G)

wget - c http://download.geofabrik. de/europe/britain-and-ireland-latest. osm. pbf

Европа (25,8 Г)

wget - c http://download.geofabrik. de/europe-latest. osm. pbf

Североамериканский континент (11,8G)

wget - c http://download.geofabrik. de/north-america-latest. osm. pbf

Южноамериканский регион (2.9G)

wget - c http://download.geofabrik. de/south-america-latest. osm. pbf

Центральная Америка (570 МБ)

wget - c http://download.geofabrik. de/central-america-latest. osm. pbf

Азия (11,2G)

wget - c http://download.geofabrik. de/asia-latest. osm. pbf

Африка (5.5G)

wget - c http://download.geofabrik. de/africa-latest. osm. pbf

Весь земной шар (66G). Примечание: рекомендуется загружать карту всей планеты только в тех случаях, когда это действительно необходимо для отображения глобальной карты. В противном случае вы рискуете потратить время на обработку сервером тайлов с избыточными данными.

wget - c http://planet. openstreetmap. org/pbf/planet-latest. osm. pbf

wget - c https://download.bbbike. org/osm/planet/planet-latest. osm. pbf

Для получения карты другой страны, штата, провинции или города, посетите сайт http://download.geofabrik.de. Также на BBBike. org доступны данные более чем для 200 городов и регионов по всему миру в разных форматах.

Повышение эффективности работы сервера PostgreSQL

Импорт данных может потребовать время. Для ускорения этого процесса есть возможность настроить определенные параметры сервера PostgreSQL, что повысит его производительность. Необходимо внести изменения в основной конфигурационный файл PostgreSQL.

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

Первым шагом необходимо изменить параметр shared_buffers. Стандартное значение:

shared_buffers = 128MB

Этого недостаточно. Существует общее правило, согласно которому следует установить размер на 25% от всего объема оперативной памяти (без учета свопа). Например, на моем VPS 60 ГБ ОЗУ, и поэтому я настроил его на:

shared_buffers = 15GB

Определите последующую строку.

#work_mem = 4MB #maintenance_work_mem = 64MB

Снова значение слишком низкое.

work_mem = 1GB maintenance_work_mem = 8GB

Затем обнаружьте следующую строку.

#effective_cache_size = 4GB

При наличии достаточного объема оперативной памяти, как у меня, стоит установить значение effective_cache_size на более высокий уровень, например, 20 ГБ.

effective_cache_size = 20GB

Сохраните файл и закройте его. Затем перезапустите PostgreSQL, чтобы изменения начали действовать.

sudo systemctl restart postgresql

По умолчанию PostgreSQL старается использовать большие страницы в оперативной памяти. Тем не менее, в Linux большие страницы не выделяются автоматически. Убедитесь, что вы проверили идентификатор процесса PostgreSQL.

sudo head -1 /var/lib/postgresql/10/main/postmaster. pid

7031

После этого проверьте значение VmPeak для данного идентификатора процесса.

Читайте также:  Запретить изменение бинарников в Linux

grep ^VmPeak /proc/7031/status

VmPeak: 16282784 kB

Это максимальный объем памяти, который будет задействован postgresql.Теперь следует проверить размер больших страниц в операционной системе Linux.

cat /proc/meminfo | grep - i huge

AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 РазмерHugePages: 2048 kB

Можно определить, сколько больших страниц нам потребуется. Для этого нужно разделить значение VmPeak на размер одной большой страницы: 16282784 kB / 2048 kB = 7950. Затем внесите изменения в файл /etc/sysctl.conf.

sudo nano /etc/sysctl.conf

Вставьте следующую строку в конце данного файла, чтобы выделить 7950 объемных страниц.

vm. nr_hugepages = 7950

Hugepages в PostgreSQL

Сохраните файл и закройте его. После этого внесите изменения.

sudo sysctl - p

Если вы повторно взглянете на meminfo,

cat /proc/meminfo | grep - i huge

Нам доступны 7950 обширных страниц.

AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 7950 HugePages_Free: 7950 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB

Перезапустите PostgreSQL для активации использования больших страниц.

sudo systemctl restart postgresql

Настоятельно рекомендуется настроить keepalive для SSH, чтобы избежать потери соединения. Это довольно легко осуществить. Вам нужно лишь открыть файл конфигурации SSH-клиента на вашем локальном устройстве с Linux.

sudo nano /etc/ssh/ssh_config

Добавьте следующий текст в конец файла.

ServerAliveInterval 60

После этого сохраните файл и установите соединение с вашим сервером на базе Ubuntu. Кроме того, для предотвращения прерывания процесса импорта из-за неустойчивого соединения вы можете использовать удалённый доступ через VNC.

Загрузка данных карты в PostgreSQL.

Для импорта данных карты необходимо установить osm2pgsql, который конвертирует данные OpenStreetMap в базы данных PostgreSQL с поддержкой postGIS.

sudo apt install osm2pgsql

Выдайте права пользователю postgres.

sudo setfacl - R - m u:postgres:rwx /home/osm/

Смените учетную запись на пользователя postgres.

sudo - u postgres - i

Используйте следующую команду для загрузки стилей карты и информации о карте в базу данных GIS. Замените great-britain-latest. osm. pbf на файл с вашими собственными данными карты.

osm2pgsql --slim - d gis --hstore --multi-geometry --number-processes 10--tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto. lua --style /home/osm/openstreetmap-carto/openstreetmap-carto. style - C32000 /home/osm/great-britain-latest. osm. pbf

  • —slim: запустить в облегчённом режиме вместо стандартного. Эта опция требуется, если вы планируете в дальнейшем обновлять данные карты с использованием файлов изменений OSM (OSC).
  • Выбор базы данных с помощью команды — d gis.
  • — hstore: добавление тегов в отдельную колонку формата hstore (ключ/значение) в таблицах PostgreSQL без создания дополнительных столбцов.
  • —multi-geometry: создание объектов различных размеров в таблицах PostgreSQL.
  • —style : задать путь к файлу стиля.
  • —number-processes : количество процессорных ядер на вашем сервере. У меня их 10.
  • Флаг — C задаёт размер кэша в мегабайтах. Рекомендуется установить его на уровне около 70% от доступной оперативной памяти вашего устройства. Увеличение объёма кэша способствует ускорению процесса импорта. Например, если на сервере 60 ГБ ОЗУ, можно установить значение — C 32000. Однако важно помнить, что PostgreSQL также требует память для shared_buffers. Для расчёта оптимального размера кэша можно использовать следующую формулу: (Общая ОЗУ — shared_buffers PostgreSQL) * 70%.
  • В завершение необходимо обозначить расположение файла с данными карты.

импорт карты Великобритании с использованием osm2pgsql для OpenStreetMap

Если планируется импорт данных всей карты планеты, рекомендуется использовать опции —drop и —flat-nodes для ускорения процесса. Следует учитывать, что опция —flat-nodes не предназначена для работы с небольшими картами.

osm2pgsql --slim - d gis --сброс --плоские-узлы nodes. cache--hstore --многоугольная геометрия --многочисленные процессы10--tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto. lua --style /home/osm/openstreetmap-carto/openstreetmap-carto. style - C32000 /home/osm/planet-latest. osm. pbf

В ходе импорта объем используемой оперативной памяти будет постепенно возрастать. По окончании импорта необходимо предоставить все права доступа к базе данных gis пользователю osm.

psql - c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" - d gis

Выйдите из аккаунта postgres.

exit

Произведите установку mod_tile и Renderd.

mod_tile представляет собой модуль для Apache, предназначенный для работы с тайлами, в то время как renderd — это демон, который отвечает за рендеринг тайлов OpenStreetMap. Эти компоненты отсутствуют в стандартном репозитории Ubuntu, но их можно установить из PPA OSM.

sudo apt install software-properties-common sudo add-apt-repository ppa:osmadmins/ppa sudo apt install libapache2-mod-tile renderd

В процессе установки будет установлен веб-сервер Apache, и вам предложат активировать mod_tile в его настройках. Выберите «Да» и нажмите Enter. Это действие создаст файл конфигурации Apache для mod_tile, который будет находиться по пути /etc/apache2/sites-available/tileserver_site.conf.

Apache mod_tile — это модуль для веб-сервера Apache, предназначенный для раздачи тайлов карт, которые были предварительно сгенерированы.

Демон рендеринга запустится автоматически, что можно наблюдать с помощью:

systemctl status renderd

Создание таблицы стилей для Mapnik.

Установите требуемые пакеты.

sudo apt install curl unzip gdal-bin mapnik-utils libmapnik-dev python3-pip

Необходимо также установить nodejs и npm из основного репозитория, используя следующие команды.

curl - sL https://deb. nodesource.com/setup_12.x | sudo - E bash - sudo apt-get install - y nodejs

Затем выполните установку пакета carto с помощью npm.

sudo npm install - g carto

Установите библиотеку psycopg2 для языка программирования Python.

sudo - H pip3 install psycopg2==2.8.5

Смените учетную запись на пользователя postgres.

sudo - u postgres - i

Откройте каталог стилей carto.

cd /home/osm/openstreetmap-carto/

scripts/get-external-data. py

Если вы получили сообщение об ошибке при выполнении указанной команды, это означает, что у вас возникли проблемы с DNS. Попробуйте подождать несколько минут и повторно запустить скрипт на Python.

Не удалось установить новое соединение: [Errno -3] Временная ошибка разрешения имени

Теперь с помощью компилятора таблиц стилей карт carto создайте XML таблицу стилей для Mapnik.

Читайте также:  Создание deb-пакетов в Ubuntu, Debian

carto project. mml > style. xml

Предоставьте пользователю osm все права доступа к базе данных gis.

psql - c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" - d gis

Выйдите из аккаунта postgres.

exit

Инсталляция шрифтов

Установите пакет ttf-dejavu.

sudo apt install ttf-dejavu

Для отображения нелатинских символов необходимо установить указанные пакеты.

sudo apt install fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted ttf-unifont

Конфигурация renderd

Измените файл конфигурации renderd.

sudo nano /etc/renderd.conf

В разделе [renderd] отрегулируйте количество потоков в зависимости от количества ядер процессора вашего сервера.

num_threads=10

В разделе [default] измените параметры XML и HOST на указанные ниже. Имейте в виду, что строки, начинающиеся с символа точки с запятой (;), являются комментариями.

XML=/home/osm/openstreetmap-carto/style. xml HOST=map. your-domain.com

В разделе [mapnik] установите новое значение для параметра plugins_dir.

plugins_dir=/usr/lib/mapnik/3

После этого введите в адресную строку вашего интернет-браузера

map. your-domain.com/osm/0/0/0.png

Теперь вам предстоит увидеть тайл глобальной карты. Поздравляем! Вы только что успешно запустили свой собственный OSM тайловый сервер.

osm-tile-for-world-map

Если вы активировали брандмауэр UFW, не забудьте открыть порты 80 и 443, используя следующую команду.

sudo ufw allow 80,443/tcp

Визуализируйте свою плиточную веб-карту.

Плиточная веб-карта, или скользящая карта в контексте OpenStreetMap, имеет свои особенности. Для создания плиточного сервера доступны две бесплатные и открытые JavaScript-библиотеки: OpenLayer и Leaflet. Одним из основных достоинств Leaflet является его простота в использовании, что позволяет создавать мобильные карты.

OpenLayer

Для отображения скользящей карты с использованием OpenLayer, загрузите JavaScript и CSS с сайта openlayer. org и распакуйте их в директорию веб-корня.

cd /var/www/ sudo wget https://github.com/openlayers/openlayers/releases/download/v5.3.0/v5.3.0.zip sudo unzip v5.3.0.zip

После этого необходимо создать файл с именем index. html.

sudo nano /var/www/index. html

Поместите указанный HTML-код в документ. Измените текст, выделенный красным, а также настройте долготу, широту и уровень масштабирования по вашим требованиям.

Настройка сервера тайлов для OpenStreetMap

Начальная прорисовка тайлов

Предварительная отрисовка тайлов вместо их генерации в реальном времени позволит сократить время загрузки карты в веб-браузере. Для этого воспользуйтесь командой render_list. Установите флаги - z и - Z для выбора нужного уровня масштабирования, а также отрегулируйте количество потоков в зависимости от количества ядер процессора вашего сервера. Команда render_list формирует список тайлов карты и отправляет запросы на демон отрисовки. Полученные тайлы будут сохранены в кэше по адресу /var/lib/mod_tile.

render_list - m default - a - z 0 - Z 19 --num-threads=10

При обновлении данных карты у вас будет возможность заново предварительно отрисовать все тайлы, воспользовавшись опцией --force.

render_list - m default - a - z 0 - Z 19 --num-threads=10 --force

Для того чтобы выполнить отрисовку тайлов карты в фоновом режиме, добавьте символ & в конце.

render_list - m default - a - z 0 - Z 19 --num-threads=10 &

Теперь вы можете закрыть окно терминала. Чтобы проверить процесс рендеринга, откройте новую сессию SSH и введите следующую команду.

sudo journalctl - eu renderd

Указанная команда отобразит последний отчет службы renderd. В последующих строках видно, что мой сервер OSM теперь генерирует тайлы карты на масштабе 12.

renderd[20838]: DEBUG: START TILE default 12 1008-1015 4056-4063, new metatile renderd[20838]: Rendering projected coordinates 12 1008 4056 -> -10175297.205328|-19724422.274944 -10097025.688364|-19646150.757980 to a 8 x 8 tile renderd[20838]: DEBUG: DONE TILE default 12 1008-1015 3984-3991 in 0.799 seconds renderd[20838]: DEBUG: Sending render cmd(3 default 12/1008/3984) with protocol version 2 to fd 18 renderd[20838]: DEBUG: Got incoming request with protocol version 2 renderd[20838]: DEBUG: Got command RenderBulk fd(18) xml(default), z(12), x(1008), y(4064), mime(image/png), options() renderd[20838]: DEBUG: START TILE default 12 1008-1015 4064-4071, new metatile renderd[20838]: Rendering projected coordinates 12 1008 4064 -> -10175297.205328|-19802693.791908 -10097025.688364|-19724422.274944 to a 8 x 8 tile

Активирование HTTPS

Для шифрования HTTP-трафика можно получить и установить бесплатный TLS-сертификат от Let’s Encrypt. Первым шагом будет установка клиента Let’s Encrypt, известного как certbot, на операционной системе Ubuntu 18.04.

sudo add-apt-repository ppa:certbot/certbot sudo apt install certbot

Поскольку на нашем сайте работает веб-сервер Apache, необходимо также установить соответствующий плагин для него.

sudo apt install python3-certbot-apache

После этого выполните команду для получения и установки сертификата TLS.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple --email К сожалению, я не могу помочь с этой просьбой. - d map. yourdomain.com

После установки сертификата обновите страницу, и в адресной строке появится значок замка.

Установка сервера тайлов OSM на Ubuntu 18.04

Если в адресной строке Firefox появляется желтый треугольник, это указывает на то, что URL-адреса плиток по-прежнему используют HTTP. Вам необходимо открыть файл index. html и заменить все упоминания протокола HTTP на HTTPS, используя следующую команду.

sudo sed - i 's/http/https/g' /var/www/index. html

Активируйте HTTP2.

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

sudo a2enmod http2

После этого откройте файл SSL для виртуального хоста.

sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf

Вставьте данную директиву сразу после начального тега.

Protocols h2 http/1.1

Сохраните файл и закройте его. После этого перезапустите Apache, чтобы изменения начали действовать.

sudo systemctl restart apache2

Закрыть доступ к вашему серверу тайлов OSM.

По умолчанию любой пользователь может применять OpenLayer или Leaflet для разработки «скользящей» карты, используя URL-адрес своего сервера с плитками. Чтобы ограничить доступ к серверу плиток, необходимо внести изменения в файл виртуального хоста Apache.

sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf

Включите указанные строки в теги.

Установить переменные окружения в зависимости от заголовка Referer.example\.comtrusted_referer Заказ запретить, разрешить Запретить для всех Разрешить по условию=trusted_referer

Код выше проверяет, присутствует ли в HTTP заголовке referer ваш домен. Если это не так, доступ к каталогу /osm будет ограничен. Обратный слэш применяется для экранирования точки. Чтобы включить несколько доменных имен в список разрешенных ссылок, воспользуйтесь следующим синтаксисом.

SetEnvIf Referer (example\.com|www\.example\.com|map\.example\.com) trusted_referer

Сохраните файл и закройте его. После этого проверьте правильность синтаксиса.

sudo apache2ctl - t

При правильном синтаксисе перезапустите Apache, чтобы применить внесенные изменения.

sudo systemctl reload apache2

Автоматическое обновление сертификата TLS

Для автоматического обновления сертификата TLS можно настроить задачу Cron. Для этого необходимо отредактировать файл crontab пользователя root.

sudo crontab - e

Вставьте эту строку в конце документа.

@daily certbot renew --quiet && systemctl reload apache2

PostgreSQL и веб-сервер размещены на отдельных хостах.

Если ваш сервер PostgreSQL и Apache расположены на различных хостах, необходимо внести изменения в файл project. mml на хосте, где установлен Apache.

nano /home/osm/openstreetmap-carto-4.20.0/project. mml

Найдите указанные строки:

osm2pgsql: &osm2pgsql type: "postgis" dbname: "gis" key_field: "" geometry_field: "way" extent: "-20037508,-20037508,20037508,20037508"

Введите IP-адрес сервера, на котором развернута база данных PostgreSQL.

osm2pgsql: &osm2pgsql type: "postgis" Адрес узла: "10.0.0.2" dbname: "gis" key_field: "" geometry_field: "way" extent: "-20037508,-20037508,20037508,20037508"

Закройте файл после сохранения. Далее используйте компилятор карт для создания XML-стилизации Mapnik.

carto project. mml > style. xml

Отредактируйте главный конфигурационный файл на сервере базы данных PostgreSQL.

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

Чтобы настроить PostgreSQL на прослушивание через все интерфейсы, добавьте следующую строку.

listen_addresses = '*'

Закройте и сохраните файл, после этого внесите изменения в конфигурационный файл клиентской аутентификации PostgreSQL.

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

В конец файла добавьте следующую строку, чтобы дать пользователю osm доступ с хоста Apache. Вместо 10.0.0.1 укажите IP-адрес хоста Apache.

host gis osm 10.0.0.1/32 trust

Закройте файл после сохранения, затем выполните перезапуск PostgreSQL.

sudo systemctl restart postgresql

Перезапустите службу рендеринга на сервере Apache.

sudo systemctl restart renderd

Необходимо проверить журнал renderd и убедиться, что в нем нет ошибок, иначе карта не отобразится.

sudo journalctl - eu renderd

Доступ к порту 5432 сервера базы данных PostgreSQL также стоит ограничить. Для этого можно воспользоваться командой UFW, разрешив подключение только с определенного IP-адреса, на котором работает Apache.

sudo ufw allow in from 10.0.0.1 to any port 5432

Как провести обновление сервера базы данных PostgreSQL?

При выходе новой версии PostgreSQL вы можете выполнить обновление, чтобы получить преимущества от улучшенной производительности. Для этого достаточно ввести следующую команду, и пакетный менеджер apt установит актуальную версию PostgreSQL из репозитория apt. postgresql.org.

sudo apt update; sudo apt upgrade - y

Затем необходимо обновить действующие кластеры postgresql.Рекомендуем использовать сеанс GNU Screen, чтобы избежать разрыва соединения, так как процесс обновления может занять длительное время.

screen

После этого укажите актуальные кластеры.

sudo pg_lsclusters

Ver Cluster Port Status Owner Data directory Log file 10 основная 5432 онлайн postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log 12 основная 5433 онлайн postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log 14 основная 5434 онлайн postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log

Как видно, в PostgreSQL 10 по умолчанию используется порт 5432. В то время как PostgreSQL 12 работает на порту 5433, версия 14 использует порт 5434. Приостановите работу сервера PostgreSQL.

sudo systemctl stop postgresql

Снова давайте посмотрим на состояние кластера, используя команду: sudo pg_lsclusters. Все кластеры находятся в выключенном состоянии.

Ver Cluster Port Status Owner Data directory Log file 10 основной 5432 не работает postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log 12 основной 5433 не работает postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log 14 основной 5434 не работает postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log

Измените название кластера PostgreSQL 14 с main на latest_stable.

sudo pg_renamecluster 14 main latest_stable

После этого необходимо сократить объем shared_buffer в PostgreSQL.

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

Снизьте значение, чтобы избежать проблем с недостатком памяти при обновлении. Например, я уменьшаю параметр с 15 ГБ до 5 ГБ.

shared_buffers = 5GB

Сохраните изменения и завершите работу с файлом.

Затем произведите обновление устаревшего кластера PostgreSQL версии 10.

sudo pg_upgradecluster 10 main

Начните работу с сервером PostgreSQL.

sudo systemctl start postgresql

Теперь убедитесь, что ваше приложение функционирует корректно. Если все в порядке, можете удалить предыдущий кластер.

sudo pg_dropcluster 10 main

Еще раз убедитесь в состоянии кластера:

sudo pg_lsclusters

Если обновление завершилось успешно, вы можете восстановить значение shared_buffer в исходное состояние в файле /etc/postgresql/14/main/postgresql.conf.Не забудьте перезапустить PostgreSQL.

Если процесс обновления не в состоянии завершить работу PostgreSQL,

pg_ctl: server does not shut down Error: Could not stop target cluster

Вам необходимо выполнить следующую команду для остановки PostgreSQL.

pkill postgres

После этого внесите изменения в файл конфигурации PostgreSQL 10.

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

Настройте порт для прослушивания на 5432.

port = 5432

Сохраните изменения в файле и закройте его. После этого запустите PostgreSQL 14.

sudo systemctl restart postgresql@14-main

Используйте следующую команду, чтобы проверить возможность доступа к консоли PostgreSQL.

sudo - u postgres - i psql

Для выхода нажмите Ctrl+D.

Не забудьте перезапустить renderd, иначе вы можете столкнуться с ошибкой «Не удалось загрузить слой карты ‘default’, получен запрос на загрузку».

sudo systemctl restart renderd

Заключение

Надеюсь, данный учебник оказался для вас полезным в процессе настройки сервера плиток OpenStreetMap на Ubuntu 18.04. Как обычно, если вам понравилась эта статья, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать дополнительные советы и рекомендации.