OpenStreetMap 타일 서버 구축 (CentOS7)
14355 단어 centos7OpenStreetMap
조금 어색했기 때문에 여기에 정리했습니다.
특히 이번에는
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 이상의 쪽이 좋은 것이 아닐까 생각합니다.
먼저 넣어 두는 것, 두는 것
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가 되어 있었다.
다음에 예정된 것
타일 이미지의 캐시 생성에 관한 기사를 쓸 예정입니다.
여기에 기사를 썼습니다.
Reference
이 문제에 관하여(OpenStreetMap 타일 서버 구축 (CentOS7)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Syn256/items/633aef930455bfd4be0d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)