-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
109 lines (90 loc) · 3.3 KB
/
Dockerfile
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
ARG PHP_VERSION=8.3
ARG NODE_VERSION=20
ARG NODE_PLATFORM=slim
# based on:
# - https://adambrodziak.pl/dockerfile-good-practices-for-node-and-npm
# - https://pnpm.io/docker
# ----------------------------------------------------------
# FRONTEND_BUILDER
# ----------------------------------------------------------
FROM node:${NODE_VERSION}-${NODE_PLATFORM} as frontend_builder
# Install git
RUN set -eux; \
apt-get update -qq; \
apt-get install -qq -y git;
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack prepare [email protected] --activate
RUN corepack enable
WORKDIR "/app"
COPY --link package.json pnpm-lock.yaml webpack.config.js ./
COPY --link config ./config
COPY --link assets ./assets
COPY --link copy_build_files.sh ./copy_build_files.sh
RUN --mount=type=cache,id=pnpm,target=/pnpm/store set -eux; \
pnpm install --frozen-lockfile; \
# Install website dependencies using bower
cd assets/websites; \
../../node_modules/bower/bin/bower --allow-root install; \
cd ../..; \
pnpm encore production;
# ----------------------------------------------------------
# BASE-DEV
# ----------------------------------------------------------
FROM webdevops/php-apache-dev:${PHP_VERSION} AS base-dev
# Install packages
RUN set -eux; \
apt-get update -qq; \
apt-get install -qq -y curl git apt-transport-https gnupg software-properties-common;
# Install NodeJs 20
RUN set -eux; \
curl -sL https://deb.nodesource.com/setup_20.x | bash - ; \
apt-get update -qq; \
apt-get install -qq -y nodejs;
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
# Install Symfony Cli
RUN set -eux; \
curl -1sLf 'https://dl.cloudsmith.io/public/symfony/stable/setup.deb.sh' | bash; \
apt-get update -qq; \
apt-get install -qq -y symfony-cli
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
ENV COMPOSER_ALLOW_SUPERUSER=1
# ----------------------------------------------------------
# DEV
# ----------------------------------------------------------
FROM base-dev AS dev
ENV APP_ENV=dev
WORKDIR "/app"
# ----------------------------------------------------------
# BASE-PRD
# php-fpm runs as user 1000:1000
# ----------------------------------------------------------
FROM webdevops/php-apache:${PHP_VERSION} AS base-prd
WORKDIR "/app"
USER application
# Create data folder with correct permissions (for images and page-images)
RUN mkdir -p /app/data
# Backend dependencies
COPY --chown=1000:1000 --link composer.json ./composer.json
COPY --chown=1000:1000 --link composer.lock ./composer.lock
RUN composer install --no-scripts
RUN composer dump-autoload
# Backend code
COPY --chown=1000:1000 --link bin ./bin
COPY --chown=1000:1000 --link config ./config
COPY --chown=1000:1000 --link src ./src
COPY --chown=1000:1000 --link templates ./templates
COPY --chown=1000:1000 --link public/index.php ./public/index.php
COPY --chown=1000:1000 --link public/.htaccess ./public/.htaccess
# Frontend: copy from frontend_builder
COPY --chown=1000:1000 --link --from=frontend_builder /app/public/build ./public/build
USER root
# ----------------------------------------------------------
# PRD
# ----------------------------------------------------------
FROM base-prd AS prd
# required for elasticsearch indexing operations
ENV PHP_MEMORY_LIMIT=1024M
ENV WEB_DOCUMENT_ROOT="/app/public"