1
+ # syntax=docker/dockerfile:1
2
+
1
3
# ## Stage 1: build client
2
- FROM node:18 as client-builder
4
+ FROM node:20 as client-builder
3
5
WORKDIR /client-builder
4
6
5
7
# Install node packages
@@ -15,41 +17,39 @@ RUN npm run build
15
17
16
18
# ## Stage 2: final container
17
19
FROM php:8.2-apache
18
- RUN apt-get update \
19
- && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y cron unzip libjpeg62-turbo-dev libpng-dev libpq-dev libonig-dev libtidy-dev \
20
+ # Install runtime & development package dependencies & php extensions
21
+ # then clean-up dev package dependencies
22
+ RUN export DEBIAN_FRONTEND=noninteractive \
23
+ && apt update \
24
+ && apt install -y --no-install-recommends \
25
+ unzip \
26
+ libjpeg62-turbo libpng16-16 libpq5 libonig5 libtidy5deb1 \
27
+ libjpeg62-turbo-dev libpng-dev libpq-dev libonig-dev libtidy-dev \
20
28
&& update-ca-certificates --fresh \
29
+ && docker-php-ext-configure gd --with-jpeg \
30
+ && docker-php-ext-install gd mbstring pdo_pgsql pdo_mysql tidy \
31
+ && apt remove -y libjpeg62-turbo-dev libpng-dev libpq-dev libonig-dev libtidy-dev \
32
+ && apt autoremove -y \
21
33
&& apt clean \
22
34
&& rm -rf /var/lib/apt/lists/*
23
35
24
- RUN docker-php-ext-configure gd \
25
- && docker-php-ext-install gd mbstring pdo_pgsql pdo_mysql tidy
26
-
36
+ # Install Apache modules
27
37
RUN a2enmod headers rewrite
28
38
29
- RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
30
- && php composer-setup.php \
31
- && php -r "unlink('composer-setup.php');" \
32
- && mv composer.phar /usr/local/bin/composer
33
-
34
- # Install dependencies
39
+ # Install Selfoss PHP dependencies
40
+ COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
35
41
COPY composer.json .
36
42
COPY composer.lock .
37
43
RUN COMPOSER_ALLOW_SUPERUSER=1 composer install --optimize-autoloader --no-dev
44
+ RUN rm /usr/bin/composer
38
45
39
- # Setup cron
40
- RUN echo '* * * * * curl http://localhost/update' | tee /etc/cron.d/selfoss \
41
- && chmod 0644 /etc/cron.d/selfoss \
42
- && crontab /etc/cron.d/selfoss
43
-
46
+ # Install Selfoss and copy frontend from the first stage
44
47
WORKDIR /var/www/html
45
-
46
48
COPY . .
47
-
48
49
COPY --from=client-builder /client-builder/public /var/www/html/public
49
50
51
+ # Use www-data user as owner and drop root user
50
52
RUN chown -R www-data:www-data /var/www/html/data
51
-
52
- # Overload default command to run cron in the background
53
- RUN sed -i 's/^exec /service cron start\n\n exec /' /usr/local/bin/apache2-foreground
53
+ USER www-data
54
54
55
55
VOLUME /var/www/html/data
0 commit comments