Browse Source

review typo3 docker conf (ongoing)

Olivier Massot 1 year ago
parent
commit
c76721c7bb

+ 30 - 12
docker-compose.yml

@@ -368,28 +368,46 @@ services:
     depends_on:
       - nginx-proxy
 
-  typo3:
-    hostname: typo3
-    container_name: typo3
+#  typo3:
+#    hostname: typo3
+#    container_name: typo3
+#    build:
+#      context: .
+#      dockerfile: docker/typo3/Dockerfile
+#      args:
+#        - COMPOSER_HASH=${COMPOSER_HASH}
+#    restart: always
+#    networks:
+#      network:
+#        ipv4_address: 172.20.3.1
+#        aliases:
+#          - docker.sub.opentalent.fr
+#          - docker.sub.customdomain.fr
+#    volumes:
+#      - ./apps/ot_typo3:/var/opentalent/git/ot_typo3:cached
+#      - ./apps/ot_typo3/docker/typo3:/var/www/typo3:cached
+#    environment:
+#      - VIRTUAL_HOST=${TYPO3_VIRTUAL_HOST}
+#      - HTTPS_METHOD=noredirect
+#      - PHP_IDE_CONFIG=servername=typo3
+#    depends_on:
+#      - nginx
+
+  typo3_new:
+    hostname: typo3_new
+    container_name: typo3_new
     build:
       context: .
-      dockerfile: docker/typo3/Dockerfile
-      args:
-        - COMPOSER_HASH=${COMPOSER_HASH}
+      dockerfile: docker/typo3_new/Dockerfile
     restart: always
     networks:
       network:
-        ipv4_address: 172.20.3.1
-        aliases:
-          - docker.sub.opentalent.fr
-          - docker.sub.customdomain.fr
+        ipv4_address: 172.20.3.2
     volumes:
       - ./apps/ot_typo3:/var/opentalent/git/ot_typo3:cached
-      - ./apps/ot_typo3/docker/typo3:/var/www/typo3:cached
     environment:
       - VIRTUAL_HOST=${TYPO3_VIRTUAL_HOST}
       - HTTPS_METHOD=noredirect
-      - PHP_IDE_CONFIG=servername=typo3
     depends_on:
       - nginx
 

+ 16 - 6
docker/typo3/Dockerfile

@@ -1,7 +1,5 @@
 FROM php:8.3-apache
 
-ARG COMPOSER_HASH
-
 # Configure php
 COPY /docker/typo3/conf/memory.ini /usr/local/etc/php/conf.d/
 COPY /docker/typo3/conf/apc.ini /usr/local/etc/php/conf.d/
@@ -11,7 +9,7 @@ COPY /docker/typo3/conf/xdebug.ini /usr/local/etc/php/conf.d/
 COPY /docker/typo3/conf/typo3.conf /etc/apache2/sites-available/
 
 # Set workdir
-WORKDIR /var/www/typo3
+WORKDIR /var/www
 
 RUN \
     # Install utilities and php extensions
@@ -40,16 +38,28 @@ RUN \
     a2ensite typo3; \
     service apache2 restart;
 
+RUN \
+    # Install composer
+    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"; \
+    php composer-setup.php; \
+    php -r "unlink('composer-setup.php');"; \
+    mv composer.phar /usr/bin/composer
+
 # Set environment variables
 ENV LANG fr_FR.UTF-8
 ENV LANGUAGE fr_FR:fr
 ENV LC_ALL fr_FR.UTF-8
 
-# CLI shortcut
-COPY /docker/typo3/conf/cli /var/www/typo3/
+# Fresh install of Typo3
+RUN \
+   composer create-project "typo3/cms-base-distribution:^11.5" typo3; \
+   mkdir /var/www/typo3/packages; \
+   touch /var/www/typo3/public/FIRST_INSTALL;
+
+# Set new workdir
+WORKDIR /var/www/typo3
 
 # Declare the entrypoint.sh file
 COPY ./docker/typo3/entrypoint.sh /entrypoint.sh
 RUN chmod +x /entrypoint.sh
 ENTRYPOINT ["/entrypoint.sh"]
-

+ 0 - 70
docker/typo3/conf/composer.json

