- Go 1.25.1+ - Backend application language
- Node.js v22+ - Frontend asset building (Tailwind CSS)
- pnpm 10.17.1+ - JavaScript package manager (via corepack)
- Docker with BuildKit - For containerized deployment (requires
DOCKER_BUILDKIT=1
) - Docker Compose v2+ - Modern
docker compose
CLI for local development - templ CLI - Template generation (
go install github.com/a-h/templ/cmd/templ@latest
)
The project includes a complete Docker Compose setup with OpenLDAP server, phpLDAPadmin, and profiles for different environments:
# Copy environment template
cp .env.example .env
# Build and run development environment (with live reload)
export DOCKER_BUILDKIT=1
docker compose --profile dev build
docker compose --profile dev up
# Run tests in containerized environment
docker compose --profile test up
# Run production build
docker compose --profile prod up
Development Features:
- π Live reload - source code mounted at runtime
- π¦ Cache optimization - BuildKit cache mounts for 60% faster builds
- π₯ Health checks - automatic dependency ordering (LDAP ready before app starts)
- π Built-in OpenLDAP - pre-configured test server on port 389
- π phpLDAPadmin - web-based LDAP browser on port 8080
If you want to run this service without a Docker container, you have to build it yourself.
Prerequisites: Go 1.25.1+, Node.js v22+, Corepack, templ CLI
You can configure this via a .env.local
file or via command options (for more information you can run ./ldap-manager --help
).
corepack enable
pnpm i
pnpm build
./ldap-manager \
`# You can also configure these via environment variables,` \
`# please see the .env file for available options.` \
-ldap-server ldaps://dc1.example.com:636 -active-directory \
-readonly-password readonly -readonly-user readonly \
-base-dn DC=example,DC=com
We publish optimized production images to GitHub Container Registry:
Image Features:
- π¦ 13.1MB - Minimal distroless runtime (70% smaller than Alpine)
- π‘οΈ Security hardened - Nonroot user (UID 65532), read-only filesystem, no shell
- β‘ Fast builds - BuildKit cache mounts reduce rebuild time by 60%
- π·οΈ OCI compliant - Full metadata labels and multi-platform support (amd64, arm64, arm/v7)
docker run \
`# Run the container detached from the current terminal` \
-d --name ldap-manager \
`# You might want to mount your host SSL certificate directory,` \
`# if you have a self-signed certificate for your LDAPS connection` \
-v /etc/ssl/certs:/etc/ssl/certs:ro \
-p 3000:3000 \
ghcr.io/netresearch/ldap-manager:latest \
`# You can also configure these via environment variables,` \
`# please see the .env file for available options.` \
-ldap-server ldaps://dc1.example.com:636 -active-directory \
-readonly-password readonly -readonly-user readonly \
-base-dn DC=example,DC=com
Note: You can ignore the warning that the service could not load a .env
file when running in production.
π Complete Documentation Index - Navigate all documentation with cross-references and quick links
Comprehensive documentation is available in the docs/
directory:
- Installation Guide - Setup and deployment instructions
- Configuration Reference - Complete configuration options
- API Documentation - REST API endpoints and usage
- Development Setup - Local development environment
- Contributing Guidelines - Code standards and workflow
- Architecture Overview - System design and patterns
- Deployment Guide - Production deployment strategies
- Monitoring & Troubleshooting - Operational procedures
# Docker deployment (recommended)
docker run -d --name ldap-manager \
-e LDAP_SERVER=ldaps://dc1.example.com:636 \
-e LDAP_BASE_DN="DC=example,DC=com" \
-e LDAP_READONLY_USER=readonly \
-e LDAP_READONLY_PASSWORD=password \
-e LDAP_IS_AD=true \
-p 3000:3000 \
ghcr.io/netresearch/ldap-manager:latest
# Setup development environment with Docker Compose
export DOCKER_BUILDKIT=1
cp .env.example .env
docker compose --profile dev up
# Or use Makefile commands
make setup
make dev
# See full development guide: docs/development/setup.md
LDAP Manager is licensed under the MIT license, for more information please refer to the included LICENSE file.
Feel free to contribute by creating a Pull Request!
This project uses Conventional Commits for commit messages and the default gofmt
and prettier
formatting rules.