|
1 | | -# Estágio 1: Instalar dependências PHP |
2 | | -FROM composer:2 AS composer-builder |
3 | | - |
4 | | -WORKDIR /app |
5 | | - |
6 | | -# Copiar apenas arquivos de dependências primeiro (cache layer) |
7 | | -COPY composer.json composer.lock ./ |
8 | | - |
9 | | -# Instalar dependências de produção (sem dev dependencies) |
10 | | -RUN composer install \ |
11 | | - --no-dev \ |
12 | | - --no-interaction \ |
13 | | - --no-progress \ |
14 | | - --no-scripts \ |
15 | | - --prefer-dist \ |
16 | | - --optimize-autoloader |
17 | | - |
18 | | -# Copiar o resto da aplicação |
19 | | -COPY . . |
20 | | - |
21 | | -# Rodar scripts do composer |
22 | | -RUN composer dump-autoload --optimize |
23 | | - |
24 | | - |
25 | | -# Estágio 2: Build dos assets frontend (precisa de PHP e Node) |
26 | | -FROM php:8.2-cli-alpine AS frontend-builder |
27 | | - |
28 | | -# Instalar Node.js |
29 | | -RUN apk add --no-cache nodejs npm |
30 | | - |
31 | | -WORKDIR /app |
32 | | - |
33 | | -# Copiar vendor do composer (necessário para o wayfinder) |
34 | | -COPY --from=composer-builder /app/vendor ./vendor |
35 | | - |
36 | | -# Copiar arquivos da aplicação necessários para o wayfinder |
37 | | -COPY artisan ./ |
38 | | -COPY app ./app |
39 | | -COPY bootstrap ./bootstrap |
40 | | -COPY config ./config |
41 | | -COPY routes ./routes |
42 | | - |
43 | | -# Copiar arquivos do frontend |
44 | | -COPY package.json package-lock.json* ./ |
45 | | -COPY resources ./resources |
46 | | -COPY vite.config.ts tsconfig.json ./ |
47 | | -COPY public ./public |
48 | | - |
49 | | -# Instalar dependências do Node e fazer build |
50 | | -RUN npm ci && npm run build |
51 | | - |
52 | | - |
53 | | -# Estágio 3: Imagem final de produção |
54 | 1 | FROM php:8.2-fpm-alpine |
55 | 2 |
|
56 | | -# Instalar extensões PHP necessárias para Laravel |
| 3 | +# Instalar dependências básicas |
57 | 4 | RUN apk add --no-cache \ |
58 | 5 | postgresql-dev \ |
59 | | - libpng-dev \ |
60 | | - libjpeg-turbo-dev \ |
61 | | - freetype-dev \ |
62 | 6 | libzip-dev \ |
63 | 7 | oniguruma-dev \ |
64 | | - && docker-php-ext-configure gd --with-freetype --with-jpeg \ |
65 | | - && docker-php-ext-install -j$(nproc) \ |
66 | | - pdo \ |
67 | | - pdo_pgsql \ |
68 | | - pgsql \ |
69 | | - gd \ |
70 | | - zip \ |
71 | | - mbstring \ |
72 | | - opcache \ |
73 | | - pcntl \ |
74 | | - bcmath |
| 8 | + nodejs \ |
| 9 | + npm |
75 | 10 |
|
76 | | -# Configurar OPcache para produção |
77 | | -RUN { \ |
78 | | - echo 'opcache.enable=1'; \ |
79 | | - echo 'opcache.memory_consumption=256'; \ |
80 | | - echo 'opcache.interned_strings_buffer=16'; \ |
81 | | - echo 'opcache.max_accelerated_files=20000'; \ |
82 | | - echo 'opcache.validate_timestamps=0'; \ |
83 | | - echo 'opcache.save_comments=1'; \ |
84 | | - echo 'opcache.fast_shutdown=1'; \ |
85 | | - } > /usr/local/etc/php/conf.d/opcache.ini |
| 11 | +# Instalar extensões PHP necessárias |
| 12 | +RUN docker-php-ext-install pdo pdo_pgsql zip mbstring |
86 | 13 |
|
87 | | -# Configurar PHP-FPM |
88 | | -RUN { \ |
89 | | - echo '[www]'; \ |
90 | | - echo 'pm = dynamic'; \ |
91 | | - echo 'pm.max_children = 50'; \ |
92 | | - echo 'pm.start_servers = 10'; \ |
93 | | - echo 'pm.min_spare_servers = 5'; \ |
94 | | - echo 'pm.max_spare_servers = 20'; \ |
95 | | - echo 'pm.max_requests = 500'; \ |
96 | | - } > /usr/local/etc/php-fpm.d/zz-custom.conf |
| 14 | +# Instalar Composer |
| 15 | +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer |
97 | 16 |
|
98 | 17 | WORKDIR /var/www/html |
99 | 18 |
|
100 | | -# Copiar dependências do Composer |
101 | | -COPY --from=composer-builder /app/vendor ./vendor |
| 19 | +# Copiar aplicação |
| 20 | +COPY . . |
102 | 21 |
|
103 | | -# Copiar assets buildados |
104 | | -COPY --from=frontend-builder /app/public/build ./public/build |
| 22 | +# Instalar dependências PHP |
| 23 | +RUN composer install --no-dev --optimize-autoloader |
105 | 24 |
|
106 | | -# Copiar aplicação |
107 | | -COPY --chown=www-data:www-data . . |
| 25 | +# Instalar dependências Node e fazer build |
| 26 | +RUN npm ci && npm run build |
108 | 27 |
|
109 | | -# Criar diretórios necessários e ajustar permissões |
| 28 | +# Criar diretórios necessários |
110 | 29 | RUN mkdir -p storage/framework/cache \ |
111 | 30 | storage/framework/sessions \ |
112 | 31 | storage/framework/views \ |
113 | 32 | storage/logs \ |
114 | | - bootstrap/cache \ |
115 | | - && chown -R www-data:www-data storage bootstrap/cache \ |
116 | | - && chmod -R 775 storage bootstrap/cache |
| 33 | + bootstrap/cache |
117 | 34 |
|
118 | | -# Expor porta do PHP-FPM |
119 | | -EXPOSE 9000 |
| 35 | +# Ajustar permissões |
| 36 | +RUN chown -R www-data:www-data storage bootstrap/cache && \ |
| 37 | + chmod -R 775 storage bootstrap/cache |
120 | 38 |
|
121 | 39 | # Usar usuário www-data |
122 | 40 | USER www-data |
123 | 41 |
|
124 | | -# Comando padrão |
| 42 | +EXPOSE 9000 |
| 43 | + |
125 | 44 | CMD ["php-fpm"] |
0 commit comments