Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .config/env.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,38 @@
* Connect environment variables to WP constants.
*/

defined( 'WP_HOME' ) or define( 'WP_HOME', getenv( 'WP_HOME' ) );
defined( 'WP_SITEURL' ) or define( 'WP_SITEURL', getenv( 'WP_SITEURL' ) );
define( 'CURRENT_PATH', '/wordpress/' );

// Multisite Cookie
define('ADMIN_COOKIE_PATH', '/');
define('COOKIE_DOMAIN', '');
define('COOKIEPATH', '');
define('SITECOOKIEPATH', '');

// Database
defined( 'DB_HOST' ) or define( 'DB_HOST', getenv( 'DB_HOST' ) );
defined( 'DB_USER' ) or define( 'DB_USER', getenv( 'DB_USER' ) );
defined( 'DB_PASSWORD' ) or define( 'DB_PASSWORD', getenv( 'DB_PASSWORD' ) );
defined( 'DB_NAME' ) or define( 'DB_NAME', getenv( 'DB_NAME' ) );

// Elasticsearch
define( 'ELASTICSEARCH_HOST', getenv( 'ELASTICSEARCH_HOST' ) );
define( 'ELASTICSEARCH_PORT', getenv( 'ELASTICSEARCH_PORT' ) );

// AWS
if ( ! defined( 'AWS_XRAY_DAEMON_IP_ADDRESS' ) ) {
define( 'AWS_XRAY_DAEMON_IP_ADDRESS', gethostbyname( getenv( 'AWS_XRAY_DAEMON_HOST' ) ) );
}

// SSL
define('FORCE_SSL_ADMIN', true);
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
$_SERVER['HTTPS']='on';
}

// Redis
define( 'REDIS_HOST', getenv( 'REDIS_HOST' ) );
define( 'REDIS_PORT', getenv( 'REDIS_PORT' ) );
define( 'REDIS_SECURE', false );
Expand Down
22 changes: 22 additions & 0 deletions .ddev/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Database
DB_NAME="db"
DB_USER="db"
DB_PASSWORD="db"
DB_HOST="db"

# WordPress
WP_ENVIRONMENT_TYPE="local"
WP_HOME="https://server.ddev.site"
WP_SITEURL="${WP_HOME}/wordpress"

# Redis
REDIS_HOST="redis"
REDIS_PORT="6379"
WP_REDIS_HOST="redis"
WP_REDIS_PORT="6379"

# Debug
WP_DEBUG="true"
WP_DEBUG_DISPLAY="true"
WP_DEBUG_LOG="true"
SCRIPT_DEBUG="true"
10 changes: 10 additions & 0 deletions .ddev/addon-metadata/phpmyadmin/manifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: phpmyadmin
repository: ddev/ddev-phpmyadmin
version: v1.0.0
install_date: "2025-07-14T02:04:15+02:00"
project_files:
- docker-compose.phpmyadmin.yaml
- docker-compose.phpmyadmin_norouter.yaml
- commands/host/phpmyadmin
global_files: []
removal_actions: []
26 changes: 26 additions & 0 deletions .ddev/addon-metadata/redis/manifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: redis
repository: ddev/ddev-redis
version: v2.1.1
install_date: "2025-07-13T11:56:03+02:00"
project_files:
- docker-compose.redis.yaml
- redis/scripts/settings.ddev.redis.php
- redis/scripts/setup-drupal-settings.sh
- redis/scripts/setup-redis-optimized-config.sh
- redis/redis.conf
- redis/advanced.conf
- redis/append.conf
- redis/general.conf
- redis/io.conf
- redis/memory.conf
- redis/network.conf
- redis/security.conf
- redis/snapshots.conf
- commands/host/redis-backend
- commands/redis/redis-cli
- commands/redis/redis-flush
global_files: []
removal_actions:
- |
#ddev-description:Remove redis settings for Drupal 9+ if applicable
rm -f "${DDEV_APPROOT}/${DDEV_DOCROOT}/sites/default/settings.ddev.redis.php"
19 changes: 19 additions & 0 deletions .ddev/commands/host/phpmyadmin
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash

## #ddev-generated: If you want to edit and own this file, remove this line.
## Description: Launch a browser with PhpMyAdmin
## Usage: phpmyadmin
## Example: "ddev phpmyadmin"

