DDEV and openldap

I use the following docker images:
Create the following docker-compose.openldap.yaml file in your project/.ddev/ directory.
services:
openldap:
# Name of container using standard ddev convention
container_name: ddev-${DDEV_SITENAME}-openldap
image: osixia/openldap:1.5.0
networks: [default, ddev_default]
restart: "no"
# Meilisearch is served from this port inside the container.
ports:
- 389
- 636
# These labels ensure this service is discoverable by ddev.
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
environment:
# This defines the host name the service should be accessible from. This
# will be sitename.ddev.site.
- VIRTUAL_HOST=$DDEV_HOSTNAME
- LDAP_LOG_LEVEL=256
- LDAP_ORGANISATION=Example Inc.
- LDAP_DOMAIN=example.org
- LDAP_BASE_DN=dc=example,dc=org
- LDAP_ADMIN_PASSWORD=admin
- LDAP_CONFIG_PASSWORD=config
- LDAP_READONLY_USER=false
#- LDAP_READONLY_USER_USERNAME=readonly
#- LDAP_READONLY_USER_PASSWORD=readonly
- LDAP_RFC2307BIS_SCHEMA=false
- LDAP_BACKEND=mdb
- LDAP_TLS=true
- LDAP_TLS_CRT_FILENAME=ldap.crt
- LDAP_TLS_KEY_FILENAME=ldap.key
- LDAP_TLS_DH_PARAM_FILENAME=dhparam.pem
- LDAP_TLS_CA_CRT_FILENAME=ca.crt
- LDAP_TLS_ENFORCE=false
- LDAP_TLS_CIPHER_SUITE=SECURE256:-VERS-SSL3.0
- LDAP_TLS_VERIFY_CLIENT=demand
- LDAP_REPLICATION=false
#- LDAP_REPLICATION_CONFIG_SYNCPROV: 'binddn="cn=admin,cn=config" bindmethod=simple credentials="$$- LDAP_CONFIG_PASSWORD" searchbase="cn=config" type=refreshAndPersist retry="60 +" timeout=1 starttls=critical'
#- LDAP_REPLICATION_DB_SYNCPROV: 'binddn="cn=admin,$$LDAP_BASE_DN" bindmethod=simple credentials="$$LDAP_ADMIN_PASSWORD" searchbase="$$LDAP_BASE_DN" type=refreshAndPersist interval=00:00:00:10 retry="60 +" timeout=1 starttls=critical'
#- LDAP_REPLICATION_HOSTS=#PYTHON2BASH:['ldap://ldap.example.org','ldap://ldap2.example.org']"
- KEEP_EXISTING_CONFIG=false
- LDAP_REMOVE_CONFIG_AFTER_SETUP=true
- LDAP_SSL_HELPER_PREFIX=ldap
volumes:
- ldap_certificates:/container/service/slapd/assets/certs
- ldap_data:/var/lib/ldap
- ldap_config:/etc/ldap/slapd.d
external_links:
- "ddev-router:${DDEV_SITENAME}.${DDEV_TLD}"
phpldapadmin:
image: osixia/phpldapadmin:latest
container_name: ddev-${DDEV_SITENAME}-phpldapadmin
networks: [default, ddev_default]
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
environment:
- HOSTNAME=$DDEV_HOSTNAME
- PHPLDAPADMIN_LDAP_HOSTS=ddev-${DDEV_SITENAME}-openldap
- PHPLDAPADMIN_HTTPS=false
- VIRTUAL_HOST=$DDEV_HOSTNAME
- HTTP_EXPOSE=8076:80
- HTTPS_EXPOSE=8077:80
expose:
- "80"
depends_on:
- openldap
volumes:
ldap_certificates:
ldap_data:
ldap_config:
Restart your project. You can now call the phpLDAPadmin backend with https://<project>.ddev.site:8077/
User: cn=admin,dc=example,dc=org
Password: admin
Inside of your project you can connect to the ldap server with:
$connect = ldap_connect("ldap://openldap:389");
@ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
$bind = ldap_bind($connect, 'cn=admin,dc=example,dc=org' , 'admin');