🚀 Docker Build and Push / build-and-push (15) (push) Successful in 2m58s
🚀 Docker Build and Push / build-and-push (16) (push) Successful in 3m39s
🚀 Docker Build and Push / build-and-push (17) (push) Successful in 3m37s
🚀 Docker Build and Push / build-and-push (18) (push) Successful in 3m36s
- TIMESCALEDB_VERSION passe de 2.28.3 à 2.30.2. Vérifié pour 16, 17 et 18 : compilation, tests, et reprise d'une base créée par l'image publiée après `ALTER EXTENSION timescaledb UPDATE`. - TimescaleDB 2.29 a retiré PostgreSQL 15 (`Unsupported PostgreSQL version` à la compilation) : `pg15` garde 2.28.3 par TIMESCALEDB_VERSION_PG15. - Décision 0007, tableau et badge du README, procédure de changement de version. Une base existante refuse toute requête sur la nouvelle image tant que l'extension n'est pas mise à niveau : voir docs/exploitation/publication.md.
98 lines
4.9 KiB
Docker
98 lines
4.9 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# Versions épinglées : docs/decisions/0003-versions-de-timescaledb-et-vectorchord-epinglees.md
|
|
ARG PG_VERSION=18
|
|
ARG VCHORD_VERSION=1.1.1
|
|
|
|
# =============================================================================
|
|
# Étape base — image VectorChord, paquets mis à niveau
|
|
# =============================================================================
|
|
FROM tensorchord/vchord-postgres:pg${PG_VERSION}-v${VCHORD_VERSION} AS base
|
|
|
|
USER root
|
|
|
|
# L'image de base n'est republiée qu'à chaque version de VectorChord : les versions mineures
|
|
# de PostgreSQL, pgvector et les correctifs Debian viennent d'apt.
|
|
# APT_REFRESH est une clé de cache : la changer rejoue cette couche, ce que fait la CI quand
|
|
# des mises à jour sont en attente. Voir docs/decisions/0002-paquets-a-jour-et-en-tetes-du-serveur.md.
|
|
ARG APT_REFRESH=
|
|
RUN echo "apt refresh: ${APT_REFRESH:-none}" \
|
|
&& apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get upgrade -y --with-new-pkgs \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# =============================================================================
|
|
# Étape builder — compilation de TimescaleDB
|
|
# =============================================================================
|
|
FROM base AS builder
|
|
|
|
# Les en-têtes du serveur sont épinglés sur la version du serveur installé : des en-têtes plus
|
|
# récents font référencer à TimescaleDB des symboles que le serveur n'exporte pas
|
|
# (`palloc0_mul` avec PostgreSQL 18).
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
git \
|
|
build-essential \
|
|
cmake \
|
|
libssl-dev \
|
|
libkrb5-dev \
|
|
postgresql-server-dev-$PG_MAJOR="$(dpkg-query -W -f='${Version}' postgresql-$PG_MAJOR)" \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# TimescaleDB compilé depuis l'étiquette de la version stable.
|
|
# TimescaleDB 2.29 a abandonné PostgreSQL 15, qui garde la dernière version qui le gère.
|
|
ARG TIMESCALEDB_VERSION=2.30.2
|
|
ARG TIMESCALEDB_VERSION_PG15=2.28.3
|
|
WORKDIR /build/timescaledb
|
|
RUN if [ "$PG_MAJOR" = 15 ]; then version="$TIMESCALEDB_VERSION_PG15"; else version="$TIMESCALEDB_VERSION"; fi \
|
|
&& git clone --branch "$version" --depth 1 https://github.com/timescale/timescaledb.git . \
|
|
&& ./bootstrap -DREGRESS_CHECKS=OFF -DWARNINGS_AS_ERRORS=OFF \
|
|
&& cd build && make -j$(nproc) && make install DESTDIR=/tmp/timescaledb
|
|
|
|
# =============================================================================
|
|
# Étape finale — image publiée, sans outils de compilation
|
|
# =============================================================================
|
|
FROM base AS final
|
|
|
|
# Labels OCI fixes. Ceux qui dépendent de la construction (révision, version, date) sont posés
|
|
# par la CI.
|
|
LABEL org.opencontainers.image.title="TimescaleDB + VectorChord + pgvector + PostGIS"
|
|
LABEL org.opencontainers.image.description="PostgreSQL with TimescaleDB, VectorChord, pgvector, and PostGIS extensions pre-installed"
|
|
LABEL org.opencontainers.image.source="https://gitea.killinger.fr/maxime.killinger/postgres-ts-vectors"
|
|
LABEL org.opencontainers.image.vendor="Maxime Killinger"
|
|
LABEL org.opencontainers.image.licenses="Apache-2.0"
|
|
# PG_MAJOR et non PG_VERSION : dans cette étape, PG_VERSION est la variable d'environnement de
|
|
# l'image de base (la version complète du paquet), pas l'argument de construction.
|
|
ARG VCHORD_VERSION
|
|
LABEL org.opencontainers.image.base.name="tensorchord/vchord-postgres:pg${PG_MAJOR}-v${VCHORD_VERSION}"
|
|
|
|
# TimescaleDB, depuis l'étape de compilation
|
|
COPY --from=builder /tmp/timescaledb/usr/lib/postgresql/ /usr/lib/postgresql/
|
|
COPY --from=builder /tmp/timescaledb/usr/share/postgresql/ /usr/share/postgresql/
|
|
|
|
# PostGIS
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
postgresql-$PG_MAJOR-postgis-3 \
|
|
postgresql-$PG_MAJOR-postgis-3-scripts \
|
|
postgis \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Création des extensions à l'initialisation de la base
|
|
COPY init-extensions.sh /docker-entrypoint-initdb.d/
|
|
RUN sed -i 's/\r$//' /docker-entrypoint-initdb.d/init-extensions.sh && \
|
|
chmod +x /docker-entrypoint-initdb.d/init-extensions.sh
|
|
|
|
# Enveloppe du point d'entrée : droits du volume, puis point d'entrée d'origine
|
|
COPY docker-entrypoint-wrapper.sh /usr/local/bin/
|
|
RUN sed -i 's/\r$//' /usr/local/bin/docker-entrypoint-wrapper.sh && \
|
|
chmod +x /usr/local/bin/docker-entrypoint-wrapper.sh
|
|
|
|
# Sonde avec l'utilisateur et la base du conteneur : sonder en `postgres` écrit
|
|
# `FATAL: role "postgres" does not exist` au journal toutes les 30 s dès que POSTGRES_USER
|
|
# est défini.
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \
|
|
CMD pg_isready -U "${POSTGRES_USER:-postgres}" -d "${POSTGRES_DB:-${POSTGRES_USER:-postgres}}" || exit 1
|
|
|
|
# Démarre en root : l'enveloppe corrige les droits, le point d'entrée d'origine passe ensuite
|
|
# à l'utilisateur postgres.
|
|
ENTRYPOINT ["docker-entrypoint-wrapper.sh"]
|
|
CMD ["postgres", "-c", "shared_preload_libraries=timescaledb,vchord"]
|