DDEV_PHPMYADMIN_PORT=8036
DDEV_PHPMYADMIN_HTTPS_PORT=8037
if [ ${DDEV_PRIMARY_URL%://*} = "http" ] || [ -n "${GITPOD_WORKSPACE_ID:-}" ] || [ "${CODESPACES:-}" = "true" ]; then
# Gitpod: "gp preview" opens a blank page for PhpMyAdmin, use "xdg-open" instead
if [ "${OSTYPE:-}" = "linux-gnu" ] && [ -n "${GITPOD_WORKSPACE_ID:-}" ] && [ -z "${DDEV_DEBUG:-}" ]; then
xdg-open "$(DDEV_DEBUG=true ddev launch :$DDEV_PHPMYADMIN_PORT | grep "FULLURL" | awk '{print $2}')"
else
ddev launch :$DDEV_PHPMYADMIN_PORT
fi
else
ddev launch :$DDEV_PHPMYADMIN_HTTPS_PORT
fi
116 changes: 116 additions & 0 deletions .ddev/commands/host/redis-backend
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
#!/usr/bin/env bash
#ddev-generated

## Description: Use a different key-value store for Redis
## Usage: redis-backend <image> [optimize]
## Example: ddev redis-backend redis-alpine optimize

REDIS_DOCKER_IMAGE=${1:-}
REDIS_CONFIG=${2:-}
NAME=$REDIS_DOCKER_IMAGE

function show_help() {
cat <<EOF
Usage: ddev redis-backend <image|alias> [optimize]

Choose from predefined aliases, or provide any Redis-compatible Docker image.
Note that not every Docker image can work right away, and you may need to override
the "command:" in the docker-compose.redis_extra.yaml file

Available aliases:
redis redis:7
redis-alpine redis:7-alpine
valkey valkey/valkey:8
valkey-alpine valkey/valkey:8-alpine

Custom backend:
You can specify any Docker image, e.g.:
ddev redis-backend redis:6

Optional:
optimize Apply additional Redis configuration with resource limits
optimized Same as optimize

Examples:
ddev redis-backend redis-alpine optimize
ddev redis-backend valkey
ddev redis-backend redis:7.2-alpine
EOF
exit 0
}

function optimize_config() {
[[ "$REDIS_CONFIG" != "optimized" && "$REDIS_CONFIG" != "optimize" ]] && return
ddev dotenv set .ddev/.env.redis --redis-optimized=true
}

function cleanup() {
rm -f "$DDEV_APPROOT/.ddev/.env.redis"
rm -rf "$DDEV_APPROOT/.ddev/redis/"
rm -f "$DDEV_APPROOT/.ddev/docker-compose.redis.yaml" "$DDEV_APPROOT/.ddev/docker-compose.redis_extra.yaml"

redis_volume="ddev-$(ddev status -j | docker run -i --rm ddev/ddev-utilities jq -r '.raw.name')_redis"
if docker volume ls -q | grep -qw "$redis_volume"; then
ddev stop
docker volume rm "$redis_volume"
fi
}

function check_docker_image() {
echo "Pulling ${REDIS_DOCKER_IMAGE}..."
if ! docker pull "$REDIS_DOCKER_IMAGE"; then
echo >&2 "❌ Unable to pull ${REDIS_DOCKER_IMAGE}"
exit 2
fi
}

function use_docker_image() {
[[ "$REDIS_DOCKER_IMAGE" != "redis:7" ]] && ddev dotenv set .ddev/.env.redis --redis-docker-image="$REDIS_DOCKER_IMAGE"
REPO=$(ddev add-on list --installed -j 2>/dev/null | docker run -i --rm ddev/ddev-utilities jq -r '.raw[] | select(.Name=="redis") | .Repository // empty' 2>/dev/null)
ddev add-on get "${REPO:-ddev/ddev-redis}"
}

case "$REDIS_DOCKER_IMAGE" in
redis)
NAME="Redis 7"
REDIS_DOCKER_IMAGE="redis:7"
;;
redis-alpine)
NAME="Redis 7 Alpine"
REDIS_DOCKER_IMAGE="redis:7-alpine"
;;
valkey)
NAME="Valkey 8"
REDIS_DOCKER_IMAGE="valkey/valkey:8"
;;
valkey-alpine)
NAME="Valkey 8 Alpine"
REDIS_DOCKER_IMAGE="valkey/valkey:8-alpine"
;;
""|--help|-h)
show_help
;;
*)
NAME="$REDIS_DOCKER_IMAGE"
# Allow unknown image, nothing to override
;;
esac

check_docker_image
cleanup
optimize_config
use_docker_image

echo
echo "✅ Redis backend: $REDIS_DOCKER_IMAGE"
if [[ "$REDIS_CONFIG" == "optimized" || "$REDIS_CONFIG" == "optimize" ]]; then
echo "⚙️ Redis config: optimized"
else
echo "⚙️ Redis config: default"
fi

echo
echo "📝 Commit the '.ddev' directory to version control"

echo
echo "🔄 Redis config available after 'ddev restart'"
13 changes: 13 additions & 0 deletions .ddev/commands/redis/redis-cli
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/usr/bin/env sh

#ddev-generated
## Description: Run redis-cli inside the Redis container
## Usage: redis-cli [flags] [args]
## Example: "ddev redis-cli KEYS *" or "ddev redis-cli INFO" or "ddev redis-cli --version"
## Aliases: redis

if [ -f /etc/redis/conf/security.conf ]; then
redis-cli -p 6379 -h redis -a redis --no-auth-warning $@
else
redis-cli -p 6379 -h redis $@
fi
12 changes: 12 additions & 0 deletions .ddev/commands/redis/redis-flush
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/usr/bin/env sh

#ddev-generated
## Description: Flush all cache inside the Redis container
## Usage: redis-flush
## Example: "ddev redis-flush"

if [ -f /etc/redis/conf/security.conf ]; then
redis-cli -p 6379 -h redis -a redis --no-auth-warning FLUSHALL ASYNC
else
redis-cli -p 6379 -h redis FLUSHALL ASYNC
fi
19 changes: 19 additions & 0 deletions .ddev/commands/web/setup
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash

## Description: Setup WordPress for first usage
## Usage: setup
## Example: "ddev setup"

if ! wp core is-installed 2>/dev/null; then
# WP is not installed. Let's try installing it.
wp core multisite-install --url=server.ddev.site --title=Server --admin_user=admin --admin_password=admin [email protected]
fi

# check for the admin urser
if ! wp user get admin 2>/dev/null; then
wp user create admin [email protected] --user_pass=admin
fi

# set options
wp option update home "https://server.ddev.site"
wp option update siteurl "https://server.ddev.site/wordpress"
Loading