@@ -1,70 +0,0 @@
-{
-	"repositories": [
-		{ "type": "composer", "url": "https://composer.typo3.org/" }
-	],
-	"name": "typo3/cms-base-distribution",
-	"description" : "TYPO3 CMS Base Distribution",
-	"license": "GPL-2.0-or-later",
-	"config": {
-		"platform": {
-			"php": "7.4"
-		}
-	},
-	"require": {
-		"typo3/cms-about": "^9.5",
-		"typo3/cms-adminpanel": "^9.5",
-		"typo3/cms-backend": "^9.5",
-		"typo3/cms-belog": "^9.5",
-		"typo3/cms-beuser": "^9.5",
-		"typo3/cms-core": "^9.5",
-		"typo3/cms-extbase": "^9.5",
-		"typo3/cms-extensionmanager": "^9.5",
-		"typo3/cms-felogin": "^9.5",
-		"typo3/cms-filelist": "^9.5",
-		"typo3/cms-filemetadata": "^9.5",
-		"typo3/cms-fluid": "^9.5",
-		"typo3/cms-fluid-styled-content": "^9.5",
-		"typo3/cms-form": "^9.5",
-		"typo3/cms-frontend": "^9.5",
-		"typo3/cms-info": "^9.5",
-		"typo3/cms-install": "^9.5",
-		"typo3/cms-lowlevel": "^9.5",
-		"typo3/cms-recycler": "^9.5",
-		"typo3/cms-redirects": "^9.5",
-		"typo3/cms-reports": "^9.5",
-		"typo3/cms-rte-ckeditor": "^9.5",
-		"typo3/cms-scheduler": "^9.5",
-		"typo3/cms-seo": "^9.5",
-		"typo3/cms-setup": "^9.5",
-		"typo3/cms-t3editor": "^9.5",
-		"typo3/cms-tstemplate": "^9.5",
-		"fluidtypo3/flux": "^9.4",
-		"fluidtypo3/vhs": "^6.0",
-		"georgringer/news": "^8.4",
-		"helhum/typo3-console": "^5.7",
-		"causal/image_autoresize": "^2.0",
-		"friendsoftypo3/frontend-editing": "^1.9",
-		"sgalinski/lfeditor": "^6.0",
-		"twig/twig": "^3.3",
-		"phpunit/phpunit": "^9.5"
-	},
-	"scripts":{
-		"typo3-cms-scripts": [
-			"typo3cms install:fixfolderstructure",
-			"typo3cms install:generatepackagestates"
-		],
-		"post-autoload-dump": [
-			"@typo3-cms-scripts"
-		]
-	},
-	"autoload": {
-		"psr-4": {
-			"Opentalent\\OtCore\\": "public/typo3conf/ext/ot_core/Classes",
-			"Opentalent\\OtConnect\\": "public/typo3conf/ext/ot_connect/Classes",
-			"Opentalent\\OtTemplating\\": "public/typo3conf/ext/ot_templating/Classes",
-			"Opentalent\\OtAdmin\\": "public/typo3conf/ext/ot_admin/Classes",
-			"Opentalent\\OtStats\\": "public/typo3conf/ext/ot_stats/Classes",
-			"Opentalent\\OtOptimizer\\": "public/typo3conf/ext/ot_optimizer/Classes"
-		}
-	}
-}

+ 16 - 0
docker/typo3/entrypoint.sh

@@ -1,5 +1,18 @@
 #!/bin/bash
 
+# Install Typo3 and extensions
+rm composer.json
+rm composer.lock
+ln -s /var/opentalent/git/ot_typo3/composer.json /var/www/typo3/composer.json
+
+ln -s /var/opentalent/git/ot_typo3/ot_admin /var/www/typo3/packages/ot_admin
+ln -s /var/opentalent/git/ot_typo3/ot_connect /var/www/typo3/packages/ot_connect
+ln -s /var/opentalent/git/ot_typo3/ot_core /var/www/typo3/packages/ot_core
+ln -s /var/opentalent/git/ot_typo3/ot_stats /var/www/typo3/packages/ot_stats
+ln -s /var/opentalent/git/ot_typo3/ot_optimizer /var/www/typo3/packages/ot_optimizer
+ln -s /var/opentalent/git/ot_typo3/ot_templating /var/www/typo3/packages/ot_templating
+composer install
+
 # Fix db connection infos
 sed -i "s#'host' => '[^\']*'#'host' => 'db'#i" /var/www/typo3/public/typo3conf/LocalConfiguration.php
 sed -i "s#'password' => '[^\']*'#'password' => 'mysql660'#i" /var/www/typo3/public/typo3conf/LocalConfiguration.php
@@ -10,6 +23,9 @@ chown -R 1000:www-data /var/www/typo3
 chown -R 1000:www-data /var/opentalent/git/ot_typo3
 chmod -R 771 /var/www/typo3
 
+# Console shortcut
+ln -s /var/www/typo3/public/typo3/sysext/core/bin/typo3 /var/www/typo3/console
+
 # Enable install tool
 touch /var/www/typo3/public/typo3conf/ENABLE_INSTALL_TOOL
 

+ 55 - 0
docker/typo3_new/Dockerfile

