编译与安装

作者

托马斯堡

联系

t在terriscope.fr的端口

作者

艾伦布德罗

联系

Aboudreaut在magers.com

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

作者

马修·库德特

联系

gmail.com上的mathieu.coudert

作者

塞思吉尔文

联系

在Compass.ie的sGirvin

最后更新

2021-08-31

正在获取源

地图缓存项目位于https://github.com/MapServer/mapcache,,可通过以下任一方式检出:

# readonly
git clone git://github.com/MapServer/mapcache.git
# ssh authenticated
git clone git@github.com:MapServer/mapcache.git
# tarball
wget https://github.com/MapServer/mapcache/zipball/main

Linux指令

这些指令针对的是Debian/Ubuntu安装程序,但在对任何Linux安装进行少量修改的情况下都应适用。

为了正确编译,mapcache需要许多库头:

  • Apache/Apr/Apr实用程序/Apx2: apache2-prefork-devapache2-threaded-dev 包,取决于您运行的是哪个Apache MPM。如果不构建Apache模块(*libaprutil1 dev*和 利巴普拉德夫)

  • png:

  • jpeg:

  • curl:

不需要以下库,但建议使用:

  • pcre: LIPPCR3 DEV. 这将在为维度创建验证表达式时提供更强大的正则表达式语法。

  • 皮克斯曼: LIPIXMAN-1-DEV. 像素操作库用于缩放和阿尔法合成图像。mapcache附带了一些代码来执行这些任务,但是pixman通常更快,因为它包含了为现代CPU(SSE2、MMX等)优化的代码。

不需要以下库,但需要这些库才能启用其他功能:

  • fcgi: LBFCGI DEV. 如果不想将mapcache作为apache模块运行,则需要构建fastcgi程序

  • GDAL/GEOS: libgdal1-dev * LIGBEOS DEV*。需要启用高级种子设定选项(仅用于与给定地理特征相交的种子设定分片)

  • SQLite: LBQLITE3 DEV. 用于启用sqlite后端存储

  • tiff: LIPTIFF4 DEV. 用于启用TIFF后端存储

  • berkeley db libdb4.8-dev:用于启用伯克利数据库后端存储

备注

mapcache现在使用cmake构建。

对于将所有包安装到默认位置的Unix用户,编译过程应继续执行以下操作:

$ cd mapcache
$ mkdir build
$ cd build
$ cmake ..
$ # follow instructions below if missing a dependency
$ make
$ sudo make install

备注

如果收到CMake错误,如“找不到Apache(Missing:APACHE_INCLUDE_DIR)”,CMake需要找到 httpd.h 头文件,以及 apxsApxs2 可执行文件,因此您可能需要安装这些特定的包(例如在Ubuntu上使用命令 apt-get install apache2-dev )并重新运行cmake命令。

Apache模块特定指令

上面的make install安装了Apache模块,但是如果您特别需要只安装Apache模块,则可以执行以下操作:

$ sudo make install-module
$ sudo ldconfig

安装脚本负责将构建的模块放入Apache模块目录中。激活模块的过程通常是特定于发行版的,但可以通过Apache配置文件中应该存在的以下代码段(例如/usr/local/httpd/conf/httpd.conf或/etc/apache2/sites available/default)来恢复:

LoadModule mapcache_module    modules/mod_mapcache.so

接下来,使用以下代码段将mapcache配置映射到服务器URL:

对于Apache<2.4:

<IfModule mapcache_module>
   <Directory /path/to/directory>
      Order Allow,Deny
      Allow from all
   </Directory>
   MapCacheAlias /mapcache "/path/to/directory/mapcache.xml"
</IfModule>

对于Apache>=2.4:

<IfModule mapcache_module>
   <Directory /path/to/directory>
      Require all granted
   </Directory>
   MapCacheAlias /mapcache "/path/to/directory/mapcache.xml"
</IfModule>

