Docker from Debian base image (#3500)

* Docker from Debian base image
* Fix expose https://github.com/RSS-Bridge/rss-bridge/discussions/3234
* Re-fix better logs https://github.com/RSS-Bridge/rss-bridge/pull/3333
* Update to Debian 12 Bookworm instead of Debian 10 Buster
* Use Debian packaging instead of having to keep track of and manually install -dev libraries, and with LTS support
* Update to PHP 8.2 instead of PHP 8.0

* Fix php.ini location

* Minor order changes
To optimise caching
This commit is contained in:
Alexandre Alapetite 2023-09-13 18:08:22 +02:00 committed by GitHub
parent 4323a11667
commit 0175e13712
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 59 additions and 23 deletions

View file

@ -12,6 +12,6 @@ server {
location ~ \.php$ { location ~ \.php$ {
include snippets/fastcgi-php.conf; include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
} }
} }

3
.gitignore vendored
View file

@ -230,6 +230,9 @@ pip-log.txt
DEBUG DEBUG
config.ini.php config.ini.php
config/* config/*
!config/nginx.conf
!config/php-fpm.conf
!config/php.ini
###################### ######################
## VisualStudioCode ## ## VisualStudioCode ##

View file

@ -1,36 +1,47 @@
FROM lwthiker/curl-impersonate:0.5-ff-slim-buster AS curlimpersonate FROM lwthiker/curl-impersonate:0.5-ff-slim-buster AS curlimpersonate
FROM php:8.0.27-fpm-buster AS rssbridge FROM debian:12-slim AS rssbridge
LABEL description="RSS-Bridge is a PHP project capable of generating RSS and Atom feeds for websites that don't have one." LABEL description="RSS-Bridge is a PHP project capable of generating RSS and Atom feeds for websites that don't have one."
LABEL repository="https://github.com/RSS-Bridge/rss-bridge" LABEL repository="https://github.com/RSS-Bridge/rss-bridge"
LABEL website="https://github.com/RSS-Bridge/rss-bridge" LABEL website="https://github.com/RSS-Bridge/rss-bridge"
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \ RUN apt-get update && \
apt-get install --yes --no-install-recommends \ apt-get install --yes --no-install-recommends \
ca-certificates \
nginx \ nginx \
zlib1g-dev \
libzip-dev \
libmemcached-dev \
nss-plugin-pem \ nss-plugin-pem \
libicu-dev && \ php-curl \
docker-php-ext-install zip && \ php-fpm \
docker-php-ext-install intl && \ php-intl \
pecl install memcached && \ # php-json is enabled by default with PHP 8.2 in Debian 12
docker-php-ext-enable memcached && \ php-mbstring \
docker-php-ext-enable opcache && \ php-memcached \
mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" # php-opcache is enabled by default with PHP 8.2 in Debian 12
# php-openssl is enabled by default with PHP 8.2 in Debian 12
php-sqlite3 \
php-xml \
php-zip \
# php-zlib is enabled by default with PHP 8.2 in Debian 12
&& \
rm -rf /var/lib/apt/lists/*
COPY ./config/nginx.conf /etc/nginx/sites-enabled/default # logs should go to stdout / stderr
RUN ln -sfT /dev/stderr /var/log/nginx/error.log; \
COPY --chown=www-data:www-data ./ /app/ ln -sfT /dev/stdout /var/log/nginx/access.log; \
chown -R --no-dereference www-data:adm /var/log/nginx/
COPY --from=curlimpersonate /usr/local/lib/libcurl-impersonate-ff.so /usr/local/lib/curl-impersonate/ COPY --from=curlimpersonate /usr/local/lib/libcurl-impersonate-ff.so /usr/local/lib/curl-impersonate/
ENV LD_PRELOAD /usr/local/lib/curl-impersonate/libcurl-impersonate-ff.so ENV LD_PRELOAD /usr/local/lib/curl-impersonate/libcurl-impersonate-ff.so
ENV CURL_IMPERSONATE ff91esr ENV CURL_IMPERSONATE ff91esr
COPY ./config/nginx.conf /etc/nginx/sites-available/default
COPY ./config/php-fpm.conf /etc/php/8.2/fpm/pool.d/rss-bridge.conf
COPY ./config/php.ini /etc/php/8.2/fpm/conf.d/90-rss-bridge.conf
COPY --chown=www-data:www-data ./ /app/
EXPOSE 80 EXPOSE 80
ENTRYPOINT ["/app/docker-entrypoint.sh"] ENTRYPOINT ["/app/docker-entrypoint.sh"]

View file

@ -2,8 +2,8 @@ server {
listen 80 default_server; listen 80 default_server;
listen [::]:80 default_server; listen [::]:80 default_server;
root /app; root /app;
access_log /dev/stdout; access_log /var/log/nginx/access.log;
error_log /dev/stderr; error_log /var/log/nginx/error.log;
index index.php; index index.php;
location ~ /(\.|vendor|tests) { location ~ /(\.|vendor|tests) {
@ -13,6 +13,6 @@ server {
location ~ \.php$ { location ~ \.php$ {
include snippets/fastcgi-php.conf; include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
} }
} }

18
config/php-fpm.conf Normal file
View file

@ -0,0 +1,18 @@
; Inspired by https://github.com/docker-library/php/blob/master/8.2/bookworm/fpm/Dockerfile
[global]
error_log = /proc/self/fd/2
; https://github.com/docker-library/php/pull/725#issuecomment-443540114
log_limit = 8192
[www]
; php-fpm closes STDOUT on startup, so sending logs to /proc/self/fd/1 does not work.
; https://bugs.php.net/bug.php?id=73886
access.log = /proc/self/fd/2
clear_env = no
; Ensure worker stdout and stderr are sent to the main error log.
catch_workers_output = yes
decorate_workers_output = no

4
config/php.ini Normal file
View file

@ -0,0 +1,4 @@
; Inspired by https://github.com/docker-library/php/blob/master/8.2/bookworm/fpm/Dockerfile
; https://github.com/docker-library/php/issues/878#issuecomment-938595965'
fastcgi.logging = Off

View file

@ -41,5 +41,5 @@ fi
# nginx will daemonize # nginx will daemonize
nginx nginx
# php-fpm will not # php-fpm should not daemonize
php-fpm php-fpm8.2 --nodaemonize