GNU/Linux >> Belajar Linux >  >> Debian

Siapkan Server Tile OpenStreetMap (OSM) di Debian 10 Buster

OpenStreetMap (OSM) adalah peta dunia kontribusi pengguna yang dapat diedit secara bebas. Anda dapat menganggapnya sebagai alternatif sumber terbuka dan dihosting sendiri untuk Google Maps. Tutorial ini akan menunjukkan cara membangun server ubin OpenStreetMap Anda sendiri di Debian 10 sehingga Anda tidak perlu menggunakan layanan peta berpemilik.

Fitur OpenStreetMap

  • Data OpenStreetMap mencakup seluruh dunia, memudahkan untuk mendukung pengguna di negara mana pun atau di setiap negara.
  • OpenStreetMap diperbarui setiap menit setiap jam setiap hari, dan pembaruan ini tersedia untuk Anda secara waktu nyata.
  • Data OpenStreetMap gratis dan terbuka – tidak ada biaya berlangganan dan tidak ada biaya tampilan halaman.
  • Data OpenStreetMap kaya dan terperinci, berisi sejumlah besar data yang relevan dengan orang-orang di lapangan – orang-orang yang mengumpulkannya.

Prasyarat/Persyaratan Perangkat Keras

RAM dan ruang disk yang diperlukan tergantung pada peta negara mana yang akan Anda gunakan. Misalnya,

  • Peta Inggris Raya membutuhkan setidaknya 12G RAM dan ruang disk 100GB.
  • Seluruh peta planet membutuhkan setidaknya 32G RAM dan 1TB SSD (Solid State Drive). Tidak layak menggunakan hard disk yang berputar untuk seluruh peta planet.

Anda akan membutuhkan lebih banyak ruang disk jika Anda akan melakukan pra-render ubin untuk mempercepat pemuatan peta di browser web, yang sangat disarankan. Periksa halaman penggunaan disk ubin ini untuk melihat berapa banyak ruang disk yang diperlukan untuk ubin pra-rendering. Misalnya, jika Anda akan melakukan pra-render ubin dari level zoom 0 hingga zoom level 15 untuk peta planet, diperlukan ruang disk ekstra 460 GB.

Hal lain yang perlu diperhatikan adalah mengimpor data peta besar, seperti seluruh planet, ke database PostgreSQL membutuhkan waktu lama. Pertimbangkan untuk menambahkan lebih banyak RAM dan terutama menggunakan SSD alih-alih memutar hard disk untuk mempercepat proses impor.

Jika Anda akan meng-host seluruh peta dunia, saya sarankan Anda membeli VPS ekstra besar dari Contabo, yang menawarkan

  • CPU 10 inti
  • RAM 60 GB
  • SSD Intel Optane 1,6 TB

Biayanya hanya 26,99 €/bulan.

Langkah 1:Tingkatkan Perangkat Lunak

Itu selalu merupakan praktik yang baik untuk memperbarui perangkat lunak server sebelum melakukan pekerjaan besar apa pun di server Anda. Masuk ke server Anda melalui SSH dan jalankan perintah berikut.

sudo apt update; sudo apt upgrade

Jika Anda mengalami kesalahan berikut,

perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_MONETARY = "zh_CN.UTF-8",
	LC_ADDRESS = "zh_CN.UTF-8",
	LC_TELEPHONE = "zh_CN.UTF-8",
	LC_NAME = "zh_CN.UTF-8",
	LC_MEASUREMENT = "zh_CN.UTF-8",
	LC_IDENTIFICATION = "zh_CN.UTF-8",
	LC_NUMERIC = "zh_CN.UTF-8",
	LC_PAPER = "zh_CN.UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

Itu berarti komputer lokal Anda mencoba mengirim variabel lingkungan lokal ke VPS debian, tetapi Debian tidak menginstal lokal. Untuk memperbaikinya, edit file konfigurasi daemon SSH.