重新启动之前,请将示例mapcache.xml文件复制到Apache配置中指定的位置:

$ cp mapcache.xml /path/to/directory/mapcache.xml

最后,重新启动Apache以考虑修改后的配置

$ sudo apachectl restart

如果您没有禁用演示服务,现在应该可以在http://myserver/mapcache/demo上访问它。

nginx特定说明

警告

使用nginx仍有一些实验性。以下工作流仅在开发版本上进行了测试,即nginx-1.1.x

对于nginx支持,您需要针对nginx源构建mapcache的nginx模块。下载nginx源代码:

$ cd /usr/local/src
$ mkdir nginx
$ cd nginx
$ wget http://nginx.org/download/nginx-1.1.19.tar.gz
$ tar -xzvf nginx-1.1.19.tar.gz
$ cd nginx-1.1.19/

使用标志运行配置命令 --add-module 。此标志必须指向MapCache的nginx子目录。假设将MapServer源代码克隆或解压到 /usr/local/src Nginx的配置命令示例如下所示:

$ ./configure --add-module=/usr/local/src/mapcache/nginx

然后构建nginx:

$ make
$ sudo make install

由于nginx的非阻塞体系结构,MapCache nginx模块不执行任何可能导致工作进程被长时间计算阻塞的操作(即:如果不在缓存中,则请求渲染(元)分片,将请求代理到上游WMS服务器,或等待另一个工作进程渲染分片):相反,它将发出404错误。此行为非常重要,这样才不会占用所有nginx工作线程,从而阻止它响应所有其他传入的请求。虽然这对于完全设定种子的切片集来说不是问题,但这意味着需要将这些类型的请求代理到另一个不存在这些饥饿问题的MapCache实例(即FastCGI MapCache或内部代理的Apache服务器)。在此场景中,nginx MapCache实例和Apache/FastCGI MapCache实例都应使用相同的 mapcache.xml 配置文件。

MapCach提供了一个 nginx.conf 在其nginx子目录中。Conf包含加载MapCache的示例配置。配置中最相关的部分是指向 ^/mapcache URI到 mapcache.xml 路径。您需要更改此路径以指向您自己的路径 mapcache.xml 在MapCache源中。

不带任何代理的基本配置(将在非种子的平铺请求上返回404个错误)是:

location ~ ^/mapcache(?<path_info>/.*|$) {
   set $url_prefix "/mapcache";
   mapcache /usr/local/src/mapcache/mapcache.xml;
}

如果将未设定种子的切片请求代理到在Apache服务器上运行的MapCache实例,我们会将所有404个MapCache错误代理到 mapcache.apache.tld 侦听端口8080的服务器,配置为响应 /mapcache 地点。

location ~ ^/mapcache(?<path_info>/.*|$) {
   set $url_prefix "/mapcache";
   mapcache /usr/local/src/mapcache/mapcache.xml;
   error_page 404 = @apache_mapcache;
}

location @apache_mapcache {
   proxy_pass http://mapcache.apache.tld:8080;
}

如果使用mapcache的fastcgi实例,例如在端口9001上使用spawn fcgi或monitorord生成(确保在生成mapcache时启用fastcgi,并在生成之前设置mapcache_config_file环境变量):

location ~ ^/mapcache(?<path_info>/.*|$) {
   set $url_prefix "/mapcache";
   mapcache /usr/local/src/mapcache/mapcache.xml;
   error_page 404 = @fastcgi_mapcache;
}

location @fastcgi_mapcache {
   fastcgi_pass   localhost:9001;
   fastcgi_param  QUERY_STRING     $query_string;
   fastcgi_param  REQUEST_METHOD   $request_method;
   fastcgi_param  CONTENT_TYPE     $content_type;
   fastcgi_param  CONTENT_LENGTH   $content_length;
   fastcgi_param  PATH_INFO        $path_info;
   fastcgi_param  SERVER_NAME      $server_name;
   fastcgi_param  SERVER_PORT      $server_port;
   fastcgi_param  SCRIPT_NAME      "/mapcache";
}

