Skip to content

Commit db983fa

Browse files
committed
Initial commit
0 parents  commit db983fa

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+2252
-0
lines changed

.github/workflows/docker.yml

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
name: CI
2+
3+
on: [push, pull_request]
4+
5+
jobs:
6+
build:
7+
runs-on: ubuntu-latest
8+
strategy:
9+
matrix:
10+
version: [ 7.1, 7.2, 7.3, 7.4 ]
11+
12+
steps:
13+
- name: Checkout code
14+
uses: actions/checkout@master
15+
16+
- name: Build images
17+
run: |
18+
docker build --pull -t kooldev/php:${{ matrix.version }} ${{ matrix.version }}
19+
docker build --pull -t kooldev/php:${{ matrix.version }}-prod ${{ matrix.version }}-prod
20+
docker build -t kooldev/php:${{ matrix.version }}-wkhtmltopdf ${{ matrix.version }}-wkhtmltopdf
21+
docker build -t kooldev/php:${{ matrix.version }}-wkhtmltopdf-prod ${{ matrix.version }}-wkhtmltopdf-prod
22+
23+
- name: Build images nginx
24+
if: matrix.version == '7.4'
25+
run: |
26+
docker build -t kooldev/php:${{ matrix.version }}-nginx ${{ matrix.version }}-nginx
27+
docker build -t kooldev/php:${{ matrix.version }}-nginx-prod ${{ matrix.version }}-nginx-prod
28+
docker build -t kooldev/php:${{ matrix.version }}-nginx-wkhtmltopdf ${{ matrix.version }}-nginx-wkhtmltopdf
29+
docker build -t kooldev/php:${{ matrix.version }}-nginx-wkhtmltopdf-prod ${{ matrix.version }}-nginx-wkhtmltopdf-prod
30+
31+
docker build -t kooldev/php:${{ matrix.version }}-full ${{ matrix.version }}-full
32+
docker build -t kooldev/php:${{ matrix.version }}-full-prod ${{ matrix.version }}-full-prod
33+
docker build -t kooldev/php:${{ matrix.version }}-full-wkhtmltopdf ${{ matrix.version }}-full-wkhtmltopdf
34+
docker build -t kooldev/php:${{ matrix.version }}-full-wkhtmltopdf-prod ${{ matrix.version }}-full-wkhtmltopdf-prod
35+
36+
- name: Test docker images
37+
run: |
38+
for suffix in '' -prod -wkhtmltopdf -wkhtmltopdf-prod; do
39+
docker run kooldev/php:${{ matrix.version }}$suffix php -v
40+
docker run kooldev/php:${{ matrix.version }}$suffix composer -V
41+
docker run -e ASUSER=1000 kooldev/php:${{ matrix.version }}$suffix php -v
42+
docker run -e ASUSER=1000 kooldev/php:${{ matrix.version }}$suffix composer -V
43+
docker run kooldev/php:${{ matrix.version }}$suffix php -m
44+
docker run -e ENABLE_XDEBUG=true kooldev/php:${{ matrix.version }}$suffix php -m
45+
done
46+
47+
- name: Test docker images nginx
48+
if: matrix.version == '7.4'
49+
run: |
50+
for suffix in -nginx -nginx-prod -nginx-wkhtmltopdf -nginx-wkhtmltopdf-prod -full -full-prod -full-wkhtmltopdf -full-wkhtmltopdf-prod; do
51+
docker run kooldev/php:${{ matrix.version }}$suffix php -v
52+
docker run kooldev/php:${{ matrix.version }}$suffix composer -V
53+
docker run -e ASUSER=1000 kooldev/php:${{ matrix.version }}$suffix php -v
54+
docker run -e ASUSER=1000 kooldev/php:${{ matrix.version }}$suffix composer -V
55+
docker run kooldev/php:${{ matrix.version }}$suffix php -m
56+
docker run -e ENABLE_XDEBUG=true kooldev/php:${{ matrix.version }}$suffix php -m
57+
docker run kooldev/php:${{ matrix.version }}$suffix nginx -v
58+
docker run kooldev/php:${{ matrix.version }}$suffix supervisord version
59+
done
60+
61+
- name: Push to Hub
62+
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
63+
env:
64+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
65+
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
66+
run: |
67+
echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin
68+
docker push kooldev/php:${{ matrix.version }}
69+
docker push kooldev/php:${{ matrix.version }}-prod
70+
docker push kooldev/php:${{ matrix.version }}-wkhtmltopdf
71+
docker push kooldev/php:${{ matrix.version }}-wkhtmltopdf-prod
72+
73+
- name: Push to Hub nginx
74+
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.version == '7.4'
75+
env:
76+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
77+
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
78+
run: |
79+
echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin
80+
docker push kooldev/php:${{ matrix.version }}-nginx
81+
docker push kooldev/php:${{ matrix.version }}-nginx-prod
82+
docker push kooldev/php:${{ matrix.version }}-nginx-wkhtmltopdf
83+
docker push kooldev/php:${{ matrix.version }}-nginx-wkhtmltopdf-prod
84+
85+
docker push kooldev/php:${{ matrix.version }}-full
86+
docker push kooldev/php:${{ matrix.version }}-full-prod
87+
docker push kooldev/php:${{ matrix.version }}-full-wkhtmltopdf
88+
docker push kooldev/php:${{ matrix.version }}-full-wkhtmltopdf-prod

