|
| 1 | +# syntax=docker/dockerfile:1.5-labs |
| 2 | +ARG postgres_major=15 |
| 3 | +ARG postgres_minor=1 |
| 4 | + |
| 5 | +ARG sfcgal_release=1.3.10 |
| 6 | +ARG sfcgal_release_checksum=sha256:4e39b3b2adada6254a7bdba6d297bb28e1a9835a9f879b74f37e2dab70203232 |
| 7 | +ARG postgis_release=3.3.2 |
| 8 | +ARG postgis_release_checksum=sha256:9a2a219da005a1730a39d1959a1c7cec619b1efb009b65be80ffc25bad299068 |
| 9 | +ARG pgrouting_release=3.4.1 |
| 10 | +ARG pgrouting_release_checksum=sha256:a4e034efee8cf67582b67033d9c3ff714a09d8f5425339624879df50aff3f642 |
| 11 | +ARG pgtap_release=1.2.0 |
| 12 | +ARG pgtap_release_checksum=sha256:9c7c3de67ea41638e14f06da5da57bac6f5bd03fea05c165a0ec862205a5c052 |
| 13 | +ARG pg_cron_release=1.4.2 |
| 14 | +ARG pg_cron_release_checksum=sha256:3652722ea98d94d8e27bf5e708dd7359f55a818a43550d046c5064c98876f1a8 |
| 15 | +ARG pgaudit_release=1.7.0 |
| 16 | +ARG pgaudit_release_checksum=sha256:8f4a73e451c88c567e516e6cba7dc1e23bc91686bb6f1f77f8f3126d428a8bd8 |
| 17 | +ARG pgjwt_release=9742dab1b2f297ad3811120db7b21451bca2d3c9 |
| 18 | +ARG pgsql_http_release=1.5.0 |
| 19 | +ARG pgsql_http_release_checksum=sha256:43efc9e82afcd110f205b86b8d28d1355d39b6b134161e9661a33a1346818f5d |
| 20 | +ARG plpgsql_check_release=2.2.5 |
| 21 | +ARG plpgsql_check_release_checksum=sha256:6c3a3c5faf3f9689425c6db8a6b20bf4cd5e7144a055e29538eae980c7232573 |
| 22 | +ARG pg_safeupdate_release=1.4 |
| 23 | +ARG pg_safeupdate_release_checksum=sha256:ff01d3d444d35924bd3d745c5695696292e2855042da4c30fe728fb3b6648122 |
| 24 | +ARG timescaledb_release=2.9.1 |
| 25 | +ARG timescaledb_release_checksum=sha256:883638f2e79d25ec88ee58f603f3c81c999b6364cb4c799919d363f04089b47b |
| 26 | +ARG wal2json_release=2_5 |
| 27 | +ARG wal2json_release_checksum=sha256:b516653575541cf221b99cf3f8be9b6821f6dbcfc125675c85f35090f824f00e |
| 28 | +ARG pljava_release=1.6.4 |
| 29 | +ARG pljava_release_checksum=sha256:5dc5a963365cbdeb786d0ad65b6310c4c5150ef8524e273bca4085c3fb0f056f |
| 30 | +ARG plv8_release=3.1.5 |
| 31 | +ARG plv8_release_checksum=sha256:1e108d5df639e4c189e1c5bdfa2432a521c126ca89e7e5a969d46899ca7bf106 |
| 32 | +ARG pg_plan_filter_release=5081a7b5cb890876e67d8e7486b6a64c38c9a492 |
| 33 | +ARG pg_net_release=0.7.1 |
| 34 | +ARG pg_net_release_checksum=sha256:f403019fbffe5b3ec28816957ef81279dea1db5b008e3fb3bc39181a5e361940 |
| 35 | +ARG rum_release=1.3.13 |
| 36 | +ARG rum_release_checksum=sha256:6ab370532c965568df6210bd844ac6ba649f53055e48243525b0b7e5c4d69a7d |
| 37 | +ARG pg_hashids_release=cd0e1b31d52b394a0df64079406a14a4f7387cd6 |
| 38 | +ARG libsodium_release=1.0.18 |
| 39 | +ARG libsodium_release_checksum=sha256:6f504490b342a4f8a4c4a02fc9b866cbef8622d5df4e5452b46be121e46636c1 |
| 40 | +ARG pgsodium_release=3.1.5 |
| 41 | +ARG pgsodium_release_checksum=sha256:bec847388a5db2a60ea9d991962ce27954d91b4c41cbcc7bd8e34472c69114d1 |
| 42 | +ARG pg_graphql_release=1.1.0 |
| 43 | +ARG pg_stat_monitor_release=1.1.1 |
| 44 | +ARG pg_stat_monitor_release_checksum=sha256:1756a02d5a6dd66b892d15920257c69a17a67d48d3d4e2f189b681b83001ec2a |
| 45 | +ARG pg_jsonschema_release=0.1.4 |
| 46 | +ARG vault_release=0.2.9 |
| 47 | +ARG vault_release_checksum=sha256:1e813216395c59bb94c92be47ce8b70ba19ccc0efbcdb1fb14ed6d34a42c6cdb |
| 48 | +ARG groonga_release=12.0.8 |
| 49 | +ARG groonga_release_checksum=sha256:7770c0ff6804ef4b47b015b15736cd973cffced977c20991b16b2daa4fea6eeb |
| 50 | +ARG pgroonga_release=2.4.0 |
| 51 | +ARG pgroonga_release_checksum=sha256:5baaae0e7d81f8167e278e9a34c6ed56aece8b34f5ab98f228c64408093417b3 |
| 52 | +ARG wrappers_release=0.1.7 |
| 53 | +ARG hypopg_release=1.3.1 |
| 54 | +ARG hypopg_release_checksum=sha256:e7f01ee0259dc1713f318a108f987663d60f3041948c2ada57a94b469565ca8e |
| 55 | +ARG pg_repack_release=1.4.8 |
| 56 | +ARG pg_repack_release_checksum=sha256:18b4d871c1abf78cf0b1b1fe6081d435d183a8dc5eb977576e7a47fe113dd4ec |
| 57 | +ARG pgvector_release=0.4.0 |
| 58 | +ARG pgvector_release_checksum=sha256:b76cf84ddad452cc880a6c8c661d137ddd8679c000a16332f4f03ecf6e10bcc8 |
| 59 | + |
| 60 | +FROM postgres:$postgres_major.$postgres_minor as base |
| 61 | +# Redeclare args for use in subsequent stages |
| 62 | +ARG TARGETARCH |
| 63 | +ARG postgres_major |
| 64 | + |
| 65 | +FROM base as builder |
| 66 | +# Install build dependencies |
| 67 | +RUN apt-get update && apt-get install -y \ |
| 68 | + postgresql-server-dev-${postgres_major} \ |
| 69 | + build-essential \ |
| 70 | + checkinstall \ |
| 71 | + cmake \ |
| 72 | + && rm -rf /var/lib/apt/lists/* |
| 73 | + |
| 74 | +#################### |
| 75 | +# 01-postgis.yml |
| 76 | +#################### |
| 77 | +FROM builder as sfcgal |
| 78 | +# Download and extract |
| 79 | +ARG sfcgal_release |
| 80 | +ARG sfcgal_release_checksum |
| 81 | +ADD --checksum=${sfcgal_release_checksum} \ |
| 82 | + "https://gitlab.com/Oslandia/SFCGAL/-/archive/v${sfcgal_release}/SFCGAL-v${sfcgal_release}.tar.gz" \ |
| 83 | + /tmp/sfcgal.tar.gz |
| 84 | +RUN tar -xvf /tmp/sfcgal.tar.gz -C /tmp --one-top-level --strip-components 1 && \ |
| 85 | + rm -rf /tmp/sfcgal.tar.gz |
| 86 | +# Install build dependencies |
| 87 | +RUN apt-get update && apt-get install -y \ |
| 88 | + libcgal-dev \ |
| 89 | + libboost-all-dev \ |
| 90 | + libmpfr-dev \ |
| 91 | + libgmp-dev \ |
| 92 | + && rm -rf /var/lib/apt/lists/* |
| 93 | +# Build from source |
| 94 | +WORKDIR /tmp/sfcgal/build |
| 95 | +RUN cmake .. |
| 96 | +RUN make -j$(nproc) |
| 97 | +RUN make install |
| 98 | + |
| 99 | +FROM sfcgal as postgis |
| 100 | +# Download and extract |
| 101 | +ARG postgis_release |
| 102 | +ARG postgis_release_checksum |
| 103 | +ADD --checksum=${postgis_release_checksum} \ |
| 104 | + "https://supabase-public-artifacts-bucket.s3.amazonaws.com/postgis-${postgis_release}.tar.gz" \ |
| 105 | + /tmp/postgis.tar.gz |
| 106 | +RUN tar -xvf /tmp/postgis.tar.gz -C /tmp && \ |
| 107 | + rm -rf /tmp/postgis.tar.gz |
| 108 | +# Install build dependencies |
| 109 | +RUN apt-get update && apt-get install -y \ |
| 110 | + protobuf-c-compiler \ |
| 111 | + libgeos-dev \ |
| 112 | + libproj-dev \ |
| 113 | + libgdal-dev \ |
| 114 | + libjson-c-dev \ |
| 115 | + libxml2-dev \ |
| 116 | + libprotobuf-c-dev \ |
| 117 | + && rm -rf /var/lib/apt/lists/* |
| 118 | +# Build from source |
| 119 | +WORKDIR /tmp/postgis-${postgis_release} |
| 120 | +RUN ./configure --with-sfcgal |
| 121 | +RUN make -j$(nproc) |
| 122 | +# Create debian package |
| 123 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 124 | + |
| 125 | +#################### |
| 126 | +# 02-pgrouting.yml |
| 127 | +#################### |
| 128 | +FROM builder as pgrouting |
| 129 | +# Download and extract |
| 130 | +ARG pgrouting_release |
| 131 | +ARG pgrouting_release_checksum |
| 132 | +ADD --checksum=${pgrouting_release_checksum} \ |
| 133 | + "https://github.com/pgRouting/pgrouting/releases/download/v${pgrouting_release}/pgrouting-${pgrouting_release}.tar.gz" \ |
| 134 | + /tmp/pgrouting.tar.gz |
| 135 | +RUN tar -xvf /tmp/pgrouting.tar.gz -C /tmp && \ |
| 136 | + rm -rf /tmp/pgrouting.tar.gz |
| 137 | +# Install build dependencies |
| 138 | +RUN apt-get update && apt-get install -y \ |
| 139 | + libboost-all-dev \ |
| 140 | + && rm -rf /var/lib/apt/lists/* |
| 141 | +# Build from source |
| 142 | +WORKDIR /tmp/pgrouting-${pgrouting_release}/build |
| 143 | +RUN cmake -DBUILD_HTML=OFF -DBUILD_DOXY=OFF .. |
| 144 | +RUN make -j$(nproc) |
| 145 | +# Create debian package |
| 146 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --pkgname=pgrouting --pkgversion=${pgrouting_release} --nodoc |
| 147 | + |
| 148 | +#################### |
| 149 | +# 03-pgtap.yml |
| 150 | +#################### |
| 151 | +FROM builder as pgtap |
| 152 | +# Download and extract |
| 153 | +ARG pgtap_release |
| 154 | +ARG pgtap_release_checksum |
| 155 | +ADD --checksum=${pgtap_release_checksum} \ |
| 156 | + "https://github.com/theory/pgtap/archive/v${pgtap_release}.tar.gz" \ |
| 157 | + /tmp/pgtap.tar.gz |
| 158 | +RUN tar -xvf /tmp/pgtap.tar.gz -C /tmp && \ |
| 159 | + rm -rf /tmp/pgtap.tar.gz |
| 160 | +# Build from source |
| 161 | +WORKDIR /tmp/pgtap-${pgtap_release} |
| 162 | +RUN make -j$(nproc) |
| 163 | +# Create debian package |
| 164 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 165 | + |
| 166 | +#################### |
| 167 | +# 04-pg_cron.yml |
| 168 | +#################### |
| 169 | +FROM builder as pg_cron |
| 170 | +# Download and extract |
| 171 | +ARG pg_cron_release |
| 172 | +ARG pg_cron_release_checksum |
| 173 | +ADD --checksum=${pg_cron_release_checksum} \ |
| 174 | + "https://github.com/citusdata/pg_cron/archive/refs/tags/v${pg_cron_release}.tar.gz" \ |
| 175 | + /tmp/pg_cron.tar.gz |
| 176 | +RUN tar -xvf /tmp/pg_cron.tar.gz -C /tmp && \ |
| 177 | + rm -rf /tmp/pg_cron.tar.gz |
| 178 | +# Build from source |
| 179 | +WORKDIR /tmp/pg_cron-${pg_cron_release} |
| 180 | +RUN make -j$(nproc) |
| 181 | +# Create debian package |
| 182 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 183 | + |
| 184 | +#################### |
| 185 | +# 05-pgaudit.yml |
| 186 | +#################### |
| 187 | +FROM builder as pgaudit |
| 188 | +# Download and extract |
| 189 | +ARG pgaudit_release |
| 190 | +ARG pgaudit_release_checksum |
| 191 | +ADD --checksum=${pgaudit_release_checksum} \ |
| 192 | + "https://github.com/pgaudit/pgaudit/archive/refs/tags/${pgaudit_release}.tar.gz" \ |
| 193 | + /tmp/pgaudit.tar.gz |
| 194 | +RUN tar -xvf /tmp/pgaudit.tar.gz -C /tmp && \ |
| 195 | + rm -rf /tmp/pgaudit.tar.gz |
| 196 | +# Install build dependencies |
| 197 | +RUN apt-get update && apt-get install -y \ |
| 198 | + libssl-dev \ |
| 199 | + libkrb5-dev \ |
| 200 | + && rm -rf /var/lib/apt/lists/* |
| 201 | +# Build from source |
| 202 | +WORKDIR /tmp/pgaudit-${pgaudit_release} |
| 203 | +ENV USE_PGXS=1 |
| 204 | +RUN make -j$(nproc) |
| 205 | +# Create debian package |
| 206 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 207 | + |
| 208 | +#################### |
| 209 | +# 06-pgjwt.yml |
| 210 | +#################### |
| 211 | +FROM builder as pgjwt |
| 212 | +# Download and extract |
| 213 | +ARG pgjwt_release |
| 214 | +ADD "https://github.com/michelp/pgjwt.git#${pgjwt_release}" \ |
| 215 | + /tmp/pgjwt-${pgjwt_release} |
| 216 | +# Build from source |
| 217 | +WORKDIR /tmp/pgjwt-${pgjwt_release} |
| 218 | +RUN make -j$(nproc) |
| 219 | +# Create debian package |
| 220 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 221 | + |
| 222 | +#################### |
| 223 | +# 07-pgsql-http.yml |
| 224 | +#################### |
| 225 | +FROM builder as pgsql-http |
| 226 | +# Download and extract |
| 227 | +ARG pgsql_http_release |
| 228 | +ARG pgsql_http_release_checksum |
| 229 | +ADD --checksum=${pgsql_http_release_checksum} \ |
| 230 | + "https://github.com/pramsey/pgsql-http/archive/refs/tags/v${pgsql_http_release}.tar.gz" \ |
| 231 | + /tmp/pgsql-http.tar.gz |
| 232 | +RUN tar -xvf /tmp/pgsql-http.tar.gz -C /tmp && \ |
| 233 | + rm -rf /tmp/pgsql-http.tar.gz |
| 234 | +# Install build dependencies |
| 235 | +RUN apt-get update && apt-get install -y \ |
| 236 | + libcurl4-gnutls-dev \ |
| 237 | + && rm -rf /var/lib/apt/lists/* |
| 238 | +# Build from source |
| 239 | +WORKDIR /tmp/pgsql-http-${pgsql_http_release} |
| 240 | +RUN make -j$(nproc) |
| 241 | +# Create debian package |
| 242 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 243 | + |
| 244 | +#################### |
| 245 | +# 08-plpgsql_check.yml |
| 246 | +#################### |
| 247 | +FROM builder as plpgsql_check |
| 248 | +# Download and extract |
| 249 | +ARG plpgsql_check_release |
| 250 | +ARG plpgsql_check_release_checksum |
| 251 | +ADD --checksum=${plpgsql_check_release_checksum} \ |
| 252 | + "https://github.com/okbob/plpgsql_check/archive/refs/tags/v${plpgsql_check_release}.tar.gz" \ |
| 253 | + /tmp/plpgsql_check.tar.gz |
| 254 | +RUN tar -xvf /tmp/plpgsql_check.tar.gz -C /tmp && \ |
| 255 | + rm -rf /tmp/plpgsql_check.tar.gz |
| 256 | +# Install build dependencies |
| 257 | +RUN apt-get update && apt-get install -y \ |
| 258 | + libicu-dev \ |
| 259 | + && rm -rf /var/lib/apt/lists/* |
| 260 | +# Build from source |
| 261 | +WORKDIR /tmp/plpgsql_check-${plpgsql_check_release} |
| 262 | +RUN make -j$(nproc) |
| 263 | +# Create debian package |
| 264 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 265 | + |
| 266 | +#################### |
| 267 | +# 09-pg-safeupdate.yml |
| 268 | +#################### |
| 269 | +FROM builder as pg-safeupdate |
| 270 | +# Download and extract |
| 271 | +ARG pg_safeupdate_release |
| 272 | +ARG pg_safeupdate_release_checksum |
| 273 | +ADD --checksum=${pg_safeupdate_release_checksum} \ |
| 274 | + "https://github.com/eradman/pg-safeupdate/archive/refs/tags/${pg_safeupdate_release}.tar.gz" \ |
| 275 | + /tmp/pg-safeupdate.tar.gz |
| 276 | +RUN tar -xvf /tmp/pg-safeupdate.tar.gz -C /tmp && \ |
| 277 | + rm -rf /tmp/pg-safeupdate.tar.gz |
| 278 | +# Build from source |
| 279 | +WORKDIR /tmp/pg-safeupdate-${pg_safeupdate_release} |
| 280 | +RUN make -j$(nproc) |
| 281 | +# Create debian package |
| 282 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 283 | + |
| 284 | +#################### |
| 285 | +# 10-timescaledb.yml |
| 286 | +#################### |
| 287 | +FROM builder as timescaledb |
| 288 | +# Download and extract |
| 289 | +ARG timescaledb_release |
| 290 | +ARG timescaledb_release_checksum |
| 291 | +ADD --checksum=${timescaledb_release_checksum} \ |
| 292 | + "https://github.com/timescale/timescaledb/archive/refs/tags/${timescaledb_release}.tar.gz" \ |
| 293 | + /tmp/timescaledb.tar.gz |
| 294 | +RUN tar -xvf /tmp/timescaledb.tar.gz -C /tmp && \ |
| 295 | + rm -rf /tmp/timescaledb.tar.gz |
| 296 | +# Build from source |
| 297 | +WORKDIR /tmp/timescaledb-${timescaledb_release}/build |
| 298 | +RUN cmake -DAPACHE_ONLY=1 .. |
| 299 | +RUN make -j$(nproc) |
| 300 | +# Create debian package |
| 301 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --pkgname=timescaledb --pkgversion=${timescaledb_release} --nodoc |
| 302 | + |
| 303 | +#################### |
| 304 | +# 11-wal2json.yml |
| 305 | +#################### |
| 306 | +FROM builder as wal2json |
| 307 | +# Download and extract |
| 308 | +ARG wal2json_release |
| 309 | +ARG wal2json_release_checksum |
| 310 | +ADD --checksum=${wal2json_release_checksum} \ |
| 311 | + "https://github.com/eulerto/wal2json/archive/refs/tags/wal2json_${wal2json_release}.tar.gz" \ |
| 312 | + /tmp/wal2json.tar.gz |
| 313 | +RUN tar -xvf /tmp/wal2json.tar.gz -C /tmp --one-top-level --strip-components 1 && \ |
| 314 | + rm -rf /tmp/wal2json.tar.gz |
| 315 | +# Build from source |
| 316 | +WORKDIR /tmp/wal2json |
| 317 | +RUN make -j$(nproc) |
| 318 | +# Create debian package |
| 319 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --pkgversion=${wal2json_release} --nodoc |
| 320 | + |
| 321 | +#################### |
| 322 | +# 12-pljava.yml |
| 323 | +#################### |
| 324 | +FROM builder as pljava-source |
| 325 | +# Download and extract |
| 326 | +# TODO: revert to using main repo after PG15 support is merged: https://github.com/tada/pljava/pull/413 |
| 327 | +ARG pljava_release=master |
| 328 | +ARG pljava_release_checksum=sha256:e99b1c52f7b57f64c8986fe6ea4a6cc09d78e779c1643db060d0ac66c93be8b6 |
| 329 | +ADD --checksum=${pljava_release_checksum} \ |
| 330 | + "https://github.com/supabase/pljava/archive/refs/heads/${pljava_release}.tar.gz" \ |
| 331 | + /tmp/pljava.tar.gz |
| 332 | +RUN tar -xvf /tmp/pljava.tar.gz -C /tmp && \ |
| 333 | + rm -rf /tmp/pljava.tar.gz |
| 334 | +# Install build dependencies |
| 335 | +RUN apt-get update && apt-get install -y \ |
| 336 | + maven \ |
| 337 | + default-jdk \ |
| 338 | + libssl-dev \ |
| 339 | + libkrb5-dev \ |
| 340 | + && rm -rf /var/lib/apt/lists/* |
| 341 | +# Build from source |
| 342 | +WORKDIR /tmp/pljava-${pljava_release} |
| 343 | +RUN mvn -T 1C clean install -Dmaven.test.skip -DskipTests -Dmaven.javadoc.skip=true |
| 344 | +# Create debian package |
| 345 | +RUN cp pljava-packaging/target/pljava-pg${postgres_major}.jar /tmp/ |
| 346 | + |
| 347 | +FROM builder as pljava |
| 348 | +# Download pre-built packages |
| 349 | +RUN apt-get update && apt-get install -y --download-only \ |
| 350 | + default-jdk-headless \ |
| 351 | + postgresql-${postgres_major}-pljava \ |
| 352 | + && rm -rf /var/lib/apt/lists/* |
| 353 | +RUN mv /var/cache/apt/archives/*.deb /tmp/ |
| 354 | + |
| 355 | +#################### |
| 356 | +# 13-plv8.yml |
| 357 | +#################### |
| 358 | +FROM builder as plv8 |
| 359 | +# Download and extract |
| 360 | +ARG plv8_release |
| 361 | +ARG plv8_release_checksum |
| 362 | +ADD --checksum=${plv8_release_checksum} \ |
| 363 | + "https://github.com/plv8/plv8/archive/refs/tags/v${plv8_release}.tar.gz" \ |
| 364 | + /tmp/plv8.tar.gz |
| 365 | +RUN tar -xvf /tmp/plv8.tar.gz -C /tmp && \ |
| 366 | + rm -rf /tmp/plv8.tar.gz |
| 367 | +# Install build dependencies |
| 368 | +RUN apt-get update && apt-get install -y \ |
| 369 | + ccache \ |
| 370 | + pkg-config \ |
| 371 | + ninja-build \ |
| 372 | + clang \ |
| 373 | + git \ |
| 374 | + libtinfo5 \ |
| 375 | + && rm -rf /var/lib/apt/lists/* |
| 376 | +COPY --from=public.ecr.aws/t3w2s2c9/postgres-buildcache:latest /ccache /ccache |
| 377 | +# Build from source |
| 378 | +WORKDIR /tmp/plv8-${plv8_release} |
| 379 | +ENV DOCKER=1 |
| 380 | +ENV CCACHE_DIR=/ccache |
| 381 | +ENV PATH=/usr/lib/ccache:$PATH |
| 382 | +RUN make generate_upgrades |
| 383 | +RUN make v8 |
| 384 | +# Create debian package |
| 385 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 386 | + |
| 387 | +#################### |
| 388 | +# 14-pg_plan_filter.yml |
| 389 | +#################### |
| 390 | +FROM builder as pg_plan_filter |
| 391 | +# Download and extract |
| 392 | +ARG pg_plan_filter_release |
| 393 | +ADD "https://github.com/pgexperts/pg_plan_filter.git#${pg_plan_filter_release}" \ |
| 394 | + /tmp/pg_plan_filter-${pg_plan_filter_release} |
| 395 | +# Build from source |
| 396 | +WORKDIR /tmp/pg_plan_filter-${pg_plan_filter_release} |
| 397 | +RUN make -j$(nproc) |
| 398 | +# Create debian package |
| 399 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 400 | + |
| 401 | +#################### |
| 402 | +# 15-pg_net.yml |
| 403 | +#################### |
| 404 | +FROM builder as pg_net |
| 405 | +# Download and extract |
| 406 | +ARG pg_net_release |
| 407 | +ARG pg_net_release_checksum |
| 408 | +ADD --checksum=${pg_net_release_checksum} \ |
| 409 | + "https://github.com/supabase/pg_net/archive/refs/tags/v${pg_net_release}.tar.gz" \ |
| 410 | + /tmp/pg_net.tar.gz |
| 411 | +RUN tar -xvf /tmp/pg_net.tar.gz -C /tmp && \ |
| 412 | + rm -rf /tmp/pg_net.tar.gz |
| 413 | +# Install build dependencies |
| 414 | +RUN apt-get update && apt-get install -y \ |
| 415 | + libcurl4-gnutls-dev \ |
| 416 | + && rm -rf /var/lib/apt/lists/* |
| 417 | +# Build from source |
| 418 | +WORKDIR /tmp/pg_net-${pg_net_release} |
| 419 | +RUN make -j$(nproc) |
| 420 | +# Create debian package |
| 421 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 422 | + |
| 423 | +#################### |
| 424 | +# 16-rum.yml |
| 425 | +#################### |
| 426 | +FROM builder as rum |
| 427 | +# Download and extract |
| 428 | +ARG rum_release |
| 429 | +ARG rum_release_checksum |
| 430 | +ADD --checksum=${rum_release_checksum} \ |
| 431 | + "https://github.com/postgrespro/rum/archive/refs/tags/${rum_release}.tar.gz" \ |
| 432 | + /tmp/rum.tar.gz |
| 433 | +RUN tar -xvf /tmp/rum.tar.gz -C /tmp && \ |
| 434 | + rm -rf /tmp/rum.tar.gz |
| 435 | +# Install build dependencies |
| 436 | +RUN apt-get update && apt-get install -y \ |
| 437 | + systemtap-sdt-dev \ |
| 438 | + && rm -rf /var/lib/apt/lists/* |
| 439 | +# Build from source |
| 440 | +WORKDIR /tmp/rum-${rum_release} |
| 441 | +ENV USE_PGXS=1 |
| 442 | +RUN make -j$(nproc) |
| 443 | +# Create debian package |
| 444 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 445 | + |
| 446 | +#################### |
| 447 | +# 17-pg_hashids.yml |
| 448 | +#################### |
| 449 | +FROM builder as pg_hashids |
| 450 | +# Download and extract |
| 451 | +ARG pg_hashids_release |
| 452 | +ADD "https://github.com/iCyberon/pg_hashids.git#${pg_hashids_release}" \ |
| 453 | + /tmp/pg_hashids-${pg_hashids_release} |
| 454 | +# Build from source |
| 455 | +WORKDIR /tmp/pg_hashids-${pg_hashids_release} |
| 456 | +RUN make -j$(nproc) |
| 457 | +# Create debian package |
| 458 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 459 | + |
| 460 | +#################### |
| 461 | +# 18-pgsodium.yml |
| 462 | +#################### |
| 463 | +FROM builder as libsodium |
| 464 | +# Download and extract |
| 465 | +ARG libsodium_release |
| 466 | +ARG libsodium_release_checksum |
| 467 | +ADD --checksum=${libsodium_release_checksum} \ |
| 468 | + "https://download.libsodium.org/libsodium/releases/libsodium-${libsodium_release}.tar.gz" \ |
| 469 | + /tmp/libsodium.tar.gz |
| 470 | +RUN tar -xvf /tmp/libsodium.tar.gz -C /tmp && \ |
| 471 | + rm -rf /tmp/libsodium.tar.gz |
| 472 | +# Build from source |
| 473 | +WORKDIR /tmp/libsodium-${libsodium_release} |
| 474 | +RUN ./configure |
| 475 | +RUN make -j$(nproc) |
| 476 | +RUN make install |
| 477 | + |
| 478 | +FROM libsodium as pgsodium |
| 479 | +# Download and extract |
| 480 | +ARG pgsodium_release |
| 481 | +ARG pgsodium_release_checksum |
| 482 | +ADD --checksum=${pgsodium_release_checksum} \ |
| 483 | + "https://github.com/michelp/pgsodium/archive/refs/tags/v${pgsodium_release}.tar.gz" \ |
| 484 | + /tmp/pgsodium.tar.gz |
| 485 | +RUN tar -xvf /tmp/pgsodium.tar.gz -C /tmp && \ |
| 486 | + rm -rf /tmp/pgsodium.tar.gz |
| 487 | +# Build from source |
| 488 | +WORKDIR /tmp/pgsodium-${pgsodium_release} |
| 489 | +RUN make -j$(nproc) |
| 490 | +# Create debian package |
| 491 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 492 | +RUN apt-get update && apt-get install -y --download-only \ |
| 493 | + libsodium23 \ |
| 494 | + && rm -rf /var/lib/apt/lists/* |
| 495 | +RUN mv /var/cache/apt/archives/*.deb /tmp/ |
| 496 | + |
| 497 | +#################### |
| 498 | +# 19-pg_graphql.yml |
| 499 | +#################### |
| 500 | +FROM builder as pg_graphql |
| 501 | +# Download package archive |
| 502 | +ARG pg_graphql_release |
| 503 | +ADD "https://github.com/supabase/pg_graphql/releases/download/v${pg_graphql_release}/pg_graphql-v${pg_graphql_release}-pg${postgres_major}-${TARGETARCH}-linux-gnu.deb" \ |
| 504 | + /tmp/pg_graphql.deb |
| 505 | + |
| 506 | +#################### |
| 507 | +# 20-pg_stat_monitor.yml |
| 508 | +#################### |
| 509 | +FROM builder as pg_stat_monitor |
| 510 | +# Download and extract |
| 511 | +ARG pg_stat_monitor_release |
| 512 | +ARG pg_stat_monitor_release_checksum |
| 513 | +ADD --checksum=${pg_stat_monitor_release_checksum} \ |
| 514 | + "https://github.com/percona/pg_stat_monitor/archive/refs/tags/${pg_stat_monitor_release}.tar.gz" \ |
| 515 | + /tmp/pg_stat_monitor.tar.gz |
| 516 | +RUN tar -xvf /tmp/pg_stat_monitor.tar.gz -C /tmp && \ |
| 517 | + rm -rf /tmp/pg_stat_monitor.tar.gz |
| 518 | +# Build from source |
| 519 | +WORKDIR /tmp/pg_stat_monitor-${pg_stat_monitor_release} |
| 520 | +ENV USE_PGXS=1 |
| 521 | +RUN make -j$(nproc) |
| 522 | +# Create debian package |
| 523 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 524 | + |
| 525 | +#################### |
| 526 | +# 21-auto_explain.yml |
| 527 | +#################### |
| 528 | + |
| 529 | +#################### |
| 530 | +# 22-pg_jsonschema.yml |
| 531 | +#################### |
| 532 | +FROM builder as pg_jsonschema |
| 533 | +# Download package archive |
| 534 | +ARG pg_jsonschema_release |
| 535 | +ADD "https://github.com/supabase/pg_jsonschema/releases/download/v${pg_jsonschema_release}/pg_jsonschema-v${pg_jsonschema_release}-pg${postgres_major}-${TARGETARCH}-linux-gnu.deb" \ |
| 536 | + /tmp/pg_jsonschema.deb |
| 537 | + |
| 538 | +#################### |
| 539 | +# 23-vault.yml |
| 540 | +#################### |
| 541 | +FROM builder as vault |
| 542 | +# Download and extract |
| 543 | +ARG vault_release |
| 544 | +ARG vault_release_checksum |
| 545 | +ADD --checksum=${vault_release_checksum} \ |
| 546 | + "https://github.com/supabase/vault/archive/refs/tags/v${vault_release}.tar.gz" \ |
| 547 | + /tmp/vault.tar.gz |
| 548 | +RUN tar -xvf /tmp/vault.tar.gz -C /tmp && \ |
| 549 | + rm -rf /tmp/vault.tar.gz |
| 550 | +# Build from source |
| 551 | +WORKDIR /tmp/vault-${vault_release} |
| 552 | +RUN make -j$(nproc) |
| 553 | +# Create debian package |
| 554 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 555 | + |
| 556 | +#################### |
| 557 | +# 24-pgroonga.yml |
| 558 | +#################### |
| 559 | +FROM builder as groonga |
| 560 | +# Download and extract |
| 561 | +ARG groonga_release |
| 562 | +ARG groonga_release_checksum |
| 563 | +ADD --checksum=${groonga_release_checksum} \ |
| 564 | + "https://packages.groonga.org/source/groonga/groonga-${groonga_release}.tar.gz" \ |
| 565 | + /tmp/groonga.tar.gz |
| 566 | +RUN tar -xvf /tmp/groonga.tar.gz -C /tmp && \ |
| 567 | + rm -rf /tmp/groonga.tar.gz |
| 568 | +# Build from source |
| 569 | +WORKDIR /tmp/groonga-${groonga_release} |
| 570 | +RUN ./configure |
| 571 | +RUN make -j$(nproc) |
| 572 | +RUN make install |
| 573 | + |
| 574 | +FROM groonga as pgroonga-source |
| 575 | +# Download and extract |
| 576 | +ARG pgroonga_release |
| 577 | +ARG pgroonga_release_checksum |
| 578 | +ADD --checksum=${pgroonga_release_checksum} \ |
| 579 | + "https://packages.groonga.org/source/pgroonga/pgroonga-${pgroonga_release}.tar.gz" \ |
| 580 | + /tmp/pgroonga.tar.gz |
| 581 | +RUN tar -xvf /tmp/pgroonga.tar.gz -C /tmp && \ |
| 582 | + rm -rf /tmp/pgroonga.tar.gz |
| 583 | +# Install build dependencies |
| 584 | +RUN apt-get update && apt-get install -y \ |
| 585 | + pkg-config \ |
| 586 | + && rm -rf /var/lib/apt/lists/* |
| 587 | +# Build from source |
| 588 | +WORKDIR /tmp/pgroonga-${pgroonga_release} |
| 589 | +RUN make -j$(nproc) |
| 590 | +# Create debian package |
| 591 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 592 | + |
| 593 | +FROM builder as pgroonga |
| 594 | +# Download pre-built packages |
| 595 | +ADD "https://packages.groonga.org/debian/groonga-apt-source-latest-bullseye.deb" /tmp/source.deb |
| 596 | +RUN apt-get update && apt-get install -y \ |
| 597 | + /tmp/source.deb \ |
| 598 | + && rm -rf /var/lib/apt/lists/* |
| 599 | +RUN rm /tmp/source.deb |
| 600 | +RUN apt-get update && apt-get install -y --download-only \ |
| 601 | + postgresql-${postgres_major}-pgdg-pgroonga \ |
| 602 | + && rm -rf /var/lib/apt/lists/* |
| 603 | +RUN mv /var/cache/apt/archives/*.deb /tmp/ |
| 604 | + |
| 605 | +#################### |
| 606 | +# 25-wrappers.yml |
| 607 | +#################### |
| 608 | +FROM builder as wrappers |
| 609 | +# Download package archive |
| 610 | +ARG wrappers_release |
| 611 | +ADD "https://github.com/supabase/wrappers/releases/download/v${wrappers_release}/wrappers-v${wrappers_release}-pg${postgres_major}-${TARGETARCH}-linux-gnu.deb" \ |
| 612 | + /tmp/wrappers.deb |
| 613 | + |
| 614 | +#################### |
| 615 | +# 26-hypopg.yml |
| 616 | +#################### |
| 617 | +FROM builder as hypopg |
| 618 | +# Download and extract |
| 619 | +ARG hypopg_release |
| 620 | +ARG hypopg_release_checksum |
| 621 | +ADD --checksum=${hypopg_release_checksum} \ |
| 622 | + "https://github.com/HypoPG/hypopg/archive/refs/tags/${hypopg_release}.tar.gz" \ |
| 623 | + /tmp/hypopg.tar.gz |
| 624 | +RUN tar -xvf /tmp/hypopg.tar.gz -C /tmp && \ |
| 625 | + rm -rf /tmp/hypopg.tar.gz |
| 626 | +# Build from source |
| 627 | +WORKDIR /tmp/hypopg-${hypopg_release} |
| 628 | +RUN make -j$(nproc) |
| 629 | +# Create debian package |
| 630 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 631 | + |
| 632 | +#################### |
| 633 | +# 27-pg_repack.yml |
| 634 | +#################### |
| 635 | +FROM builder as pg_repack |
| 636 | +ARG pg_repack_release |
| 637 | +ARG pg_repack_release_checksum |
| 638 | +ADD --checksum=${pg_repack_release_checksum} \ |
| 639 | + "https://github.com/reorg/pg_repack/archive/refs/tags/ver_${pg_repack_release}.tar.gz" \ |
| 640 | + /tmp/pg_repack.tar.gz |
| 641 | +RUN tar -xvf /tmp/pg_repack.tar.gz -C /tmp && \ |
| 642 | + rm -rf /tmp/pg_repack.tar.gz |
| 643 | +# Install build dependencies |
| 644 | +RUN apt-get update && apt-get install -y \ |
| 645 | + liblz4-dev \ |
| 646 | + libz-dev \ |
| 647 | + libzstd-dev \ |
| 648 | + libreadline-dev \ |
| 649 | + && rm -rf /var/lib/apt/lists/* |
| 650 | +# Build from source |
| 651 | +WORKDIR /tmp/pg_repack-ver_${pg_repack_release} |
| 652 | +ENV USE_PGXS=1 |
| 653 | +RUN make -j$(nproc) |
| 654 | +# Create debian package |
| 655 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --pkgversion=${pg_repack_release} --nodoc |
| 656 | + |
| 657 | +#################### |
| 658 | +# 28-pgvector.yml |
| 659 | +#################### |
| 660 | +FROM builder as pgvector |
| 661 | +ARG pgvector_release |
| 662 | +ARG pgvector_release_checksum |
| 663 | +ADD --checksum=${pgvector_release_checksum} \ |
| 664 | + "https://github.com/pgvector/pgvector/archive/refs/tags/v${pgvector_release}.tar.gz" \ |
| 665 | + /tmp/pgvector.tar.gz |
| 666 | +RUN tar -xvf /tmp/pgvector.tar.gz -C /tmp && \ |
| 667 | + rm -rf /tmp/pgvector.tar.gz |
| 668 | +# Build from source |
| 669 | +WORKDIR /tmp/pgvector-${pgvector_release} |
| 670 | +RUN make -j$(nproc) |
| 671 | +# Create debian package |
| 672 | +RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc |
| 673 | + |
| 674 | +#################### |
| 675 | +# Build final image |
| 676 | +#################### |
| 677 | +FROM base as production |
| 678 | + |
| 679 | +# tasks/docker/setup.yml |
| 680 | +COPY files/postgresql_config/postgresql.conf.j2 /etc/postgresql/postgresql.conf |
| 681 | +COPY files/postgresql_config/pg_hba.conf.j2 /etc/postgresql/pg_hba.conf |
| 682 | +COPY files/postgresql_config/pg_ident.conf.j2 /etc/postgresql/pg_ident.conf |
| 683 | + |
| 684 | +# tasks/setup-extensions.yml |
| 685 | +COPY --from=sfcgal /usr/local/lib/libSFCGAL.* /usr/local/lib/ |
| 686 | +COPY --from=postgis /tmp/*.deb /tmp/ |
| 687 | +COPY --from=pgrouting /tmp/*.deb /tmp/ |
| 688 | +COPY --from=pgtap /tmp/*.deb /tmp/ |
| 689 | +COPY --from=pg_cron /tmp/*.deb /tmp/ |
| 690 | +COPY --from=pgaudit /tmp/*.deb /tmp/ |
| 691 | +COPY --from=pgjwt /tmp/*.deb /tmp/ |
| 692 | +COPY --from=pgsql-http /tmp/*.deb /tmp/ |
| 693 | +COPY --from=plpgsql_check /tmp/*.deb /tmp/ |
| 694 | +COPY --from=pg-safeupdate /tmp/*.deb /tmp/ |
| 695 | +COPY --from=timescaledb /tmp/*.deb /tmp/ |
| 696 | +COPY --from=wal2json /tmp/*.deb /tmp/ |
| 697 | +COPY --from=pljava /tmp/*.deb /tmp/ |
| 698 | +# COPY --from=plv8 /tmp/*.deb /tmp/ |
| 699 | +COPY --from=pg_plan_filter /tmp/*.deb /tmp/ |
| 700 | +COPY --from=pg_net /tmp/*.deb /tmp/ |
| 701 | +COPY --from=rum /tmp/*.deb /tmp/ |
| 702 | +COPY --from=pgsodium /tmp/*.deb /tmp/ |
| 703 | +COPY --from=pg_hashids /tmp/*.deb /tmp/ |
| 704 | +COPY --from=pg_graphql /tmp/*.deb /tmp/ |
| 705 | +COPY --from=pg_stat_monitor /tmp/*.deb /tmp/ |
| 706 | +COPY --from=pg_jsonschema /tmp/*.deb /tmp/ |
| 707 | +COPY --from=vault /tmp/*.deb /tmp/ |
| 708 | +COPY --from=pgroonga /tmp/*.deb /tmp/ |
| 709 | +COPY --from=wrappers /tmp/*.deb /tmp/ |
| 710 | +COPY --from=hypopg /tmp/*.deb /tmp/ |
| 711 | +COPY --from=pg_repack /tmp/*.deb /tmp/ |
| 712 | +COPY --from=pgvector /tmp/*.deb /tmp/ |
| 713 | + |
| 714 | +ENV DEBIAN_FRONTEND=noninteractive |
| 715 | +RUN apt-get update && apt-get install -y \ |
| 716 | + /tmp/*.deb \ |
| 717 | + && rm -rf /var/lib/apt/lists/* /tmp/* |
| 718 | + |
| 719 | +# tasks/docker/finalize.yml |
| 720 | +COPY --chown=postgres:postgres files/postgresql_config/postgresql-stdout-log.conf /etc/postgresql/logging.conf |
| 721 | +COPY --chown=postgres:postgres files/pgsodium_getkey_urandom.sh.j2 /usr/lib/postgresql/${postgres_major}/bin/pgsodium_getkey.sh |
| 722 | +COPY files/pgbouncer_config/pgbouncer_auth_schema.sql /docker-entrypoint-initdb.d/00-schema.sql |
| 723 | +COPY files/stat_extension.sql /docker-entrypoint-initdb.d/01-extension.sql |
| 724 | + |
| 725 | +RUN sed -i "s/#unix_socket_directories = '\/tmp'/unix_socket_directories = '\/var\/run\/postgresql'/g" /etc/postgresql/postgresql.conf && \ |
| 726 | + echo "cron.database_name = 'postgres'" >> /etc/postgresql/postgresql.conf && \ |
| 727 | + echo "pljava.libjvm_location = '/usr/lib/jvm/java-11-openjdk-${TARGETARCH}/lib/server/libjvm.so'" >> /etc/postgresql/postgresql.conf && \ |
| 728 | + echo "pgsodium.getkey_script= '/usr/lib/postgresql/${postgres_major}/bin/pgsodium_getkey.sh'" >> /etc/postgresql/postgresql.conf && \ |
| 729 | + echo 'auto_explain.log_min_duration = 10s' >> /etc/postgresql/postgresql.conf |
| 730 | + |
| 731 | +ENV POSTGRES_HOST=/var/run/postgresql |
| 732 | + |
| 733 | +HEALTHCHECK --interval=2s --timeout=2s --retries=10 CMD pg_isready -U postgres -h localhost |
0 commit comments