手动构建磁贴服务器(16.04.2 LTS)
轉載:?https://switch2osm.org/manually-building-a-tile-server-16-04-2-lts/
本頁介紹如何安裝,設置和配置操作您自己的磁貼服務器所需的所有軟件。逐步說明是為Ubuntu Linux16.04.2 LTS(Xenial Xerus)編寫的。
軟件安裝
OSM切片服務器堆棧是程序和庫的集合,它們一起工作以創建切片服務器。與OpenStreetMap一樣,有很多方法可以實現這一目標,而且幾乎所有組件都有其他具有各種特定優點和缺點的替代方案。本教程描述了主OpenStreetMap.org磁貼服務器上也使用的最標準版本。
它由5個主要組件組成:Mod_tile,renderd,mapnik,osm2pgsql和postgresql / postgis數據庫。Mod_tile是一個apache模塊,它為緩存的tile提供服務并決定哪些tile需要重新渲染 - 要么是因為它們尚未緩存,要么是因為它們已過時。Renderd提供了一個優先級排隊系統,用于呈現請求以管理和平滑渲染請求的負載。Mapnik是執行實際渲染并由renderd使用的軟件庫。
請注意,這些說明是針對新安裝的Ubuntu 16.04服務器編寫和測試的。如果您已經安裝了某些軟件的其他版本(可能是從早期的Ubuntu版本升級,或者您設置了一些PPA來加載),那么您可能需要進行一些調整。
為了構建這些組件,需要首先安裝各種依賴項:
sudo apt install libboost-all-dev git-core tar unzip wget bzip2 build-essential autoconf libtool libxml2-dev libgeos-dev libgeos ++ - dev libpq-dev libbz2-dev libproj-dev munin-node munin libprotobuf-c0-dev protobuf-c -compiler libfreetype6-dev libpng12-dev libtiff5-dev libicu-dev libgdal-dev libcairo-dev libcairomm-1.0-dev apache2 apache2-dev libagg-dev liblua5.2-dev ttf-unifont lua5.1 liblua5.1-dev libgeotiff- EPSG說是安裝。這需要一段時間,所以去喝一杯茶。此列表包括各種實用程序和庫,Apache Web服務器和“carto”,用于將Carto-CSS樣式表轉換為地圖渲染器可以理解的“mapnik”。完成后,安裝第二組先決條件:
安裝postgresql / postgis
在Ubuntu上有postgis和postgresql的預打包版本,所以這些只需通過Ubuntu包管理器安裝即可。
sudo apt-get install postgresql postgresql-contrib postgis postgresql-9.5-postgis-2.2這里“postgresql”是我們要存儲地圖數據的數據庫,“postgis”為它添加了一些額外的圖形支持。再次說,是安裝。
現在您需要創建一個postgis數據庫。各種程序的默認值假設數據庫被稱為gis,我們將在本教程中使用相同的約定,盡管這不是必需的。將您的用戶名替換為renderaccount,在下面使用。這應該是用Mapnik呈現地圖的用戶名。
sudo -u postgres -i createuser renderaccount#為超級用戶回答yes(盡管這不是嚴格必要的) createdb -E UTF8 -O renderaccount gis在仍然作為“postgres”用戶工作時,在PostgreSQL數據庫上設置PostGIS(再次,用下面的用戶名替換renderaccount):
PSQL(那會讓你進入“postgres =#”提示)
\ c gis(它將回答'您現在已連接到數據庫“gis”作為用戶“postgres”。')
CREATE EXTENSION postgis;(它會回答CREATE EXTENSION)
CREATE EXTENSION hstore;(它會回答CREATE EXTENSION)
ALTER TABLE geometry_columns OWNER TO renderaccount;(它會回答ALTER TABLE)
ALTER TABLE spatial_ref_sys OWNER to renderaccount;(它會回答ALTER TABLE)
\ q(它將退出psql并返回正常的Linux提示符)
出口(退出回到我們之前做過“sudo -u postgres -i”之前的用戶)
如果您還沒有為此用戶創建一個Unix用戶,請在出現提示時選擇密碼:
sudo useradd -m renderaccount sudo passwd renderaccount同樣,上面用您選擇的非root用戶名替換“renderaccount”。
安裝osm2pgsql
我們需要從源代碼安裝各種軟件。第一個是“osm2pgsql”。存在各種工具來將OpenStreetMap數據導入和管理到數據庫中。在這里,我們將使用“osm2pgsql”,這可能是最受歡迎的。
mkdir?/ src cd?/ src git clone git://github.com/openstreetmap/osm2pgsql.git cd osm2pgsqlosm2pgsql使用的構建機制自舊版本以來已發生變化,因此我們需要為此安裝更多先決條件:
sudo apt install make cmake g ++ libboost-dev libboost-system-dev libboost-filesystem-dev libexpat1-dev zlib1g-dev libbz2-dev libpq-dev libgeos-dev libgeos ++ - dev libproj-dev lua5.2 liblua5.2-dev再次說,是安裝。
mkdir build && cd build cmake ..(該輸出應以“構建文件已寫入...”結束
使(該輸出應該以“[100%]建立目標osm2pgsql”結束)
sudo make installMapnik的
接下來,我們將安裝Mapnik。我們將在Ubuntu 16.04中使用默認版本:
sudo apt-get install autoconf apache2-dev libtool libxml2-dev libbz2-dev libgeos-dev libgeos ++ - dev libproj-dev gdal-bin libgdal1-dev libmapnik-dev mapnik-utils python-mapnik我們將檢查Mapnik是否已正確安裝:
蟒蛇 >>>導入mapnik >>>如果python用第二個chevron提示回復>>>并且沒有錯誤,那么Python就找到了Mapnik庫。恭喜!你可以用這個命令離開Python:
>>>退出()安裝mod_tile和renderd
接下來,我們將安裝mod_tile和renderd。“mod_tile”是一個Apache模塊,用于處理tile的請求;?“renderd”是一個守護進程,它實際上在“mod_tile”請求它們時渲染了tile。我們將使用mod_tile的“switch2osm”分支:https://github.com/SomeoneElseOSM/mod_tile,它本身是從https://github.com/openstreetmap/mod_tile派生的,但經過修改以便它支持Ubuntu 16.04,并且還有一些其他更改可以在標準的Ubuntu服務器上工作,而不是在OSM的渲染服務器上工作。
編譯mod_tile源代碼:
cd?/ src git clone -b switch2osm git://github.com/SomeoneElseOSM/mod_tile.git cd mod_tile ./autogen.sh(應該以“autoreconf:Leaving directory`。”結束)
。/配置(應該以“config.status:執行libtool命令”結束)
使請注意,一些“令人擔憂”的消息將在此處向上滾動屏幕。但是它應該以“make [1]:離開目錄'/ home / renderaccount / src / mod_tile'”結束。
sudo make install(應完成“make [1]:離開目錄'/ home / renderaccount / src / mod_tile'”)
sudo make install-mod_tile(應該以“chmod 644 /usr/lib/apache2/modules/mod_tile.so”結束)
sudo ldconfig(不應該回復任何東西)
樣式表配置
現在已經安裝了所有必需的軟件,您需要下載并配置樣式表。
我們在這里使用的樣式是openstreetmap.org網站上“標準”地圖使用的樣式。它的選擇是因為它有很好的文檔記錄,并且應該在世界任何地方工作(包括在非拉丁地名的地方)。但是有一些缺點 - 這是一個旨在全球工作的妥協方案,如果您需要這樣做,理解和修改就會非常復雜。
網站上的“OpenStreetMap Carto”的主頁是https://github.com/gravitystorm/openstreetmap-carto/,并在https://github.com/gravitystorm/openstreetmap-carto/blob/master上有它自己的安裝說明/INSTALL.md雖然我們將涵蓋這里需要完成的所有事情。
這里我們假設我們將樣式表詳細信息存儲在“renderaccount”用戶(或者您正在使用的任何其他用戶)的主目錄下面的“src”下面的目錄中
cd?/ src git clone git://github.com/gravitystorm/openstreetmap-carto.git cd openstreetmap-carto接下來,我們將安裝合適版本的“carto”編譯器。這比Ubuntu附帶的版本要晚,所以我們需要這樣做:
sudo apt install npm nodejs-legacy sudo npm install -g carto carto -v這應該回應一個至少與以下一樣高的數字:
carto 0.18.1(Carto地圖樣式表編譯器)然后我們將carto項目轉換為Mapnik可以理解的東西:
carto project.mml> mapnik.xml您現在在/home/renderaccount/src/openstreetmap-carto/mapnik.xml上有一個Mapnik XML樣式表。
加載數據中
最初,我們只會加載少量測試數據。其他下載位置可用,但“?download.geofabrik.de?”有多種選擇。在這個例子中,我們將下載阿塞拜疆的數據,大約25Mb。
瀏覽到http://download.geofabrik.de/asia/azerbaijan.html并注意“此文件是上次修改”的日期(例如“2017-02-26T21:43:02Z”)。如果我們想要通過人們對OpenStreetMap的后續更改來更新數據庫,我們將在以后需要它。下載它如下:
mkdir~ / data cd~ / data wget http://download.geofabrik.de/asia/azerbaijan-latest.osm.pbf以下命令將先前下載的OpenStreetMap數據插入數據庫。這一步非常磁盤I / O密集;?進口整個星球可能需要數小時,數天或數周,具體取決于硬件。對于較小的提取,相應的導入時間要快得多,您可能需要嘗試使用不同的-C值來適應機器的可用內存。
osm2pgsql -d gis --create --slim -G --hstore --tag-transform-script~ / src / openstreetmap-carto / openstreetmap-carto.lua -C 2500 --number-processes 1 -S~ / src / openstreetmap-carto / openstreetmap-carto.style~ / data / azerbaijan-latest.osm.pbf有必要解釋一下這些選項的含義:
-d gis要使用的數據庫(“gis”曾經是默認值;現在必須指定它)。
- 創建將數據加載到空數據庫中,而不是嘗試附加到現有數據庫。
- 瘦osm2pgsql可以使用不同的表格布局;?“slim”表適用于渲染。
-G確定如何處理多邊形。
--hstore允許沒有顯式數據庫列的標簽用于渲染。
--tag變換腳本定義用于標記處理的lua腳本。這很容易在樣式本身處理它們之前處理OSM標記,使得樣式邏輯可能更加簡單。
-C 2500將2.5 Gb的內存分配給osm2pgsql以進行導入過程。如果你有較少的內存,你可以嘗試一個較小的數字,如果導入過程因內存不足而被殺死,你需要嘗試較小的數字或較小的OSM提取。
- 數字處理1使用1個CPU。如果您有更多可用內核,則可以使用更多內核。
-S在此文件中創建數據庫列(實際上這些數據庫與“openstreetmap-carto”保持一致)
最后一個參數是要加載的數據文件。
該命令將完成類似“Osm2pgsql整體上花了238s”。
Shapefile下載
雖然用于創建地圖的大部分數據都是直接來自您上面下載的OpenStreetMap數據文件,但仍然需要一些用于低縮放國家/地區債券的形狀文件。要下載和索引這些:
cd~ / src / openstreetmap-carto / 腳本/ get-shapefiles.py此過程涉及大量下載,可能需要一些時間。完成后,它將顯示“...腳本已完成”。
字體
用于世界各地的名字并不總是用拉丁字符(西班牙字母表中的az)編寫的。要安裝必要的字體,請執行以下操作:
sudo apt-get install fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted ttf-unifontOpenSteetMap Carto自己的安裝說明還建議從源代碼安裝“Noto Emoji Regular”。顯然,這是美國商店名稱中的表情符號所必需的。所有其他可能需要的國際字體(包括通常不支持的字體)都包含在剛剛安裝的列表中。
設置您的網絡服務器
配置renderd
“renderd”的配置文件是“/usr/local/etc/renderd.conf”。使用文本編輯器(如nano)編輯它:
sudo nano /usr/local/etc/renderd.conf這里有幾行可能需要改變。在“渲染”部分中:
NUM_THREADS = 4如果您只有2Gb左右的內存,則需要將其減少為2.?
“ajt”部分對應于名為“ajt”的“命名地圖樣式”。如果需要,您可以擁有多個這些部分,前提是每個部分的URI不同。“XML”行需要更改為:
您需要將“renderaccount”更改為您在上面使用的任何非root用戶名。
URI = /熱/選擇該選項是為了使此處生成的圖塊可以更容易地用于OpenStreetMap.org上的HOT圖塊圖層。你可以在這里使用別的東西,但“/ hot /”和其他東西一樣好。
配置Apache
sudo mkdir / var / lib / mod_tile sudo chown renderaccount / var / lib / mod_tile sudo mkdir / var / run / renderd sudo chown renderaccount / var / run / renderd我們現在需要告訴Apache關于“mod_tile”,所以使用nano(或其他編輯器):
sudo nano /etc/apache2/conf-available/mod_tile.conf將以下行添加到該文件:
LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so并保存,然后運行:
sudo a2enconf mod_tile那就是說你需要運行“service apache2 reload”來激活新的配置;?我們不會那樣做。
我們現在需要告訴Apache關于“渲染”。使用nano(或其他編輯器):
sudo nano /etc/apache2/sites-available/000-default.conf 并在“ServerAdmin”和“DocumentRoot”行之間添加以下內容: LoadTileConfigFile /usr/local/etc/renderd.conf ModTileRenderdSocketName /var/run/renderd/renderd.sock #在放棄要呈現的圖塊之前超時 ModTileRequestTimeout 0 #在放棄要渲染的tile之前超時,否則會丟失 ModTileMissingRequestTimeout 30并重新加載apache兩次:
sudo服務apache2重新加載 sudo服務apache2重新加載(我懷疑它需要做兩次,因為Apache在運行時重新配置時會“混淆”)
如果您將Web瀏覽器指向:http://yourserveripaddress/index.html,您應該獲得Ubuntu / apache的“It works!”頁面。
(如果您不知道將分配了哪個IP地址,則可以使用“ifconfig”查找 - 如果網絡配置不太復雜,可能是“inet addr”不是“127.0”。 0.1” )。如果您在托管服務提供商處使用服務器,那么服務器的內部地址很可能與已分配給您的外部地址不同,但該外部IP地址已經發送給您,并且很可能是當前正在訪問服務器的那個人。
請注意,這只是“http”(端口80)站點 - 如果要啟用https,則需要進行更多的Apache配置,但這超出了這些說明的范圍。但是,如果您使用“讓我們加密”來頒發證書,那么設置它的過程也可以配置Apache HTTPS站點。
第一次運行renderd
接下來,我們將運行renderd來嘗試渲染一些tile。最初我們將在前臺運行它,以便我們可以看到發生的任何錯誤:
renderd -f -c /usr/local/etc/renderd.conf你可能會在這里看到一些警告 - 暫時不用擔心。你不應該得到任何錯誤。如果這樣做,請將完整輸出保存在pastebin中,并在某個地方詢問有關問題的問題,例如help.openstreetmap.org(鏈接到pastebin - 不包括問題中的所有文本)。
將Web瀏覽器指向:http://yourserveripaddress/hot/0/0/0.png
您應該在瀏覽器中看到世界地圖,并在命令行上看到更多調試,包括“DEBUG:START TILE”和“DEBUG:DONE TILE”。忽略任何“DEBUG:無法讀取fd上的cmd”消息 - 這不是錯誤。如果您沒有獲得拼貼,并再次獲取其他錯誤,請將完整輸出保存在pastebin中,然后在help.openstreetmap.org等問題上提出問題。
如果這一切正常,請按control-c停止前景渲染過程。
在后臺運行渲染
接下來我們將設置“renderd”以在后臺運行。首先,編輯“?/ src / mod_tile / debian / renderd.init”文件,以便將“RUNASUSER”設置為您之前使用過的非root帳戶,例如“renderaccount”,然后將其復制到系統目錄:
nano?/ src / mod_tile / debian / renderd.init sudo cp~ / src / mod_tile / debian / renderd.init /etc/init.d/renderd sudo chmod u + x /etc/init.d/renderd sudo cp~ / src / mod_tile / debian / renderd.service / lib / systemd / system /“renderd.service”文件是“systemd”服務文件。這里使用的版本只調用舊式init命令。為了測試啟動命令的工作原理:
sudo /etc/init.d/renderd start(應該回復“[ok]開始渲染(通過systemctl):renderd.service。”)
要使其每次都自動啟動:
sudo systemctl啟用renderd查看瓷磚
為了查看圖塊,我們會欺騙并將“Switcheroo Redirector”擴展名添加到Chrome(或Chromium)瀏覽器中:
https://chrome.google.com/webstore/detail/switcheroo-redirector/cnmciclhnghalnpfhhleggldniplelbg?hl=en我們將“https://tile-a.openstreetmap.fr/hot/”添加為“From”,將“http:// yourserveripaddress / hot /”添加為“To”,并對“tile-b”執行相同操作“和”tile-c“。
從ssh連接做:
tail -f / var / log / syslog | grep“TILE”(注意“TILE”周圍的空格)
這將在每次請求切片時顯示一條線,并且每次完成一個切片時顯示一條線。
在您配置了switchheroo的Chrome / Chromium瀏覽器中,請訪問:https://www.openstreetmap.org/#map=13/40.3743/49.7134
并切換到OSM中的“人道主義”層。你應該看到一些瓦片請求。逐漸縮小。您將看到在ssh連接中顯示對新磁貼的請求。一些低縮放圖塊可能需要很長時間(幾分鐘)才能首次渲染,但一旦完成,它們將在下次需要時準備就緒。
恭喜。轉到使用圖塊部分以創建使用新圖塊服務器的地圖。
致謝
最初基于Ian Dees的flossmanuals.net指南和Richard Weait的更老的教程。由Richard Fairhurst編輯和更新,由Andy Townsend和Paul Norman撰寫。
總結
以上是生活随笔為你收集整理的手动构建磁贴服务器(16.04.2 LTS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux虚拟机的替代品:Docker与
- 下一篇: 常用的JS格式化函数,手机号和身份证号脱