7.1-prod/Dockerfile

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
FROM php:7.1-fpm-alpine
2+
3+
ENV ASUSER= \
4+
UID= \
5+
COMPOSER_ALLOW_SUPERUSER=1 \
6+
PHP_MEMORY_LIMIT=256M \
7+
PHP_UPLOAD_MAX_FILESIZE=25M \
8+
PHP_POST_MAX_SIZE=25M \
9+
ENTRYPOINT=entrypoint.php.sh
10+
11+
WORKDIR /app
12+
13+
RUN adduser -D -u 1337 kool \
14+
# dockerize
15+
&& curl -L https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-alpine-linux-amd64-v0.6.1.tar.gz | tar xz \
16+
&& mv dockerize /usr/local/bin/dockerize \
17+
# deps
18+
&& apk --no-cache add su-exec bash git openssh-client icu shadow procps \
19+
freetype libpng libjpeg-turbo libzip-dev imagemagick \
20+
jpegoptim optipng pngquant gifsicle libldap \
21+
# build-deps
22+
&& apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
23+
freetype-dev libpng-dev libjpeg-turbo-dev \
24+
icu-dev libedit-dev libxml2-dev \
25+
imagemagick-dev openldap-dev \
26+
# php-ext
27+
&& docker-php-ext-configure gd \
28+
--with-freetype-dir=/usr/include/ \
29+
--with-png-dir=/usr/include/ \
30+
--with-jpeg-dir=/usr/include/ \
31+
&& export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \
32+
&& pecl install imagick-3.4.4 redis \
33+
&& docker-php-ext-enable imagick redis \
34+
&& docker-php-ext-install -j$(nproc) \
35+
bcmath \
36+
calendar \
37+
exif \
38+
gd \
39+
intl \
40+
ldap \
41+
mbstring \
42+
opcache \
43+
pcntl \
44+
pdo \
45+
pdo_mysql \
46+
readline \
47+
soap \
48+
xml \
49+
zip \
50+
&& cp "/usr/local/etc/php/php.ini-production" "/usr/local/etc/php/php.ini" \
51+
&& sed -i "s/user\ \=.*/user\ \= kool/g" /usr/local/etc/php-fpm.d/www.conf \
52+
# composer
53+
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
54+
&& su-exec kool composer global require hirak/prestissimo \
55+
# cleanup
56+
&& apk del .build-deps \
57+
&& rm -rf /var/cache/apk/* /tmp/* /home/kool/.composer/cache
58+
59+
COPY kool.ini /kool/kool.tmpl
60+
COPY entrypoint /kool/entrypoint
61+
RUN chmod +x /kool/entrypoint
62+
63+
EXPOSE 9000
64+
65+
ENTRYPOINT [ "dockerize", "-template", "/kool/kool.tmpl:/usr/local/etc/php/conf.d/kool.ini", "/kool/entrypoint" ]
66+
CMD [ "php-fpm" ]

7.1-prod/entrypoint

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/sh
2+
set -e
3+
4+
5+
# Run as current user
6+
CURRENT_USER=${ASUSER:-${UID:-0}}
7+
8+
if [ ! -z "$CURRENT_USER" ] && [ "$CURRENT_USER" != "0" ]; then
9+
usermod -u $CURRENT_USER kool
10+
fi
11+
12+
# Run entrypoint if provided
13+
if [ ! -z "$ENTRYPOINT" ] && [ -f "$ENTRYPOINT" ]; then
14+
bash $ENTRYPOINT
15+
fi
16+
17+
if [ "$1" = "bash" ] || [ "$1" = "php-fpm" ] || [ "$1" = "nginx" ] || [ "$1" = "supervisord" ]; then
18+
exec "$@"
19+
else
20+
exec su-exec kool "$@"
21+
fi

7.1-prod/kool.ini

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
[PHP]
2+
3+
; Maximum amount of memory a script may consume
4+
; http://php.net/memory-limit
5+
memory_limit = {{ .Env.PHP_MEMORY_LIMIT }}
6+
7+
; Maximum allowed size for uploaded files.
8+
; http://php.net/upload-max-filesize
9+
upload_max_filesize = {{ .Env.PHP_UPLOAD_MAX_FILESIZE }}
10+
11+
; Maximum size of POST data that PHP will accept.
12+
; Its value may be 0 to disable the limit. It is ignored if POST data reading
13+
; is disabled through enable_post_data_reading.
14+
; http://php.net/post-max-size
15+
post_max_size = {{ .Env.PHP_POST_MAX_SIZE }}
16+
17+
18+
[opcache]
19+
20+
; Determines if Zend OPCache is enabled
21+
opcache.enable=1
22+
23+
; The OPcache shared memory storage size.
24+
opcache.memory_consumption=512
25+
26+
; The amount of memory for interned strings in Mbytes.
27+
opcache.interned_strings_buffer=64
28+
29+
; The maximum number of keys (scripts) in the OPcache hash table.
30+
; Only numbers between 200 and 1000000 are allowed.
31+
opcache.max_accelerated_files=30000
32+
33+
; When disabled, you must reset the OPcache manually or restart the
34+
; webserver for changes to the filesystem to take effect.
35+
opcache.validate_timestamps=0
36+
37+
; If disabled, all PHPDoc comments are dropped from the code to reduce the
38+
; size of the optimized code.
39+
opcache.save_comments=1

7.1-wkhtmltopdf-prod/Dockerfile

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
FROM surnet/alpine-wkhtmltopdf:3.10-0.12.5-full as wkhtmltopdf
2+
FROM kooldev/php:7.1-prod
3+
4+
RUN apk add --no-cache \
5+
libstdc++ \
6+
libx11 \
7+
libxrender \
8+
libxext \
9+
libssl1.1 \
10+
ca-certificates \
11+
fontconfig \
12+
freetype \
13+
ttf-dejavu \
14+
ttf-droid \
15+
ttf-freefont \
16+
ttf-liberation \
17+
ttf-ubuntu-font-family \
18+
&& apk add --no-cache --virtual .build-deps msttcorefonts-installer \
19+
&& update-ms-fonts \
20+
&& fc-cache -f \
21+
&& rm -rf /tmp/* \
22+
&& apk del .build-deps
23+
24+
COPY --from=wkhtmltopdf /bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf
25+
COPY --from=wkhtmltopdf /bin/wkhtmltoimage /usr/local/bin/wkhtmltoimage
26+
COPY --from=wkhtmltopdf /bin/libwkhtmltox* /usr/local/bin/

7.1-wkhtmltopdf/Dockerfile

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
FROM surnet/alpine-wkhtmltopdf:3.10-0.12.5-full as wkhtmltopdf
2+
FROM kooldev/php:7.1
3+
4+
RUN apk add --no-cache \
5+
libstdc++ \
6+
libx11 \
7+
libxrender \
8+
libxext \
9+
libssl1.1 \
10+
ca-certificates \
11+
fontconfig \
12+
freetype \
13+
ttf-dejavu \
14+
ttf-droid \
15+
ttf-freefont \
16+
ttf-liberation \
17+
ttf-ubuntu-font-family \
18+
&& apk add --no-cache --virtual .build-deps msttcorefonts-installer \
19+
&& update-ms-fonts \
20+
&& fc-cache -f \
21+
&& rm -rf /tmp/* \
22+
&& apk del .build-deps
23+
24+
COPY --from=wkhtmltopdf /bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf
25+
COPY --from=wkhtmltopdf /bin/wkhtmltoimage /usr/local/bin/wkhtmltoimage
26+
COPY --from=wkhtmltopdf /bin/libwkhtmltox* /usr/local/bin/

7.1/Dockerfile

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
FROM php:7.1-fpm-alpine
2+
3+
ENV ASUSER= \
4+
UID= \
5+
COMPOSER_ALLOW_SUPERUSER=1 \
6+
ENABLE_XDEBUG=false \
7+
PHP_MEMORY_LIMIT=256M \
8+
PHP_UPLOAD_MAX_FILESIZE=25M \
9+
PHP_POST_MAX_SIZE=25M \
10+
ENTRYPOINT=entrypoint.php.sh
11+
12+
WORKDIR /app
13+
14+
RUN adduser -D -u 1337 kool \
15+
# dockerize
16+
&& curl -L https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-alpine-linux-amd64-v0.6.1.tar.gz | tar xz \
17+
&& mv dockerize /usr/local/bin/dockerize \
18+
# deps
19+
&& apk --no-cache add su-exec bash git openssh-client icu shadow procps \
20+
freetype libpng libjpeg-turbo libzip-dev imagemagick \
21+
jpegoptim optipng pngquant gifsicle libldap \
22+
# build-deps
23+
&& apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
24+
freetype-dev libpng-dev libjpeg-turbo-dev \
25+
icu-dev libedit-dev libxml2-dev \
26+
imagemagick-dev openldap-dev \
27+
# php-ext
28+
&& docker-php-ext-configure gd \
29+
--with-freetype-dir=/usr/include/ \
30+
--with-png-dir=/usr/include/ \
31+
--with-jpeg-dir=/usr/include/ \
32+
&& export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \
33+
&& pecl install imagick-3.4.4 redis xdebug \
34+
&& docker-php-ext-enable imagick redis \
35+
&& docker-php-ext-install -j$(nproc) \
36+
bcmath \
37+
calendar \
38+
exif \
39+
gd \
40+
intl \
41+
ldap \
42+
mbstring \
43+
pcntl \
44+
pdo \
45+
pdo_mysql \
46+
readline \
47+
soap \
48+
xml \
49+
zip \
50+
&& cp "/usr/local/etc/php/php.ini-development" "/usr/local/etc/php/php.ini" \
51+
&& sed -i "s/user\ \=.*/user\ \= kool/g" /usr/local/etc/php-fpm.d/www.conf \
52+
# composer
53+
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
54+
&& su-exec kool composer global require hirak/prestissimo \
55+
# cleanup
56+
&& apk del .build-deps \
57+
&& rm -rf /var/cache/apk/* /tmp/* /home/kool/.composer/cache
58+
59+
COPY kool.ini /kool/kool.tmpl
60+
COPY entrypoint /kool/entrypoint
61+
RUN chmod +x /kool/entrypoint
62+
63+
EXPOSE 9000
64+
65+
ENTRYPOINT [ "dockerize", "-template", "/kool/kool.tmpl:/usr/local/etc/php/conf.d/kool.ini", "/kool/entrypoint" ]
66+
CMD [ "php-fpm" ]

7.1/entrypoint

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/bin/sh
2+
set -e
3+
4+
if [ "$ENABLE_XDEBUG" == "true" ]; then
5+
docker-php-ext-enable xdebug >> /dev/null 2>&1
6+
7+
if [ $? != "0" ]; then
8+
echo "[ERROR] An error happened enabling xdebug"
9+
10+
exit 1
11+
fi
12+
fi
13+
14+
# Run as current user
15+
CURRENT_USER=${ASUSER:-${UID:-0}}
16+
17+
if [ ! -z "$CURRENT_USER" ] && [ "$CURRENT_USER" != "0" ]; then
18+
usermod -u $CURRENT_USER kool
19+
fi
20+
21+
# Run entrypoint if provided
22+
if [ ! -z "$ENTRYPOINT" ] && [ -f "$ENTRYPOINT" ]; then
23+
bash $ENTRYPOINT
24+
fi
25+
26+
if [ "$1" = "bash" ] || [ "$1" = "php-fpm" ] || [ "$1" = "nginx" ] || [ "$1" = "supervisord" ]; then
27+
exec "$@"
28+
else
29+
exec su-exec kool "$@"
30+
fi

7.1/kool.ini

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[PHP]
2+
3+
; Maximum amount of memory a script may consume
4+
; http://php.net/memory-limit
5+
memory_limit = {{ .Env.PHP_MEMORY_LIMIT }}
6+
7+
; Maximum allowed size for uploaded files.
8+
; http://php.net/upload-max-filesize
9+
upload_max_filesize = {{ .Env.PHP_UPLOAD_MAX_FILESIZE }}
10+
11+
; Maximum size of POST data that PHP will accept.
12+
; Its value may be 0 to disable the limit. It is ignored if POST data reading
13+
; is disabled through enable_post_data_reading.
14+
; http://php.net/post-max-size
15+
post_max_size = {{ .Env.PHP_POST_MAX_SIZE }}
16+
17+

0 commit comments

Comments
 (0)