-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathDockerfile
More file actions
159 lines (120 loc) · 5.13 KB
/
Dockerfile
File metadata and controls
159 lines (120 loc) · 5.13 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
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
ARG NODE_VERSION=25.2-trixie
ARG PHP_VERSION=8.3
ARG DOTNET_VERSION=9.0
### Legality checker
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/sdk:${DOTNET_VERSION} AS pokemon-legality
ARG DOTNET_VERSION
WORKDIR /src
COPY "app/pokemon-legality/LegalityCheckerConsole/LegalityCheckerConsole.csproj" /src/
RUN dotnet restore "LegalityCheckerConsole.csproj"
COPY "app/pokemon-legality/LegalityCheckerConsole/." .
RUN dotnet build "LegalityCheckerConsole.csproj" --no-restore -c Release --framework net${DOTNET_VERSION} -r linux-x64 --self-contained -o /app/pokemon-legality
### Web Service
FROM php:${PHP_VERSION} AS web-deps
WORKDIR /app
RUN apt-get -y update \
&& apt-get install -y --no-install-recommends git unzip \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
COPY web/composer.json composer.json
COPY web/composer.lock composer.lock
RUN composer install --no-scripts --no-autoloader
COPY web /app
RUN composer dump-autoload --optimize
FROM php:${PHP_VERSION}-fpm AS web
WORKDIR /var/www
RUN apt-get -y update \
&& apt-get install -y --no-install-recommends libpng-dev libicu76 \
&& docker-php-ext-install mysqli gd \
&& docker-php-ext-enable mysqli gd \
&& apt-get remove -y libpng-dev \
&& rm -rf /var/lib/apt/lists/*
COPY --from=pokemon-legality /app/pokemon-legality /app/pokemon-legality
COPY --from=web-deps /app /var/www/reon/web
RUN mkdir -p /var/www/reon/web/tmp \
&& chown www-data:www-data /var/www/reon/web/tmp \
&& find /var/www/reon/web/htdocs -type f -exec chmod 644 {} \; \
&& find /var/www/reon/web/htdocs -type d -exec chmod 755 {} \;
ENV POKEMON_LEGALITY_BIN=/app/pokemon-legality/LegalityCheckerConsole
### Database Migration Service
FROM php:${PHP_VERSION} AS migrate
WORKDIR /var/www/reon
# Install MySQL client for database connectivity
RUN docker-php-ext-install mysqli pdo_mysql \
&& docker-php-ext-enable mysqli pdo_mysql
# Copy composer dependencies and phinx
COPY --from=web-deps /app /var/www/reon/web
# Copy migration files and config
COPY phinx.php /var/www/reon/phinx.php
COPY db/ /var/www/reon/db/
CMD ["/var/www/reon/web/vendor/bin/phinx", "migrate"]
### Mail Service
FROM node:${NODE_VERSION} AS mail-deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apt-get -y update \
&& apt-get install -y --no-install-recommends libc6-compat jq
WORKDIR /app
COPY mail/package.json mail/package-lock.json* ./
RUN npm ci
FROM node:${NODE_VERSION} AS mail
WORKDIR /app
COPY --from=mail-deps /app/node_modules ./node_modules
COPY mail /app
EXPOSE 25
EXPOSE 110
ENTRYPOINT ["/app/entrypoint.sh"]
### Cron jobs
FROM node:${NODE_VERSION} AS battle-deps
WORKDIR /app
COPY app/pokemon-battle/package.json app/pokemon-battle/package-lock.json* ./
RUN npm ci
FROM node:${NODE_VERSION} AS exchange-deps
WORKDIR /app
COPY app/pokemon-exchange/package.json app/pokemon-exchange/package-lock.json* ./
RUN npm ci
FROM node:${NODE_VERSION} AS auto-schedule-deps
WORKDIR /app
COPY app/auto-schedule/package.json app/auto-schedule/package-lock.json* ./
RUN npm ci
FROM node:${NODE_VERSION} AS bottle-deps
WORKDIR /app
COPY app/mail-bottle/package.json app/mail-bottle/package-lock.json* ./
RUN npm ci
# Based on https://github.com/AnalogJ/docker-cron
FROM node:${NODE_VERSION} AS cron
RUN
RUN apt-get -y update \
&& apt-get install -y --no-install-recommends curl tzdata libicu76 \
&& rm -rf /var/lib/apt/lists/*
# Latest releases available at https://github.com/aptible/supercronic/releases
ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.41/supercronic-linux-amd64 \
SUPERCRONIC_SHA1SUM=f70ad28d0d739a96dc9e2087ae370c257e79b8d7 \
SUPERCRONIC=supercronic-linux-amd64
RUN curl -fsSLO "$SUPERCRONIC_URL" \
&& echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \
&& chmod +x "$SUPERCRONIC" \
&& mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \
&& ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic
COPY app/docker_entry.sh /entrypoint.sh
COPY app/docker.crontab /etc/cron.d/crontab
RUN chmod 0644 /etc/cron.d/crontab
ENTRYPOINT ["/entrypoint.sh"]
WORKDIR /app
COPY app/pokemon-battle pokemon-battle
COPY --from=battle-deps /app/node_modules ./pokemon-battle/node_modules
COPY app/pokemon-exchange pokemon-exchange
COPY --from=exchange-deps /app/node_modules ./pokemon-exchange/node_modules
COPY app/mail-bottle mail-bottle
COPY --from=bottle-deps /app/node_modules ./mail-bottle/node_modules
COPY app/auto-schedule auto-schedule
COPY --from=auto-schedule-deps /app/node_modules ./auto-schedule/node_modules
COPY --from=pokemon-legality /app/pokemon-legality /app/pokemon-legality
ENV POKEMON_LEGALITY_BIN=/app/pokemon-legality/LegalityCheckerConsole
COPY app/bxt_config_loader.js /app/
CMD ["/usr/local/bin/supercronic", "/etc/cron.d/crontab"]
### DNS server
FROM alpine:3.20 AS dns
RUN apk --no-cache add dnsmasq
COPY docker-dns-entry.sh /entrypoint.sh
EXPOSE 53/udp
ENTRYPOINT ["/entrypoint.sh"]