@@ -0,0 +1,55 @@
+FROM php:8.3-apache
+
+ARG COMPOSER_HASH
+
+# Configure php
+COPY /docker/typo3/conf/memory.ini /usr/local/etc/php/conf.d/
+COPY /docker/typo3/conf/apc.ini /usr/local/etc/php/conf.d/
+COPY /docker/typo3/conf/xdebug.ini /usr/local/etc/php/conf.d/
+
+# Configure apache
+COPY /docker/typo3/conf/typo3.conf /etc/apache2/sites-available/
+
+# Set workdir
+WORKDIR /var/www/typo3
+
+RUN \
+    # Install utilities and php extensions
+    apt-get clean && apt-get update && apt-get install -y locales; \
+    pecl install apcu-5.1.23 && pecl install apcu_bc && pecl install imagick-3.4.3RC2; \
+    apt-get install -y --no-install-recommends zip unzip git nano wget less \
+                                               libxml2-dev libpq-dev libzip-dev zlib1g-dev libonig-dev \
+                                               libfreetype6-dev libpng-dev libjpeg-dev libicu-dev libwebp-dev \
+                                               libjpeg62-turbo-dev libxpm-dev graphicsmagick; \
+    docker-php-ext-configure gd  --with-libdir=/usr/include/ --with-jpeg --with-freetype; \
+    docker-php-ext-configure intl; \
+    docker-php-ext-install opcache intl pdo_mysql exif mbstring mysqli gd zip soap; \
+    docker-php-ext-enable opcache; \
+
+    # Install and enable xdebug
+    pecl install xdebug-3.3.2; \
+    docker-php-ext-enable xdebug; \
+
+    # Set locale
+    echo 'fr_FR.UTF-8 UTF-8' > /etc/locale.gen; \
+    locale-gen; \
+
+    # Configure apache
+    a2enmod alias authz_core autoindex deflate expires filter headers rewrite setenvif; \
+    rm /etc/apache2/sites-available/000-default.conf && rm /etc/apache2/sites-available/default-ssl.conf; \
+    a2ensite typo3; \
+    service apache2 restart;
+
+# Set environment variables
+ENV LANG fr_FR.UTF-8
+ENV LANGUAGE fr_FR:fr
+ENV LC_ALL fr_FR.UTF-8
+
+# CLI shortcut
+COPY /docker/typo3/conf/cli /var/www/typo3/
+
+# Declare the entrypoint.sh file
+COPY ./docker/typo3/entrypoint.sh /entrypoint.sh
+RUN chmod +x /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"]
+

+ 369 - 0
docker/typo3_new/conf/.htaccess

