added adminer

This commit is contained in:
Pedro Cabral
2026-04-20 17:22:28 +02:00
parent fa390e76cd
commit 74e27974e2
4 changed files with 167 additions and 0 deletions

View File

@@ -0,0 +1,138 @@
#ddev-generated
services:
adminer:
container_name: ddev-${DDEV_SITENAME}-adminer
image: ${ADMINER_DOCKER_IMAGE:-adminer:standalone}-${DDEV_SITENAME}-built
build:
dockerfile_inline: |
ARG ADMINER_DOCKER_IMAGE="scratch"
FROM $$ADMINER_DOCKER_IMAGE
# Switch the adminer user.
USER root
# Accept build arguments for user creation
ARG username
ARG uid
ARG gid
# Free up the uid and gid if they're currently used, but ensure the original adminer group still exists
RUN existing_user=$(getent passwd "$$uid" | cut -d: -f1); \
existing_group=$(getent group "$$gid" | cut -d: -f1); \
existing_adminer_gid=$(getent group adminer | cut -d: -f3); \
if [[ -n "$$existing_group" ]]; then echo "Deleting existing group: $$existing_group ($$gid)"; delgroup "$$existing_group"; fi; \
if [[ -n "$$existing_user" ]]; then echo "Deleting existing user: $$existing_user ($$uid)"; deluser "$$existing_user"; fi; \
addgroup -g "$$existing_adminer_gid" adminer || addgroup adminer || true
# Ensure tty group exists
RUN getent group tty || addgroup tty
# Create group and user, trying multiple methods for compatibility
RUN (addgroup -g "$$gid" "$$username" || addgroup "$$username" || true) && \
(adduser -G tty -s "/bin/sh" -D -u "$$uid" "$$username" || \
adduser -G tty -s "/bin/sh" -D "$$username" || \
adduser -G tty -s "/bin/sh" "$$username") && \
addgroup "$$username" adminer
# Ensure the plugins-enabled directory is writable by the group.
RUN chmod 775 /var/www/html/plugins-enabled
# Switch to the created user
USER "$$username"
args:
ADMINER_DOCKER_IMAGE: ${ADMINER_DOCKER_IMAGE:-adminer:standalone}
username: ${DDEV_USER}
uid: ${DDEV_UID}
gid: ${DDEV_GID}
environment:
- ADMINER_DEFAULT_DRIVER=${ADMINER_DEFAULT_DRIVER:-${DDEV_DATABASE_FAMILY:-server}}
- ADMINER_DEFAULT_SERVER=${ADMINER_DEFAULT_SERVER:-db}
- ADMINER_DEFAULT_DB=${ADMINER_DEFAULT_DB:-db}
- ADMINER_DEFAULT_USERNAME=${ADMINER_DEFAULT_USERNAME:-db}
- ADMINER_DEFAULT_PASSWORD=${ADMINER_DEFAULT_PASSWORD:-db}
- ADMINER_PLUGINS=${ADMINER_PLUGINS:-ddev-passwordless-login tables-filter}
- ADMINER_DESIGN=${ADMINER_DESIGN:-}
- VIRTUAL_HOST=$DDEV_HOSTNAME
- HTTP_EXPOSE=9100:8080
- HTTPS_EXPOSE=9101:8080
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
volumes:
- ".:/mnt/ddev_config"
- "../:/mnt/ddev_app"
- "ddev-global-cache:/mnt/ddev-global-cache"
depends_on:
- db
command: ["php", "-S", "[::]:8080", "-t", "/var/www/html", "ddev-adminer.php"]
configs:
- source: ddev-adminer.php
target: /var/www/html/ddev-adminer.php
mode: "0444"
- source: ddev-passwordless-login.php
target: /var/www/html/plugins/ddev-passwordless-login.php
mode: "0444"
- source: entrypoint.sh
target: /usr/local/bin/entrypoint.sh
mode: "0755"
configs:
ddev-adminer.php:
content: |
<?php
// Let static files be served directly
$$uri = parse_url($$_SERVER['REQUEST_URI'], PHP_URL_PATH);
if (is_file('/var/www/html' . $$uri)) {
return false;
}
if (!count($$_GET)) {
if ($$_ENV['ADMINER_DEFAULT_DRIVER'] === 'mysql') {
$$_ENV['ADMINER_DEFAULT_DRIVER'] = 'server';
} else if ($$_ENV['ADMINER_DEFAULT_DRIVER'] === 'postgres') {
$$_ENV['ADMINER_DEFAULT_DRIVER'] = 'pgsql';
}
$$_POST['auth'] = [
'driver' => $$_ENV['ADMINER_DEFAULT_DRIVER'],
'server' => $$_ENV['ADMINER_DEFAULT_SERVER'],
'db' => $$_ENV['ADMINER_DEFAULT_DB'],
'username' => $$_ENV['ADMINER_DEFAULT_USERNAME'],
'password' => $$_ENV['ADMINER_DEFAULT_PASSWORD'],
];
}
include './index.php';
?>
ddev-passwordless-login.php:
content: |
<?php
/**
* Adminer plugin for enabling passwordless login in DDEV.
* By default, only the SQLite driver is supported.
*/
class DDEVPasswordlessLogin extends Adminer\Plugin {
function login($$login, $$password) {
if (Adminer\JUSH === 'sqlite' && empty($$password)) {
return true;
}
}
}
entrypoint.sh:
content: |
#!/bin/sh
set -e
if [ -n "$$ADMINER_DESIGN" ]; then
# Only create link on initial start, to ensure that explicit changes to
# adminer.css after the container was started once are preserved.
if [ ! -e .adminer-init ]; then
for css_file in adminer.css adminer-dark.css; do
if [ -f "designs/$$ADMINER_DESIGN/$$css_file" ]; then
ln -sf "designs/$$ADMINER_DESIGN/$$css_file" adminer.css
break
fi
done
fi
fi
number=1
for PLUGIN in $$ADMINER_PLUGINS; do
php plugin-loader.php "$$PLUGIN" > plugins-enabled/$$(printf "%03d" $$number)-$$PLUGIN.php
number=$$(($$number+1))
done
touch .adminer-init || true
exec "$$@"