sudo nano /etc/ssh/sshd_config

Gulir ke bawah sampai akhir, Anda akan menemukan baris berikut, yang memberitahu daemon SSH untuk menerima variabel lingkungan dari klien SSH.

AcceptEnv LANG LC_*

Ubah ke berikut, sehingga daemon SSH tidak akan menerima variabel lingkungan.

AcceptEnv no

Simpan dan tutup file. Kemudian restart daemon SSH.

sudo systemctl restart ssh

Keluar dan masuk kembali. Anda tidak akan melihat kesalahan lokal lagi.

Langkah 2:Instal Server Database PostgreSQL dan Ekstensi PostGIS

Kami akan menggunakan PostgreSQL untuk menyimpan data peta. PostGIS adalah ekstensi geospasial untuk PostgreSQL. Jalankan perintah berikut untuk menginstalnya.

sudo apt install postgresql postgresql-contrib postgis postgresql-11-postgis-2.5

Server database PostgreSQL akan secara otomatis memulai dan mendengarkan 127.0.0.1:5432 . postgres pengguna akan dibuat di OS selama proses instalasi. Ini adalah pengguna super untuk server database PostgreSQL. Secara default, pengguna ini tidak memiliki kata sandi dan tidak perlu menyetelnya karena Anda dapat menggunakan sudo untuk beralih ke postgres pengguna dan masuk ke server PostgreSQL.

sudo -u postgres -i

Sekarang Anda dapat membuat pengguna database PostgreSQL osm .

createuser osm

Kemudian buat database dengan nama gis dan pada saat yang sama membuat osm sebagai pemilik database. -E UTF8 menentukan skema pengkodean karakter yang akan digunakan dalam database adalah UTF8.

createdb -E UTF8 -O osm gis

Selanjutnya, buat postgis dan hstore ekstensi untuk gis basis data.

psql -c "CREATE EXTENSION postgis;" -d gis

psql -c "CREATE EXTENSION hstore;" -d gis

Setel osm sebagai pemilik meja.

psql -c "ALTER TABLE spatial_ref_sys OWNER TO osm;" -d gis

Keluar dari postgres pengguna.

exit

Buat osm pengguna di sistem operasi Anda sehingga server ubin dapat berjalan sebagai osm pengguna. Perintah berikut akan membuat pengguna sistem tanpa kata sandi.

sudo adduser --system osm

Langkah 3:Unduh Lembar Gaya Peta dan Data Peta

Ubah ke direktori home osm.

cd /home/osm/

Unduh lembar gaya peta CartoCSS terbaru ke osm direktori home pengguna dengan git.

sudo apt install git

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

Jika Anda melihat kesalahan "izin ditolak" saat menjalankan perintah di atas, maka Anda dapat memberikan izin dengan perintah berikut. Ganti username dengan nama pengguna asli Anda.

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

Selanjutnya, jalankan perintah berikut untuk mendownload data peta seluruh planet (50G) dalam format PBF (ProtoBufBinary).

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

Perhatikan bahwa kecepatan unduh untuk openstreetmap.org saat ini dibatasi hingga 2048 KB/dtk. Anda dapat mengunduh peta tanaman dari cermin lain, seperti

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

Jika Anda menginginkan peta masing-masing negara/negara bagian/provinsi/kota, kunjungi http://download.geofabrik.de. Juga, BBBike.org menyediakan ekstrak lebih dari 200 kota dan wilayah di seluruh dunia dalam format yang berbeda. Misalnya, unduh data peta Inggris Raya (1.1G) dengan perintah berikut.

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

Langkah 4:Optimalkan Kinerja Server PostgreSQL

Proses impor bisa memakan waktu lama. Untuk mempercepat proses ini, kita dapat menyetel beberapa pengaturan server PostgreSQL untuk meningkatkan kinerja. Edit file konfigurasi utama PostgreSQL.

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

Pertama, kita harus mengubah nilai shared_buffer . Pengaturan default adalah:

