概述
转载: 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 osm2pgsql
osm2pgsql使用的构建机制自旧版本以来已发生变化,因此我们需要为此安装更多先决条件:
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 install
Mapnik的
接下来,我们将安装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-unifont
OpenSteetMap 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”行需要更改为:
XML = /家庭/ renderaccount / src目录/ OpenStreetMap的-CARTO / mapnik.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)软件安装加载数据中设置您的网络服务器查看瓷砖的全部内容,希望文章能够帮你解决手动构建磁贴服务器(16.04.2 LTS)软件安装加载数据中设置您的网络服务器查看瓷砖所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复