@@ -0,0 +1,369 @@
+#####
+#
+# Example .htaccess file for TYPO3 CMS - for use with Apache Webserver
+#
+# This file includes settings for the following configuration options:
+#
+# - Compression
+# - Caching
+# - MIME types
+# - Cross Origin requests
+# - Rewriting and Access
+# - Miscellaneous
+# - PHP optimisation
+#
+# If you want to use it, you have to copy it to the root folder of your TYPO3 installation (if its
+# not there already) and rename it to '.htaccess'. To make .htaccess files work, you might need to
+# adjust the 'AllowOverride' directive in your Apache configuration file.
+#
+# IMPORTANT: You may need to change this file depending on your TYPO3 installation!
+#            Consider adding this file's content to your webserver's configuration directly for speed improvement
+#
+# Lots of the options are taken from https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess
+#
+####
+
+SetEnv TYPO3_CONTEXT Development
+SetEnv TYPO3_OPTIMIZE 1
+
+### Begin: Compression ###
+
+# Compressing resource files will save bandwidth and so improve loading speed especially for users
+# with slower internet connections. TYPO3 can compress the .js and .css files for you.
+# *) Uncomment the following lines and
+# *) Set $GLOBALS['TYPO3_CONF_VARS']['BE']['compressionLevel'] = 9 for the Backend
+# *) Set $GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel'] = 9 together with the TypoScript properties
+#    config.compressJs and config.compressCss for GZIP compression of Frontend JS and CSS files.
+
+<FilesMatch "\.js\.gzip$">
+	AddType "text/javascript" .gzip
+</FilesMatch>
+<FilesMatch "\.css\.gzip$">
+	AddType "text/css" .gzip
+</FilesMatch>
+AddEncoding gzip .gzip
+
+<IfModule mod_deflate.c>
+	# Force compression for mangled `Accept-Encoding` request headers
+	<IfModule mod_setenvif.c>
+		<IfModule mod_headers.c>
+			SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
+			RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
+		</IfModule>
+	</IfModule>
+
+	# Compress all output labeled with one of the following media types.
+	#
+	# (!) For Apache versions below version 2.3.7 you don't need to
+	# enable `mod_filter` and can remove the `<IfModule mod_filter.c>`
+	# and `</IfModule>` lines as `AddOutputFilterByType` is still in
+	# the core directives.
+	#
+	# https://httpd.apache.org/docs/current/mod/mod_filter.html#addoutputfilterbytype
+
+	<IfModule mod_filter.c>
+		AddOutputFilterByType DEFLATE application/atom+xml \
+			application/javascript \
+			application/json \
+			application/ld+json \
+			application/manifest+json \
+			application/rdf+xml \
+			application/rss+xml \
+			application/schema+json \
+			application/vnd.geo+json \
+			application/vnd.ms-fontobject \
+			application/x-font-ttf \
+			application/x-javascript \
+			application/x-web-app-manifest+json \
+			application/xhtml+xml \
+			application/xml \
+			font/eot \
+			font/opentype \
+			image/bmp \
+			image/svg+xml \
+			image/vnd.microsoft.icon \
+			image/x-icon \
+			text/cache-manifest \
+			text/css \
+			text/html \
+			text/javascript \
+			text/plain \
+			text/vcard \
+			text/vnd.rim.location.xloc \
+			text/vtt \
+			text/x-component \
+			text/x-cross-domain-policy \
+			text/xml
+	</IfModule>
+
+	<IfModule mod_mime.c>
+		AddEncoding gzip svgz
+	</IfModule>
+</IfModule>
+
+### End: Compression ###
+
+
+
+### Begin: Browser caching of resource files ###
+
+# This affects Frontend and Backend and increases performance.
+<IfModule mod_expires.c>
+
+	ExpiresActive on
+	ExpiresDefault                                      "access plus 1 month"
+
+	ExpiresByType text/css                              "access plus 1 year"
+
+	ExpiresByType application/json                      "access plus 0 seconds"
+	ExpiresByType application/ld+json                   "access plus 0 seconds"
+	ExpiresByType application/schema+json               "access plus 0 seconds"
+	ExpiresByType application/vnd.geo+json              "access plus 0 seconds"
+	ExpiresByType application/xml                       "access plus 0 seconds"
+	ExpiresByType text/xml                              "access plus 0 seconds"
+
+	ExpiresByType image/vnd.microsoft.icon              "access plus 1 week"
+	ExpiresByType image/x-icon                          "access plus 1 week"
+
+	ExpiresByType text/x-component                      "access plus 1 month"
+
+	ExpiresByType text/html                             "access plus 0 seconds"
+
+	ExpiresByType application/javascript                "access plus 1 year"
+	ExpiresByType application/x-javascript              "access plus 1 year"
+	ExpiresByType text/javascript                       "access plus 1 year"
+
+	ExpiresByType application/manifest+json             "access plus 1 week"
+	ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
+	ExpiresByType text/cache-manifest                   "access plus 0 seconds"
+
+	ExpiresByType audio/ogg                             "access plus 1 month"
+	ExpiresByType image/bmp                             "access plus 1 month"
+	ExpiresByType image/gif                             "access plus 1 month"
+	ExpiresByType image/jpeg                            "access plus 1 month"
+	ExpiresByType image/png                             "access plus 1 month"
+	ExpiresByType image/svg+xml                         "access plus 1 month"
+	ExpiresByType image/webp                            "access plus 1 month"
+	ExpiresByType video/mp4                             "access plus 1 month"
+	ExpiresByType video/ogg                             "access plus 1 month"
+	ExpiresByType video/webm                            "access plus 1 month"
+
+	ExpiresByType application/atom+xml                  "access plus 1 hour"
+	ExpiresByType application/rdf+xml                   "access plus 1 hour"
+	ExpiresByType application/rss+xml                   "access plus 1 hour"
+
+	ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
+	ExpiresByType font/eot                              "access plus 1 month"
+	ExpiresByType font/opentype                         "access plus 1 month"
+	ExpiresByType application/x-font-ttf                "access plus 1 month"
+	ExpiresByType application/font-woff                 "access plus 1 month"
+	ExpiresByType application/x-font-woff               "access plus 1 month"
+	ExpiresByType font/woff                             "access plus 1 month"
+	ExpiresByType application/font-woff2                "access plus 1 month"
+
+	ExpiresByType text/x-cross-domain-policy            "access plus 1 week"
+
+</IfModule>
+
+### End: Browser caching of resource files ###
+
+
+### Begin: MIME types ###
+
+# Proper MIME types for all files
+<IfModule mod_mime.c>
+
+	# Data interchange
+	AddType application/atom+xml                        atom
+	AddType application/json                            json map topojson
+	AddType application/ld+json                         jsonld
+	AddType application/rss+xml                         rss
+	AddType application/vnd.geo+json                    geojson
+	AddType application/xml                             rdf xml
+
+	# JavaScript
+	AddType application/javascript                      js
+
+	# Manifest files
+	AddType application/manifest+json                   webmanifest
+	AddType application/x-web-app-manifest+json         webapp
+	AddType text/cache-manifest                         appcache
+
+	# Media files
+
+	AddType audio/mp4                                   f4a f4b m4a
+	AddType audio/ogg                                   oga ogg opus
+	AddType image/bmp                                   bmp
+	AddType image/svg+xml                               svg svgz
+	AddType image/webp                                  webp
+	AddType video/mp4                                   f4v f4p m4v mp4
+	AddType video/ogg                                   ogv
+	AddType video/webm                                  webm
+	AddType video/x-flv                                 flv
+	AddType image/x-icon                                cur ico
+
+	# Web fonts
+	AddType application/font-woff                       woff
+	AddType application/font-woff2                      woff2
+	AddType application/vnd.ms-fontobject               eot
+	AddType application/x-font-ttf                      ttc ttf
+	AddType font/opentype                               otf
+
+	# Other
+	AddType application/octet-stream                    safariextz
+	AddType application/x-bb-appworld                   bbaw
+	AddType application/x-chrome-extension              crx
+	AddType application/x-opera-extension               oex
+	AddType application/x-xpinstall                     xpi
+	AddType text/vcard                                  vcard vcf
+	AddType text/vnd.rim.location.xloc                  xloc
+	AddType text/vtt                                    vtt
+	AddType text/x-component                            htc
+
+</IfModule>
+
+# UTF-8 encoding
+AddDefaultCharset utf-8
+<IfModule mod_mime.c>
+	AddCharset utf-8 .atom .css .js .json .manifest .rdf .rss .vtt .webapp .webmanifest .xml
+</IfModule>
+
+### End: MIME types ###
+
+
+
+### Begin: Cross Origin ###
+
+# Send the CORS header for images when browsers request it.
+<IfModule mod_setenvif.c>
+	<IfModule mod_headers.c>
+		<FilesMatch "\.(bmp|cur|gif|ico|jpe?g|png|svgz?|webp)$">
+			SetEnvIf Origin ":" IS_CORS
+			Header set Access-Control-Allow-Origin "*" env=IS_CORS
+		</FilesMatch>
+	</IfModule>
+</IfModule>
+
+# Allow cross-origin access to web fonts.
+<IfModule mod_headers.c>
+	<FilesMatch "\.(eot|otf|tt[cf]|woff2?)$">
+		Header set Access-Control-Allow-Origin "*"
+	</FilesMatch>
+</IfModule>
+
+### End: Cross Origin ###
+
+
+
+### Begin: Rewriting and Access ###
+
+# You need rewriting, if you use a URL-Rewriting extension (RealURL, CoolUri).
+
+<IfModule mod_rewrite.c>
+
+	# Enable URL rewriting
+	RewriteEngine On
+
+	# Store the current location in an environment variable CWD to use
+	# mod_rewrite in .htaccess files without knowing the RewriteBase
+	RewriteCond $0#%{REQUEST_URI} ([^#]*)#(.*)\1$
+	RewriteRule ^.*$ - [E=CWD:%2]
+
+	# Rules to set ApplicationContext based on hostname
+	#RewriteCond %{HTTP_HOST} ^dev\.example\.com$
+	#RewriteRule .? - [E=TYPO3_CONTEXT:Development]
+	#RewriteCond %{HTTP_HOST} ^staging\.example\.com$
+	#RewriteRule .? - [E=TYPO3_CONTEXT:Production/Staging]
+	#RewriteCond %{HTTP_HOST} ^www\.example\.com$
+	#RewriteRule .? - [E=TYPO3_CONTEXT:Production]
+
+	# Rule for versioned static files, configured through:
+	# - $GLOBALS['TYPO3_CONF_VARS']['BE']['versionNumberInFilename']
+	# - $GLOBALS['TYPO3_CONF_VARS']['FE']['versionNumberInFilename']
+	# IMPORTANT: This rule has to be the very first RewriteCond in order to work!
+	RewriteCond %{REQUEST_FILENAME} !-f
+	RewriteCond %{REQUEST_FILENAME} !-d
+	RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ %{ENV:CWD}$1.$3 [L]
+
+	# Access block for folders
+	RewriteRule _(?:recycler|temp)_/ - [F]
+	RewriteRule fileadmin/templates/.*\.(?:txt|ts)$ - [F]
+	RewriteRule ^(?:vendor|typo3_src|typo3temp/var) - [F]
+	RewriteRule (?:typo3conf/ext|typo3/sysext|typo3/ext)/[^/]+/(?:Configuration|Resources/Private|Tests?|Documentation|docs?)/ - [F]
+
+	# Block access to all hidden files and directories with the exception of
+	# the visible content from within the `/.well-known/` hidden directory (RFC 5785).
+	RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC]
+	RewriteCond %{SCRIPT_FILENAME} -d [OR]
+	RewriteCond %{SCRIPT_FILENAME} -f
+	RewriteRule (?:^|/)\. - [F]
+
+	# Stop rewrite processing, if we are in the typo3/ directory or any other known directory
+	# NOTE: Add your additional local storages here
+	RewriteRule ^(?:typo3/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L]
+
+	# If the file/symlink/directory does not exist => Redirect to index.php.
+	# For httpd.conf, you need to prefix each '%{REQUEST_FILENAME}' with '%{DOCUMENT_ROOT}'.
+	RewriteCond %{REQUEST_FILENAME} !-f
+	RewriteCond %{REQUEST_FILENAME} !-d
+	RewriteCond %{REQUEST_FILENAME} !-l
+	RewriteRule ^.*$ %{ENV:CWD}index.php [QSA,L]
+
+</IfModule>
+
+# Access block for files
+# Apache < 2.3
+<IfModule !mod_authz_core.c>
+	<FilesMatch "(?i:^\.|^#.*#|^(?:ChangeLog|ToDo|Readme|License)(?:\.md|\.txt)?|^composer\.(?:json|lock)|^ext_conf_template\.txt|^ext_typoscript_constants\.txt|^ext_typoscript_setup\.txt|flexform[^.]*\.xml|locallang[^.]*\.(?:xml|xlf)|\.(?:bak|co?nf|cfg|ya?ml|ts|typoscript|tsconfig|dist|fla|in[ci]|log|sh|sql(?:\..*)?|sqlite(?:\..*)?|sw[op]|git.*|rc)|.*~)$">
+		Order allow,deny
+		Deny from all
+		Satisfy All
+	</FilesMatch>
+</IfModule>
+# Apache ≥ 2.3
+<IfModule mod_authz_core.c>
+	<If "%{REQUEST_URI} =~ m#(?i:/\.|/\x23.*\x23|/(?:ChangeLog|ToDo|Readme|License)(?:\.md|\.txt)?|/composer\.(?:json|lock)|/ext_conf_template\.txt|/ext_typoscript_constants\.txt|/ext_typoscript_setup\.txt|flexform[^.]*\.xml|locallang[^.]*\.(?:xml|xlf)|\.(?:bak|co?nf|cfg|ya?ml|ts|typoscript|tsconfig|dist|fla|in[ci]|log|sh|sql(?:\..*)?|sqlite(?:\..*)?|sw[op]|git.*|rc)|.*~)$#">
+		Require all denied
+	</If>
+</IfModule>
+
+# Block access to vcs directories
+<IfModule mod_alias.c>
+	RedirectMatch 404 /\.(?:git|svn|hg)/
+</IfModule>
+
+### End: Rewriting and Access ###
+
+
+
+### Begin: Miscellaneous ###
+
+# 404 error prevention for non-existing redirected folders
+Options -MultiViews
+
+# Make sure that directory listings are disabled.
+<IfModule mod_autoindex.c>
+	Options -Indexes
+</IfModule>
+
+<IfModule mod_headers.c>
+	# Force IE to render pages in the highest available mode
+	Header set X-UA-Compatible "IE=edge"
+	<FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svgz?|ttf|vcf|webapp|webm|webp|woff2?|xml|xpi)$">
+		Header unset X-UA-Compatible
+	</FilesMatch>
+
+	# Reducing MIME type security risks
+	Header set X-Content-Type-Options "nosniff"
+</IfModule>
+
+# ETag removal
+<IfModule mod_headers.c>
+	Header unset ETag
+</IfModule>
+FileETag None
+
+### End: Miscellaneous ###
+
+
+# Add your own rules here.