复制以下内容的相关部分 nginx.conf 来自MapCach的 nginx 目录放入nginx的conf文件(在本例中 /usr/local/nginx/conf/nginx.conf )。现在,您应该可以访问http://myserver/mapcache/demo上的演示

CGI/FASTCGI特定指令

二进制CGI/FastCGI位于mapcache/子文件夹中,名为“mapcache”。在您的Web服务器上为mapcache程序激活fastcgi不是这些说明的一部分;更多详细信息可以在 FastCGI 网页或网页上更普通的网页。

mapcache fastcgi程序在名为mapcache_config_file的环境变量中查找其配置文件,在生成mapcache进程之前,必须由Web服务器设置该文件。

参见

配置文件

带有mod_cgi的阿帕奇

SetEnv "MAPCACHE_CONFIG_FILE" "/path/to/mapcache/mapcache.xml"

对于带mod“fcgid”的Apache:

FcgidInitialEnv "MAPCACHE_CONFIG_FILE" "/path/to/mapcache/mapcache.xml

如果您没有禁用演示服务,那么现在应该可以在http://myserver/fcgi-bin/mapcache/demo上访问它,假定您的fcgi进程是在fcgi-bin别名下访问的。

使用一个工作的mod fcgid apache实例,激活mapcache的完整httpd.conf片段可以是:

<IfModule mod_fcgid.c>
   IPCCommTimeout 120
   MaxProcessCount 10
   FcgidInitialEnv "MAPCACHE_CONFIG_FILE" "/path/to/mapcache/mapcache.xml"
   <Location /map.fcgi>
      Order Allow,Deny
      Allow from all
      SetHandler fcgid-script
   </Location>
   ScriptAlias /map.fcgi "/path/to/mapcache/src/mapcache"
</IfModule>

然后可以在http://myserver/map.fcgi[/demo]上访问mapcache服务。

IIS和FastCGI

首先确保已安装FastCGI-请参阅有关配置的说明 MapServer in IIS 。MapCach依赖于 MAPCACHE_CONFIG_FILE 要在IIS中设置的环境变量。请参阅地图服务器 further configuration 关于如何设置这个。

要从命令行创建变量,您可以使用以下命令(这需要管理员权限):

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\Mapserver\bin\mapcache.fcgi.exe'].environmentVariables.[name='MAPCACHE_CONFIG_FILE',value='C:\MapServer\apps\cache1.xml']" /commit:apphost

通常,您需要为同一台服务器上的不同Web应用程序使用不同的MapCache配置文件。要设置这些参数,您需要设置一个唯一参数,该参数将传递给 mapcache.fcgi.exe

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\Mapserver\bin\mapcache.fcgi.exe',arguments='cache2']" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\Mapserver\bin\mapcache.fcgi.exe',arguments='cache2'].environmentVariables.[name='MAPCACHE_CONFIG_FILE',value='C:\MapServer\apps\cache2.xml']" /commit:apphost

备注

该命令似乎必须分成两部分运行,否则将返回以下错误 ERROR ( message:Cannot find requested collection element. )

FastCGI配置存储在 C:\Windows\System32\inetsrv\config\applicationHost.config 。这些命令创建以下XML:

<application fullPath="C:\Mapserver\bin\mapcache.fcgi.exe" arguments="cache2">
    <environmentVariables>
        <environmentVariable name="MAPCACHE_CONFIG_FILE" value="C:\MapServer\apps\cache2.xml" />
    </environmentVariables>
</application>

