• 如何在Ubuntu20.04上为OpenStreetMap设置Tegola Vector Tile服务器

    Tegola是OpenStreetMap的开源矢量平铺服务器。前面我们解释了使用mapnik和mod_tile(基于光栅的tile服务器)设置OSM tile服务器的过程。本教程将向您展示如何在Ubuntu20.04上设置Tegola vector tile服务器。 矢量瓷砖的好处 更高DPI设备的显示质量(视网膜显示) 小型高效格式(无需512*512图像) 更清晰易读的文本 用于平视显示的即时标签 独立的内容和样式,允许创建指向同一平铺堆栈的多个样式。 昼夜模式 矢量平铺格式 矢量图块有几种格式。 GeoJSON TopoJSON Mapbox矢量图块(MVT) 05m OpenScienceMap二进制文件 Arc GeoServices JSON Tegola使用Mapbox矢量平铺格式。 先决条件/硬件要求 所需的RAM和磁盘空间取决于要使用哪个国家的地图。例如 英国地图至少需要12G内存和100GB磁盘空间。 整个行星地图至少需要32G RAM和1TB SSD(固态驱动器)。用旋转硬盘来绘制整个地球地图是不可行的。 像整个地球一样,将大型地图数据导入PostgreSQL数据库需要很长时间。考虑添加更多的RAM,特别是使用SSD,而不是旋转硬盘来加速导入过程。 如果你打算主持整个世界地图,我建议你从康塔博购买超大VPS,康塔博以 10核CPU 60 GB内存 1.6 TB英特尔Optane SSD 每月只需26.99欧元。 第一步:升级软件 在服务器上进行任何主要工作之前,更新服务器软件始终是一种好的做法。通过SSH登录服务器并运行以下命令。 sudo-apt更新;sudo-apt升级 第2步:安装PostgreSQL数据库服务器和PostGIS扩展 我们将使用PostgreSQL存储地图数据。PostGIS是PostgreSQL的地理空间扩展。运行以下命令来安装它们。 sudo apt安装postgresql postgresql contrib postgis postgresql-12-postgis-3 PostgreSQL数据库服务器将自动启动并侦听127.0.0.1:5432。安装过程中将在操作系统上创建postgres用户。它是PostgreSQL数据库服务器的超级用户。默认情况下,该用户没有密码,也不需要设置密码,因为您可以使用sudo切换到postgres用户并登录到PostgreSQL server。 sudo-u postgres-i 现在可以创建PostgreSQL数据库用户osm。 createuser osm 为osm用户设置密码。 psql-c“使用密码'secret_PASSWORD'更改用户osm” 然后创建一个名为osm的数据库,同时使osm成为数据库的所有者-UTF8指定数据库中使用的字符编码方案为UTF8。 createdb-E UTF8-O osm osm 接下来,为osm数据库创建postgis和hstore扩展。 psql-c“创建扩展postgis-d osm psql-c“创建扩展存储-d osm 将osm设置为表所有者。 psql-c“将表空间参考系统所有者更改为osm-d osm 创建一个名为natural_earth的数据库,同时让osm成为该数据库的所有者。 createdb-E UTF8-O osm natural_earth 接下来,为natural_earth数据库创建postgis和hstore扩展。 psql-c“创建扩展postgis-d自然地球psql-c“创建扩展存储-d.自然地球 退出postgres用户。 出口 第3步:优化PostgreSQL Server性能 导入过程可能需要一些时间。为了加快这个过程,我们可以调整一些PostgreSQL server设置以提高性能。编辑PostgreSQL主配置文件。 sudo nano/etc/postgresql/12/main/postgresql。形态 首先,我们应该更改共享缓冲区的值。默认设置为: 共享缓冲区=128MB 这个太小了。经验法则是将其设置为总RAM的25%(不包括交换空间)。例如,我的VPS有60G RAM,所以我将其设置为: 共享缓冲区=15GB 找到下面这行。 #工作_内存=4MB#维护_工作_内存=64MB 同样,该值太小。我使用以下设置。 工作记忆=1GB维护记忆=8GB工作记忆=8GB 然后找到下面一行。 #有效缓存大小=4GB 如果你像我一样有很多RAM,你可以为有效的缓存大小设置一个更高的值,比如20G。 有效缓存大小=20GB 保存并关闭文件。重新启动PostgreSQL以使更改生效。 sudo systemctl重启postgresql 默认情况下,PostgreSQL会尝试在RAM中使用巨大的页面。然而,Linux默认情况下不会分配巨大的页面。检查PostgreSQL的进程ID。 sudo head-1/var/lib/postgresql/12/main/postmaster。pid 样本输出: 7031 然后检查该进程ID的峰值。 grep^VmPeak/proc/7031/status 样本输出: 峰值:16282784 kB 这是PostgreSQL将使用的峰值内存大小。现在检查Linux中巨大页面的大小。 cat/proc/meminfo | grep-i巨大 样本输出: AnonHugePages:0 kB ShmemHugePages:0 kB HugePages_总计:0 HugePages_免费:0 HugePages_Rsvd:0 HugePages_剩余:0 HugePages大小:2048 kB Hugetlb:0 kB 我们可以计算出我们需要多少巨大的页面。将VmPeak值除以巨大页面的大小:16282784KB/2048KB=7950。编辑/etc/sysctl。conf文件。 sudo nano/etc/sysctl。形态 添加以下行以分配7950个大页面。 虚拟机。nr_hugepages=7950 保存并关闭文件。然后应用更改。 sudo sysctl-p 如果你再次查看meminfo, cat/proc/meminfo | grep-i巨大 我们可以看到有7950个巨大的页面可用。 AnonHugePages:0 kB ShmemHugePages:0 kB HugePages_总计:7950 HugePages_免费:7950 HugePages_Rsvd:0 HugePages_supp:0 HugePages大小:2048 kB 重新启动PostgreSQL以使用大型页面。 sudo systemctl重启postgresql 在远程服务器上使用屏幕 由于导入过程可能需要很长时间,并且您的计算机可能已断开与Internet的连接,因此建议使用screen实用程序保持会话的活动状态。在Ubuntu 20.04服务器上安装屏幕: sudo apt安装屏幕 然后启动屏幕: 屏幕 第一次启动时,您将看到一个介绍文本,只需按Enter键即可结束。然后你就可以像往常一样运行命令了。 步骤4:将地图数据导入PostgreSQL 要导入地图数据,我们将使用Impom,它将OpenStreetMap数据转换为支持postGIS的PostgreSQL数据库。从Github下载。 wgethttps://github.com/omniscale/imposm3/releases/download/v0.11.1/imposm-0.11.1-linux-x86-64.tar.gz 提取档案。 tar xvf impom-0.11.1-linux-x86-64。焦油广州 将其移动到/opt/目录。 sudo mv impom-0.11.1-linux-x86-64/opt/impom 下载tegola osm脚本。 git克隆https://github.com/go-spatial/tegola-osm.git 将其移动到/opt/目录。 sudo mv tegola osm/opt/ 接下来,运行以下命令以PBF(ProtoBufBinary)格式下载整个行星(50G)的地图数据。 wget-chttp://planet.openstreetmap.org/pbf/planet-latest.osm.pbf 请注意openstreetmap的下载速度。org当前限制为2048kb/s。您可以从另一个镜像下载植物地图,如 wget-chttps://download.bbbike.org/osm/planet/planet-latest.osm.pbf 如果你想要一张各个国家/州/省/市的地图,请访问http://download.geofabrik.de.还有,自行车。org以不同的格式提供了全球200多个城市和地区的摘录。例如,使用以下命令下载英国地图数据(1.1G)。 wget-chttp://download.geofabrik.de/europe/great-britain-latest.osm.pbf 运行以下命令以导入地图数据。 /opt/imporm/imporm导入-连接postgis://osm:osm_password@localhost/osm-mapping/opt/tegola-osm/imposm3。json——阅读英国最新消息。奥斯曼。pbf-写入 现在,您可能不需要在服务器上执行其他操作。由于您使用的是Screen,所以可以按Ctrl+A,释放这些键,然后按D键从当前屏幕会话中分离。您将看到如下消息。 [与32113.pts-1.focal分离] 这告诉我之前的屏幕会话ID是32113。您可以从SSH会话中注销,甚至可以关闭计算机。别担心,OSM导入过程仍在运行。当需要返回并检查导入进度时,请将SSH连接到服务器并运行以下命令以获取上一个屏幕会话ID。 屏幕-ls 样本输出: 屏幕显示:32113。pts-1。focal(2020年5月19日03:45:29下午)(已分离)1个插座插入/运行/屏幕/S-linuxbabe。 然后可以重新连接到上一个屏幕会话。 屏幕-r 32113 这样你就能继续工作了。 导入地图数据后,运行以下命令将其部署到生产环境中。 /opt/imporm/imporm导入-连接postgis://osm:osm_password@localhost/osm-mapping/opt/tegola-osm/imposm3。json-部署生产 第5步:下载Tegola 转到Tegola Github页面并下载linux版本。您可以使用以下命令在终端中下载它。 wgethttps://github.com/go-spatial/tegola/releases/download/v0.13.0/tegola_linux_amd64.zip 解开它。 sudo apt安装解压解压tegola_linux_amd64。拉链 将二进制文件移动到/usr/local/bin/目录。 sudo mv tegola/usr/local/bin/ 步骤6:导入OSM土地和自然地球数据集 编辑/opt/tegola osm/osm_land。sh文件。 sudo nano/opt/tegola osm/osm_land。嘘 输入数据库详细信息。 #数据库连接变量DB_NAME=“osm”DB_HOST=“localhost”DB_PORT=“5432”DB_USER=“osm”DB_PW=“osm_password” 保存并关闭文件。安装gdal。 sudo-apt-install-gdal-bin 在gis数据库中生成关系图和多边形。 /opt/tegola osm/osm_土地。嘘 接下来,编辑/opt/tegola osm/natural_earth。sh文件。 sudo nano/opt/tegola osm/natural_earth。嘘 输入数据库详细信息。 #数据库连接变量DB_NAME=“natural_earth”DB_HOST=“localhost”DB_PORT=“5432”DB_USER=“osm”DB_PW=“osm_password” 保存并关闭文件。然后在natural_earth数据库中生成表。 /opt/tegola osm/natural_earth。嘘 运行postgis_helpers SQL脚本。 sudo-u postgres psql-d osm-a-f/opt/tegola osm/postgis_helpers。sql 运行postgis_索引。sql脚本向OSM表列添加索引以提高查询性能。 sudo-u postgres psql-d osm-a-f/opt/tegola osm/postgis_index。sql 第7步:启动Tegola 编辑配置文件。 sudo nano/opt/tegola osm/tegola。汤姆 按如下方式配置侦听端口、缓存类型和数据提供程序。 [webserver]port=“:8080”#Tegola提供三种磁贴缓存策略:“文件”、“redis”,以及“s3”[cache]type=“file”basepath=“/tmp/tegola cache”#OpenStreetMap(OSM)[providers]]name=“OSM”type=“postgis”host=“127.0.0.1”port=“5432”database=“OSM”user=“OSM”password=“OSM_password”#Natural Earth[[providers]]name=“ne”type=“postgis”host=“127.0.0.1”port=“5432”database=“Natural_Earth”user=“OSM”password=“OSM”password=“OSM# 找到下面这行。 中心=[-76.275329586789,39.153492567373,8.0]#可选中心值。TileJSON规范的一部分 可以为地图和默认缩放级别设置自定义中心位置(经度和纬度)。请注意,必须使用十进制值,不能使用整数值。 中心=[0.8,55.5,5.0]#可选中心值。TileJSON规范的一部分 保存并关闭文件。然后开始Tegola。 /usr/local/bin/tegola-service--config=/opt/tegola-osm/tegola。汤姆 现在Tegola正在监听端口8080。 步骤8:为Tegola创建Systemd服务 特戈拉正在前台跑步。为了在后台运行,我们可以创建一个systemd服务,它还允许Tegola在系统启动时自动启动。按Ctrl+C停止当前的Tegola进程,然后创建Tegola。服务文件。 sudo nano/etc/systemd/system/tegola。服务 将以下行添加到此文件。 [Unit]Description=Tegola Vector Tile Server[Service]Type=simple User=www data ExecStart=/usr/local/bin/Tegola-Service--config=/opt/Tegola osm/Tegola。toml Restart=on failure RestartSec=5[Install]WantedBy=multi-user。目标 保存并关闭文件。将www数据设为/tmp/tegola缓存/目录的所有者。 sudo chown www data:www data/tmp/tegola cache/-R 然后启用并启动此服务。 sudo systemctl启用tegola--现在 检查它的状态。确保它在运行。 系统控制状态tegola 然后在web浏览器地址栏中键入 您的服务器ip地址:8080 你应该看到矢量图。恭喜!您刚刚成功构建了自己的vector tile服务器。请注意,旧版本的Firefox无法显示这些矢量图块。您需要使用第三方库来显示基于矢量平铺的地图,本教程末尾将对此进行解释。 第9步:设置反向代理 要使用域名访问Tegola,我们可以使用Nginx或Apache为Tegola设置反向代理。这也将允许我们使用免费的Let's Encrypt证书启用HTTPS。 Nginx Nginx是非常流行的web服务器和反向代理。如果您更喜欢使用Nginx,请运行以下命令进行安装。 sudo apt安装nginx 然后为Tegola创建一个服务器块文件。 sudo nano/etc/nginx/conf.d/tegola。形态 将以下内容添加到此文件。更换瓷砖。实例使用你自己的域名。您还应该为此子域创建DNS记录。如果你没有一个真正的域名,我建议你去买一个便宜的域名。价格低廉,而且他们终身免费为whois提供隐私保护。 服务器{listen 80;listen[:]:80;server_name tile.example.com;access_log/var/log/nginx/tegola.access;error_log/var/log/nginx/tegola.error;location/{proxy_passhttp://127.0.0.1:8080; 代理设置头主机$Host;代理集头X-Real-IP$remoteu addr;proxy_set_header X-Forwarded-For$proxy_add_X_Forwarded_For;proxy_set_header X-Forwarded-Proto$方案;代理集头X转发协议$方案;proxy_set_header X-Forwarded-Host$http_Host;} 保存并关闭此文件。然后测试Nginx配置。 sudo nginx-t 如果测试成功,请重新加载Nginx以使更改生效。 sudo systemctl重新加载nginx 现在您可以通过tile访问Tegola。实例通用域名格式。 阿帕奇 如果您更喜欢Apache而不是Nginx,那么使用以下命令安装ApacheWeb服务器。 sudo apt安装apache2 要使用Apache作为反向代理,我们需要启用代理模块和头模块。 sudo a2enmod代理u http头 然后为Tegola创建一个虚拟主机文件。 sudo nano/etc/apache2/网站可用/tegola。形态 将以下配置放入该文件。更换瓷砖。实例com与您的实际域名。别忘了为这个子域创建DNS记录。如果你没有一个真正的域名,我建议你去买一个便宜的域名。价格低廉,而且他们终身免费为whois提供隐私保护。 <虚拟主机*:80>服务器名互动程序。实例com错误文件404/404。html#HTTP代理ProxyPass/http://127.0.0.1:8080/ProxyPassReverse/http://127.0.0.1:8080/ProxyHost On&lt/VirtualHost> 保存并关闭文件。然后启用这个虚拟主机。 苏多·艾森特·特戈拉。形态 重新启动Apache sudo systemctl重启apache2 现在,您可以使用域名磁贴访问Tegola。实例通用域名格式。 第10步:启用HTTPS 为了在您从外部访问Tegola服务器时加密HTTP流量,我们可以通过安装Let’s encrypt颁发的免费TLS证书来启用HTTPS。运行以下命令在Ubuntu 20.04上安装Let's Encrypt client(certbot)。 sudo apt安装certbot 如果您使用Nginx,那么您还需要安装Certbot Nginx插件。 sudo apt安装python3 certbot nginx 接下来,运行以下命令获取并安装TLS证书。 sudo certbot--nginx--agree tos--redirect--hsts--stype ocsp--email[email protected]-d tile。实例通用域名格式 如果使用Apache,则需要安装Certbot Apache插件。 sudo apt安装python3 certbot apache 接下来,运行以下命令获取并安装TLS证书。 sudo certbot--apache--agree tos--redirect--hsts--stype ocsp--uir--email[email protected]-d tile。实例通用域名格式 哪里: --nginx:使用nginx插件。 --apache:使用apache插件。 --同意:同意服务条款。 --重定向:通过301重定向强制HTTPS。 --hsts:为每个HTTP响应添加严格的传输安全头。强制浏览器始终对域使用TLS。防止SSL/TLS剥离。 --装订ocsp:启用ocsp装订。有效的OCSP响应被绑定到服务器在TLS期间提供的证书上。 --uir:升级不安全的请求。 现在应获得证书并自动安装。您可以通过HTTPS访问Tegola:https://tile.example.com. 建立一个示例地图 您需要使用第三方库来显示基于矢量平铺的地图。我以OpenLayer为例。创建一张地图。html文件,并输入以下代码。 <!doctype html&gt&书信电报;html lang=“en”&gt&书信电报;头&gt&书信电报;link rel=“stylesheet”href=”https://openlayers.org/en/v5.3.0/css/ol.css“type=“text/css”><style>#地图{高度:1000px;宽度:100%;背景色:#1C79B5;}&lt/风格&gt&书信电报;脚本src=”https://openlayers.org/en/v5.3.0/build/ol.js“type=“text/javascript”></script><title>OpenLayers示例</title></head><body><div id=“map”class=“map”></div><script type=“text/javascript”>var defaultStyle=new ol.style.style({fill:new ol.style.fill({color:[2342312221,1]})中风:新ol。风格笔划({color:[182177162,1],宽度:1});var waterStyle=新的ol。风格样式({fill:new ol.Style.fill({color:[28121181,1]}),笔划:new ol。风格笔划({color:[27107159,1],宽度:1});var streetStyle=新ol。风格样式({fill:new ol.Style.fill({color:[111,44173,1]}),笔划:new ol。风格笔划({颜色:[93,32150,1],宽度:1});函数样式函数(特征,分辨率){if(feature.get('type')='water'| | | feature.get('layer')='water| | | | feature.get('layer')='water| | featureif(feature.get('layer')='transport_lines'){return[streetStyle];}如果(feature.get('layer')='country_polygons'| |特征。get('layer')=='landuse_areas'){return null;//如果没有要应用的样式,则返回null}return[defaultStyle];}var map=新ol。Map({target:'Map',layers:[new ol.layer.VectorTile({source:new ol.source.VectorTile({format:new ol.format.MVT(),url:'https://tile.linuxbabe.com/maps/osm/{z} /{x}/{y}。pbf'}),style:styleFunction}),view:new-ol。视图({center:ol.proj.fromlont([0.5,54.5]),//地图将以最初的缩放为中心的坐标:6})&lt/脚本&gt&lt/车身&gt&lt/html> 保存并关闭文件。下面是它的样子。 结论 我希望本文能帮助你在Ubuntu20.04上安装Tegola Vector Tile服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.23 浏览:61
  • 如何在Ubuntu18.04上设置OpenStreetMap Tile服务器

    OpenStreetMap,又名OSM,是一个用户贡献的世界地图,可以自由编辑。你可以把它看作是谷歌地图的开源和自托管替代品。本教程将向您展示如何在Ubuntu18.04上构建自己的OpenStreetMap tile服务器,这样您就不必使用专有的地图服务。 OpenStreetMap功能 OpenStreetMap的数据覆盖了全世界,因此可以方便地支持任何国家或每个国家的用户。 OpenStreetMap每天每小时每分钟都会更新,您可以实时获得这些更新。 OpenStreetMap数据是免费和开放的,不收取订阅费和页面浏览费。 OpenStreetMap数据丰富而详细,包含大量与地面人员相关的数据——收集数据的人员。 先决条件/硬件要求 所需的RAM和磁盘空间取决于要使用哪个国家的地图。例如 英国地图至少需要12G内存和60GB磁盘空间。 整个行星地图至少需要32G RAM和1TB SSD磁盘。用旋转硬盘来绘制整个地球地图是不可行的。 如果要在web浏览器中预渲染分幅以加快地图加载速度,则需要更多磁盘空间,这是强烈建议的。查看此页面以查看预渲染磁贴需要多少磁盘空间。例如,如果要为行星地图预渲染从缩放级别0到缩放级别15的平铺,则需要额外的460 GB磁盘空间。 另外需要注意的是,将大型地图数据(如整个地球)导入PostgreSQL数据库需要很长时间。考虑添加更多的RAM,特别是使用SSD,而不是旋转硬盘来加速导入过程。 如果你打算主持整个世界地图,我建议你从康塔博购买超大VPS,康塔博以 10核CPU 60 GB内存 1.6 TB英特尔Optane SSD 每月只需26.99欧元。 第一步:升级软件 在服务器上进行任何主要工作之前,更新服务器软件始终是一种好的做法。通过SSH登录服务器并运行以下命令。 sudo-apt更新;sudo-apt升级 第2步:安装PostgreSQL数据库服务器和PostGIS扩展 我们将使用PostgreSQL存储地图数据。PostGIS是PostgreSQL的地理空间扩展。运行以下命令来安装它们。 sudo apt安装postgresql postgresql contrib postgis postgresql-10-postgis-2.4 PostgreSQL数据库服务器将自动启动并侦听127.0.0.1:5432。安装过程中将在操作系统上创建postgres用户。它是PostgreSQL数据库服务器的超级用户。默认情况下,该用户没有密码,也不需要设置密码,因为您可以使用sudo切换到postgres用户并登录到PostgreSQL server。 sudo-u postgres-i 现在可以创建PostgreSQL数据库用户osm。 createuser osm 然后创建一个名为gis的数据库,同时让osm成为数据库的所有者-UTF8指定数据库中使用的字符编码方案为UTF8。 createdb-E UTF8-O osm gis 接下来,为gis数据库创建postgis和hstore扩展。 psql-c“创建扩展postgis-d gis psql-c“创建扩展存储-三维地理信息系统 将osm设置为表所有者。 psql-c“将表空间参考系统所有者更改为osm-三维地理信息系统 退出postgres用户。 出口 在操作系统上创建osm用户,以便平铺服务器可以作为osm用户运行。以下命令将创建一个没有密码的系统用户。 sudo adduser——系统osm 第3步:下载地图样式表和地图数据 切换到osm的主目录。 cd/home/osm/ 使用git将最新的CartoCSS地图样式表下载到osm用户的主目录。 sudo apt安装git git克隆https://github.com/gravitystorm/openstreetmap-carto.git 如果在运行上述命令时看到“权限被拒绝”错误,则可以使用以下命令授予权限。用真实用户名替换用户名。 sudo setfacl-R-mu:username:rwx/home/osm/ 接下来,运行以下命令以PBF(ProtoBufBinary)格式下载整个行星(50G)的地图数据。 wget-chttp://planet.openstreetmap.org/pbf/planet-latest.osm.pbf 请注意openstreetmap的下载速度。org当前限制为2048kb/s。您可以从另一个镜像下载植物地图,如 wget-chttps://download.bbbike.org/osm/planet/planet-latest.osm.pbf 如果你想要一张各个国家/州/省/市的地图,请访问http://download.geofabrik.de.还有,自行车。org以不同的格式提供了全球200多个城市和地区的摘录。例如,使用以下命令下载英国地图数据(1.1G)。 wget-chttp://download.geofabrik.de/europe/great-britain-latest.osm.pbf 第4步:优化PostgreSQL Server性能 导入过程可能需要一些时间。为了加快这个过程,我们可以调整一些PostgreSQL server设置以提高性能。编辑PostgreSQL主配置文件。 sudo nano/etc/postgresql/10/main/postgresql。形态 首先,我们应该更改共享缓冲区的值。默认设置为: 共享缓冲区=128MB 这个太小了。经验法则是将其设置为总RAM的25%(不包括交换空间)。例如,我的VPS有60G RAM,所以我将其设置为: 共享缓冲区=15GB 找到下面这行。 #工作_内存=4MB#维护_工作_内存=64MB 同样,该值太小。 工作记忆=1GB维护记忆=8GB工作记忆=8GB 然后找到下面一行。 #有效缓存大小=4GB 如果你像我一样有很多RAM,你可以为有效的缓存大小设置一个更高的值,比如20G。 有效缓存大小=20GB 保存并关闭文件。重新启动PostgreSQL以使更改生效。 sudo systemctl重启postgresql 默认情况下,PostgreSQL会尝试在RAM中使用巨大的页面。然而,Linux默认情况下不会分配巨大的页面。检查PostgreSQL的进程ID。 sudo head-1/var/lib/postgresql/10/main/postmaster。pid 样本输出: 7031 然后检查该进程ID的峰值。 grep^VmPeak/proc/7031/status 样本输出: 峰值:16282784 kB 这是PostgreSQL将使用的峰值内存大小。现在检查Linux中巨大页面的大小。 cat/proc/meminfo | grep-i巨大 样本输出: AnonHugePages:0 kB ShmemHugePages:0 kB HugePages_总计:0 HugePages_免费:0 HugePages_Rsvd:0 HugePages_SUPPR:0 HugePages大小:2048 kB 我们可以计算出我们需要多少巨大的页面。将VmPeak值除以巨大页面的大小:16282784KB/2048KB=7950。编辑/etc/sysctl。conf文件。 sudo nano/etc/sysctl。形态 在文件末尾添加以下行,分配7950个大页面。 虚拟机。nr_hugepages=7950 保存并关闭文件。然后应用更改。 sudo sysctl-p 如果你再次查看meminfo, cat/proc/meminfo | grep-i巨大 我们可以看到有7950个巨大的页面可用。 AnonHugePages:0 kB ShmemHugePages:0 kB HugePages_总计:7950 HugePages_免费:7950 HugePages_Rsvd:0 HugePages_supp:0 HugePages大小:2048 kB 重新启动PostgreSQL以使用大型页面。 sudo systemctl重启postgresql 建议配置SSH keepalive,以免丢失SSH连接。这很容易做到。只需在本地Linux机器上打开SSH客户端配置文件。 sudo nano/etc/ssh/ssh_config 并将以下文本粘贴到文件末尾。 ServerAliveInterval 60 然后保存文件并连接到你的Ubuntu服务器。您还可以通过VNC访问远程服务器,以防止脆弱的连接中断导入过程。 步骤5:将地图数据导入PostgreSQL 要导入地图数据,我们需要安装osm2pgsql,将OpenStreetMap数据转换为支持postGIS的PostgreSQL数据库。 sudo apt安装osm2pgsql 向postgres用户授予权限。 sudo setfacl-R-mu:postgres:rwx/home/osm/ 切换到postgres用户。 sudo-u postgres-i 运行以下命令将地图样式表和地图数据加载到gis数据库中。最新取代英国。奥斯曼。pbf与您自己的地图数据文件。 osm2pgsql--slim-dGIS--hstore--multi-geometry--number processs 10--tag transform script/home/osm/openstreetmap carto/openstreetmap carto。lua——style/home/osm/openstreetmap carto/openstreetmap carto。款式-C 32000/家居/osm/英国最新款。奥斯曼。pbf 哪里 --苗条模式:在苗条模式下运行,而不是在正常模式下运行。如果希望将来使用OSM更改文件(OSC)更新地图数据,则需要此选项。 -d gis:选择数据库。 --hstore:将不带列的标记添加到PostgreSQL表的另一个hstore(key/value)列中 --多重几何图形:在postgresql表中生成多重几何图形特征。 --样式:指定样式文件的位置 --进程数:服务器上的CPU核心数。我有10个。 -C标志以兆字节为单位指定缓存大小。它应该是你机器上可用内存的70%左右。缓存大小越大,导入速度越快。例如,我的服务器有60GB的RAM,所以我可以指定-C 32000。请注意,PostgreSQL将需要用于共享缓冲区的RAM。使用此公式计算缓存大小应该有多大:(总RAM-PostgreSQL共享_缓冲区)*70% 最后,需要指定地图数据文件的位置。 命令输出: 如果要导入完整的行星地图数据,请使用--drop选项和--flat nodes选项来提高导入速度。请注意--flat nodes选项不适用于小贴图。 osm2pgsql——slim-d gis——drop——flat节点。cache--hstore--multi-geometry--number processs 10--tag transform script/home/osm/openstreetmap carto/openstreetmap carto。lua——style/home/osm/openstreetmap carto/openstreetmap carto。款式-C 32000/家居/osm/planet最新款式。奥斯曼。pbf 在导入过程中,RAM的使用将逐渐增加。导入完成后,将gis数据库的所有权限授予osm用户。 psql-c“将模式公共中所有表的所有权限授予osm-三维地理信息系统 退出postgres用户。 出口 第6步:安装mod_tile和Renderd mod_tile是一个Apache模块,需要为tiles提供服务,renderd是渲染OpenStreetMap tiles的渲染守护进程。默认的Ubuntu存储库不包括mod_tile和renderd,但我们可以从OSM PPA安装它们。 sudo-apt-install-software-properties通用sudo-add-apt-repository-ppa:osmadmins/ppa-sudo-apt-install-libapache2 mod tile-renderd 在安装过程中,它将安装Apache web服务器,并询问您是否希望在Apache配置中启用mod_tile。选择Yes并按Enter键。这将为mod_tile(/etc/apache2/sites available/tileserver_site.conf)创建一个Apache配置文件。 渲染守护进程将自动启动,如下所示: systemctl状态呈现 第7步:生成Mapnik样式表 安装所需的软件包。 sudo apt安装curl解压gdal bin mapnik utils libmapnik dev python3 pip 我们还需要使用以下命令从上游存储库安装nodejs和npm。 curl-sLhttps://deb.nodesource.com/setup_12.x| sudo-E bash-sudo apt get install-y nodejs 然后用npm安装carto软件包。 sudo npm安装-g carto 安装psycopg2 Python模块。 sudo-H pip3安装psycopg2==2.8.5 切换到postgres用户。 sudo-u postgres-i 将Cd放入carto style目录。 cd/home/osm/openstreetmap carto/ 获取形状文件。 脚本/获取外部数据。py 如果在运行上述命令时遇到以下错误消息,则说明您存在DNS问题。只需等待几分钟,然后再次运行Python脚本。 未能建立新连接:[Errno-3]名称解析暂时失败 现在使用carto map样式表编译器构建Mapnik XML样式表。 carto项目。mml>风格xml 将gis数据库的所有权限授予osm用户。 psql-c“将模式公共中所有表的所有权限授予osm-三维地理信息系统 退出postgres用户。 出口 第8步:安装字体 您需要安装ttf dejavu软件包。 sudo apt安装ttf dejavu 要显示非拉丁字符,请安装以下软件包。 sudo apt安装字体noto cjk字体noto提示字体noto未经修改的ttf unifont 步骤9:配置renderd 编辑渲染配置文件。 sudo nano/etc/renderd。形态 在[renderd]部分,根据服务器上的CPU内核数更改线程数。 线程数=10 在[default]部分,将XML和HOST的值更改为以下值。请注意,以分号(;)开头的行这些都是评论。 XML=/home/osm/openstreetmap carto/style。xml HOST=map。你的领域。通用域名格式 在[mapnik]部分,将plugins_dir的值更改为以下值。 plugins_dir=/usr/lib/mapnik/3.0/input/ 您可以使用以下命令打印默认的输入插件目录。 mapnik config——输入插件 如果要显示非拉丁字符,最好将字体设置更改为以下内容。 font_dir=/usr/share/fonts/truetype font_dir_recurse=true 保存并关闭文件。然后编辑init脚本文件 sudo nano/etc/init。d/renderd 找到下面这行。 RUNASUSER=www数据 将用户更改为osm。这是从PostgreSQL数据库加载地图数据所必需的。 RUNASUSER=osm 保存文件。将osm设置为/var/lib/mod_tile/目录的所有者,该目录将保存渲染的tile文件。 sudo chown osm/var/lib/mod_tile/-R 然后重新启动renderd服务。 sudo systemctl守护进程重新加载sudo systemctl restart renderd 你需要查看renderd的日志。 sudo journalctl-欧盟趋势 确保renderd不会在日志中产生任何错误,否则地图将不会显示。 第10步:配置Apache 编辑OSM虚拟主机文件。 sudo nano/etc/apache2/sites available/tileserver_site。形态 将服务器名更改为自己的域名,如map。你的地盘。通用域名格式。您还需要为此子域创建DNS记录。 服务器名映射。你的地盘。通用域名格式 保存并关闭文件。重启Apache。 sudo systemctl重启apache2 然后在web浏览器地址栏中键入 地图你的领域。com/osm/0/0/0。巴布亚新几内亚 你应该看到世界地图的瓷砖。恭喜!您刚刚成功构建了自己的OSM磁贴服务器。 如果已启用UFW防火墙,请确保使用以下命令打开端口80和443。 sudo ufw允许80443/tcp 第11步:显示平铺的网络地图 平铺网络地图在OpenStreetMap术语中也称为slippy地图。有两个免费的开源JavaScript地图库可用于tile服务器:OpenLayer和传单。传单的优点是使用简单,而且地图便于移动。 露天层 要使用OpenLayer显示你的slippy地图,请从OpenLayer下载JavaScript和CSS。组织并将其解压缩到webroot文件夹。 cd/var/www/sudo wgethttps://github.com/openlayers/openlayers/releases/download/v5.3.0/v5.3.0.zipsudo解压v5。3.0.拉链 接下来,创建索引。html文件。 sudo nano/var/www/index。html 在文件中粘贴以下HTML代码。替换红色文本,并根据需要调整经度、纬度和缩放级别。 <!DOCTYPE html&gt&书信电报;html&gt&书信电报;头&gt&书信电报;meta charset=“UTF-8”大于&书信电报;标题>无障碍地图&lt/标题&gt&书信电报;link rel=“stylesheet”href=”http://map.yourdomain.com/v5.3.0/css/ol.css“type=“text/css”><script src=”http://map.yourdomain.com/v5.3.0/build/ol.js“></script><style>a.skipling{位置:绝对;剪辑:rect(1px,1px,1px,1px);填充:0;边框:0;高度:1px;宽度:1px;溢出:隐藏;}”a、 skiplink:focus{clip:auto;height:auto;width:auto;background color:#fff;padding:0.3em;}#地图:焦点{轮廓:#4A74A8固体0.15em;}&lt/风格&gt&lt/头&gt&书信电报;车身&gt&书信电报;a class=“skipling”href=“#map”>转到地图&lt/a&gt&书信电报;div id=“map”class=“map”tabindex=“0”&gt&lt/部门&gt&书信电报;按钮id=“缩小”>缩小&lt/按钮&gt&书信电报;按钮id=“放大”>放大&lt/按钮&gt&书信电报;脚本>var map=新ol。Map({layers:[new ol.layer.Tile({source:new ol.source.OSM({url:'http://map.yourdomain.com/osm/{z} /{x}/{y}。png'})}),目标:'map',控件:ol。控制默认值({attributeoptions:/**@type{olx.control.attributeoptions}*/({collapsable:false})),视图:new ol。视图({center:[244780.245088823557386452.183179816],zoom:5});文件getElementById(“缩小”)。onclick=function(){var view=map.getView();var zoom=view.getZoom();view.setZoom(zoom-1);};文件getElementById(“放大”)。onclick=function(){var view=map.getView();var zoom=view.getZoom();view.setZoom(zoom+1);}&lt/脚本&gt&lt/车身&gt&lt/html> 保存并关闭文件。现在你可以通过在浏览器地址栏中输入你的子域来查看你的拖拉地图。 地图你的地盘。通用域名格式 或 地图你的地盘。com/index。html 传单 要使用Leftlet显示slippy地图,请从leftletjs下载JavaScript和CSS。com并将其解压缩到webroot文件夹。 cd/var/www/sudo wgethttp://cdn.leafletjs.com/leaflet/v1.6.0/leaflet.zipsudo解压传单。拉链 接下来,创建索引。html文件。 sudo nano/var/www/index。html 在文件中粘贴以下HTML代码。替换红色文本,并根据需要调整经度、纬度和缩放级别。 <html&gt&书信电报;头&gt&书信电报;meta charset=“UTF-8”大于&书信电报;标题>我的第一个osm&lt/标题&gt&书信电报;link rel=“stylesheet”type=“text/css”href=“传单.css”/&gt&书信电报;script type=“text/javascript”src=“ployate.js”&gt&lt/脚本&gt&书信电报;风格&gt#地图{宽度:100%;高度:100%}&lt/风格&gt&lt/头&gt&书信电报;车身&gt&书信电报;div id=“map”&gt&lt/部门&gt&书信电报;脚本>var map=L.map('map')。setView([53.555,9.899],5);蒂莱莱耶http://map.yourdomain.com/osm/{z} /{x}/{y}。png',{maxZoom:18})。addTo(地图)&lt/脚本&gt&lt/车身&gt&lt/html> 保存并关闭文件。现在,您可以通过在浏览器中键入服务器IP地址来查看拖沓的地图。 地图你的地盘。通用域名格式 或 地图你的地盘。com/index。html 步骤12:预渲染瓷砖 动态渲染平铺将增加在web浏览器中加载地图的时间。要预渲染平铺而不是动态渲染,请使用以下render_list命令。使用-z和-z标志指定缩放级别,并根据服务器上的CPU内核数替换线程数。Render_list通过向渲染守护进程发送请求来渲染贴图分幅列表。预渲染的磁贴将缓存在/var/lib/mod_tile目录中。 render_list-m default-a-z 0-z 19--num threads=10 如果以后更新了贴图数据,可以使用--force选项再次预渲染所有分片。 render_list-m default-a-z 0-z 19--num threads=10--force 要在背景中渲染贴图分幅,请添加&结尾的符号。 render_list-m default-a-z 0-z 19--num threads=10& 现在你可以关闭终端窗口了。要检查呈现进度,请打开另一个SSH会话,然后运行以下命令。 sudo journalctl-欧盟趋势 上面的命令将显示renderd服务的最新日志。以下几行显示我的OSM服务器现在正在以缩放级别12渲染地图分幅。 renderd[20838]:调试:开始平铺默认值12 1008-1015 4056-4063,新metatile renderd[20838]:渲染投影坐标12 1008 4056-&gt-10175297.205328 |-19724422.274944-10097025.688364 |-19646150.757980到一个8 x 8平铺渲染[20838]:调试:在0.799秒内完成平铺默认12 1008-1015 3984-3991渲染[20838]:调试:将协议版本2的渲染命令(3默认12/1008/3984)发送到fd 18渲染[20838]:调试:使用协议版本2 renderd[20838]获得传入请求:调试:获得命令RenderBulk fd(18)xml(默认),z(12),x(1008),y(4064),mime(图像/png),选项()渲染[20838]:调试:开始平铺默认值12 1008-1015 4064-4071,新metatile渲染[20838]:渲染投影坐标12 1008 4064-&gt-10175297.205328 |-19802693.791908-10097025.688364 |-19724422.274944至8 x 8瓷砖 步骤13:启用HTTPS 为了加密HTTP流量,我们可以从Let's encrypt获得并安装免费的TLS证书。首先,在Ubuntu 18.04上安装Let's Encrypt客户端(certbot)。 sudo add apt repository ppa:certbot/certbot sudo apt install certbot 因为我们使用的是ApacheWeb服务器,所以我们还需要安装Apache插件。 sudo apt安装python3 certbot apache 然后运行以下命令获取并安装TLS证书。 sudo certbot--apache--agree tos--redirect--hsts--style ocsp--must style--email[email protected]-d map。你的地盘。通用域名格式 安装证书后,刷新网页,您将在地址栏中看到一个锁。 如果你在Firefox地址栏中看到一个黄色的三角形,这意味着tile URL仍在使用HTTP。你需要编辑索引。html文件,并使用以下命令将所有HTTP协议替换为HTTPS。 sudo sed-i's/http/https/g'/var/www/index。html 步骤14:启用HTTP2 为了进一步提高映射加载性能,可以启用HTTP2协议。首先,需要启用HTTP2模块。 sudo a2enmod http2 然后打开SSL虚拟主机文件。 sudo nano/etc/apache2/sites enabled/tileserver_site-le-ssl。形态 在打开后放置以下指令<VirtualHost*:443>标签 协议h2 http/1.1 保存并关闭文件。然后重启Apache,使更改生效。 sudo systemctl重启apache2 限制对OSM磁贴服务器的访问 默认情况下,任何人都可以使用OpenLayer或传单创建一个带有tile服务器URL的滑动地图。要限制对tile服务器的访问,请编辑Apache虚拟主机文件。 sudo nano/etc/apache2/sites enabled/tileserver_site-le-ssl。形态 在<VirtualHost>标签。 <位置/osm>SetEnvIf Referer example/。com trusted_referer Order deny,allow deny from all allow from env=trusted_referer&lt/地点> 上面的代码检查HTTP referer头是否包含您自己的域。否则,将拒绝访问/osm目录。反斜杠用于转义点字符。要将多个主机名添加为受信任的引用,请使用以下语法。 SetEnvIf Referer(example/.com | www/.example/.com | map/.example/.com)可信的_Referer 保存并关闭文件。然后测试语法。 sudo apache2ctl-t 如果语法正确,请重新加载Apache以使更改生效。 sudo systemctl重新加载apache2 自动更新TLS证书 您可以创建Cron作业来自动续订TLS证书。只需打开root用户的crontab文件。 sudo crontab-e 在文件底部添加以下行。 @每日certbot更新——安静与&systemctl重新加载apache2 不同主机上的PostgreSQL数据库和Web服务器 如果PostgreSQL和Apache web服务器位于不同的主机上,则需要编辑该项目。Apache主机上的mml文件。 nano/home/osm/openstreetmap-carto-4.20.0/project。嗯 找到以下几行: osm2pgsql:&osm2pgsql类型:“postgis”dbname:“gis”键字段:“几何体”字段:“方式”范围:“-20037508,-200375082003750820037508” 指定PostgreSQL数据库服务器的IP地址。 osm2pgsql:&osm2pgsql类型:“postgis”主机:“10.0.0.2”数据库名:“gis”键字段:“几何体”字段:“方式”范围:“-20037508,-200375082003750820037508” 保存并关闭文件。然后使用carto map样式表编译器构建Mapnik XML样式表。 carto项目。mml>风格xml 在PostgreSQL数据库服务器上,编辑主配置文件。 sudo nano/etc/postgresql/10/main/postgresql。形态 添加以下行,将PostgreSQL设置为在所有接口上侦听。 听_addresses='*' 保存并关闭文件。然后编辑PostgreSQL客户端身份验证配置文件。 sudo nano/etc/postgresql/10/main/pg_hba。形态 在文件末尾添加以下行,以允许osm用户从Apache主机登录。将10.0.0.1替换为Apache主机的IP地址。 主机gis osm 10.0.0.1/32信任 保存并关闭文件。然后重新启动PostgreSQL。 sudo systemctl重启postgresql 在Apache主机上重新启动渲染守护程序。 sudo systemctl重新启动renderd 你需要查看renderd的日志。确保renderd不会在日志中产生任何错误,否则地图将不会显示。 sudo journalctl-欧盟趋势 还应限制对PostgreSQL数据库服务器端口5432的访问。例如,您可以使用以下UFW命令只允许Apache主机的IP地址。 sudo ufw允许从10.0.0.1进入任何端口5432 结论 我希望本教程能帮助您在Ubuntu18.04上安装OpenStreetMap tile服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.23 浏览:55