+ 19 - 0
docker/typo3_new/conf/AdditionalConfiguration.php

@@ -0,0 +1,19 @@
+<?php
+
+if (\TYPO3\CMS\Core\Core\Environment::getContext()->isDevelopment()) {
+    $GLOBALS['TYPO3_CONF_VARS']['BE']['debug'] = '1';
+    $GLOBALS['TYPO3_CONF_VARS']['FE']['debug'] = '1';
+    $GLOBALS['TYPO3_CONF_VARS']['SYS']['enable_DLOG'] = '1';
+    $GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask'] = '*';
+    $GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = '1';
+    $GLOBALS['TYPO3_CONF_VARS']['SYS']['enableDeprecationLog'] = '';
+    $GLOBALS['TYPO3_CONF_VARS']['SYS']['sqlDebug'] = '1';
+    $GLOBALS['TYPO3_CONF_VARS']['SYS']['systemLogLevel'] = '0';
+    $GLOBALS['TYPO3_CONF_VARS']['SYS']['exceptionalErrors'] = '28674';
+}
+
+$GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['EXT:flux/Resources/Private/Language/locallang.xlf'][0] = 'typo3conf/LFEditor/OverrideFiles/flux/Resources/Private/Language/locallang.xml';
+$GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf'][0] = 'typo3conf/LFEditor/OverrideFiles/core/Resources/Private/Language/locallang_mod_web_list.xml';
+$GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['EXT:tstemplate/Resources/Private/Language/locallang_info.xlf'][0] = 'typo3conf/LFEditor/OverrideFiles/tstemplate/Resources/Private/Language/locallang_info.xml';
+$GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['EXT:frontend/Resources/Private/Language/locallang_tca.xlf'][0] = 'typo3conf/LFEditor/OverrideFiles/frontend/Resources/Private/Language/locallang_tca.xml';
+$GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['EXT:core/Resources/Private/Language/locallang_core.xlf'][0] = 'typo3conf/LFEditor/OverrideFiles/core/Resources/Private/Language/locallang_core.xml';