现在我们已经设置好了 MAPCACHE_CONFIG_FILE 我们可以将Web应用程序配置为使用MapCache。这都可以通过Web应用程序的 web.config 文件。以下是示例配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
    <handlers>
        <add name="mapcache"
        path="/*" verb="*" modules="FastCgiModule"
        scriptProcessor="C:\MapServer\bin\mapcache.fcgi.exe|cache2"
        resourceType="Unspecified"
        requireAccess="Script"
        allowPathInfo="true" />
    </handlers>
    </system.webServer>
</configuration>

需要注意的要点是:

  • allowPathInfo 必须设置为 true 因此,IIS处理 PATH_INFO 与其他Web服务器相同的方式(否则IIS会复制 SCRIPT_NAME 在……里面 PATH_INFO 打破了MapCache处理URL的方式)。

  • scriptProcessor 应设置为与 fullPath 在创建FastCGI配置时设置。这个 |cache2 应与FastCGI应用程序的参数匹配,并用竖线(|)字符与路径分隔。

  • 如果您有一个不带任何参数的FastCGI应用程序(在运行MapCache的单个实例时),则不需要将管道和参数添加到 scriptProcessor

然后,应可通过http://localhost/mapcache/demo/访问地图缓存服务

定制构建,或者如果出现问题

根据系统默认位置中可用的包,“cmake…”步骤很可能失败,并显示缺少依赖项的消息(默认情况下,mapcache some 那些)。根据失败的依赖项是否是构建中所需的一个特性,CMAKE打印出来的错误消息应该让您对接下来应该采取的步骤有一个相当好的了解。

mod_mapcache需要apache、libcurl、libjpeg和libpng开发头文件。cmake脚本将尝试在默认的系统位置定位它们,但是这些位置可以被覆盖或用-d开关指定。例如,如果收到“找不到apr”之类的消息,可以使用如下命令(假定apr位于/usr/local/apr):

$ cmake -DCMAKE_PREFIX_PATH="/usr/local/apr;" ..

如果您不想使用fcgi,可以通过重新运行cmake来禁用依赖关系,其中-dwith_dependency=0,例如。

$ cmake .. -DWITH_FCGI=0

mapcache cmake builder支持的选项

以下是可在生成时启用/禁用的支持选项列表。