shared_buffers = 128MB

Ini terlalu kecil. Aturan praktisnya adalah mengaturnya menjadi 25% dari total RAM Anda (tidak termasuk ruang swap). Misalnya VPS saya punya RAM 60G, jadi saya set ke:

shared_buffers = 15GB

Temukan baris berikut.

#work_mem = 4MB
#maintenance_work_mem = 64MB

Sekali lagi, nilainya terlalu kecil. Saya menggunakan pengaturan berikut.

work_mem = 1GB
maintenance_work_mem = 8GB

Kemudian temukan baris berikut.

#effective_cache_size = 4GB

Jika Anda memiliki banyak RAM seperti saya, Anda dapat menetapkan nilai yang lebih tinggi untuk effective_cache_size seperti 20G.

effective_cache_size = 20GB

Simpan dan tutup file. Mulai ulang PostgreSQL agar perubahan diterapkan.

sudo systemctl restart postgresql

Secara default, PostgreSQL akan mencoba menggunakan halaman besar di RAM. Namun, Linux secara default tidak mengalokasikan halaman yang besar. Periksa ID proses PostgreSQL.

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

Contoh keluaran:

7031

Kemudian periksa nilai VmPeak dari ID proses ini.

grep ^VmPeak /proc/7031/status

Contoh keluaran:

VmPeak: 16282784 kB

Ini adalah ukuran memori puncak yang akan digunakan oleh PostgreSQL. Sekarang periksa ukuran halaman besar di Linux.

cat /proc/meminfo | grep -i huge

Contoh keluaran:

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

Kita bisa menghitung berapa banyak halaman yang kita butuhkan. Bagi nilai VmPeak dengan ukuran halaman besar:16282784 kB / 2048 kB =7950. Edit /etc/sysctl.conf berkas.

sudo nano /etc/sysctl.conf

Tambahkan baris berikut untuk mengalokasikan 7950 halaman besar.

vm.nr_hugepages = 7950

Simpan dan tutup file. Kemudian terapkan perubahannya.

sudo sysctl -p

Jika Anda memeriksa meminfo lagi,

cat /proc/meminfo | grep -i huge

Kita bisa melihat ada 7.950 halaman besar yang tersedia.

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

Mulai ulang PostgreSQL untuk menggunakan halaman besar.

sudo systemctl restart postgresql

Gunakan Layar pada Server Jarak Jauh

Karena proses impor dapat memakan waktu lama dan komputer Anda mungkin terputus dari Internet, disarankan untuk menggunakan utilitas layar untuk menjaga sesi Anda tetap hidup. Layar instal di server Debian 10:

sudo apt install screen

Kemudian layar mulai:

screen

Saat peluncuran pertama, Anda akan melihat teks pengantar, cukup tekan Enter untuk mengakhiri. Kemudian Anda akan dapat menjalankan perintah seperti biasa.

Langkah 5:Impor Data Peta ke PostgreSQL

Untuk mengimpor data peta, kita perlu menginstal osm2pgsql yang mengubah data OpenStreetMap menjadi database PostgreSQL yang mendukung postGIS.

sudo apt install osm2pgsql

Berikan izin kepada pengguna postgres.

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

Beralih ke postgres pengguna.

sudo -u postgres -i

Jalankan perintah berikut untuk memuat stylesheet peta dan data peta ke dalam gis basis data. Ganti great-britain-latest.osm.pbf dengan file data peta Anda sendiri.

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 -C 32000 /home/osm/great-britain-latest.osm.pbf

