GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Mengatur Server Ubin OpenStreetMap di Ubuntu 20.04

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


Ubuntu
  1. Cara Mengatur Nginx sebagai Proxy Terbalik di Ubuntu 20.04

  2. Cara Mengatur WireGuard di Ubuntu 22.04

  3. Cara Mengatur Server dan Klien NFS di Ubuntu 20.04

  1. Cara Mengatur &Menginstal Server Proxy Squid di Ubuntu 18.04

  2. Cara Mengatur Server LAMP Ubuntu/Debian

  3. Cara Mengatur Server TeamSpeak di Ubuntu 16.04

  1. Cara Mengatur Blok Server Nginx di Ubuntu 18.04

  2. Cara Mengatur Server OpenVPN di Ubuntu 18.04

  3. Cara Mengatur Blok Server Nginx di Ubuntu 20.04