Установим свой сервер OpenStreetMap 

Станем root

sudo su

Обновляем систему

apt-get update
apt-get upgrade

Устанавливаем PostgreSQL  

apt-get install postgresql postgresql-contrib postgis postgresql-9.5-postgis-2.2

Подключимся к postgres

sudo -u postgres -i

Создадим пользователя osm

createuser osm

Создадим базу данных gis от пользователя osm в кодировке UTF8 

createdb -E UTF8 -O osm gis
psql -c "CREATE EXTENSION hstore;" -d gis
psql -c "CREATE EXTENSION postgis;" -d gis

Выходим из PostgreSQL  

exit

Создадим пользователя в системе osm

adduser osm

Станет пользователем osm

su osm
cd ~

Скачиваем последнюю версию openstreetmap-carto

wget https://github.com/gravitystorm/openstreetmap-carto/archive/master.zip

Разархивируем 

unzip master.zip

Скачиваем карту с любого удобного сайта в формате osm.pbf 

http://download.geofabrik.de
http://gis-lab.info/projects/osm_dump/

Выходим из под osm

exit

Установим osm2pgsql

apt-get install osm2pgsql

Станет пользователем osm

su osm
cd ~

Попробуем загрузить карту процесс не быстрый в зависимости от размера карты ну и не только. Также можно запустить это все дело в screen думаю понятно как.

osm2pgsql --slim -d gis --hstore -S /home/osm/openstreetmap-carto-master/openstreetmap-carto.style /home/osm/RU-SEV.osm.pbf

Выходим из под osm

exit

Установим недостающие пакеты

apt-get install curl unzip gdal-bin mapnik-utils node-carto

Станет пользователем osm

su osm
cd ~

Получим shapefiles

cd /home/osm/openstreetmap-carto-master/scripts/
./get-shapefiles.py

Выходим из под osm

exit

Установим последнюю версию carto 

apt-get install -y npm
npm install -g carto

Проверим 

/usr/bin/carto -v
carto 0.9.5 (Carto map stylesheet compiler)

nodejs /usr/local/bin/carto -v
carto 0.18.2 (Carto map stylesheet compiler)

Станет пользователем osm

su osm
cd ~

Подготовим Mapnik xml стиль.

cd /home/osm/openstreetmap-carto-master/
nodejs /usr/local/bin/carto project.mml > style.xml 

Выходим из под osm

exit

Установим недостающие пакет 

apt-get install git autoconf libtool libmapnik-dev apache2-dev

Скачаем mod_tile

cd ~
git clone https://github.com/openstreetmap/mod_tile.git
cd mod_tile/

Соберем mod_tile

./autogen.sh
./configure
make
make install
make install-mod_tile

Правим файл /usr/local/etc/renderd.conf

В секции [default]

XML=/home/osm/openstreetmap-carto-master/style.xml
HOST=localhost

В секции [mapnik]

plugins_dir=/usr/lib/mapnik/3.0/input/

Копируем скрипт запуска 

cp /root/mod_tile/debian/renderd.init /etc/init.d/renderd
chmod +744 /etc/init.d/renderd

Правим файл /etc/init.d/renderd

DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-c /usr/local/etc/renderd.conf"
RUNASUSER=osm

Создадим каталог

mkdir -p /var/lib/mod_tile
chown osm:osm /var/lib/mod_tile

Запустим сервис renderd 

systemctl daemon-reload
systemctl start renderd
systemctl enable renderd

Установим Apache

apt-get install apache2

Создадим модуль 

echo "LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so" > /etc/apache2/mods-available/mod_tile.load

Подключим модуль

ln -s /etc/apache2/mods-available/mod_tile.load /etc/apache2/mods-enabled/mod_tile.load

Вставим в конец конфига /etc/apache2/sites-enabled/000-default.conf до </VirtualHost>

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

Перезапустим apache2

systemctl restart apache2

Перезапускаем lxc контейнер

reboot

Проверяем работу в браузере открываем    http://ваш_ip_адрес/osm_tiles/0/0/0.png должны получить картинку 

undefined

Если это так то вы добились того чего хотели, у вас свой OpenStreetMap Tile Server.

Теперь установим Leaflet

cd /var/www/html/
wget http://cdn.leafletjs.com/leaflet/v1.2.0/leaflet.zip
unzip leaflet.zip

Изменим содержимое /var/www/html/index.html

<html>
<head>
<title>My first osm</title>
<link rel="stylesheet" type="text/css" href="leaflet.css"/>
<script type="text/javascript" src="leaflet.js"></script>
<style>
   #map{width:100%;height:100%}
</style>
</head>

<body>
  <div id="map"></div>
  <script>
    var map = L.map('map').setView([53.555,9.899],5);
    L.tileLayer('http://ваш_ip_адрес/osm_tiles/{z}/{x}/{y}.png',{maxZoom:18}).addTo(map);
</script>
</body>
</html>

Также настроим обновление карты.

Внимание!!! Если вы запускали загрузку карт через screen обязательно дождитесь полной загрузки карты.

Доставим пакеты

apt-get install osmosis

Создадим временную метку 

touch /var/lib/mod_tile/planet-import-complete
mkdir /var/log/tiles
chown osm:osm /var/log/tiles
cp /root/mod_tile/openstreetmap-tiles-update-expire /home/osm/openstreetmap-tiles-update-expire

 Станет пользователем osm

su osm
cd ~

 Запустим openstreetmap-tiles-update-expire

./openstreetmap-tiles-update-expire 2017-11-20

 Дату ставим ту на которую были скачаны карты +- один день.

Будет создан каталог /var/lib/mod_tile/.osmosis в нем есть файл конфигурации configuration.txt

# The URL of the directory containing change files.
baseUrl=http://planet.openstreetmap.org/replication/minute

# Defines the maximum time interval in seconds to download in a single invocation.
# Setting to 0 disables this feature.
maxInterval = 3600

заменим строку baseUrl на

baseUrl=http://planet.osm.org/replication/minute/

maxInterval можно выставить в 0 без ограничений

в итоге получаем 

baseUrl=http://planet.osm.org/replication/minute/
maxInterval = 0

 Добавляем строку обновление в  /etc/crontab

*/20 * * * * osm /home/osm/openstreetmap-tiles-update-expire

 Три раза за час обновление т.к. мы поставили maxInterval = 0 первое обновление будет долгим.

В итоге должно получится карта