dimana

  • --slim :berjalan dalam mode ramping daripada mode normal. Opsi ini diperlukan jika Anda ingin memperbarui data peta menggunakan OSM change files (OSC) di masa mendatang.
  • -d gis :pilih basis data.
  • --hstore :menambahkan tag tanpa kolom ke kolom hstore (kunci/nilai) tambahan ke tabel PostgreSQL
  • --multi-geometry :menghasilkan fitur multi-geometri di tabel postgresql.
  • --style :tentukan lokasi file gaya
  • --number-processes :jumlah core CPU di server Anda. Saya punya 10.
  • -C flag menentukan ukuran cache dalam MegaBytes. Seharusnya sekitar 70% dari RAM gratis di mesin Anda. Ukuran cache yang lebih besar menghasilkan kecepatan impor yang lebih cepat. Misalnya, server saya memiliki RAM kosong 60GB, jadi saya dapat menentukan -C 32000 . Ketahuilah bahwa PostgreSQL akan membutuhkan RAM untuk shared_buffers. Gunakan rumus ini untuk menghitung seberapa besar ukuran cache yang seharusnya:(Total RAM - PostgreSQL shared_buffers) * 70%
  • Terakhir, Anda perlu menentukan lokasi file data peta.

Keluaran Perintah:

Jika Anda akan mengimpor data peta planet lengkap, gunakan --drop opsi dan --flat-nodes pilihan untuk meningkatkan kecepatan impor. Perhatikan bahwa --flat-nodes opsi ini tidak cocok untuk peta kecil.

osm2pgsql --slim -d gis --drop --flat-nodes /home/osm/nodes.cache --hstore --multi-geometry --number-processes 10 --tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto.lua --style /home/osm/openstreetmap-carto/openstreetmap-carto.style -C 32000 /home/osm/planet-latest.osm.pbf

Penggunaan RAM secara bertahap akan meningkat selama proses impor.

Sekarang Anda mungkin tidak perlu melakukan hal lain di server Anda. Karena Anda menggunakan Layar, Anda dapat menekan Ctrl+A , lepaskan tombol tersebut, lalu tekan D untuk melepaskan dari sesi Layar saat ini. Anda akan melihat pesan seperti di bawah ini.

[detached from 32113.pts-1.buster]

Ini memberitahu saya bahwa ID sesi Layar sebelumnya adalah 32113. Anda dapat keluar dari sesi SSH dan bahkan mematikan komputer Anda. Jangan khawatir, proses import OSM masih berjalan. Saat Anda perlu kembali dan memeriksa kemajuan impor, SSH ke server Anda dan jalankan perintah berikut untuk mendapatkan ID Sesi Layar sebelumnya.

screen -ls

Contoh keluaran:

There is a screen on:
	32113.pts-1.buster	(05/19/2020 03:45:29 PM)	(Detached)
1 Socket in /run/screen/S-linuxbabe.

Kemudian Anda dapat melampirkan kembali ke sesi Layar sebelumnya.

screen -r 32113

Dan Anda akan dapat melanjutkan pekerjaan Anda. Setelah impor selesai, berikan semua hak istimewa gis database ke osm pengguna.

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

Keluar dari postgres pengguna.

exit

Catatan :Jika impor osm2pgsql belum selesai, jangan lanjutkan ke langkah 6.

Langkah 6:Instal mod_tile dan Renderd

mod_tile adalah modul Apache yang diperlukan untuk melayani ubin dan renderd adalah daemon rendering untuk merender ubin OpenStreetMap. Repositori Debian Buster default tidak menyertakan mod_tile dan renderd , jadi kita perlu mengkompilasi kode sumbernya.

Pertama, instal ketergantungan pembangunan.

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

Kemudian kloning repositori dari Github.

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

cd mod_tile/

Mengedit file.

nano debian/compat

Secara default, tingkat kompatibilitas diatur ke 7. Namun, Anda harus menggunakan tingkat kompatibilitas 9, jadi ubah angka 7 menjadi 9. Simpan dan tutup file.

Kemudian edit file lain.

nano debian/changelog

Cari baris pertama.

libapache2-mod-tile (0.4-12~precise2) precise; urgency=low

Ubah menjadi berikut ini. 0.4-12 harus diubah menjadi 0.4.12 dan precise2 harus diubah menjadi buster .

