-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
76 lines (61 loc) · 2.87 KB
/
Dockerfile
File metadata and controls
76 lines (61 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
FROM php:8.3-cli AS builder
# Deps de build
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cmake \
wget \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /ext
# Copiar scripts e sources da extensão
COPY build_proj.sh ./
COPY config.m4 php_proj.h proj.c ./
# Compilar PROJ + SQLite3 estáticos
RUN bash build_proj.sh
# Compilar extensão PHP
RUN phpize \
&& ./configure --with-proj=./deps \
&& make -j$(nproc)
# Verificar que não depende de libproj.so / libsqlite3.so / libtiff / libcurl
RUN echo "=== ldd modules/proj.so ===" \
&& ldd modules/proj.so \
&& ! ldd modules/proj.so | grep -qE "libproj|libsqlite3|libtiff|libcurl" \
&& echo "✓ Nenhuma dependência externa de proj/sqlite/tiff/curl"
# ─────────────────────────────────────────────────────────
# Imagem final leve — só o runtime PHP + extensão compilada
# ─────────────────────────────────────────────────────────
FROM php:8.3-cli
# Copiar extensão compilada e dados PROJ para o diretório correto do PHP
COPY --from=builder /ext/modules/proj.so /tmp/proj.so
COPY --from=builder /ext/deps/share/proj /usr/local/share/proj
# Instalar extensão no extension_dir correto e configurar php.ini
RUN EXT_DIR=$(php -r "echo ini_get('extension_dir');") \
&& cp /tmp/proj.so "$EXT_DIR/proj.so" \
&& rm /tmp/proj.so \
&& printf "extension=proj.so\nproj.data_path=/usr/local/share/proj\n" > /usr/local/etc/php/conf.d/proj.ini
# Preparar diretório de output para exportar a lib
RUN mkdir -p /dist
WORKDIR /app
COPY test.php ./
# Smoke test na build
RUN php -m | grep proj && php test.php
# Smoke test na build (verbose para debug)
# RUN echo "=== php.ini proj ===" \
# && cat /usr/local/etc/php/conf.d/proj.ini \
# && echo "=== extension_dir ===" \
# && php -r "echo ini_get('extension_dir') . PHP_EOL;" \
# && echo "=== ls extension_dir ===" \
# && ls -la $(php -r "echo ini_get('extension_dir');") | grep proj \
# && echo "=== ldd proj.so ===" \
# && ldd $(php -r "echo ini_get('extension_dir');")/proj.so || true \
# && echo "=== loading extension ===" \
# && php -d display_errors=1 -d error_reporting=E_ALL -r "echo 'OK';" \
# && php test.php
# Entrypoint: copia a lib para /dist (volume montado) e roda o teste
CMD EXT_DIR=$(php -r "echo ini_get('extension_dir');") \
&& cp "$EXT_DIR/proj.so" /dist/proj.so \
&& cp -r /usr/local/share/proj /dist/proj_data \
&& echo "✓ proj.so copiado para ./dist/proj.so" \
&& echo "✓ proj_data copiado para ./dist/proj_data/" \
&& echo "" \
&& php test.php