+ 192 - 0
docker/typo3_new/conf/LocalConfiguration.php

@@ -0,0 +1,192 @@
+<?php
+return [
+    'BE' => [
+        'compressionLevel' => '5',
+        'debug' => true,
+        'enabledBeUserIPLock' => false,
+        'installToolPassword' => '$argon2i$v=19$m=65536,t=16,p=1$Z2NIbFRRVlVYZHhoaEUuMg$88qbJUyQLt7mgO0AhyVZIEzLWlX72oJ9oHuvzQHhYBM',
+        'interfaces' => 'backend',
+        'lockIP' => '0',
+        'loginSecurityLevel' => 'normal',
+        'passwordHashing' => [
+            'className' => 'TYPO3\\CMS\\Core\\Crypto\\PasswordHashing\\Argon2iPasswordHash',
+            'options' => [],
+        ],
+        'sessionTimeout' => '65000',
+        'showRefreshLoginPopup' => true,
+        'versionNumberInFilename' => '0',
+    ],
+    'DB' => [
+        'Connections' => [
+            'Default' => [
+                'charset' => 'utf8',
+                'dbname' => 'typo3',
+                'driver' => 'mysqli',
+                'host' => 'db',
+                'initCommands' => '',
+                'password' => 'mysql660',
+                'user' => 'root',
+            ],
+        ],
+        'extTablesDefinitionScript' => 'extTables.php',
+    ],
+    'EXT' => [
+        'extConf' => [
+            'backend' => 'a:6:{s:9:"loginLogo";s:0:"";s:19:"loginHighlightColor";s:0:"";s:20:"loginBackgroundImage";s:0:"";s:13:"loginFootnote";s:0:"";s:11:"backendLogo";s:0:"";s:14:"backendFavicon";s:0:"";}',
+            'extensionmanager' => 'a:2:{s:21:"automaticInstallation";s:1:"1";s:11:"offlineMode";s:1:"0";}',
+            'flux' => 'a:7:{s:9:"debugMode";s:1:"0";s:8:"doktypes";s:5:"0,1,4";s:12:"handleErrors";s:1:"0";s:8:"autoload";s:1:"1";s:11:"plugAndPlay";s:1:"0";s:20:"plugAndPlayDirectory";s:6:"design";s:33:"pagesLanguageConfigurationOverlay";s:1:"0";}',
+            'frontend_editing' => 'a:3:{s:11:"seoProvider";s:4:"none";s:29:"contentEditableWrapperTagName";s:3:"div";s:18:"enablePlaceholders";s:1:"0";}',
+            'lfeditor' => 'a:9:{s:13:"viewLanguages";s:0:"";s:15:"defaultLanguage";s:0:"";s:11:"searchRegex";s:60:"/^([a-z0-9_]*locallang[a-z0-9_-]*\\.(php|xml)|[^\\.]*\\.xlf)$/i";s:9:"extIgnore";s:23:"/^(CVS|.svn|.git|csh_)/";s:12:"extWhitelist";s:0:"";s:13:"changeXlfDate";s:1:"1";s:17:"editModeExtension";s:1:"1";s:27:"pathAdditionalConfiguration";s:37:"typo3conf/AdditionalConfiguration.php";s:16:"beMainModuleName";s:4:"user";}',
+            'news' => 'a:18:{s:13:"prependAtCopy";s:1:"1";s:6:"tagPid";s:1:"1";s:12:"rteForTeaser";s:1:"0";s:22:"contentElementRelation";s:1:"1";s:21:"contentElementPreview";s:1:"1";s:13:"manualSorting";s:1:"0";s:19:"categoryRestriction";s:0:"";s:34:"categoryBeGroupTceFormsRestriction";s:1:"0";s:19:"dateTimeNotRequired";s:1:"0";s:11:"archiveDate";s:4:"date";s:12:"mediaPreview";s:5:"false";s:20:"advancedMediaPreview";s:4:"true";s:13:"slugBehaviour";s:6:"unique";s:24:"showAdministrationModule";s:1:"1";s:35:"hidePageTreeForAdministrationModule";s:1:"0";s:12:"showImporter";s:1:"0";s:18:"storageUidImporter";s:1:"1";s:22:"resourceFolderImporter";s:12:"/news_import";}',
+            'scheduler' => 'a:2:{s:11:"maxLifetime";s:4:"1440";s:15:"showSampleTasks";s:1:"1";}',
+            'vhs' => 'a:1:{s:20:"disableAssetHandling";s:1:"0";}',
+        ],
+    ],
+    'EXTCONF' => [
+        'lang' => [
+            'availableLanguages' => [
+                'fr',
+            ],
+        ],
+    ],
+    'EXTENSIONS' => [
+        'backend' => [
+            'backendFavicon' => '',
+            'backendLogo' => '',
+            'loginBackgroundImage' => '',
+            'loginFootnote' => '',
+            'loginHighlightColor' => '',
+            'loginLogo' => '',
+        ],
+        'extensionmanager' => [
+            'automaticInstallation' => '1',
+            'offlineMode' => '0',
+        ],
+        'flux' => [
+            'autoload' => '1',
+            'debugMode' => '0',
+            'doktypes' => '0,1,4',
+            'handleErrors' => '0',
+            'pagesLanguageConfigurationOverlay' => '0',
+            'plugAndPlay' => '0',
+            'plugAndPlayDirectory' => 'design',
+        ],
+        'frontend_editing' => [
+            'contentEditableWrapperTagName' => 'div',
+            'enablePlaceholders' => '0',
+            'seoProvider' => 'none',
+        ],
+        'lfeditor' => [
+            'beMainModuleName' => 'user',
+            'changeXlfDate' => '1',
+            'defaultLanguage' => '',
+            'editModeExtension' => '1',
+            'extIgnore' => '/^(CVS|.svn|.git|csh_)/',
+            'extWhitelist' => '',
+            'pathAdditionalConfiguration' => 'typo3conf/AdditionalConfiguration.php',
+            'searchRegex' => '/^([a-z0-9_]*locallang[a-z0-9_-]*\\.(php|xml)|[^\\.]*\\.xlf)$/i',
+            'viewLanguages' => '',
+        ],
+        'news' => [
+            'advancedMediaPreview' => 'true',
+            'archiveDate' => 'date',
+            'categoryBeGroupTceFormsRestriction' => '0',
+            'categoryRestriction' => '',
+            'contentElementPreview' => '1',
+            'contentElementRelation' => '1',
+            'dateTimeNotRequired' => '0',
+            'hidePageTreeForAdministrationModule' => '0',
+            'manualSorting' => '0',
+            'mediaPreview' => 'false',
+            'prependAtCopy' => '1',
+            'resourceFolderImporter' => '/news_import',
+            'rteForTeaser' => '0',
+            'showAdministrationModule' => '1',
+            'showImporter' => '0',
+            'slugBehaviour' => 'unique',
+            'storageUidImporter' => '1',
+            'tagPid' => '1',
+        ],
+        'scheduler' => [
+            'maxLifetime' => '1440',
+            'showSampleTasks' => '1',
+        ],
+        'vhs' => [
+            'disableAssetHandling' => '0',
+        ],
+    ],
+    'FE' => [
+        'compressionLevel' => 5,
+        'debug' => true,
+        'disableNoCacheParameter' => '0',
+        'pageNotFoundOnCHashError' => '0',
+        'passwordHashing' => [
+            'className' => 'TYPO3\\CMS\\Core\\Crypto\\PasswordHashing\\Argon2iPasswordHash',
+            'options' => [],
+        ],
+    ],
+    'GFX' => [
+        'jpg_quality' => '96',
+        'processor' => 'GraphicsMagick',
+        'processor_allowTemporaryMasksAsPng' => false,
+        'processor_colorspace' => 'RGB',
+        'processor_effects' => false,
+        'processor_enabled' => true,
+        'processor_path' => '/usr/bin/',
+        'processor_path_lzw' => '/usr/bin/',
+    ],
+    'HTTP' => [],
+    'INSTALL' => [],
+    'LOG' => [
+        'TYPO3' => [
+            'CMS' => [
+                'deprecations' => [
+                    'writerConfiguration' => [
+                        5 => [
+                            'TYPO3\CMS\Core\Log\Writer\FileWriter' => [
+                                'disabled' => false,
+                            ],
+                        ],
+                    ],
+                ],
+            ],
+        ],
+    ],
+    'MAIL' => [
+        'defaultMailFromAddress' => 'ne_pas_repondre@opentalent.fr',
+        'transport' => 'sendmail',
+        'transport_sendmail_command' => ' -t -i ',
+        'transport_smtp_encrypt' => '',
+        'transport_smtp_password' => '',
+        'transport_smtp_server' => '',
+        'transport_smtp_username' => '',
+    ],
+    'SYS' => [
+        'UTF8filesystem' => '1',
+        'belogErrorReporting' => 30711,
+        'caching' => [
+            'cacheConfigurations' => [
+                'extbase_object' => [
+                    'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\ApcBackend',
+                    'frontend' => 'TYPO3\\CMS\\Core\\Cache\\Frontend\\VariableFrontend',
+                    'groups' => [
+                        'system',
+                    ],
+                    'options' => [
+                        'defaultLifetime' => 0,
+                    ],
+                ],
+            ],
+        ],
+        'cookieDomain' => 'opentalent.fr',
+        'devIPmask' => '*',
+        'displayErrors' => 1,
+        'encryptionKey' => 'ed7ad07c97e4703bd18aaad78071be42',
+        'exceptionalErrors' => 12290,
+        'fileCreateMask' => '2660',
+        'folderCreateMask' => '2770',
+        'sitename' => 'Opentalent',
+        'systemLocale' => 'fr_FR.UTF-8',
+        'systemLogLevel' => 0,
+    ],
+];