option(WITH_PIXMAN "Use Pixman for SSE optimized image manipulations" ON)
option(WITH_SQLITE "Use SQLite as a cache backend" ON)
option(WITH_BERKELEY_DB "Use Berkeley DB as a cache backend" OFF)
option(WITH_MEMCACHE "Use memcache as a cache backend (requires recent apr-util)" OFF)
option(WITH_TIFF "Use TIFFs as a cache backend" OFF)
option(WITH_TIFF_WRITE_SUPPORT "Enable (experimental) support for writable TIFF cache backends" OFF)
option(WITH_GEOTIFF "Allow GeoTIFF metadata creation for TIFF cache backends" OFF)
option(WITH_PCRE "Use PCRE for regex tests" OFF)
option(WITH_MAPSERVER "Enable (experimental) support for the MapServer library" OFF)
option(WITH_POSTGRESQL "Use PostgreSQL as a dimension backend" OFF)
option(WITH_RIAK "Use Riak as a cache backend" OFF)
option(WITH_GDAL "Choose if GDAL raster support should be built in" ON)
option(WITH_MAPCACHE_DETAIL "Build coverage analysis tool for SQLite caches" ON)
option(WITH_GEOS "Choose whether GEOS geometry operations support should be built in" ON)
option(WITH_OGR "Choose whether OGR/GDAL input vector support should be built in" ON)
option(WITH_CGI "Choose whether CGI executable should be built" ON)
option(WITH_FCGI "Choose whether CGI executable should support FastCGI" ON)
option(WITH_VERSION_STRING "Show MapCache in server version string" ON)
option(WITH_APACHE "Build Apache Module" ON)
  • Pixman推荐,从0.5开始)

    -DWITH_PIXMAN=[0|1]
    

    Pixman是一个像素操作库,用于在响应非平铺的WMS请求时组装图像块。建议使用Pixman支持,因为它是高度优化的,将利用最近的处理器扩展(MMX、SSE2等),以加快混合和重新采样操作。如果没有找到pixman库,mapcache将返回到速度较慢的内部像素操作。

  • SQLite可选,从0.5开始)

    -DWITH_SQLITE=[0|1]
    

    sqlite用于启用sqlite和mbtiles缓存后端。需要3.5.0或更高版本。

  • GDAL可选,从0.4开始,还需要GEOS)

    -DWITH_OGR=[0|1]
    

    播种实用程序使用gdal(实际上是ogr)来允许播种仅与给定多边形相交的瓷砖,例如预设给定国家的所有瓷砖。

  • GEOS可选,从0.5开始)

    -DWITH_GEOS=[0|1]
    

    与GDAL/OGR一起,播种机需要geos来测试瓷砖与地理特征的交叉。需要一个足够新的geos版本(支持准备好的几何图形),但配置脚本没有强制执行,因此如果使用太旧的geos版本,最终会导致编译错误。

  • PCRE可选

    -DWITH_PCRE=[0|1]
    

    可以使用PCRE(与Perl兼容的正则表达式)代替POSIX正则表达式来验证WMS维度。它们比posix-res更强大(并且可能更慢)。如果您不打算在regex验证中使用WMS维度支持,或者您的验证需求被posix res覆盖,则不需要这样做。

  • FastCGI Support可选

    -DWITH_FCGI=[0|1]
    

    mapcache可以作为fastcgi可执行文件运行。注意,FastCGI的开销对于您使用本机Apache模块可能获得的吞吐量是不可忽略的。fastcgi构建测试较少,在一些次要细节上可能落后于Apache模块版本。YMMV。

  • TIFF read/write Cache Support可选

    将TIFF用作缓存后端(只读):

    -DWITH_TIFF=[0|1]
    

    TIFF写入支持(用于创建新的TIFF文件并向现有的TIFF文件添加分片)仍处于实验阶段,默认情况下处于禁用状态。如果将TIFF文件放在一个不支持文件锁定的文件系统上,就有可能导致文件损坏,因为在这种情况下,多个进程可能最终会写入同一个文件。跨并发线程的文件锁定也是有问题的,尽管mapcache尝试检测这种情况并应用足够的锁定解决方案。为了保持安全,现在只应在本地文件系统上启用写支持,并安装预处理mpm或fastcgi-mapcache。

    -DWITH_TIFF_WRITE_SUPPORT=[0|1]
    

    在写入TIFF文件时,如果使用libtiff支持进行编译,mapcache还可以选择添加地理参考信息。geotiff writing不会生成定义网格所在的投影所需的完整标签,但只会生成定义像素比例和分层点的标签(即在附带的.tfw文件中找到的等效信息)。

    -DWITH_GEOTIFF=[0|1]
    
  • Memcached Cache Support可选

    -DWITH_MEMCACHE=[0|1]
    

    默认情况下,memcached缓存后端被禁用。您可以选择启用它,因为它不依赖于其他外部库(通过apr-util获得支持)。

    参见

    内存缓存

  • Apache模块选项

    如果您只打算使用fastcgi可执行文件或seeder,那么可以禁用Apache模块构建。

    -DWITH_APACHE=[0|1]
    

    mapcache将自己添加到Apache服务器报告的版本字符串中。可通过以下方式禁用:

    -DWITH_VERSION_STRING=[0|1]
    
  • Native MapServer Mode实验选项

    默认情况下,mapcache不以任何方式链接到mapserver,仅通过WMS协议进行通信。为了提高性能,可以直接使用MapServer C库,避免HTTP请求和图像压缩/解压缩。这种集成仍然是实验性的,应该谨慎使用。

    -DWITH_MAPSERVER=[0|1]
    

    这将使用来自mapserver安装目录的libmapserver.so。mapserver本身应该在启用线程安全的情况下进行编译,除非您计划使用prefork mpm或fastcgi, and 你不打算用播种机。为了保证MapServer端的线程安全,您可能需要查看票据4041和4044。

  • Debug Mode正在进行的工作

    备注

    自从cmake迁移以来,必须完成这项工作。

    它在代码中启用了一些额外的测试,并将更多的调试消息打印到服务器日志中。除非您希望跟踪MapCache中发生的问题,否则可能不应启用此功能。

