GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Mengatur Server Ubin Vektor Tegola di Ubuntu 20.04 untuk OpenStreetMap

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 -ls

Contoh 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 32113

Dan 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.zip

Buka ritsletingnya.

sudo apt install unzipunzip tegola_linux_amd64.zip

Pindahkan 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.sh

Masukkan 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-bin

Buat relasi land_polygons di gis basis data.

/opt/tegola-osm/osm_land.sh

Selanjutnya, edit /opt/tegola-osm/natural_earth.sh berkas.

sudo nano /opt/tegola-osm/natural_earth.sh

Masukkan 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.sh

Jalankan postgis_helpers Skrip SQL.

sudo -u postgres psql -d osm -a -f /opt/tegola-osm/postgis_helpers.sql

Jalankan 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.sql

Langkah 7:Mulai Tegola

Edit file konfigurasi.

sudo nano /opt/tegola-osm/tegola.toml

Konfigurasikan 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 TileJSON

Anda 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 TileJSON

Simpan dan tutup file. Kemudian mulai Tegola.

/usr/local/bin/tegola serve --config=/opt/tegola-osm/tegola.toml

Sekarang 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.service

Tambahkan 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.target

Simpan dan tutup file. Buat www-data sebagai pemilik /tmp/tegola-cache/ direktori.

sudo chown www-data:www-data /tmp/tegola-cache/ -R

Kemudian aktifkan dan mulai layanan ini.

sudo systemctl aktifkan tegola --now

Periksa statusnya. Pastikan itu berjalan.

systemctl status tegola

Kemudian di bilah alamat browser web Anda, ketik

alamat-ip-server-Anda:8080

Anda 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 nginx

Kemudian buat file blok server untuk Tegola.

sudo nano /etc/nginx/conf.d/tegola.conf

Tambahkan 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 -t

Jika pengujian berhasil, muat ulang Nginx agar perubahan diterapkan.

sudo systemctl reload nginx

Sekarang 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 apache2

Untuk menggunakan Apache sebagai proxy terbalik, kita perlu mengaktifkan proxy modul dan modul header.

sudo a2enmod proxy proxy_http header

Kemudian buat file host virtual untuk Tegola.

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

Masukkan 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.conf

Mulai ulang Apache

sudo systemctl restart Apache2

Sekarang 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 certbot

Jika Anda menggunakan Nginx, maka Anda juga perlu menginstal plugin Certbot Nginx.

sudo apt install python3-certbot-nginx

Selanjutnya, jalankan perintah berikut untuk mendapatkan dan menginstal sertifikat TLS.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [dilindungi email] -d tile.example.com

Jika Anda menggunakan Apache , maka Anda perlu menginstal plugin Certbot Apache.

sudo apt install python3-certbot-apache

Selanjutnya, 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.com

Dimana:

  • --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


Ubuntu
  1. Cara Mengatur Server LAMP Ubuntu/Debian

  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 Nginx sebagai Proxy Terbalik di Ubuntu 20.04

  3. Cara Mengatur Server TeamSpeak di Ubuntu 16.04

  1. Cara Mengatur Server OpenVPN di Ubuntu 18.04

  2. Cara Mengatur Blok Server Nginx di Ubuntu 20.04

  3. Cara Mengatur CUPS Print Server di Ubuntu 20.04