Tegola adalah server ubin vektor sumber terbuka untuk OpenStreetMap . Sebelumnya telah kami jelaskan proses setup tile server OSM dengan mapnik dan mod_tile yang merupakan raster - server ubin berbasis. Tutorial ini akan menunjukkan cara menyiapkan vektor Tegola server ubin di Ubuntu 20.04.
Manfaat Ubin Vektor
- Kualitas tampilan yang lebih baik untuk perangkat DPI tinggi (tampilan retina)
- Format kecil yang efisien (Tidak perlu 512 * 512 gambar)
- Teks yang lebih jelas dan lebih mudah dibaca
- Pelabelan langsung untuk tampilan awal
- Konten dan gaya terpisah, yang memungkinkan pembuatan beberapa gaya yang mengarah ke tumpukan ubin yang sama.
- Mode siang dan malam
Format Ubin Vektor
Ada beberapa format untuk ubin vektor.
- GeoJSON
- TopoJSON
- Ubin Vektor Kotak Peta (MVT)
- 05m
- biner OpenScienceMap
- JSON Arc GeoServices
Tegola menggunakan format petak vektor Mapbox.
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.
Perlu waktu lama untuk mengimpor data peta besar, seperti seluruh planet, ke database PostgreSQL. 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
.
buat osm pengguna
Tetapkan kata sandi untuk pengguna osm.
psql -c "UBAH USER osm DENGAN PASSWORD 'secret_password';"
Kemudian buat database dengan nama osm
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 osm
Selanjutnya, buat postgis
dan hstore
ekstensi untuk osm
basis data.
psql -c "BUAT EKSTENSI postgis;" -d osmpsql -c "BUAT EKSTENSI hstore;" -d osm
Setel osm
sebagai pemilik meja.
psql -c "ALTER TABLE spasial_ref_sys PEMILIK KE osm;" -d osm
Buat database bernama natural_earth
dan pada saat yang sama membuat osm
sebagai pemilik database.
createdb -E UTF8 -O osm natural_earth
Selanjutnya, buat postgis
dan hstore
ekstensi untuk natural_earth
basis data.
psql -c "BUAT EKSTENSI postgis;" -d natural_earthpsql -c "BUAT EKSTENSI hstore;" -d natural_earth
Keluar dari postgres
pengguna.
keluar
Langkah 3: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 =1GBmaintenance_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.
efektif_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 besar
Contoh keluaran:
AnonHugePages:0 kBShmemHugePages:0 kBHugePages_Total:0HugePages_Free:0HugePages_Rsvd:0HugePages_Surp:0Ukuran halaman besar:2048 kB Besarlb: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 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 besar
Kita bisa melihat ada 7.950 halaman besar yang tersedia.
AnonHugePages:0 kBShmemHugePages:0 kBHugePages_Total:7950HugePages_Free:7950HugePages_Rsvd:0HugePages_Surp:0Ukuran halaman besar: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:
layar
Saat peluncuran pertama, Anda akan melihat teks pengantar, cukup tekan Enter
untuk mengakhiri. Kemudian Anda akan dapat menjalankan perintah seperti biasa.
Langkah 4:Impor Data Peta ke PostgreSQL
Untuk mengimpor data peta, kita akan menggunakan imposm
yang mengonversi data OpenStreetMap ke database PostgreSQL yang mendukung postGIS. Unduh dari Github.
wget https://github.com/omniscale/imposm3/releases/download/v0.11.1/imposm-0.11.1-linux-x86-64.tar.gz
Ekstrak arsip.
tar xvf imposm-0.11.1-linux-x86-64.tar.gz
Pindahkan ke /opt/
direktori.
sudo mv imposm-0.11.1-linux-x86-64 /opt/imposm
Unduh tegola-osm
skrip.
git clone https://github.com/go-spatial/tegola-osm.git
Pindahkan ke /opt/
direktori.
sudo mv tegola-osm /opt/
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
Jalankan perintah berikut untuk mengimpor data peta.
/opt/imposm/imposm import -connection postgis://osm:osm_password@localhost/osm -mapping /opt/tegola-osm/imposm3.json -read great-britain-latest.osm.pbf -write
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.
[terlepas dari 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 -lsContoh keluaran:
Ada layar di:32113 .pts-1.focal (19/05/2020 03:45:29 PM) (Terpisah)1 Soket di /run/screen/S-linuxbabe.Kemudian Anda dapat melampirkan kembali ke sesi Layar sebelumnya.
layar -r 32113Dan Anda akan dapat melanjutkan pekerjaan Anda.
Setelah data peta diimpor, jalankan perintah berikut untuk menerapkannya untuk produksi.
/opt/imposm/imposm import -connection postgis://osm:osm_password@localhost/osm -mapping /opt/tegola-osm/imposm3.json -deployproduction
Langkah 5:Unduh Tegola
Buka halaman Tegola Github dan unduh versi linux. Anda dapat menggunakan perintah berikut untuk mengunduhnya di terminal.
wget https://github.com/go-spatial/tegola/releases/download/v0.13.0/tegola_linux_amd64.zipBuka ritsletingnya.
sudo apt install unzipunzip tegola_linux_amd64.zipPindahkan biner ke
/usr/local/bin/
direktori.sudo mv tegola /usr/local/bin/Langkah 6:Impor kumpulan data OSM Land dan Natural Earth
Edit
/opt/tegola-osm/osm_land.sh
berkas.sudo nano /opt/tegola-osm/osm_land.shMasukkan detail basis data Anda.
# variabel koneksi databaseDB_NAME="osm"DB_HOST="localhost"DB_PORT="5432"DB_USER="osm"DB_PW="osm_password"Simpan dan tutup file. Instal
gdal
.sudo apt install gdal-binBuat relasi
land_polygons
digis
basis data./opt/tegola-osm/osm_land.sh
Selanjutnya, edit
/opt/tegola-osm/natural_earth.sh
berkas.sudo nano /opt/tegola-osm/natural_earth.shMasukkan detail basis data Anda.
# variabel koneksi databaseDB_NAME="natural_earth"DB_HOST="localhost"DB_PORT="5432"DB_USER="osm"DB_PW="osm_password"Simpan dan tutup file. Kemudian buat tabel di
natural_earth
basis data./opt/tegola-osm/natural_earth.shJalankan
postgis_helpers
Skrip SQL.sudo -u postgres psql -d osm -a -f /opt/tegola-osm/postgis_helpers.sqlJalankan
postgis_index.sql
skrip untuk menambahkan indeks ke kolom tabel OSM untuk meningkatkan kinerja kueri.sudo -u postgres psql -d osm -a -f /opt/tegola-osm/postgis_index.sqlLangkah 7:Mulai Tegola
Edit file konfigurasi.
sudo nano /opt/tegola-osm/tegola.tomlKonfigurasikan port mendengarkan, jenis cache, dan penyedia data sebagai berikut.
[webserver]port =":8080"# Tegola menawarkan tiga strategi cache tile:"file", "redis", dan "s3"[cache]type ="file"basepath="/tmp/tegola-cache" # OpenStreetMap (OSM)[[penyedia]]name ="osm"type ="postgis"host ="127.0.0.1"port ="5432"database ="osm"user ="osm"password ="osm_password"# Natural Earth [[penyedia]]name ="ne"type ="postgis"host ="127.0.0.1"port ="5432"database ="natural_earth"user ="osm"password ="osm_password"Temukan baris berikut.
center =[-76.275329586789, 39.153492567373, 8.0] # nilai tengah opsional. bagian dari spesifikasi TileJSONAnda dapat mengatur lokasi pusat kustom (bujur dan lintang) untuk peta Anda dan tingkat zoom default. Perhatikan bahwa Anda harus menggunakan nilai desimal dan tidak dapat menggunakan nilai integer.
center =[0.8, 55.5, 5.0] # nilai tengah opsional. bagian dari spesifikasi TileJSONSimpan dan tutup file. Kemudian mulai Tegola.
/usr/local/bin/tegola serve --config=/opt/tegola-osm/tegola.tomlSekarang Tegola mendengarkan pada port 8080.
Langkah 8:Buat Layanan Systemd untuk Tegola
Tegola berjalan di latar depan. Untuk menjalankannya di latar belakang, kita dapat membuat layanan sistem, yang juga memungkinkan Tegola untuk memulai secara otomatis saat sistem boot. Tekan
Ctrl+C
untuk menghentikan proses Tegola saat ini, lalu buat file tegola.service.sudo nano /etc/systemd/system/tegola.serviceTambahkan baris berikut ke file ini.
[Unit]Description=Server Ubin Vektor Tegola[Layanan]Tipe=simpleUser=www-dataExecStart=/usr/local/bin/tegola serve --config=/opt/tegola-osm/tegola.tomlRestart=on-failureRestartSec =5[Install]WantedBy=multi-user.targetSimpan dan tutup file. Buat
www-data
sebagai pemilik/tmp/tegola-cache/
direktori.sudo chown www-data:www-data /tmp/tegola-cache/ -RKemudian aktifkan dan mulai layanan ini.
sudo systemctl aktifkan tegola --nowPeriksa statusnya. Pastikan itu berjalan.
systemctl status tegola
Kemudian di bilah alamat browser web Anda, ketik
alamat-ip-server-Anda:8080Anda akan melihat peta ubin vektor. Selamat! Anda baru saja berhasil membangun server ubin vektor Anda sendiri. Perhatikan bahwa Firefox versi lama tidak dapat menampilkan ubin vektor ini. Anda perlu menggunakan perpustakaan pihak ketiga untuk menampilkan peta berbasis ubin vektor, yang dijelaskan di akhir tutorial ini.
Langkah 9:Menyiapkan Proksi Terbalik
Untuk mengakses Tegola menggunakan nama domain, kita dapat mengatur proxy terbalik untuk Tegola dengan Nginx atau Apache. Ini juga akan memungkinkan kami untuk mengaktifkan HTTPS dengan sertifikat Let's Encrypt gratis.
Nginx
Nginx adalah server web yang sangat populer dan proxy terbalik. Jika Anda lebih suka menggunakan Nginx, jalankan perintah berikut untuk menginstalnya.
sudo apt install nginxKemudian buat file blok server untuk Tegola.
sudo nano /etc/nginx/conf.d/tegola.confTambahkan konten berikut ke file ini. Ganti
tile.example.com
dengan nama domain Anda sendiri. Anda juga harus membuat catatan DNS A untuk subdomain ini. Jika Anda tidak memiliki nama domain asli, saya sarankan pergi ke NameCheap untuk membelinya. Harganya rendah dan mereka memberikan perlindungan privasi whois gratis seumur hidup.server { dengarkan 80; dengarkan [::]:80; nama_server ubin.contoh.com; access_log /var/log/nginx/tegola.access; error_log /var/log/nginx/tegola.error; lokasi / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Diteruskan-Untuk $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $skema; proxy_set_header X-Forwarded-Protocol $skema; proxy_set_header X-Forwarded-Host $http_host; }}Simpan dan tutup file ini. Kemudian uji konfigurasi Nginx.
sudo nginx -tJika pengujian berhasil, muat ulang Nginx agar perubahan diterapkan.
sudo systemctl reload nginxSekarang Anda dapat mengakses Tegola melalui
tile.example.com
.Apache
Jika Anda lebih suka Apache daripada Nginx, maka instal server web Apache dengan menggunakan perintah berikut.
sudo apt install apache2Untuk menggunakan Apache sebagai proxy terbalik, kita perlu mengaktifkan
proxy
modul dan modul header.sudo a2enmod proxy proxy_http headerKemudian buat file host virtual untuk Tegola.
sudo nano /etc/apache2/sites-available/tegola.confMasukkan konfigurasi berikut ke dalam file. Ganti
tile.example.com
dengan nama domain Anda yang sebenarnya. Jangan lupa untuk membuat catatan DNS A untuk sub-domain ini. Jika Anda tidak memiliki nama domain asli, saya sarankan pergi ke NameCheap untuk membelinya. Harganya rendah dan mereka memberikan perlindungan privasi whois gratis seumur hidup.ServerName tile.example.com ErrorDocument 404 /404.html #HTTP proxy ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ ProxyPreserveHost Aktif Simpan dan tutup file. Kemudian aktifkan host virtual ini.
sudo a2ensite tegola.confMulai ulang Apache
sudo systemctl restart Apache2Sekarang Anda dapat mengakses Tegola menggunakan nama domain
tile.example.com
.Langkah 10:Aktifkan HTTPS
Untuk mengenkripsi lalu lintas HTTP saat Anda mengunjungi server Tegola dari luar, kami dapat mengaktifkan HTTPS dengan memasang sertifikat TLS gratis yang dikeluarkan dari Let's Encrypt. Jalankan perintah berikut untuk menginstal klien Let's Encrypt (certbot) di Ubuntu 20.04.
sudo apt install certbotJika Anda menggunakan Nginx, maka Anda juga perlu menginstal plugin Certbot Nginx.
sudo apt install python3-certbot-nginxSelanjutnya, jalankan perintah berikut untuk mendapatkan dan menginstal sertifikat TLS.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [dilindungi email] -d tile.example.comJika Anda menggunakan Apache , maka Anda perlu menginstal plugin Certbot Apache.
sudo apt install python3-certbot-apacheSelanjutnya, jalankan perintah berikut untuk mendapatkan dan menginstal sertifikat TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --uir --email [dilindungi email] -d tile.example.comDimana:
--nginx
:Gunakan plugin nginx.--apache
:Gunakan plugin Apache.--agree-tos
:Menyetujui persyaratan layanan.--redirect
:Memaksa HTTPS dengan pengalihan 301.--hsts
:Tambahkan header Strict-Transport-Security ke setiap respons HTTP. Memaksa browser untuk selalu menggunakan TLS untuk domain. Mempertahankan dari SSL/TLS Stripping.--staple-ocsp
:Mengaktifkan Stapel OCSP. Respons OCSP yang valid ditempelkan ke sertifikat yang ditawarkan server selama TLS.--uir
:tingkatkan permintaan yang tidak aman.
Sertifikat sekarang harus diperoleh dan diinstal secara otomatis. Dan Anda dapat mengakses Tegola melalui HTTPS:https://tile.example.com
.
Menyiapkan Contoh Peta
Anda perlu menggunakan perpustakaan pihak ketiga untuk menampilkan peta berbasis ubin vektor. Saya menggunakan OpenLayer sebagai contoh. Buat map.html
file di server Anda dan masukkan kode berikut.
Contoh OpenLayers
Simpan dan tutup file. Begini tampilannya.
Kesimpulan
Saya harap artikel ini membantu Anda mengatur Tegola Vector Tile Server di Ubuntu 20.04. Seperti biasa, jika menurut Anda postingan ini bermanfaat, berlangganan newsletter gratis kami untuk mendapatkan lebih banyak tips dan trik. Hati-hati