diff --git a/development-system/.gitignore b/development-system/.gitignore index fc93c84..400a09a 100644 --- a/development-system/.gitignore +++ b/development-system/.gitignore @@ -1,6 +1,13 @@ /vendor/ /var/ -/public/assets/js/ +/public/assets +/public/bundles +/public/share +/public/system +/public/vendor +/system +/bin/console /node_modules/ /.env +/.env.local /.idea/ diff --git a/development-system/README.md b/development-system/README.md index 76be6a8..9f9afb7 100644 --- a/development-system/README.md +++ b/development-system/README.md @@ -10,10 +10,16 @@ Voraussetzungen: Docker Desktop (Compose v2) und optional Node.js 20+ für die T docker compose up --build ``` -Danach: +Beim ersten Start eines frischen Clones erzeugt Contao die benötigten Laufzeitverzeichnisse und Asset-Symlinks. Danach einmalig ausführen: + +```powershell +docker compose exec app vendor/bin/contao-setup --no-interaction --env=dev +docker compose exec app chown -R www-data:www-data var public +docker compose exec app vendor/bin/contao-console contao:migrate --no-interaction +``` - Website/CMS: -- Contao-Installation: +- Contao-Login: - Datenbankinspektor: (Server `db`, Benutzer `perspektivwerk`, Passwort `perspektivwerk`, Datenbank `perspektivwerk`) Für die Frontend-Logik: diff --git a/development-system/bin/console b/development-system/bin/console new file mode 100644 index 0000000..73cced3 --- /dev/null +++ b/development-system/bin/console @@ -0,0 +1,33 @@ +#!/usr/bin/env php +run($input); diff --git a/development-system/composer.json b/development-system/composer.json index 95db912..10d8db0 100644 --- a/development-system/composer.json +++ b/development-system/composer.json @@ -5,6 +5,8 @@ "require": { "contao/managed-edition": "^5.3" }, + "minimum-stability": "dev", + "prefer-stable": true, "scripts": { "post-install-cmd": [ "Contao\\ManagerPlugin\\Bundle\\Config\\ScriptHandler::initializeApplication" diff --git a/development-system/docker-compose.yml b/development-system/docker-compose.yml index 04b002c..7f53da8 100644 --- a/development-system/docker-compose.yml +++ b/development-system/docker-compose.yml @@ -2,13 +2,13 @@ services: app: build: context: . - dockerfile: docker/php-apache/Dockerfile + dockerfile: php-apache/Dockerfile ports: - "8080:80" environment: APP_ENV: dev CONTAO_ENVIRONMENT: dev - DATABASE_URL: mysql://perspektivwerk:perspektivwerk@db:3306/perspektivwerk?serverVersion=mariadb-10.11 + DATABASE_URL: mysql://perspektivwerk:perspektivwerk@db:3306/perspektivwerk?serverVersion=mariadb-10.11.0 volumes: - ./:/var/www/html - contao_vendor:/var/www/html/vendor diff --git a/development-system/php-apache/Dockerfile b/development-system/php-apache/Dockerfile index 3e8453c..8ff1bb5 100644 --- a/development-system/php-apache/Dockerfile +++ b/development-system/php-apache/Dockerfile @@ -9,7 +9,7 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* COPY --from=composer:2 /usr/bin/composer /usr/bin/composer -COPY docker/php-apache/vhost.conf /etc/apache2/sites-available/000-default.conf +COPY php-apache/vhost.conf /etc/apache2/sites-available/000-default.conf WORKDIR /var/www/html diff --git a/development-system/public/.htaccess b/development-system/public/.htaccess new file mode 100644 index 0000000..17b7b7f --- /dev/null +++ b/development-system/public/.htaccess @@ -0,0 +1,60 @@ + + RewriteEngine On + + + # Assets in /assets and /bundles either contain a hash in their filename + # or are called with a ?version suffix, therefore cache them for 1 year. + RewriteRule ^(assets|bundles)/ - [ENV=CONTAO_ASSETS:true] + Header set Cache-Control "max-age=31536000" env=CONTAO_ASSETS + + # Allow CORS on the Contao TinyMCE skin. + RewriteRule ^assets/tinymce4/js/skins/contao/fonts/ - [ENV=CONTAO_TINYMCE_SKIN:true] + Header set Access-Control-Allow-Origin "*" env=CONTAO_TINYMCE_SKIN + + + # Determine the RewriteBase automatically and set it as environment variable. + # If you are using Apache aliases to do mass virtual hosting or installed the + # project in a subdirectory, the base path will be prepended to allow proper + # resolution of the index.php file and to redirect to the correct URI. It will + # work in environments without path prefix as well, providing a safe, one-size + # fits all solution. But as you do not need it in this case, you can comment + # the following 2 lines to eliminate the overhead. + RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ + RewriteRule ^(.*) - [E=BASE:%1] + + # Sets the HTTP_AUTHORIZATION header removed by Apache + RewriteCond %{HTTP:Authorization} . + RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect to URI without front controller to prevent duplicate content + # (with and without `/index.php`). Only do this redirect on the initial + # rewrite by Apache and not on subsequent cycles. Otherwise, we would get an + # endless redirect loop (request -> rewrite to front controller -> + # redirect -> request -> ...). + # So in case you get a "too many redirects" error or you always get redirected + # to the start page because your Apache does not expose the REDIRECT_STATUS + # environment variable, you have 2 choices: + # - disable this feature by commenting the following 2 lines or + # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the + # following RewriteCond (best solution) + RewriteCond %{ENV:REDIRECT_STATUS} ^$ + RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] + + # If the requested filename exists, simply serve it. + # We only want to let Apache serve files and not directories. + RewriteCond %{REQUEST_FILENAME} -f + RewriteRule ^ - [L] + + # Rewrite all other queries to the front controller. + RewriteRule ^ %{ENV:BASE}/index.php [L] + + + + + # When mod_rewrite is not available, we instruct a temporary redirect of + # the start page to the front controller explicitly so that the website + # and the generated links can still be used. + RedirectMatch 302 ^/$ /index.php/ + # RedirectTemp cannot be used instead + + diff --git a/development-system/public/index.php b/development-system/public/index.php new file mode 100644 index 0000000..91a5f19 --- /dev/null +++ b/development-system/public/index.php @@ -0,0 +1,47 @@ +handle($request); +$response->send(); + +if ($kernel instanceof TerminableInterface) { + $kernel->terminate($request, $response); +} diff --git a/development-system/public/preview.php b/development-system/public/preview.php new file mode 100644 index 0000000..64e9f10 --- /dev/null +++ b/development-system/public/preview.php @@ -0,0 +1,58 @@ +attributes->set('_preview', true); + +$kernel = ContaoKernel::fromRequest(dirname(__DIR__), $request); +$response = $kernel->handle($request); + +// Prevent preview URLs from being indexed +$response->headers->set('X-Robots-Tag', 'noindex'); + +// Force no-cache on all responses in the preview front controller +$response->headers->set('Cache-Control', 'no-store'); + +// Strip all tag headers from the response +$response->headers->remove(TagHeaderFormatter::DEFAULT_HEADER_NAME); +$response->send(); + +if ($kernel instanceof TerminableInterface) { + $kernel->terminate($request, $response); +}