|
1 | 1 | # Accepted values: 8.3 - 8.2 |
2 | 2 | ARG PHP_VERSION=8.3 |
3 | 3 |
|
4 | | -ARG DOCKER_FILES_BASE_PATH="docker/prod" |
| 4 | +ARG FRANKENPHP_VERSION=latest |
5 | 5 |
|
6 | 6 | ARG COMPOSER_VERSION=latest |
7 | 7 |
|
| 8 | +ARG DOCKER_FILES_BASE_PATH="docker/prod/" |
| 9 | + |
| 10 | +########################################### |
| 11 | +# Build frontend assets with NPM |
| 12 | +########################################### |
| 13 | + |
| 14 | +#ARG NODE_VERSION=20-alpine |
| 15 | +# |
| 16 | +#FROM node:${NODE_VERSION} AS build |
| 17 | +# |
| 18 | +#ENV ROOT=/var/www/html |
| 19 | +# |
| 20 | +#WORKDIR ${ROOT} |
| 21 | +# |
| 22 | +#RUN npm config set update-notifier false && npm set progress=false |
| 23 | +# |
| 24 | +#COPY package*.json ./ |
| 25 | +# |
| 26 | +#RUN if [ -f $ROOT/package-lock.json ]; \ |
| 27 | +# then \ |
| 28 | +# npm ci --loglevel=error --no-audit; \ |
| 29 | +# else \ |
| 30 | +# npm install --loglevel=error --no-audit; \ |
| 31 | +# fi |
| 32 | +# |
| 33 | +#COPY . . |
| 34 | +# |
| 35 | +#RUN npm run build |
| 36 | + |
8 | 37 | ########################################### |
9 | 38 |
|
10 | 39 | FROM composer:${COMPOSER_VERSION} AS vendor |
11 | 40 |
|
12 | | -FROM php:${PHP_VERSION}-cli-bookworm AS base |
| 41 | +FROM dunglas/frankenphp:${FRANKENPHP_VERSION}-php${PHP_VERSION} |
| 42 | + |
| 43 | +ARG DOCKER_FILES_BASE_PATH |
13 | 44 |
|
14 | 45 | LABEL maintainer="solidtime <hello@solidtime.io>" |
15 | 46 | LABEL org.opencontainers.image.title="solidtime" |
16 | | -LABEL org.opencontainers.image.description="solidtime is a modern open source timetracker for Freelancers and Agencies" |
| 47 | +LABEL org.opencontainers.image.description="solidtime is a modern open source timetracker for freelancers and agencies" |
17 | 48 | LABEL org.opencontainers.image.source="https://github.com/solidtime-io/solidtime" |
18 | 49 | LABEL org.opencontainers.image.licenses="AGPL" |
19 | 50 |
|
20 | 51 | ARG WWWUSER=1000 |
21 | 52 | ARG WWWGROUP=1000 |
22 | 53 | ARG TZ=UTC |
| 54 | +ARG APP_DIR=/var/www/html |
23 | 55 |
|
24 | 56 | ENV DEBIAN_FRONTEND=noninteractive \ |
25 | | - TERM=xterm-color \ |
26 | | - WITH_HORIZON=false \ |
27 | | - WITH_SCHEDULER=false \ |
28 | | - OCTANE_SERVER=swoole \ |
29 | | - USER=octane \ |
30 | | - ROOT=/var/www/html \ |
31 | | - COMPOSER_FUND=0 \ |
32 | | - COMPOSER_MAX_PARALLEL_HTTP=24 |
| 57 | + TERM=xterm-color \ |
| 58 | + WITH_HORIZON=false \ |
| 59 | + WITH_SCHEDULER=false \ |
| 60 | + OCTANE_SERVER=frankenphp \ |
| 61 | + USER=octane \ |
| 62 | + ROOT=${APP_DIR} \ |
| 63 | + COMPOSER_FUND=0 \ |
| 64 | + COMPOSER_MAX_PARALLEL_HTTP=24 \ |
| 65 | + XDG_CONFIG_HOME=${APP_DIR}/.config \ |
| 66 | + XDG_DATA_HOME=${APP_DIR}/.data |
33 | 67 |
|
34 | 68 | WORKDIR ${ROOT} |
35 | 69 |
|
36 | 70 | SHELL ["/bin/bash", "-eou", "pipefail", "-c"] |
37 | 71 |
|
38 | 72 | RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \ |
39 | | - && echo ${TZ} > /etc/timezone |
40 | | - |
41 | | -ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ |
| 73 | + && echo ${TZ} > /etc/timezone |
42 | 74 |
|
43 | 75 | RUN apt-get update; \ |
44 | | - apt-get upgrade -yqq; \ |
45 | | - apt-get install -yqq --no-install-recommends --show-progress \ |
46 | | - apt-utils \ |
47 | | - curl \ |
48 | | - wget \ |
49 | | - nano \ |
50 | | - ncdu \ |
51 | | - ca-certificates \ |
52 | | - supervisor \ |
53 | | - libsodium-dev \ |
54 | | - # Install PHP extensions |
55 | | - && install-php-extensions \ |
56 | | - bz2 \ |
57 | | - pcntl \ |
58 | | - mbstring \ |
59 | | - bcmath \ |
60 | | - sockets \ |
61 | | - pgsql \ |
62 | | - pdo_pgsql \ |
63 | | - opcache \ |
64 | | - exif \ |
65 | | - pdo_mysql \ |
66 | | - zip \ |
67 | | - intl \ |
68 | | - gd \ |
69 | | - redis \ |
70 | | - rdkafka \ |
71 | | - memcached \ |
72 | | - igbinary \ |
73 | | - ldap \ |
74 | | - swoole \ |
75 | | - && apt-get -y autoremove \ |
76 | | - && apt-get clean \ |
77 | | - && docker-php-source delete \ |
78 | | - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ |
79 | | - && rm /var/log/lastlog /var/log/faillog |
80 | | - |
81 | | -RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/supercronic-linux-amd64" \ |
82 | | - -O /usr/bin/supercronic \ |
83 | | - && chmod +x /usr/bin/supercronic \ |
84 | | - && mkdir -p /etc/supercronic \ |
85 | | - && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --verbose --no-interaction" > /etc/supercronic/laravel |
| 76 | + apt-get upgrade -yqq; \ |
| 77 | + apt-get install -yqq --no-install-recommends --show-progress \ |
| 78 | + apt-utils \ |
| 79 | + curl \ |
| 80 | + wget \ |
| 81 | + nano \ |
| 82 | + ncdu \ |
| 83 | + procps \ |
| 84 | + ca-certificates \ |
| 85 | + supervisor \ |
| 86 | + libsodium-dev \ |
| 87 | + # Install PHP extensions (included with dunglas/frankenphp) |
| 88 | + && install-php-extensions \ |
| 89 | + bz2 \ |
| 90 | + pcntl \ |
| 91 | + mbstring \ |
| 92 | + bcmath \ |
| 93 | + sockets \ |
| 94 | + pgsql \ |
| 95 | + pdo_pgsql \ |
| 96 | + opcache \ |
| 97 | + exif \ |
| 98 | + pdo_mysql \ |
| 99 | + zip \ |
| 100 | + intl \ |
| 101 | + gd \ |
| 102 | + redis \ |
| 103 | + rdkafka \ |
| 104 | + memcached \ |
| 105 | + igbinary \ |
| 106 | + ldap \ |
| 107 | + && apt-get -y autoremove \ |
| 108 | + && apt-get clean \ |
| 109 | + && docker-php-source delete \ |
| 110 | + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ |
| 111 | + && rm /var/log/lastlog /var/log/faillog |
| 112 | + |
| 113 | +RUN arch="$(uname -m)" \ |
| 114 | + && case "$arch" in \ |
| 115 | + armhf) _cronic_fname='supercronic-linux-arm' ;; \ |
| 116 | + aarch64) _cronic_fname='supercronic-linux-arm64' ;; \ |
| 117 | + x86_64) _cronic_fname='supercronic-linux-amd64' ;; \ |
| 118 | + x86) _cronic_fname='supercronic-linux-386' ;; \ |
| 119 | + *) echo >&2 "error: unsupported architecture: $arch"; exit 1 ;; \ |
| 120 | + esac \ |
| 121 | + && wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/${_cronic_fname}" \ |
| 122 | + -O /usr/bin/supercronic \ |
| 123 | + && chmod +x /usr/bin/supercronic \ |
| 124 | + && mkdir -p /etc/supercronic \ |
| 125 | + && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --no-interaction" > /etc/supercronic/laravel |
86 | 126 |
|
87 | 127 | RUN userdel --remove --force www-data \ |
88 | | - && groupadd --force -g ${WWWGROUP} ${USER} \ |
89 | | - && useradd -ms /bin/bash --no-log-init --no-user-group -g ${WWWGROUP} -u ${WWWUSER} ${USER} |
| 128 | + && groupadd --force -g ${WWWGROUP} ${USER} \ |
| 129 | + && useradd -ms /bin/bash --no-log-init --no-user-group -g ${WWWGROUP} -u ${WWWUSER} ${USER} |
90 | 130 |
|
91 | 131 | RUN chown -R ${USER}:${USER} ${ROOT} /var/{log,run} \ |
92 | | - && chmod -R a+rw /var/{log,run} |
| 132 | + && chmod -R a+rw ${ROOT} /var/{log,run} |
93 | 133 |
|
94 | 134 | RUN cp ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini |
95 | 135 |
|
96 | 136 | USER ${USER} |
97 | 137 |
|
98 | 138 | COPY --chown=${USER}:${USER} --from=vendor /usr/bin/composer /usr/bin/composer |
| 139 | +#COPY --chown=${USER}:${USER} composer.json composer.lock ./ |
| 140 | +# |
| 141 | +#RUN composer install \ |
| 142 | +# --no-dev \ |
| 143 | +# --no-interaction \ |
| 144 | +# --no-autoloader \ |
| 145 | +# --no-ansi \ |
| 146 | +# --no-scripts \ |
| 147 | +# --audit |
99 | 148 |
|
100 | 149 | COPY --chown=${USER}:${USER} . . |
| 150 | +#COPY --chown=${USER}:${USER} --from=build ${ROOT}/public public |
101 | 151 |
|
102 | 152 | RUN mkdir -p \ |
103 | | - storage/framework/{sessions,views,cache,testing} \ |
104 | | - storage/logs \ |
105 | | - bootstrap/cache && chmod -R a+rw storage |
106 | | - |
107 | | -COPY --chown=${USER}:${USER} docker/prod/deployment/supervisord.*.conf /etc/supervisor/conf.d/ |
108 | | -COPY --chown=${USER}:${USER} docker/prod/deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini |
109 | | -COPY --chown=${USER}:${USER} docker/prod/deployment/start-container /usr/local/bin/start-container |
110 | | - |
111 | | -RUN cat .env |
112 | | -RUN php artisan env |
113 | | -RUN php artisan storage:link |
| 153 | + storage/framework/{sessions,views,cache,testing} \ |
| 154 | + storage/logs \ |
| 155 | + bootstrap/cache && chmod -R a+rw storage |
| 156 | + |
| 157 | +COPY --chown=${USER}:${USER} ${DOCKER_FILES_BASE_PATH}deployment/supervisord.conf /etc/supervisor/ |
| 158 | +COPY --chown=${USER}:${USER} ${DOCKER_FILES_BASE_PATH}deployment/octane/FrankenPHP/supervisord.frankenphp.conf /etc/supervisor/conf.d/ |
| 159 | +COPY --chown=${USER}:${USER} ${DOCKER_FILES_BASE_PATH}deployment/supervisord.*.conf /etc/supervisor/conf.d/ |
| 160 | +COPY --chown=${USER}:${USER} ${DOCKER_FILES_BASE_PATH}deployment/start-container /usr/local/bin/start-container |
| 161 | +COPY --chown=${USER}:${USER} ${DOCKER_FILES_BASE_PATH}deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini |
| 162 | + |
| 163 | +# FrankenPHP embedded PHP configuration |
| 164 | +COPY --chown=${USER}:${USER} ${DOCKER_FILES_BASE_PATH}deployment/php.ini /lib/php.ini |
| 165 | + |
| 166 | +#RUN composer install \ |
| 167 | +# --classmap-authoritative \ |
| 168 | +# --no-interaction \ |
| 169 | +# --no-ansi \ |
| 170 | +# --no-dev \ |
| 171 | +# && composer clear-cache |
114 | 172 |
|
115 | 173 | RUN chmod +x /usr/local/bin/start-container |
116 | 174 |
|
117 | | -RUN cat docker/prod/deployment/utilities.sh >> ~/.bashrc |
| 175 | +RUN cat ${DOCKER_FILES_BASE_PATH}deployment/utilities.sh >> ~/.bashrc |
118 | 176 |
|
119 | 177 | EXPOSE 8000 |
120 | 178 |
|
|
0 commit comments