-
Notifications
You must be signed in to change notification settings - Fork 4
/
Dockerfile
211 lines (172 loc) · 6.11 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
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# composer
FROM composer:2.4.4 as vendor
ADD ./app /tmp/vendor
WORKDIR /tmp/vendor
RUN composer install --optimize-autoloader --no-dev --no-scripts
# node
FROM node:14.21.3 as node
ADD ./app /tmp/node
WORKDIR /tmp/node
RUN npm install laravel-mix@6.0.49 --save-dev && \
npm run prod
FROM php:8.2-fpm
RUN apt-get update --fix-missing --no-install-recommends \
&& apt-get upgrade -y \
&& apt-get install -y \
build-essential \
curl \
libzip-dev \
zip \
libonig-dev \
libjpeg62-turbo-dev \
libpng-dev \
libwebp-dev \
imagemagick \
libmagickwand-dev \
nginx \
supervisor \
&& docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ --with-webp=/usr/include \
&& docker-php-ext-install -j$(nproc) gd exif iconv pdo pdo_mysql mbstring pcntl \
&& pecl install redis \
&& docker-php-ext-enable redis \
&& docker-php-ext-configure zip \
&& docker-php-ext-install zip \
&& pecl install -o -f imagick \
&& sed -i -e 's/<policy domain="resource" name="memory" value="256MiB"\/>/<policy domain="resource" name="memory" value="512MiB"\/>/g' /etc/ImageMagick-6/policy.xml \
&& sed -i -e 's/<policy domain="resource" name="area" value="128MP"\/>/<policy domain="resource" name="area" value="512MP"\/>/g' /etc/ImageMagick-6/policy.xml \
&& sed -i -e 's/<policy domain="resource" name="width" value="16KP"\/>/<policy domain="resource" name="width" value="32KP"\/>/g' /etc/ImageMagick-6/policy.xml \
&& sed -i -e 's/<policy domain="resource" name="height" value="16KP"\/>/<policy domain="resource" name="height" value="32KP"\/>/g' /etc/ImageMagick-6/policy.xml \
&& docker-php-ext-enable imagick \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-source delete \
&& apt-get clean
# Copy Source
COPY --from=metal3d/mo /usr/local/bin/mo /usr/bin/mo
COPY --from=node /tmp/node /var/www/html
COPY --from=vendor /tmp/vendor /var/www/html
COPY --from=composer:2.4.4 /usr/bin/composer /usr/bin/composer
# www
ADD ./app /var/www/html
# supervisor conf
ADD ./build/supervisor/supervisor.conf /etc/supervisor.conf
ADD ./build/supervisor/conf.d/php-fpm.conf /etc/supervisor/conf.d/php-fpm.conf
ADD ./build/supervisor/conf.d/nginx.conf /etc/supervisor/conf.d/nginx.conf
ADD ./build/supervisor/conf.d/cron.conf /etc/supervisor/conf.d/cron.conf
ADD ./build/supervisor/conf.d/roda.conf /etc/supervisor/conf.d/roda.conf
# nginx conf
ADD ./build/nginx/conf.d/log-json-format.conf /etc/nginx/http.d/00-log-json-format.conf
ADD ./build/nginx/conf.d/default.conf.mustache /tmp/default.conf.mustache
# php conf
ADD ./build/php/conf.d/upload.ini /usr/local/etc/php/conf.d/upload.ini
ADD ./build/php/conf.d/memory-limit.ini /usr/local/etc/php/conf.d/memory-limit.ini
# crontab
ADD ./build/cron/crontab /var/spool/cron/crontabs/root
WORKDIR /var/www/html
RUN chown -R www-data:www-data /var/www/html \
&& composer install --optimize-autoloader --no-dev
VOLUME /var/www/html/storage
# Environment
ARG APP_DEBUG
ARG APP_ENV
ARG APP_NAME
ARG APP_URL
ARG AWS_BUCKET
ARG AWS_DEFAULT_REGION
ARG AWS_ENDPOINT
ARG AWS_PATH_STYLE_ENDPOINT
ARG BROADCAST_DRIVER
ARG CACHE_DRIVER
ARG LOG_CHANNEL
ARG LOG_CHANNELS_1
ARG LOG_CHANNELS_2
ARG LOG_CHANNELS_3
ARG LOG_LEVEL
ARG QUEUE_CONNECTION
ARG QUEUE_FAILED_DRIVER
ARG REDIS_HOST
ARG REDIS_PORT
ARG RODA_ACCEPT_FILES
ARG RODA_DESCRIPTION
ARG RODA_GOOGLE_RECAPTCHA_CACHE
ARG RODA_IMAGE_STORAGE
ARG RODA_IMG_DESCRIPTION
ARG RODA_LATITUDE
ARG RODA_LONGITUDE
ARG RODA_NAME
ARG RODA_PAGINATION_PERPAGE
ARG RODA_RENRAKU_NAME
ARG RODA_RENRAKU_TWITTER
ARG RODA_SERVICE_CASHE
ARG RODA_SUBTITLE
ARG RODA_THUMBNAIL_HEIGHT
ARG RODA_THUMBNAIL_WIDTH
ARG RODA_TOR_URL
ARG RODA_TWITTER_ACCOUNT
ARG RODA_UPLOAD_CHUNK
ARG RODA_UPLOAD_MAXSIZE
ARG RODA_URL_IMAGE_BASE
ARG RODA_WAIT_TIME
ARG RODA_404_IMG_DESCRIPTION
ARG SESSION_DRIVER
ARG SESSION_LIFETIME
ENV APP_DEBUG=$APP_DEBUG
ENV APP_ENV=$APP_ENV
ENV APP_NAME=$APP_NAME
ENV APP_URL=$APP_URL
ENV AWS_BUCKET=$AWS_BUCKET
ENV AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION
ENV AWS_ENDPOINT=$AWS_ENDPOINT
ENV AWS_PATH_STYLE_ENDPOINT=$AWS_PATH_STYLE_ENDPOINT
ENV BROADCAST_DRIVER=$BROADCAST_DRIVER
ENV CACHE_DRIVER=$CACHE_DRIVER
ENV LOG_CHANNEL=$LOG_CHANNEL
ENV LOG_CHANNELS_1=$LOG_CHANNELS_1
ENV LOG_CHANNELS_2=$LOG_CHANNELS_2
ENV LOG_CHANNELS_3=$LOG_CHANNELS_3
ENV LOG_LEVEL=$LOG_LEVEL
ENV QUEUE_CONNECTION=$QUEUE_CONNECTION
ENV QUEUE_FAILED_DRIVER=$QUEUE_FAILED_DRIVER
ENV REDIS_HOST=$REDIS_HOST
ENV REDIS_PORT=$REDIS_PORT
ENV RODA_ACCEPT_FILES=$RODA_ACCEPT_FILES
ENV RODA_DESCRIPTION=$RODA_DESCRIPTION
ENV RODA_GOOGLE_RECAPTCHA_CACHE=$RODA_GOOGLE_RECAPTCHA_CACHE
ENV RODA_GOOGLE_RECAPTCHA_SCORE=$RODA_GOOGLE_RECAPTCHA_SCORE
ENV RODA_IMAGE_STORAGE=$RODA_IMAGE_STORAGE
ENV RODA_IMG_DESCRIPTION=$RODA_IMG_DESCRIPTION
ENV RODA_LATITUDE=$RODA_LATITUDE
ENV RODA_LONGITUDE=$RODA_LONGITUDE
ENV RODA_NAME=$RODA_NAME
ENV RODA_PAGINATION_PERPAGE=$RODA_PAGINATION_PERPAGE
ENV RODA_RENRAKU_NAME=$RODA_RENRAKU_NAME
ENV RODA_RENRAKU_TWITTER=$RODA_RENRAKU_TWITTER
ENV RODA_SERVICE_CASHE=$RODA_SERVICE_CASHE
ENV RODA_SUBTITLE=$RODA_SUBTITLE
ENV RODA_THUMBNAIL_HEIGHT=$RODA_THUMBNAIL_HEIGHT
ENV RODA_THUMBNAIL_WIDTH=$RODA_THUMBNAIL_WIDTH
ENV RODA_TOR_URL=$RODA_TOR_URL
ENV RODA_TWITTER_ACCOUNT=$RODA_TWITTER_ACCOUNT
ENV RODA_UPLOAD_CHUNK=$RODA_UPLOAD_CHUNK
ENV RODA_UPLOAD_MAXSIZE=$RODA_UPLOAD_MAXSIZE
ENV RODA_URL_IMAGE_BASE=$RODA_URL_IMAGE_BASE
ENV RODA_WAIT_TIME=$RODA_WAIT_TIME
ENV SESSION_DRIVER=$SESSION_DRIVER
ENV SESSION_LIFETIMEA=$SESSION_LIFETIME
ENV MIX_RODA_NAME=$RODA_NAME
ENV MIX_APP_URL=$APP_URL
ENV MIX_RODA_SUBTITLE=$RODA_SUBTITLE
ENV MIX_RODA_DESCRIPTION=$RODA_DESCRIPTION
ENV MIX_RODA_IMG_DESCRIPTION=$RODA_IMG_DESCRIPTION
ENV MIX_RODA_TWITTER_ACCOUNT=$RODA_TWITTER_ACCOUNT
ENV MIX_RODA_UPLOAD_MAXSIZE=$RODA_UPLOAD_MAXSIZE
ENV MIX_RODA_ACCEPT_FILES=$RODA_ACCEPT_FILES
ENV MIX_RODA_UPLOAD_CHUNK=$RODA_UPLOAD_CHUNK
ENV MIX_RODA_WAIT_TIME=$RODA_WAIT_TIME
ENV MIX_RODA_RENRAKU_NAME=$RODA_RENRAKU_NAME
ENV MIX_RODA_RENRAKU_TWITTER=$RODA_RENRAKU_TWITTER
ENV MIX_RODA_404_IMG_DESCRIPTION=$RODA_404_IMG_DESCRIPTION
# script
ADD ./build/start.sh /start.sh
RUN chmod +x /start.sh
EXPOSE 80
CMD ["/start.sh"]