OpenTileServer/Docker/tile/Dockerfile

118 lines
5.0 KiB
Docker

FROM ubuntu:20.04
LABEL maintainer="AcuGIS <hello@citedcorp.com>"
SHELL ["/bin/bash", "-c"]
ENV WORKDIR_OSM=/var/tmp/.osmosis
ENV OSM_STYLE_XML='/usr/local/share/maps/style/OSMBright/OSMBright.xml'
ARG DEBIAN_FRONTEND=noninteractive
ARG POSTGRES_DB
ARG POSTGRES_USER
ARG POSTGRES_PASSWORD
ARG PBF_URL
# Install packages needed for building
# install modtile/renderd
ADD https://github.com/openstreetmap/mod_tile/archive/refs/tags/0.6.1.zip /tmp/mod_tile-0.6.1.zip
COPY build_modtile.sh /tmp/build_modtile.sh
RUN bash /tmp/build_modtile.sh ${OSM_STYLE_XML} && rm /tmp/build_modtile.sh
# install carto
RUN apt-get -y install npm nodejs && \
npm install -g carto
# install Bright stylesheet
ADD https://github.com/mapbox/osm-bright/archive/master.zip /tmp/master.zip
RUN mkdir -p /usr/local/share/maps/style
WORKDIR /usr/local/share/maps/style
RUN unzip /tmp/master.zip && rm -f /tmp/master.zip && \
mkdir -p osm-bright-master/shp
# TODO: do we need the .shp files (1.2GB), after indexing ?
COPY index_polygons.sh /tmp/index_polygons.sh
RUN bash /tmp/index_polygons.sh && rm -f /tmp/index_polygons.sh
# Configuring OSM Bright
COPY fix_mml.sh /tmp/fix_mml.sh
ADD http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip /tmp/ne_10m_populated_places.zip
RUN unzip /tmp/ne_10m_populated_places.zip && rm -f /tmp/ne_10m_populated_places.zip && \
mkdir -p osm-bright-master/shp/ne_10m_populated_places && \
mv ne_10m_populated_places.* osm-bright-master/shp/ne_10m_populated_places/ && \
bash /tmp/fix_mml.sh && rm -f /tmp/fix_mml.sh
# Compiling the stylesheet
WORKDIR /usr/local/share/maps/style/osm-bright-master
RUN apt-get -y install python2 && \
ln -s /usr/bin/python2 /usr/bin/python && \
mv configure.py.sample configure.py && \
sed -i.save 's|config\["path"\].*|config\["path"\] = path.expanduser("/usr/local/share/maps/style")|' configure.py && \
sed -i.save "s|config\[\"postgis\"\]\[\"host\"\].*|config\[\"postgis\"\]\[\"host\"\]=\"pg\"|" configure.py && \
sed -i.save "s|config\[\"postgis\"\]\[\"dbname\"\].*|config\[\"postgis\"\]\[\"dbname\"\]=\"${POSTGRES_DB}\"|" configure.py && \
sed -i.save "s|config\[\"postgis\"\]\[\"user\"\].*|config\[\"postgis\"\]\[\"user\"\]=\"${POSTGRES_USER}\"|" configure.py && \
sed -i.save "s|config\[\"postgis\"\]\[\"password\"\].*|config\[\"postgis\"\]\[\"password\"\]=\"${POSTGRES_PASSWORD}\"|" configure.py && \
./configure.py && \
./make.py && \
cd ../OSMBright/ && \
carto project.mml > OSMBright.xml
# Configure webserver
COPY mod_tile.load /etc/apache2/mods-enabled/mod_tile.load
COPY renderd.conf /etc/apache2/conf-available/renderd.conf
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
RUN a2enconf renderd && a2ensite 000-default
# Configure webpages
ADD https://github.com/AcuGIS/OpenTileServer/archive/refs/heads/master.zip /tmp/master.zip
RUN unzip /tmp/master.zip && \
mv /tmp/OpenTileServer-master/app/* /var/www/html/ && \
rm -rf /tmp/master.zip && /tmp/OpenTileServer-master
COPY latlong.py /tmp/latlong.py
RUN LOC_NAME=$(echo ${##*/} | sed 's/\(.*\)-latest.*/\1/') \
&& sed -i.save "s|localhost|$(hostname -I | tr -d ' ')|" /var/www/html/leaflet-example.html \
&& apt-get -y install python3-requests \
&& LOC_LATLONG=$(python3 /tmp/latlong.py "${LOC_NAME}") \
&& sed -i.save "s/\.setView(\[[0-9]\+\.[0-9]\+,[ \t]*-\?[0-9]\+\.[0-9]\+/.setView([${LOC_LATLONG}/" /var/www/html/leaflet-example.html \
&& sed -i.save "s/L\.marker(\[[0-9]\+\.[0-9]\+,[ \t]*-\?[0-9]\+\.[0-9]\+/L.marker([${LOC_LATLONG}/" /var/www/html/leaflet-example.html \
&& rm -f /tmp/latlong.py \
&& chown -R www-data:www-data /var/www/
# install osmosis
COPY osm_update.sh /etc/cron.daily/osm_update
RUN apt-get -y install osmosis && \
echo 'WORKDIR_OSM=/var/tmp/.osmosis' >> /etc/environment && \
mkdir -p "${WORKDIR_OSM}" && \
osmosis --read-replication-interval-init workingDirectory=${WORKDIR_OSM} && \
STATE_URL="https://replicate-sequences.osm.mazdermind.de/?$(date -u +"%Y-%m-%dT%TZ")&stream=day" && \
wget --no-check-certificate -O${WORKDIR_OSM}/state.txt ${STATE_URL} && \
UPDATE_URL="$(echo ${PBF_URL} | sed 's/latest.osm.pbf/updates/')" && \
sed -i.save "s|#\?baseUrl=.*|baseUrl=${UPDATE_URL}|" ${WORKDIR_OSM}/configuration.txt && \
chmod +x /etc/cron.daily/osm_update
# install osm2pgsql
RUN apt-get -y --no-install-recommends install osm2pgsql
# Cleanup
RUN apt-get clean \
&& apt-get -y autoclean \
&& apt-get -y autoremove \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /usr/share/man/* \
&& rm -rf /usr/share/doc/*
RUN useradd -m ${POSTGRES_USER} \
&& echo ${POSTGRES_USER}:${POSTGRES_PASSWORD} | chpasswd \
&& echo "pg:5432:${POSTGRES_DB}:${POSTGRES_USER}:${POSTGRES_PASSWORD}" > /home/${POSTGRES_USER}/.pgpass \
&& chown ${POSTGRES_USER}:${POSTGRES_USER} /home/${POSTGRES_USER}/.pgpass
COPY entrypoint.sh /entrypoint.sh
COPY osm_load.sh /home/${POSTGRES_USER}/osm_load.sh
RUN chmod +x /entrypoint.sh /home/${POSTGRES_USER}/osm_load.sh
WORKDIR /home/${POSTGRES_USER}
#USER ${POSTGRES_USER}
EXPOSE 80/tcp
#EXPOSE 443/tcp
CMD ["/entrypoint.sh"]