From 85911a2c97acebf6b2637148c182eeea567c641d Mon Sep 17 00:00:00 2001
From: Dennis Boldt <info@dennis-boldt.de>
Date: Sun, 2 Jan 2022 13:12:58 +0100
Subject: [PATCH] Add osm2pgsql to the portal container

- Build osm2pgsql in a separate woker
- Fix EXPOSE port to 3000
- Add postgres to the backend network
---
 Dockerfile                              | 57 ++++++++++++++++++++++++-
 deployment/examples/docker-compose.yaml |  4 +-
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 30d927f..c0dac0c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,44 @@
 # This dockerfile is for the API + Frontend production image
 
+#############################################
+# Build osm2pgsql AS builder
+#############################################
+
+# This image should be the same as final one, because of the lib versions
+FROM python:3.9.7-bullseye as osm2pgsql-builder
+
+ARG DEBIAN_FRONTEND=noninteractive
+ENV TZ=Europe/Berlin
+ENV OSM2PGSQL_VERSION=1.5.1
+
+# Dependencies
+RUN apt-get update &&\
+    apt-get install -y \
+    make \
+    cmake \
+    g++ \
+    libboost-dev \
+    libboost-system-dev \
+    libboost-filesystem-dev \
+    libexpat1-dev \
+    zlib1g-dev \
+    libbz2-dev \
+    libpq-dev \
+    libproj-dev \
+    lua5.3 \
+    liblua5.3-dev \
+    git &&\
+    rm -rf /var/lib/apt/lists/*
+
+# Clone & Build
+RUN git clone  --branch $OSM2PGSQL_VERSION git://github.com/openstreetmap/osm2pgsql.git &&\
+    cd osm2pgsql/ &&\
+    mkdir build &&\
+    cd build &&\
+    cmake .. &&\
+    make &&\
+    make install
+
 #############################################
 # Build the frontend AS builder
 #############################################
@@ -23,6 +62,20 @@ RUN npm run build
 
 FROM python:3.9.7-bullseye
 
+RUN apt-get update &&\
+    apt-get install -y \
+    libboost-dev \
+    libboost-system-dev \
+    libboost-filesystem-dev \
+    libexpat1-dev \
+    zlib1g-dev \
+    libbz2-dev \
+    libpq-dev \
+    libproj-dev \
+    lua5.3 \
+    liblua5.3-dev &&\
+    rm -rf /var/lib/apt/lists/*
+
 WORKDIR /opt/obs/api
 
 ADD api/requirements.txt  /opt/obs/api/
@@ -38,9 +91,11 @@ ADD api/obs /opt/obs/api/obs/
 ADD api/tools /opt/obs/api/tools/
 RUN pip install -e /opt/obs/api/
 
+ADD roads_import.lua /opt/obs/api/roads_import.lua
+
 COPY --from=frontend-builder /opt/obs/frontend/build /opt/obs/frontend/build
+COPY --from=osm2pgsql-builder /usr/local/bin/osm2pgsql /usr/local/bin/osm2pgsql
 
 EXPOSE 8000
 
 CMD ["openbikesensor-api"]
-
diff --git a/deployment/examples/docker-compose.yaml b/deployment/examples/docker-compose.yaml
index cae7034..40e09d7 100644
--- a/deployment/examples/docker-compose.yaml
+++ b/deployment/examples/docker-compose.yaml
@@ -1,4 +1,4 @@
-version: '3'
+version: '3.5'
 
 networks:
   gateway:
@@ -16,6 +16,8 @@ services:
       POSTGRES_DB: obs
     volumes:
     - ./data/postgres/data:/var/lib/postgresql/data
+    networks:
+      - backend
 
   portal:
     image: openbikesensor-portal