libapache2-mod-tile (0.4.12~buster) precise; urgency=low

Simpan dan tutup file. Kemudian kompilasi paket sumber.

./autogen.sh

sudo dpkg-buildpackage -uc -us

Sekarang akan ada dua .deb paket di direktori atas. Instal dengan apt .

cd .. 

sudo apt install ./libapache2-mod-tile_0.4.12~buster_amd64.deb ./renderd_0.4.12~buster_amd64.deb

Selama instalasi, itu akan menginstal server web Apache dan menanyakan apakah Anda ingin mengaktifkan mod_tile di konfigurasi Apache. Pilih Ya dan tekan Enter. Ini akan membuat file konfigurasi Apache untuk mod_tile (/etc/apache2/sites-available/tileserver_site.conf ).

Daemon render akan otomatis dimulai, seperti yang dapat dilihat dengan:

systemctl status renderd

Langkah 7:Buat Mapnik Stylesheet

Instal paket yang diperlukan.

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

Kita juga perlu menginstal nodejs dan npm dari repositori upstream dengan perintah berikut.

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

Kemudian instal paket carto dengan npm.

sudo npm install -g carto

Instal yaml Modul Python.

sudo -H pip3 install pyyaml

Beralih ke postgres pengguna.

sudo -u postgres -i

Cd ke direktori gaya carto.

cd /home/osm/openstreetmap-carto/

Dapatkan shapefile.

scripts/get-external-data.py

Jika Anda menemukan pesan kesalahan berikut saat menjalankan perintah di atas, maka Anda memiliki masalah DNS. Cukup tunggu beberapa menit dan jalankan kembali skrip Python.

Failed to establish a new connection: [Errno -3] Temporary failure in name resolution

Sekarang buat lembar gaya XML Mapnik dengan carto penyusun lembar gaya peta.

carto project.mml > style.xml

Berikan semua hak istimewa gis database ke osm pengguna.

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

Keluar dari postgres pengguna.

exit

Langkah 8:Instal Font

Anda perlu menginstal ttf-dejavu paket.

sudo apt install ttf-dejavu

Untuk menampilkan karakter non-Latin, instal paket berikut.

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

Langkah 9:Konfigurasikan render

Edit file konfigurasi yang dirender.

sudo nano /etc/renderd.conf

Dalam [renderd] bagian, ubah jumlah utas sesuai dengan jumlah inti CPU di server Anda.

num_threads=10

Dalam [default] bagian, ubah nilai XML dan HOST menjadi berikut ini. Perhatikan bahwa baris yang diawali dengan titik koma (;) adalah komentar.

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

Di [mapnik] bagian, ubah nilai plugins_dir berikut ini.

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

Anda dapat mencetak direktori plugins input default dengan perintah berikut.

mapnik-config --input-plugins

Jika ingin menampilkan karakter non-Latin, sebaiknya ubah pengaturan font menjadi berikut.

font_dir=/usr/share/fonts/truetype
font_dir_recurse=true

Simpan dan tutup file. Kemudian edit file skrip init

sudo nano /etc/init.d/renderd

Temukan baris berikut.

RUNASUSER=www-data

Ubah pengguna menjadi osm . Ini diperlukan untuk memuat data peta dari database PostgreSQL.

RUNASUSER=osm

Juga atur jalur file konfigurasi yang dirender.

DAEMON_ARGS="-c etc/renderd.conf"

Simpan dan tutup file. Setel osm sebagai pemilik /var/lib/mod_tile/ direktori, yang akan menampung file ubin yang dirender.

sudo chown osm /var/lib/mod_tile/ -R

Kemudian restart layanan yang diberikan.

sudo systemctl daemon-reload

sudo systemctl restart renderd

Anda perlu memeriksa log yang dirender.

sudo journalctl -eu renderd

Pastikan render tidak menghasilkan kesalahan dalam log setelah restart, atau peta tidak akan ditampilkan.