+ 2 - 0
docker/typo3_new/conf/apc.ini

@@ -0,0 +1,2 @@
+extension=apcu.so
+apc.enable_cli=1

+ 7 - 0
docker/typo3_new/conf/extensions.ini

@@ -0,0 +1,7 @@
+extension=apcu.so
+extension=apc.so
+extension=gd2
+extension=mbstring
+extension=exif
+extension=mysqli
+extension=pdo_odbc

+ 3 - 0
docker/typo3_new/conf/memory.ini

@@ -0,0 +1,3 @@
+memory_limit=4096M
+max_input_vars=1500
+max_execution_time=240

+ 13 - 0
docker/typo3_new/conf/typo3.conf

@@ -0,0 +1,13 @@
+<VirtualHost *:80>
+    ServerName local.sub.opentalent.fr
+	DocumentRoot /var/www/typo3/public
+
+	#ErrorLog ${APACHE_LOG_DIR}/typo3-error.log
+	#CustomLog ${APACHE_LOG_DIR}/typo3-access.log combined
+
+    <Directory /var/www/typo3/public>
+        Options Indexes FollowSymLinks
+        AllowOverride All
+        Require all granted
+   </Directory>
+</VirtualHost>

+ 13 - 0
docker/typo3_new/conf/xdebug.ini

