diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..06e5f28 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +# --- Builder Stage --- +FROM ubuntu:22.04 AS builder +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential cmake ninja-build git pkg-config \ + libssl-dev zlib1g-dev \ + libmariadb-dev libmariadb-dev-compat \ + libsqlite3-dev python3 libjsoncpp-dev uuid-dev ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +RUN rm -rf /usr/include/mysql && ln -s /usr/include/mariadb /usr/include/mysql + +WORKDIR /app +COPY . /app + +RUN cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \ + && cmake --build build -- -j$(nproc) + +# --- Runtime Stage --- +FROM ubuntu:22.04 AS runtime +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libssl3 ca-certificates libstdc++6 libmariadb3 libjsoncpp25 libuuid1 \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY --from=builder /app/build/visione-backend /app/visione-backend +COPY --from=builder /app/build/openapi /app/build/openapi +COPY --from=builder /app/migrations /app/migrations + +EXPOSE 5555 + +RUN chown -R 1000:1000 /app +USER 1000:1000 + +ENTRYPOINT ["/app/visione-backend"] \ No newline at end of file diff --git a/docker-compose.development.yaml b/docker-compose.development.yaml new file mode 100644 index 0000000..ff8e9e3 --- /dev/null +++ b/docker-compose.development.yaml @@ -0,0 +1,47 @@ +services: + backend: + build: + context: . + dockerfile: Dockerfile + ports: + - "${BACKEND_PORT:-5555}:5555" + volumes: + - ./config.json:/app/config.json + environment: + - DB_HOST=mysql + - DB_PORT=3306 + - DB_USER=${MYSQL_USER:-visione} + - DB_PASSWORD=${MYSQL_PASSWORD:-visione} + - DB_NAME=${MYSQL_DATABASE:-visione} + - SMTP_HOST=mailhog + - SMTP_PORT=1025 + depends_on: + mysql: + condition: service_healthy + + mysql: + image: mysql:8.4 + environment: + MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD:-root}" + MYSQL_DATABASE: "${MYSQL_DATABASE:-visione}" + MYSQL_USER: "${MYSQL_USER:-visione}" + MYSQL_PASSWORD: "${MYSQL_PASSWORD:-visione}" + ports: + - "${MYSQL_PORT:-3306}:3306" + volumes: + - mysql-data:/var/lib/mysql + healthcheck: + test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u$${MYSQL_USER} -p$${MYSQL_PASSWORD} --silent"] + interval: 5s + timeout: 5s + retries: 20 + start_period: 20s + + mailhog: + image: mailhog/mailhog:v1.0.1 + ports: + - "${MAILHOG_SMTP_PORT:-1025}:1025" + - "${MAILHOG_WEB_PORT:-8025}:8025" + +volumes: + mysql-data: \ No newline at end of file