Langkah 10:Konfigurasi Apache

Edit file host virtual OSM.

sudo nano /etc/apache2/sites-available/tileserver_site.conf

Ubah ServerName menjadi nama domain Anda sendiri seperti tile.your-domain.com . Anda juga perlu membuat catatan DNS A untuk subdomain ini.

ServerName tile.your-domain.com

Simpan dan tutup file. Mulai ulang Apache.

sudo systemctl restart apache2

Kemudian di bilah alamat browser web Anda, ketik

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

Anda akan melihat ubin peta dunia. Selamat! Anda baru saja berhasil membangun server ubin OSM Anda sendiri.

Jika Anda telah mengaktifkan firewall UFW, pastikan untuk membuka port 80 dan 443 dengan perintah berikut.

sudo ufw allow 80,443/tcp

Jika Anda melihat 404 tidak ditemukan kesalahan, cukup tunggu beberapa menit, segarkan halaman di browser Anda dan itu harus dapat memuat ubin peta dunia. Jika masih tidak dapat dimuat, mulai ulang layanan yang diberikan (sudo systemctl restart renderd ).

Langkah 11:Tampilkan Peta Web Ubin Anda

Peta web bersusun juga dikenal sebagai peta licin dalam terminologi OpenStreetMap. Ada dua pustaka peta JavaScript gratis dan sumber terbuka yang dapat Anda gunakan untuk server ubin Anda:OpenLayer dan Leaflet . Keuntungan Leaflet adalah mudah digunakan dan peta Anda akan ramah seluler.

OpenLayer

Untuk menampilkan peta slippy Anda dengan OpenLayer, unduh JavaScript dan CSS dari openlayer.org dan ekstrak ke folder webroot.

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

Selanjutnya, buat index.html berkas.

sudo nano /var/www/index.html

Rekatkan kode HTML berikut di file. Ganti teks berwarna merah dan sesuaikan bujur, lintang, dan tingkat zoom sesuai kebutuhan Anda.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Accessible Map</title>
<link rel="stylesheet" href="http://tile.your-domain.com/v5.3.0/css/ol.css" type="text/css">
<script src="http://tile.your-domain.com/v5.3.0/build/ol.js"></script>
<style>
  a.skiplink {
    position: absolute;
    clip: rect(1px, 1px, 1px, 1px);
    padding: 0;
    border: 0;
    height: 1px;
    width: 1px;
    overflow: hidden;
  }
  a.skiplink:focus {
    clip: auto;
    height: auto;
    width: auto;
    background-color: #fff;
    padding: 0.3em;
  }
  #map:focus {
    outline: #4A74A8 solid 0.15em;
  }
</style>
</head>
<body>
  <a class="skiplink" href="#map">Go to map</a>
  <div id="map" class="map" tabindex="0"></div>
  <button id="zoom-out">Zoom out</button>
  <button id="zoom-in">Zoom in</button>
  <script>
    var map = new ol.Map({
      layers: [
        new ol.layer.Tile({
          source: new ol.source.OSM({
             url: 'http://tile.your-domain.com/osm/{z}/{x}/{y}.png'
          })
       })
     ],
     target: 'map',
     controls: ol.control.defaults({
        attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
          collapsible: false
        })
     }),
    view: new ol.View({
       center: [244780.24508882355, 7386452.183179816],
       zoom:5
    })
 });

  document.getElementById('zoom-out').onclick = function() {
    var view = map.getView();
    var zoom = view.getZoom();
    view.setZoom(zoom - 1);
  };

  document.getElementById('zoom-in').onclick = function() {
     var view = map.getView();
     var zoom = view.getZoom();
     view.setZoom(zoom + 1);
  };
</script>
</body>
</html>

Simpan dan tutup file. Sekarang Anda dapat melihat peta slippy Anda dengan mengetikkan sub-domain Anda di bilah alamat browser.

tile.your-domain.com

atau

tile.your-domain.com/index.html

Leaflet

