OpenStreetMap 타일 서버 구축 (CentOS7)

14355 단어 centos7OpenStreetMap
ubntu 설치 정보는 많지만 CentOS 정보가 오래되었고,
조금 어색했기 때문에 여기에 정리했습니다.
특히 이번에는
htps //w w. s 파세이. 코 m / 포 st-b ぉ g / 오 스테 에레 t 마 p /
이쪽으로부터의 정보에 크게 구원되고 있습니다.
고마워요.

추가 (2017.06.07)

제온 E5-2630L v2 2.40GHz/12 코어
Mem 48G
HDD 7500prm (2T)

기계에서 PlanetOSM 프로젝트
Latest Weekly Planet XML File 데이터 변환에 걸린 시간은,

real 6459m38.346s
사용자 1126m46.868s
sys 73m54.920s

되었습니다. 107시간 조금으로 받아들일 수 있는 느낌입니다.
덧붙여서, osm2pgsql의 -m 옵션으로 캡처하면 메모리가 부족해 떨어지므로,
--slim 옵션으로 중간 테이블을 만드는 모드로 캡처했습니다.

디스크는 최소 3T 있던 것이 좋을까 생각합니다.

이번 인스톨 하는 것(ISO로부터 인스톨한 직후의 CentOS7를 상정하고 있습니다)

