Files
endurain/docker/Dockerfile
João Vitória Silva c5a681a2f9 Drop MariaDB support and update dependencies
Removed MariaDB support from documentation and backend code, standardizing on PostgreSQL as the only supported database. Updated backend dependencies in poetry.lock and pyproject.toml, removing mysqlclient and updating several packages. Documentation and example files were updated to reflect the database change.
2025-10-10 12:28:02 +01:00

98 lines
2.7 KiB
Docker

# Stage 1: Build Vue.js app
FROM node:24-slim AS frontend-build
# Set the working directory to /tmp/frontend
WORKDIR /tmp/frontend
# Copy and install dependencies
COPY frontend/app/package*.json ./
RUN npm ci --prefer-offline
# Copy the frontend directory
COPY frontend/app ./
# Build the app
RUN npm run build
# Stage 2: Install requirements
FROM python:3.13-alpine AS requirements-stage
# Set the working directory
WORKDIR /tmp/backend
# Install Poetry and add poetry-plugin-export
RUN pip install --no-cache-dir poetry \
&& poetry self add poetry-plugin-export
# Copy pyproject.toml and poetry.lock* files
COPY backend/pyproject.toml backend/poetry.lock* ./
# Install dependencies using poetry and export them to requirements.txt
RUN poetry export -f requirements.txt --output requirements.txt --without-hashes
# Stage 3: Build FastAPI app
FROM python:3.13-alpine
# Install dependencies
RUN apk add --no-cache \
build-base \
pkgconfig \
musl-dev \
python3-dev \
libffi-dev \
openssl-dev \
gcc \
curl \
ca-certificates
# Install the latest gosu
RUN set -eux; \
arch="$(uname -m)"; \
case "$arch" in \
x86_64) gosu_arch='amd64' ;; \
aarch64) gosu_arch='arm64' ;; \
*) echo "unsupported architecture: $arch" >&2; exit 1 ;; \
esac; \
latest_version="$(curl -sSL https://api.github.com/repos/tianon/gosu/releases/latest | grep '"tag_name"' | head -n 1 | cut -d '"' -f4)"; \
curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/${latest_version}/gosu-${gosu_arch}"; \
chmod +x /usr/local/bin/gosu; \
gosu nobody true
# Define environment variables
ENV UID=1000 \
GID=1000 \
BEHIND_PROXY=false
# Set the working directory to /app/frontend
WORKDIR /app/frontend
# Copy the directory app contents to /app
COPY --from=frontend-build /tmp/frontend/dist ./dist
# Set the working directory to /app/backend
WORKDIR /app/backend
# Copy requirements.txt from requirements-stage to /app/backend
COPY --from=requirements-stage /tmp/backend/requirements.txt ./requirements.txt
# Install dependencies
RUN pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir --upgrade -r ./requirements.txt
# Copy the directory app contents to /app
COPY backend/app ./
# Copy the entrypoint script for starting the FastAPI app
COPY docker/start.sh /docker-entrypoint.d/start.sh
# Make the script executable
RUN chmod +x /docker-entrypoint.d/start.sh
# Make port 8080 available to the world outside this container
EXPOSE 8080
# Add a healthcheck
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s CMD curl -f http://localhost:8080/api/v1/about || exit 1
# Run the FastAPI app
ENTRYPOINT ["/docker-entrypoint.d/start.sh"]