Untuk menampilkan peta slippy Anda dengan Leftlet, unduh JavaScript dan CSS dari leftletjs.com dan ekstrak ke folder webroot.

cd /var/www/

sudo wget http://cdn.leafletjs.com/leaflet/v1.7.1/leaflet.zip

sudo unzip leaflet.zip

Selanjutnya, buat index.html berkas.

sudo nano /var/www/index.html

Rekatkan kode HTML berikut di file. Ganti teks berwarna merah dan sesuaikan bujur, lintang, dan tingkat zoom sesuai kebutuhan Anda.

<html>
<head>
<meta charset="UTF-8">
<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([55,8],5);
    L.tileLayer('http://tile.your-domain.com/osm/{z}/{x}/{y}.png',{maxZoom:18}).addTo(map);
</script>
</body>
</html>

Simpan dan tutup file. Sekarang Anda dapat melihat peta slippy Anda dengan mengetikkan alamat IP server Anda di browser.

tile.your-domain.com

atau

tile.your-domain.com/index.html

Langkah 12:Pra-render Ubin

Merender ubin dengan cepat akan meningkatkan waktu pemuatan peta di browser web. Untuk melakukan pra-render ubin alih-alih merender dengan cepat, gunakan render_list berikut ini memerintah. Gunakan -z dan -Z flag menentukan tingkat zoom dan mengganti jumlah utas sesuai dengan jumlah inti CPU di server Anda. Render_list merender daftar petak peta dengan mengirimkan permintaan ke daemon rendering. Ubin pra-render akan di-cache di /var/lib/mod_tile direktori.

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

Jika nanti Anda memperbarui data peta, Anda dapat melakukan pra-render semua ubin lagi dengan menggunakan --force pilihan.

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

Untuk merender ubin peta di latar belakang, tambahkan & simbol di akhir.

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

Sekarang Anda dapat menutup jendela terminal. Untuk memeriksa kemajuan rendering, buka sesi SSH lain, dan jalankan perintah berikut.

sudo journalctl -eu renderd

Perintah di atas akan menampilkan log terbaru dari renderd melayani. Baris berikut menunjukkan bahwa server OSM saya sekarang merender petak peta pada tingkat zoom 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

Langkah 13:Aktifkan HTTPS

Untuk mengenkripsi lalu lintas HTTP, kita dapat memperoleh dan memasang sertifikat TLS gratis dari Let's Encrypt. Pertama, instal klien Let's Encrypt (certbot) di Debian 10.

sudo apt install certbot

Karena kita menggunakan server web Apache, kita juga perlu menginstal plugin Apache.

sudo apt install python3-certbot-apache

Kemudian jalankan perintah berikut untuk mendapatkan dan menginstal sertifikat TLS.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple --email [email protected] -d tile.your-domain.com

Setelah sertifikat dipasang, segarkan halaman web dan Anda akan melihat kunci di bilah alamat.

Jika Anda melihat segitiga kuning di bilah alamat Firefox, itu berarti URL ubin masih menggunakan HTTP. Anda perlu mengedit file index.html dan mengganti semua protokol HTTP dengan HTTPS dengan perintah berikut.

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

Langkah 14:Aktifkan HTTP2

Untuk lebih meningkatkan kinerja pemuatan peta, Anda dapat mengaktifkan protokol HTTP2. Pertama, Anda perlu mengaktifkan modul HTTP2.

sudo a2enmod http2

Kemudian buka file host virtual SSL.

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

Letakkan direktif berikut setelah pembukaan <VirtualHost *:443> tag.

Protocols h2 http/1.1

Simpan dan tutup file. Kemudian restart Apache agar perubahan diterapkan.

sudo systemctl restart apache2

Batasi Akses ke Server Tile OSM Anda dengan HTTP Referrer Header

Secara default, siapa pun dapat menggunakan OpenLayer atau Leaflet untuk membuat peta licin dengan URL server ubin Anda. Untuk membatasi akses ke server ubin Anda, edit file host virtual Apache.

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