Windows说明

警告

以下说明已过时。Windows版本现在的处理方式与使用cmake的Unix版本相同。

这些指令以Windows7安装程序为目标,其中包含从源代码编译的ApacheHTTPD。Apache MpCache模块已经成功地与微软Visual Studio C++版本2003, 2008和2010一起构建。

依赖关系

必修的:

  • Apache/Apr/Apr-Util:

这些软件可以手动安装,也可以使用相应的Windows SDK安装,网址为:http://www.gisinternals.com/sdk/

  • PNG

  • JPEG

  • CURL

推荐:

  • PCRE:

可选的:

  • FCGI: 如果不想将mapcache作为apache模块运行,则需要构建fastcgi程序

  • GDAL/GEOS公司:

  • SQLITE: 用于启用sqlite后端存储

  • TIFF: 用于启用TIFF后端存储

配置生成文件

打开nmake.opt并修改指向各种库的路径。

汇编

$ nmake /f Makefile.vc

如果成功,生成的库和可执行文件将在其关联目录中生成:

阿帕奇/

Apache模块(mod_mapcache.dll)

CGI/

fastcgi mapcache可执行文件(mapcache.exe)

UTIL/

mapcache实用程序(mapcache_seed.exe)

将模块移动到apache目录中

复制 mod_mapcache.dll 将文件保存到Apache的一个子目录中。

备注

虽然其他模块安装在*/apache/modules/*中,但您应该将mod_mapcache.dll放在其所需的dll文件(libcurl.dll、zlib.dll等)活动的任何位置,以避免以后出现加载问题。

配置已安装的Apache

  • 修改你的 httpd.conf 加载模块的文件:

    LoadModule mapcache_module "D:/ms4w/Apache/cgi-bin/mod_mapcache.dll"
    
  • 接下来,使用以下代码段配置mapcache目录:

    <IfModule mapcache_module>
       <Directory "D:/ms4w/apps/mapcache/">
          Order Allow,Deny
          Allow from all
       </Directory>
       MapCacheAlias /mapcache "D:/ms4w/apps/mapcache/mapcache.xml"
    </IfModule>
    
  • 配置你的 mapcache.xml 文件(见 Configuration 帮助部分)。

    警告

    如果您收到错误,如“cache disk:host system does not support file symboling linking”,则应在mapcache.xml文件中注释掉行“<symlink_blank/>”,如下所示:

    <cache name="disk" type="disk">
      <base>D:/ms4w/tmp/ms_tmp/cache</base>
      <!--<symlink_blank/>-->
    </cache>
    
  • 最后,重新启动Apache。您应该在apache的error.log中看到一条消息,消息类似于:

    [notice] Apache/2.2.21 (Win32) mod-mapcache/0.5-dev configured -- resuming normal operations
    

测试mapcache模块

  • 在Web浏览器中,访问本地mapcache演示页:http://127.0.0.1/mapcache/demo/。您应该看到演示链接的可点击列表:

    tms
    wmts
    gmaps
    kml
    ve
    wms
    
  • 单击其中一个演示(例如http://127.0.0.1/mapcache/demo/wmts)。应该加载与下面图像类似的地图查看器。

    ../_images/mapcache-demo.jpg
  • 放大几次。您配置的缓存位置应生成数据块(在本例中,位于d:/ms4w/tmp/ms_tmp/cache/)。

    ../_images/mapcache-disk.jpg