contau, maria und adminer up and running

This commit is contained in:
Robert Wartenberg committed 2026-08-14 12:17:57 +02:00
1 parent b234dc47bd
commit 2ec65936c9
9 files changed
+219 -6

No files matched your search

+8 -1
View File
@@ -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/
+8 -2
View File
@@ -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: <http://localhost:8080>
- Contao-Installation: <http://localhost:8080/contao/install>
- Contao-Login: <http://localhost:8080/contao/login>
- Datenbankinspektor: <http://localhost:8081> (Server `db`, Benutzer `perspektivwerk`, Passwort `perspektivwerk`, Datenbank `perspektivwerk`)
Für die Frontend-Logik:
+33
View File
@@ -0,0 +1,33 @@
#!/usr/bin/env php
<?php
declare(strict_types=1);
/*
* This file is part of Contao.
*
* (c) Leo Feyer
*
* @license LGPL-3.0-or-later
*/
use Contao\ManagerBundle\Console\ContaoApplication;
use Contao\ManagerBundle\HttpKernel\ContaoKernel;
use Symfony\Component\Console\Input\ArgvInput;
set_time_limit(0);
@ini_set('zlib.output_compression', '0');
@ini_set('display_errors', '0');
// System maintenance mode comes first as it has to work even if the vendor directory does not exist
if ('contao:cron' === ($_SERVER['argv'][1] ?? null) && file_exists(__DIR__.'/../var/maintenance.html')) {
exit;
}
require __DIR__.'/../vendor/autoload.php';
$input = new ArgvInput();
$kernel = ContaoKernel::fromInput(\dirname(__DIR__), $input);
$application = new ContaoApplication($kernel);
$application->run($input);
+2
View File
@@ -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"
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
+60
View File
@@ -0,0 +1,60 @@
<IfModule mod_rewrite.c>
RewriteEngine On
<IfModule mod_headers.c>
# 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
</IfModule>
# 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]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
# 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
</IfModule>
</IfModule>
+47
View File
@@ -0,0 +1,47 @@
<?php
declare(strict_types=1);
/*
* This file is part of Contao.
*
* (c) Leo Feyer
*
* @license LGPL-3.0-or-later
*/
use Contao\ManagerBundle\HttpKernel\ContaoKernel;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\TerminableInterface;
// Suppress error messages (see #1422)
@ini_set('display_errors', '0');
// Disable the phar stream wrapper for security reasons (see #105)
if (in_array('phar', stream_get_wrappers(), true)) {
stream_wrapper_unregister('phar');
}
// System maintenance mode comes first as it has to work even if the vendor directory does not exist
if (file_exists(__DIR__.'/../var/maintenance.html')) {
$contents = file_get_contents(__DIR__.'/../var/maintenance.html');
http_response_code(503);
header('Content-Type: text/html; charset=UTF-8');
header('Content-Length: '.strlen((string) $contents));
header('Cache-Control: no-store');
die($contents);
}
$loader = require __DIR__.'/../vendor/autoload.php';
$request = Request::createFromGlobals();
$kernel = ContaoKernel::fromRequest(dirname(__DIR__), $request);
$response = $kernel->handle($request);
$response->send();
if ($kernel instanceof TerminableInterface) {
$kernel->terminate($request, $response);
}
+58
View File
@@ -0,0 +1,58 @@
<?php
declare(strict_types=1);
/*
* This file is part of Contao.
*
* (c) Leo Feyer
*
* @license LGPL-3.0-or-later
*/
use Contao\ManagerBundle\HttpKernel\ContaoKernel;
use FOS\HttpCache\TagHeaderFormatter\TagHeaderFormatter;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\TerminableInterface;
// Suppress error messages (see #1422)
@ini_set('display_errors', '0');
// Disable the phar stream wrapper for security reasons (see #105)
if (in_array('phar', stream_get_wrappers(), true)) {
stream_wrapper_unregister('phar');
}
// System maintenance mode comes first as it has to work even if the vendor directory does not exist
if (file_exists(__DIR__.'/../var/maintenance.html')) {
$contents = file_get_contents(__DIR__.'/../var/maintenance.html');
http_response_code(503);
header('Content-Type: text/html; charset=UTF-8');
header('Content-Length: '.strlen((string) $contents));
header('Cache-Control: no-store');
die($contents);
}
$loader = require __DIR__.'/../vendor/autoload.php';
$request = Request::createFromGlobals();
$request->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);
}