Tambahkan baris berikut di <VirtualHost> tag.

    <Location /osm>
        SetEnvIf Referer example\.com trusted_referer
        Order deny,allow
        Deny from all
        Allow from env=trusted_referer
    </Location>

Kode di atas memeriksa apakah header perujuk HTTP menyertakan domain Anda sendiri. Jika tidak, akses ke /osm direktori akan ditolak. Garis miring terbalik digunakan untuk menghindari karakter titik. Untuk menambahkan beberapa nama host sebagai perujuk tepercaya, gunakan sintaks berikut.

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

Simpan dan tutup file. Kemudian uji sintaksnya.

sudo apache2ctl -t

Jika sintaksnya Ok, muat ulang Apache agar perubahan diterapkan.

sudo systemctl reload apache2

Perpanjang Otomatis Sertifikat TLS

Anda dapat membuat pekerjaan Cron untuk memperbarui sertifikat TLS secara otomatis. Cukup buka file crontab pengguna root.

sudo crontab -e

Tambahkan baris berikut di bagian bawah file.

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

Database PostgreSQL dan Server Web pada Host yang Berbeda

Jika server web PostgreSQL dan Apache Anda berada di host yang berbeda, maka Anda perlu mengedit project.mml file di host Apache.

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

Temukan baris berikut:

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

Tentukan alamat IP server database PostgreSQL.

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

Simpan dan tutup file. Kemudian buat lembar gaya XML Mapnik dengan carto penyusun lembar gaya peta.

carto project.mml > style.xml

Di server database PostgreSQL, edit file konfigurasi utama.

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

Tambahkan baris berikut untuk menyetel PostgreSQL agar mendengarkan di semua antarmuka.

listen_addresses = '*'

Simpan dan tutup file. Kemudian edit file konfigurasi otentikasi klien PostgreSQL.

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

Tambahkan baris berikut di akhir file untuk mengizinkan osm pengguna untuk login dari host Apache. Ganti 10.0.0.1 dengan alamat IP host Apache.

host   gis   osm   10.0.0.1/32   trust

Simpan dan tutup file. Kemudian restart PostgreSQL.

sudo systemctl restart postgresql

Mulai ulang daemon render di host Apache.

sudo systemctl restart renderd

Anda perlu memeriksa log dari render. Pastikan render tidak menghasilkan kesalahan dalam log, atau peta tidak akan ditampilkan.

sudo journalctl -eu renderd

Anda juga harus membatasi akses ke port 5432 dari server database PostgreSQL. Misalnya, Anda dapat menggunakan perintah UFW berikut untuk mengizinkan alamat IP host Apache saja.

sudo ufw allow in from 10.0.0.1 to any port 5432

Langkah Selanjutnya

Saya harap tutorial ini membantu Anda menyiapkan server ubin OpenStreetMap di Debian 10. Anda mungkin juga ingin menyiapkan server geocoding Nominatim untuk menyediakan fungsionalitas pencarian.

  • Menyiapkan Server Geocoding Nominatim OSM di Debian 10

Seperti biasa, jika menurut Anda postingan ini bermanfaat, berlangganan newsletter gratis kami untuk mendapatkan lebih banyak tips dan trik. Hati-hati


Debian
  1. Cara Mengatur Alamat IP Statis di Debian 10 Buster

  2. Cara mengatur server SFTP di Server Debian 11

  3. Cara Menginstal Server MySQL di Debian 10 Buster

  1. Cara Mengatur Server Samba di Debian 10 Buster

  2. Cara Mengatur Server LAMP di Debian 10 Buster

  3. Cara Mengatur Server NFS di Debian 10 Buster

  1. Cara Mengatur Server LEMP di Debian 10 Buster

  2. Cara Mengatur RVM di Debian 10 Buster

  3. Cara Mengatur Server OpenVPN di Debian 9