@@ -0,0 +1,13 @@
+[xdebug]
+zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20230831/xdebug.so
+xdebug.mode=debug
+xdebug.idekey=PHPSTORM
+xdebug.client_port = 9000
+xdebug.max_nesting_level=400
+xdebug.discover_client_host=1
+xdebug.start_with_request=trigger
+
+; for mac and windows
+;xdebug.client_host = host.docker.internal
+; for unix (your machine hostname)
+xdebug.client_host = dev

+ 18 - 0
docker/typo3_new/entrypoint.sh

@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Fix db connection infos
+sed -i "s#'host' => '[^\']*'#'host' => 'db'#i" /var/www/typo3/public/typo3conf/LocalConfiguration.php
+sed -i "s#'password' => '[^\']*'#'password' => 'mysql660'#i" /var/www/typo3/public/typo3conf/LocalConfiguration.php
+sed -i "s#'user' => '[^\']*'#'user' => 'root'#i" /var/www/typo3/public/typo3conf/LocalConfiguration.php
+
+# Fix files perms
+chown -R 1000:www-data /var/www/typo3
+chown -R 1000:www-data /var/opentalent/git/ot_typo3
+chmod -R 771 /var/www/typo3
+
+# Enable install tool
+touch /var/www/typo3/public/typo3conf/ENABLE_INSTALL_TOOL
+
+
+# Continue with apache job (without it, docker exits here)
+apache2-foreground