메모리가 최소 8G 필요합니다.
프로덕션 가동시킨다면 48G 이상의 쪽이 좋은 것이 아닐까 생각합니다.
  • PostgreSQL9.6
  • PostGIS PGRouting
  • osm2psql
  • OpenStreetMap 용 DB 생성 및 OSM 데이터 가져 오기
  • mapnik
  • mapnik-stylesheets
  • Apache
  • Apache mod_tile

  • 먼저 넣어 두는 것, 두는 것



    SELinux를 OFF
    vi/etc/selinux/config
    #SELINUX=enforcing
    SELINUX=disabled
    
    # 再起動する
    reboot
    getenforce
      Disabledになっていることを確認
    

    yum 업그레이드 및 기본 패키지 설치
    yum -y upgrade
    yum -y install epel-release
    yum -y install wget git freetype-devel libxml2-devel bzip2-devel freetype-devel libtool-ltdl-devel libpng-devel libtiff-devel libjpeg-devel gcc-c++ bzip2 bzip2-devel libcurl-devel libpng-devel libtiff-devel libtool-ltdl-devel pycairo-devel cairomm-devel libjpeg-turbo-devel zip unzip libtool autoconf automake
    
    vi /etc/yum.repos.d/CentOS-Base.repo
    

    CentOS-Base.repo
    #[base]の最後に行追加
    exclude=postgresql*
    
    #[updates]の最後に行追加
    exclude=postgresql*
    
    #[extras]の最後に行追加
    exclude=postgresql*
    


    1.PostgreSQL9.6 설치


    cd /usr/local/src
    
    wget https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
    
    rpm -ivh pgdg-centos96-9.6-3.noarch.rpm
    
    yum -y install postgresql96 postgresql96-contrib postgresql96-devel postgresql96-libs postgresql96-server 
    
    /usr/pgsql-9.6/bin/postgresql96-setup initdb
    
    systemctl start postgresql-9.6
    systemctl enable postgresql-9.6
    
    vi /var/lib/pgsql/9.6/data/pg_hba.conf 
    

    pg_hba.conf
    # peerをtrustに(開発用)
    local   all             all                                     trust
    host    all             all             127.0.0.1/32            trust
    host    all             all             ::1/128                 trust
    

    연결 확인
    systemctl restart postgresql-9.6
    psql -Upostgres
    

    2.PostGIS와 pgrouting 설치


    yum -y install postgis2_96 postgis2_96-client postgis2_96-devel postgis2_96-utils ogr_fdw96 pgrouting_96
    

    3.osm2pgsql 설치


    yum -y install cmake libpqxx libpqxx-devel boost boost-devel proj proj-devel proj-epsg lua lua-devel geos-devel protobuf-c protobuf-c-devel
    
    cd /usr/local/src
    git clone https://github.com/openstreetmap/osm2pgsql
    cd osm2pgsql
    mkdir build && cd build
    cmake ..
    make
    make install
    ldconfig
    

    4. OpenStreetMap 용 DB 작성


    su postgres
    createdb template_postgis
    psql -d template_postgis -c "UPDATE pg_database SET datistemplate=true WHERE datname='template_postgis'" 
    psql -d template_postgis -f /usr/pgsql-9.6/share/contrib/postgis-2.3/postgis.sql
    psql -d template_postgis -f /usr/pgsql-9.6/share/contrib/postgis-2.3/spatial_ref_sys.sql
    psql -d template_postgis -f /usr/pgsql-9.6/share/contrib/postgis-2.3/postgis_comments.sql
    psql -d template_postgis -f /usr/pgsql-9.6/share/contrib/postgis-2.3/rtpostgis.sql
    psql -d template_postgis -f /usr/pgsql-9.6/share/contrib/postgis-2.3/raster_comments.sql
    psql -d template_postgis -f /usr/pgsql-9.6/share/contrib/postgis-2.3/topology.sql
    psql -d template_postgis -f /usr/pgsql-9.6/share/contrib/postgis-2.3/topology_comments.sql
    createdb gis
    psql -d gis -f /usr/pgsql-9.6/share/contrib/postgis-2.3/postgis.sql
    psql -d gis -f /usr/pgsql-9.6/share/contrib/postgis-2.3/spatial_ref_sys.sql
    

    OpenStreertMap의 일본지도 영역을 다운로드하여 서버에 투입
    cd ~
    wget http://download.geofabrik.de/asia/japan/kanto-latest.osm.bz2
    # cacheはMB単位です。実メモリの75%くらいまでは指定しても大丈夫だと思います。
    osm2pgsql -m -d gis kanto-latest.osm.bz2 -U postgres --cache 6000
    

    5.mapnik 설치


    yum -y install gdal-python gdal-devel icu libicu libicu-devel
    yum -y install python-pip
    pip install --upgrade pip
    
    cd /usr/local/src
    
    # v2.0系
    wget https://github.com/downloads/mapnik/mapnik/mapnik-v2.0.2.tar.bz2
    tar -jxvf mapnik-v2.0.2.tar.bz2
    
    cd mapnik-v2.0.2
    python scons/scons.py PG_CONFIG=/usr/pgsql-9.6/bin/pg_config
    make install
    ldconfig
    ldconfig -v
    
    ln -s /usr/local/lib64/libmapnik.so.2.0 /usr/lib64/libmapnik.so.2.0
    
    cd /usr/local/src/mapnik-v2.0.2
    git clone https://github.com/openstreetmap/mapnik-stylesheets.git
    cd mapnik-stylesheets
    wget http://tile.openstreetmap.org/world_boundaries-spherical.tgz
    wget http://tile.openstreetmap.org/processed_p.tar.bz2
    wget http://tile.openstreetmap.org/shoreline_300.tar.bz2
    tar xzf world_boundaries-spherical.tgz
    tar xjf processed_p.tar.bz2 -C world_boundaries
    tar xjf shoreline_300.tar.bz2 -C world_boundaries
    cd world_boundaries
    wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip
    wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_boundary_lines_land.zip
    unzip ne_10m_populated_places.zip
    unzip ne_110m_admin_0_boundary_lines_land.zip
    
    cd ../../mapnik-stylesheets
    ./generate_xml.py --host localhost --user postgres --dbname gis --symbols ./symbols/ --world_boundaries=./world_boundaries/ --accept-none
    

    6.Apache 설치


    yum -y install httpd httpd-devel
    

    mod_tile 설치


    mkdir -p /var/run/renderd
    mkdir -p /var/lib/mod_tile
    chmod 777 /var/run/renderd
    chmod 777 /var/lib/mod_tile
    
    vi /etc/renderd.conf
    

    renderd.conf
    [renderd]
    socketname=/var/run/renderd/renderd.sock
    num_threads=8
    tile_dir=/var/lib/mod_tile
    stats_file=/var/run/renderd/renderd.stats
    
    [mapnik]
    plugins_dir=/usr/local/lib64/mapnik/input
    font_dir=/usr/local/lib64/mapnik/fonts
    font_dir_recurse=1
    
    [default]
    URI=/osm_tiles2/
    XML=/usr/local/src/mapnik-stylesheets/osm.xml # mapnik-style内のosm.xmlを指定
    HOST=localhost
    
    cd /usr/local/src
    git clone https://github.com/openstreetmap/mod_tile.git
    cd mod_tile
    ./autogen.sh
    ./configure --with-apxs=/usr/bin/apxs
    make
    make install
    make install-mod_tile
    ldconfig
    

    7. 기동 확인


    vi /etc/httpd/conf/httpd.conf
    # Include conf.modules.d/*.confの直下あたりに追記
    LoadModule tile_module modules/mod_tile.so
    LoadTileConfigFile /etc/renderd.conf
    ModTileRenderdSocketName /var/run/renderd/renderd.sock
    ModTileRequestTimeout 30
    ModTileMissingRequestTimeout 30
    
    cd /var/www/html
    vi index.html
    

    index.html
    <html>
    <head>
    <title>OpenLayers Demo</title>
    <style type="text/css">
    html, body, #basicMap {
    width: 100%;
    height: 100%;
    margin: 0;
    }
    </style>
    <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
    <script>
    function init() {
    var options = {
    projection: new OpenLayers.Projection("EPSG:900913"),
    displayProjection: new OpenLayers.Projection("EPSG:4326"),
    units: "m",
    maxResolution: 156543.0339,
    maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
    20037508.34, 20037508.34),
    numZoomLevels: 20,
    controls: [
    new OpenLayers.Control.Navigation(),
    new OpenLayers.Control.PanZoomBar(),
    new OpenLayers.Control.Permalink(),
    new OpenLayers.Control.ScaleLine(),
    new OpenLayers.Control.MousePosition(),
    new OpenLayers.Control.KeyboardDefaults()
    
    ]
    };
    map = new OpenLayers.Map("basicMap",options);
    var newL = new OpenLayers.Layer.OSM("Default", "/osm_tiles2/${z}/${x}/${y}.png", {numZoomLevels: 19});
    map.addLayer(newL);
    map.zoomIn();
    }
    </script>
    </head>
    <body onload="init();">
    <div id="basicMap"></div>
    </body>
    </html>
    
    
    systemctl disabled firewalld
    systemctl stop firewalld
    systemctl enable httpd
    systemctl start httpd
    /usr/local/bin/renderd -f > /var/log/renderd.log 2> /var/log/renderd.log &
    

    브라우저로 액세스

    http://{openstreetmap을 설치한 서버 주소}/



    잘하면 이런 느낌입니다.

    재부팅 방법



    systemctl restart httpd
    ps ax | grep renderd
    에서 renderd 프로세스를 조사하고 kill합니다.

    일단 소켓도 삭제해 둡니다.
    rm/var/run/renderd/*

    /usr/local/bin/renderd -f >/var/log/renderd.log 2 >/var/log/renderd.log &

    어라? 라고 된 곳.



    SELinux 끊어지지 않고, render의 소켓이 Permission Denied가 되어 있었다.

    다음에 예정된 것



    타일 ​​이미지의 캐시 생성에 관한 기사를 쓸 예정입니다.

    여기에 기사를 썼습니다.

    좋은 웹페이지 즐겨찾기