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 Ubuntu 20.04 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
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-12-postgis-3
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 --group 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/12/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/12/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 file /etc/sysctl.conf.
sudo nano /etc/sysctl.conf
Tambahkan baris berikut di akhir file ini 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
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 Ubuntu 20.04:
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.focal]
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.focal (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.
Pemecahan Masalah
Jika Anda mengalami kesalahan berikut saat mengimpor data peta dari file PBF,
PBF error : invalid Blobheader size (> max_blob_header_size)
itu mungkin karena file PBF Anda rusak. Verifikasi md5sum dari file PBF seperti di bawah ini.
md5sum great-britain-latest.osm.pbf
Bandingkan hasilnya dengan nilai md5sum pada halaman download file PBF.
Langkah 6:Instal Renderd dan mod_tile
renderd
adalah daemon untuk merender ubin OpenStreetMap dari database PostgreSQL.mod_tile
adalah modul Apache yang digunakan untuk menyajikan ubin ke klien (mis. browser web)
Repositori Ubuntu default tidak menyertakan mod_tile
dan renderd
, tetapi kita dapat menginstalnya dari PPA OSM.
sudo apt install software-properties-common sudo add-apt-repository ppa:osmadmins/ppa sudo apt install apache2 libapache2-mod-tile renderd
Server web Apache akan diinstal dan file konfigurasi untuk renderd
juga akan dibuat di /etc/apache2/conf-available/renderd.conf
.
Aktifkan tile
modul.
sudo a2enmod tile
Selanjutnya, buat host virtual untuk server ubin.
sudo nano /etc/apache2/sites-available/tileserver_site.conf
Tambahkan baris berikut dalam file ini. Ganti tile.your-domain.com
dengan nama domain asli Anda. Jangan lupa ke DNS A record.
<VirtualHost *:80> ServerName tile.your-domain.com LogLevel info Include /etc/apache2/conf-available/renderd.conf </VirtualHost>
Simpan dan tutup file. Aktifkan host virtual ini.
sudo a2ensite tileserver_site.conf
Mulai ulang Apache agar perubahan diterapkan.
sudo systemctl restart apache2
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
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 carto
paket dengan npm
.
sudo npm install -g carto
Instal psycopg2
Modul Python.
sudo -H pip3 install psycopg2==2.8.5
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 renderd
file konfigurasi.
sudo nano /etc/renderd.conf
Dalam [renderd]
bagian, ubah jumlah utas sesuai dengan jumlah inti CPU di server Anda.
num_threads=10
Tambahkan default
lapisan. Baris yang diawali dengan titik koma (;) adalah komentar.
; ADD YOUR LAYERS: [default] URI=/osm/ XML=/home/osm/openstreetmap-carto/style.xml HOST=tile.your-domain.com
Simpan dan tutup file. Kemudian buat direktori baru untuk layanan yang diberikan.
sudo mkdir /etc/systemd/system/renderd.service.d/
Buat file konfigurasi khusus di bawah direktori ini.
sudo nano /etc/systemd/system/renderd.service.d/custom.conf
Tambahkan baris berikut dalam file ini.
[Service] User=osm
Simpan dan tutup file. Ubah kepemilikan /run/renderd/
dan /var/cache/renderd/tiles/
direktori.
sudo chown osm /run/renderd/ -R sudo chown osm /var/cache/renderd/tiles/ -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:Uji
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
Sekarang Anda memiliki server ubin OSM yang berfungsi, Anda perlu menggunakan perpustakaan peta JavaScript untuk menampilkan peta di server Anda yang lain. Dalam tutorial ini, saya membuat peta web di server tile, tetapi Anda dapat melakukannya di server lain.
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/html/ 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/html/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/html/ sudo wget http://cdn.leafletjs.com/leaflet/v1.7.1/leaflet.zip sudo unzip leaflet.zip
Selanjutnya, buat index.html
mengajukan. Jika sudah ada index.html
file, lalu hapus konten aslinya.
sudo nano /var/www/html/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,0.8],6); 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. osmadmins/ppa
PPA berisi certbot
biner, jadi saya sarankan menginstal certbot
dari toko Snap.
sudo apt install snapd sudo snap install --classic certbot
Kemudian jalankan perintah berikut untuk mendapatkan dan menginstal sertifikat TLS.
sudo /snap/bin/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 /snap/bin/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/12/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/12/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 mengatur server ubin OpenStreetMap di Ubuntu 20.04. Anda mungkin juga ingin menyiapkan server geocoding Nominatim untuk menyediakan fungsionalitas pencarian alamat.
- Menyiapkan OSM Nominatim Geocoding Server di Ubuntu 20.04
Anda dapat menyediakan fungsionalitas navigasi ke peta Anda dengan Open Source Routing Machine (OSRM).
- Cara Menginstal OSRM di Ubuntu 20.04 – Mesin Perutean Sumber Terbuka
Seperti biasa, jika menurut Anda postingan ini bermanfaat, berlangganan newsletter gratis kami untuk mendapatkan lebih banyak tips dan trik. Hati-hati