add alpine image

This commit is contained in:
Jean-Christian Denis 2024-11-02 14:47:50 +01:00
parent 2d7687928a
commit 6d6f5de012
Signed by: JcDenis
GPG key ID: 1B5B8C5B90B6C951
17 changed files with 697 additions and 120 deletions

View file

@ -22,11 +22,13 @@ It is hightly based on work from [darknao](https://github.com/darknao/docker-dot
dotclear_version-server_type dotclear_version-server_type
* jcpd/docker-dotclear:latest is base on stable Debian / Nginx / PHP-FPM * jcpd/docker-dotclear:latest is base on stable Alpine / Nginx / PHP-FPM
* jcpd/docker-dotclear:x.xx-dnf is based on stable Debian / Nginx / PHP-FPM * jcpd/docker-dotclear:x.xx-dnf is based on stable Debian / Nginx / PHP-FPM
* jcpd/docker-dotclear:x.xx-anf is based on stable Alpine / Nginx / PHP-FPM * jcpd/docker-dotclear:x.xx-anf is based on stable Alpine / Nginx / PHP-FPM
* ... (next to come) * ... (next to come)
### DOCKER
Exemple of a docker compose file with a mariadb database. Exemple of a docker compose file with a mariadb database.
services: services:
@ -78,7 +80,16 @@ Builds should support postgresql and mysql database.
On first run you should wait that container download ans install required version of Dotclear... On first run you should wait that container download ans install required version of Dotclear...
## TODO ### BLOG
These images support Dotclear URL rewriting in PATH INFO mode.
To configure default blog, go to the administration interface at http://localhost/admin,
* left side menu _Blog settings_
* panel _Advanced parameters_
* set _Blog URL_ to http://localhost/ (with trailing slash)
* set _URL scan method_ to 'PATH_INFO'
### TODO
* Disable upgrade from Dotclear. Should only use upgrade from container restart ? * Disable upgrade from Dotclear. Should only use upgrade from container restart ?
* or Fix downgrade on container restart when Dotclear has been upgraded from UI. * or Fix downgrade on container restart when Dotclear has been upgraded from UI.
@ -89,12 +100,12 @@ On first run you should wait that container download ans install required versio
* Enhance server and php configuration. From x.conf files. * Enhance server and php configuration. From x.conf files.
* Add builds from Alpine and Apache and maybe without FPM. * Add builds from Alpine and Apache and maybe without FPM.
## CONTRIBUTING ### CONTRIBUTING
This image is an open source project. If you'd like to contribute, please read the [CONTRIBUTING file](/CONTRIBUTING.md). This image is an open source project. If you'd like to contribute, please read the [CONTRIBUTING file](/CONTRIBUTING.md).
You can submit a pull request, or feel free to use any other way you'd prefer. You can submit a pull request, or feel free to use any other way you'd prefer.
## License ### LICENSE
Copyright Jean-Christian Paul Denis Copyright Jean-Christian Paul Denis
AGPL-v3 <https://www.gnu.org/licenses/agpl-3.0.html> AGPL-v3 <https://www.gnu.org/licenses/agpl-3.0.html>

View file

@ -0,0 +1,87 @@
# docker-dotclear:2.31-anf
##
# Alpine
##
FROM alpine:latest
RUN echo "UTC" > /etc/timezone
##
# Nginx
##
RUN adduser -D -g 'www' www
RUN apk add --no-cache --update \
nginx \
curl \
tar \
unzip
RUN mkdir -p /var/www/html \
&& chown -R www:www /var/lib/nginx \
&& chown -R www:www /var/www
COPY nginx.conf /etc/nginx/nginx.conf
WORKDIR /var/www/html
##
# PHP
##
ENV VER_PHP php83
RUN apk add --no-cache --update \
${VER_PHP}-common \
${VER_PHP}-cli \
${VER_PHP}-fpm \
${VER_PHP}-session \
${VER_PHP}-curl \
${VER_PHP}-gd \
${VER_PHP}-gmp \
${VER_PHP}-exif \
${VER_PHP}-tidy \
${VER_PHP}-intl \
${VER_PHP}-json \
${VER_PHP}-mbstring \
${VER_PHP}-iconv \
${VER_PHP}-gettext \
${VER_PHP}-mysqli \
${VER_PHP}-opcache \
${VER_PHP}-dom \
${VER_PHP}-xml \
${VER_PHP}-simplexml \
${VER_PHP}-zip \
${VER_PHP}-sqlite3
COPY php.ini /etc/${VER_PHP}/php.ini
COPY php-fpm.conf /etc/${VER_PHP}/php-fpm.d/www.conf
##
# Dotclear
##
ENV VER_DOTCLEAR 2.31
ENV MD5_DOTCLEAR ec08bbcee14132ac7bcefb8ce5d415ed
RUN mkdir -p /usr/src/dotclear \
&& curl -fsSL -o dotclear.zip "http://download.dotclear.org/attic/dotclear-${VER_DOTCLEAR}.zip" \
&& echo "$MD5_DOTCLEAR dotclear.zip" | md5sum -c - \
&& unzip -d /usr/src dotclear.zip \
&& rm dotclear.zip \
&& chown -R www:www /usr/src/dotclear \
&& chmod -R 755 /usr/src/dotclear/public /usr/src/dotclear/cache \
&& rm -f /var/www/html/*
##
# END
##
EXPOSE 80
ADD docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
HEALTHCHECK --timeout=10s CMD curl --silent --fail http://127.0.0.1:80/fpm-ping || exit 1

View file

@ -0,0 +1,9 @@
# docker-dotclear:2.31-anf
services:
dc_app:
build:
context: .
dockerfile: Dockerfile
image: docker-dotclear:2.31-anf
container_name: dotclear

View file

@ -0,0 +1,43 @@
#!/bin/sh
# docker-dotclear:2.31-anf
set -e
# Check if Dotclear exists
if ! [ -e index.php -a -e src/App.php ]; then
# First installation
echo >&2 "Dotclear not found in $(pwd) - copying now..."
if [ "$(ls -A)" ]; then
echo >&2 "WARNING: $(pwd) is not empty - press Ctrl+C now if this is an error!"
( set -x; ls -A; sleep 5 )
fi
echo >&2 "Copying Dotclear files..."
tar cf - --one-file-system -C /usr/src/dotclear . | tar xf -
echo >&2 "Complete! Dotclear has been successfully copied to $(pwd)"
else
echo >&2 "Dotclear found in $(pwd), checking upgrade..."
# Check if Dotclear needs upgrade
VER_CURRENT=$(sed -n "s/^\s*\"release_version\":\s*\"\(.*\)\",/\1/p" release.json)
if [ "$VER_CURRENT" != "$VER_DOTCLEAR" ]; then
echo >&2 "Upgrading Dotclear files from ${VER_CURRENT} to ${VER_DOTCLEAR}, please wait..."
tar cf - --one-file-system -C /usr/src/dotclear . | tar xf -
echo >&2 "Complete! Dotclear files have been successfully upgraded to ${VER_DOTCLEAR}"
else
echo >&2 "No need to upgrade Dotclear ${VER_DOTCLEAR}"
fi
fi
# Permissions
echo >&2 "Setting up permissions..."
chown -R www:www /var/www/html
# Summary
echo >&2 "Alpine $(cat /etc/alpine-release)"
echo >&2 "$(nginx -v)PHP $(php -r "echo PHP_VERSION;")"
echo >&2 "Dotclear: ${VER_DOTCLEAR}"
php-fpm83 -D # FPM must start first in daemon mode
nginx # Then nginx in no daemon mode
exec "$@"

View file

@ -0,0 +1,67 @@
; docker-dotclear:2.31-anf
user www;
daemon off;
worker_processes auto;
error_log /dev/stderr notice;
pid /var/run/nginx/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
#access_log /var/log/nginx/access.log;
keepalive_timeout 3000;
server {
listen 80;
root /var/www/html;
index index.php index.html;
server_name localhost;
client_max_body_size 32m;
#error_page 500 502 503 504 /50x.html;
location ~ ^/(db|cache|plugins|inc) {
deny all;
return 404;
}
location / {
try_files $uri $uri/ @dotclear_path_info;
}
location @dotclear_path_info {
rewrite ^/(.*) /index.php/$1 last;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
set $path_info $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/run/php-fpm.sock;
fastcgi_index index.php;
}
location ~ ^/(fpm-ping)$ {
access_log off;
allow 127.0.0.1;
deny all;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm.sock;
}
}
}

View file

@ -0,0 +1,21 @@
; docker-dotclear:2.31-anf
[global]
error_log = /dev/stderr
pid = /var/run/php-fpm.pid
[www]
user = www
group = www
listen = /run/php-fpm.sock
listen.owner = www
listen.group = www
listen.mode = 0660
pm = ondemand
pm.max_children = 100
pm.process_idle_timeout = 10s;
pm.max_requests = 1000
ping.path = /fpm-ping
catch_workers_output = yes
decorate_workers_output = no
clear_env = no

116
alpine/nginx/2.31/php.ini Normal file
View file

@ -0,0 +1,116 @@
; docker-dotclear:2.31-anf
[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
zend.exception_ignore_args = On
zend.exception_string_param_max_len = 0
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 512M
max_input_vars = 1500
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
display_errors = On
display_startup_errors = On
log_errors = On
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
error_log = /dev/stderr
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 100M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
include_path = ".:/usr/share/php83"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 50M
max_file_uploads = 200
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = Off
mail.mixed_lf_and_crlf = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.cookie_samesite =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=2

View file

@ -0,0 +1,30 @@
services:
# MYSQL database service
dc_db:
image: mariadb:latest
container_name: dotcleardb
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- dc_db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: dotclear_root
MYSQL_DATABASE: dotclear_db
MYSQL_USER: dotclear_user
MYSQL_PASSWORD: dotclear_pwd
# PHP-FPM Service
dc_app:
image: jcpd/docker-dotclear:2.31-anf
container_name: dotclearphp
volumes:
- dc_app:/var/www/html
ports:
- 8080:80
depends_on:
- dc_db # MYSQL database service
volumes:
dc_app: # NGINX volume
dc_db: # MYSQL volume

View file

@ -0,0 +1,87 @@
# docker-dotclear:latest
##
# Alpine
##
FROM alpine:latest
RUN echo "UTC" > /etc/timezone
##
# Nginx
##
RUN adduser -D -g 'www' www
RUN apk add --no-cache --update \
nginx \
curl \
tar \
unzip
RUN mkdir -p /var/www/html \
&& chown -R www:www /var/lib/nginx \
&& chown -R www:www /var/www
COPY nginx.conf /etc/nginx/nginx.conf
WORKDIR /var/www/html
##
# PHP
##
ENV VER_PHP php83
RUN apk add --no-cache --update \
${VER_PHP}-common \
${VER_PHP}-cli \
${VER_PHP}-fpm \
${VER_PHP}-session \
${VER_PHP}-curl \
${VER_PHP}-gd \
${VER_PHP}-gmp \
${VER_PHP}-exif \
${VER_PHP}-tidy \
${VER_PHP}-intl \
${VER_PHP}-json \
${VER_PHP}-mbstring \
${VER_PHP}-iconv \
${VER_PHP}-gettext \
${VER_PHP}-mysqli \
${VER_PHP}-opcache \
${VER_PHP}-dom \
${VER_PHP}-xml \
${VER_PHP}-simplexml \
${VER_PHP}-zip \
${VER_PHP}-sqlite3
COPY php.ini /etc/${VER_PHP}/php.ini
COPY php-fpm.conf /etc/${VER_PHP}/php-fpm.d/www.conf
##
# Dotclear
##
ENV VER_DOTCLEAR 2.31
ENV MD5_DOTCLEAR ec08bbcee14132ac7bcefb8ce5d415ed
RUN mkdir -p /usr/src/dotclear \
&& curl -fsSL -o dotclear.zip "http://download.dotclear.org/attic/dotclear-${VER_DOTCLEAR}.zip" \
&& echo "$MD5_DOTCLEAR dotclear.zip" | md5sum -c - \
&& unzip -d /usr/src dotclear.zip \
&& rm dotclear.zip \
&& chown -R www:www /usr/src/dotclear \
&& chmod -R 755 /usr/src/dotclear/public /usr/src/dotclear/cache \
&& rm -f /var/www/html/*
##
# END
##
EXPOSE 80
ADD docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
HEALTHCHECK --timeout=10s CMD curl --silent --fail http://127.0.0.1:80/fpm-ping || exit 1

View file

@ -1,8 +1,9 @@
# docker-dotclear:latest # docker-dotclear:latest
services: services:
dc_app: dc_app:
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
image: docker-dotclear:latest # debian nginx php-fpm image: docker-dotclear:latest
container_name: dotclear container_name: dotclear

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/sh
# docker-dotclear:latest # docker-dotclear:latest
@ -10,34 +10,34 @@ if ! [ -e index.php -a -e src/App.php ]; then
echo >&2 "Dotclear not found in $(pwd) - copying now..." echo >&2 "Dotclear not found in $(pwd) - copying now..."
if [ "$(ls -A)" ]; then if [ "$(ls -A)" ]; then
echo >&2 "WARNING: $(pwd) is not empty - press Ctrl+C now if this is an error!" echo >&2 "WARNING: $(pwd) is not empty - press Ctrl+C now if this is an error!"
( set -x; ls -A; sleep 10 ) ( set -x; ls -A; sleep 5 )
fi fi
echo >&2 "Copying Dotclear files..."
tar cf - --one-file-system -C /usr/src/dotclear . | tar xf - tar cf - --one-file-system -C /usr/src/dotclear . | tar xf -
echo >&2 "Complete! Dotclear has been successfully copied to $(pwd)" echo >&2 "Complete! Dotclear has been successfully copied to $(pwd)"
else else
echo >&2 "Dotclear found in $(pwd), checking upgrade..." echo >&2 "Dotclear found in $(pwd), checking upgrade..."
# Check if Dotclear needs upgrade # Check if Dotclear needs upgrade
DOTCLEAR_CURRENT_VERSION=$(sed -n "s/^\s*\"release_version\":\s*\"\(.*\)\",/\1/p" release.json) VER_CURRENT=$(sed -n "s/^\s*\"release_version\":\s*\"\(.*\)\",/\1/p" release.json)
if [ "$DOTCLEAR_CURRENT_VERSION" != "$DOTCLEAR_VERSION" ]; then if [ "$VER_CURRENT" != "$VER_DOTCLEAR" ]; then
echo >&2 "Upgrading Dotclear files from ${DOTCLEAR_CURRENT_VERSION} to ${DOTCLEAR_VERSION}, please wait..." echo >&2 "Upgrading Dotclear files from ${VER_CURRENT} to ${VER_DOTCLEAR}, please wait..."
tar cf - --one-file-system -C /usr/src/dotclear . | tar xf - tar cf - --one-file-system -C /usr/src/dotclear . | tar xf -
echo >&2 "Complete! Dotclear files have been successfully upgraded to ${DOTCLEAR_VERSION}" echo >&2 "Complete! Dotclear files have been successfully upgraded to ${VER_DOTCLEAR}"
else else
echo >&2 "No need to upgrade Dotclear ${DOTCLEAR_VERSION}" echo >&2 "No need to upgrade Dotclear ${VER_DOTCLEAR}"
fi fi
fi fi
# Permissions # Permissions
chown -R www-data:www-data /var/www/html echo >&2 "Setting up permissions..."
chown -R www:www /var/www/html
# Summary # Summary
echo >&2 "Starting services..." echo >&2 "Alpine $(cat /etc/alpine-release)"
echo >&2 "Debian $(cat /etc/debian_version)" echo >&2 "$(nginx -v)PHP $(php -r "echo PHP_VERSION;")"
echo >&2 "$(nginx -v)PHP: $(php -r "echo PHP_VERSION;")" echo >&2 "Dotclear: ${VER_DOTCLEAR}"
echo >&2 "Dotclear: ${DOTCLEAR_VERSION}"
# Start services (in right order) php-fpm83 -D # FPM must start first in daemon mode
php-fpm -D nginx # Then nginx in no daemon mode
nginx -g 'daemon off;'
exec "$@" exec "$@"

View file

@ -0,0 +1,67 @@
; docker-dotclear:latest
user www;
daemon off;
worker_processes auto;
error_log /dev/stderr notice;
pid /var/run/nginx/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
#access_log /var/log/nginx/access.log;
keepalive_timeout 3000;
server {
listen 80;
root /var/www/html;
index index.php index.html;
server_name localhost;
client_max_body_size 32m;
#error_page 500 502 503 504 /50x.html;
location ~ ^/(db|cache|plugins|inc) {
deny all;
return 404;
}
location / {
try_files $uri $uri/ @dotclear_path_info;
}
location @dotclear_path_info {
rewrite ^/(.*) /index.php/$1 last;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
set $path_info $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/run/php-fpm.sock;
fastcgi_index index.php;
}
location ~ ^/(fpm-ping)$ {
access_log off;
allow 127.0.0.1;
deny all;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm.sock;
}
}
}

View file

@ -0,0 +1,21 @@
; docker-dotclear:latest
[global]
error_log = /dev/stderr
pid = /var/run/php-fpm.pid
[www]
user = www
group = www
listen = /run/php-fpm.sock
listen.owner = www
listen.group = www
listen.mode = 0660
pm = ondemand
pm.max_children = 100
pm.process_idle_timeout = 10s;
pm.max_requests = 1000
ping.path = /fpm-ping
catch_workers_output = yes
decorate_workers_output = no
clear_env = no

116
alpine/nginx/latest/php.ini Normal file
View file

@ -0,0 +1,116 @@
; docker-dotclear:latest
[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
zend.exception_ignore_args = On
zend.exception_string_param_max_len = 0
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 512M
max_input_vars = 1500
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
display_errors = On
display_startup_errors = On
log_errors = On
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
error_log = /dev/stderr
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 100M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
include_path = ".:/usr/share/php83"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 50M
max_file_uploads = 200
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = Off
mail.mixed_lf_and_crlf = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.cookie_samesite =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=2

View file

@ -16,7 +16,7 @@ services:
# PHP-FPM Service # PHP-FPM Service
dc_app: dc_app:
image: jcpd/docker-dotclear:latest image: jcpd/docker-dotclear:2.31-dnf
container_name: dotclearphp container_name: dotclearphp
volumes: volumes:
- dc_app:/var/www/html - dc_app:/var/www/html

View file

@ -1,62 +0,0 @@
# docker-dotclear:latest
# Debian 12.7 / nginx 1.22.1 / php-fpm 8.3
# Base from PHP official FPM image
FROM php:8.3-fpm
# Dotclear version
ENV DOTCLEAR_VERSION 2.31
ENV DOTCLEAR_MD5 ec08bbcee14132ac7bcefb8ce5d415ed
# Required system packages
RUN set -x; \
apt-get update \
&& apt-get install -y nginx \
&& apt-get install -y --no-install-recommends \
postgresql-server-dev-all \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libonig-dev \
rsync \
unzip \
&& rm -r /var/lib/apt/lists/*
# Required php packages
RUN docker-php-ext-install opcache mbstring pgsql mysqli \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd
# Opcache
RUN { \
echo 'opcache.memory_consumption=128'; \
echo 'opcache.interned_strings_buffer=8'; \
echo 'opcache.max_accelerated_files=4000'; \
echo 'opcache.revalidate_freq=2'; \
echo 'opcache.fast_shutdown=1'; \
echo 'opcache.enable_cli=1'; \
} > /usr/local/etc/php/conf.d/php-opocache-cfg.ini
# Web server configuartion
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
COPY server.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www/html
EXPOSE 80
# Get Dotclear
RUN mkdir -p /usr/src/dotclear \
&& curl -fsSL -o dotclear.zip "http://download.dotclear.org/attic/dotclear-${DOTCLEAR_VERSION}.zip" \
&& echo "$DOTCLEAR_MD5 dotclear.zip" | md5sum -c - \
&& unzip -d /usr/src dotclear.zip \
&& rm dotclear.zip \
&& chown -R www-data:www-data /usr/src/dotclear \
&& chmod -R 755 /usr/src/dotclear/public /usr/src/dotclear/cache \
&& rm -f /var/www/html/*
# Entrypoint
ADD ../docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
# Container healthcheck
HEALTHCHECK --timeout=10s CMD curl --silent --fail http://127.0.0.1:8080/fpm-ping || exit 1

View file

@ -1,37 +0,0 @@
# docker-dotclear:latest
# nginx php-fpm server configuration to rewrite Dotclear's URL
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php;
location ~ ^/(db|cache|plugins|inc) {
deny all;
return 404;
}
location / {
try_files $uri $uri/ @dotclear_path_info;
}
location @dotclear_path_info {
rewrite ^/(.*) /index.php/$1 last;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}