Итак статья для тех, кто использует человеческий swarm вместо ублюдского kubernetes для ушлёпков.
Запускаем в swarm mode openldap.
Предполагается что у вас уже есть swarm – делается это одной-двумя командами.
Если у вас одна нода – manager и она же воркер делаем просто
docker swarm init
Увидим
Swarm initialized: current node (o91r08ngi1x7v7f4qoednp4uk) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-03yleiqkrn9iwfc8qnuwctsulrp4v3sn4eqhrfz4kpahgnyc8r-5v6apaxtt85vbib3tdm5cb2nr \ 192.168.0.132:2377
Ок. Идем далее.
Деплоить будем из docker-compose.yml файла – очень удобно. Все переменные будут указаны в файлике
.env
Итак приступим.
Создаем файлик .env и запихиваем в него следующее содержимое
OPENLDAP_VERSION=1.2.0 LDAP_PORT=389 LDAP_PORT_TSL=636 LDAP_LOG_LEVEL=256 LDAP_ORGANISATION=ITC_LIFE LTD LDAP_DOMAIN=itc-life.ru LDAP_BASE_DN= LDAP_ADMIN_PASSWORD=ADMIN_PASSWORD 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_CA_CRT_FILENAME=ca.crt LDAP_TLS_ENFORCE=false LDAP_TLS_CIPHER_SUITE=SECURE256:-VERS-SSL3.0 LDAP_TLS_PROTOCOL_MIN=3.1 LDAP_TLS_VERIFY_CLIENT=demand LDAP_REPLICATION=false KEEP_EXISTING_CONFIG=false LDAP_REMOVE_CONFIG_AFTER_SETUP=true LDAP_SSL_HELPER_PREFIX=ldap PHP_LDAPADMIN_PORT=8080
Здесь мы указываем много параметров – имя домена,пароль админа и т.д и т.п.
Создаем файлик docker-compose.yml для деалоя в наш swarm.
docker-compose.yml
version: '3.3' services: openldap: image: osixia/openldap:${OPENLDAP_VERSION} #container_name: openldap environment: LDAP_LOG_LEVEL: "${LDAP_LOG_LEVEL}" LDAP_ORGANISATION: "${LDAP_ORGANISATION}" LDAP_DOMAIN: "${LDAP_DOMAIN}" LDAP_BASE_DN: "" LDAP_ADMIN_PASSWORD: "${LDAP_ADMIN_PASSWORD}" LDAP_CONFIG_PASSWORD: "${LDAP_CONFIG_PASSWORD}" LDAP_READONLY_USER: "${LDAP_READONLY_USER}" #LDAP_READONLY_USER_USERNAME: "readonly" #LDAP_READONLY_USER_PASSWORD: "readonly" LDAP_RFC2307BIS_SCHEMA: "${LDAP_RFC2307BIS_SCHEMA}" LDAP_BACKEND: "${LDAP_BACKEND}" LDAP_TLS: "${LDAP_TLS}" LDAP_TLS_CRT_FILENAME: "${LDAP_TLS_CRT_FILENAME}" LDAP_TLS_KEY_FILENAME: "${LDAP_TLS_KEY_FILENAME}" LDAP_TLS_CA_CRT_FILENAME: "${LDAP_TLS_CA_CRT_FILENAME}" LDAP_TLS_ENFORCE: "${LDAP_TLS_ENFORCE}" LDAP_TLS_CIPHER_SUITE: "${LDAP_TLS_CIPHER_SUITE}" LDAP_TLS_PROTOCOL_MIN: "${LDAP_TLS_PROTOCOL_MIN}" LDAP_TLS_VERIFY_CLIENT: "${LDAP_TLS_VERIFY_CLIENT}" LDAP_REPLICATION: "${LDAP_REPLICATION}" #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: "${KEEP_EXISTING_CONFIG}" LDAP_REMOVE_CONFIG_AFTER_SETUP: "${LDAP_REMOVE_CONFIG_AFTER_SETUP}" LDAP_SSL_HELPER_PREFIX: "${LDAP_SSL_HELPER_PREFIX}" #tty: true #stdin_open: true volumes: - type: volume source: ldap_data target: /var/lib/ldap volume: nocopy: false - type: volume source: ldap_slap target: /etc/ldap/slapd.d volume: nocopy: false - type: volume source: ldap_certs target: /container/service/slapd/assets/certs/ volume: nocopy: false ports: - "${LDAP_PORT}:389" - "${LDAP_PORT_TSL}:636" #domainname: "${LDAP_DOMAIN}" hostname: "${LDAP_DOMAIN}" networks: ldap-network: aliases: - openldap.local deploy: #endpoint_mode: dnsrr #mode: replicated replicas: 1 resources: # Hard limit - Docker does not allow to allocate more limits: cpus: '1' memory: 1G # Soft limit - Docker makes best effort to return to it reservations: #cpus: '0.25' memory: 256M # service restart policy restart_policy: condition: on-failure delay: 5s max_attempts: 8 window: 3s # service update configuration update_config: parallelism: 1 delay: 10s failure_action: continue monitor: 60s max_failure_ratio: 0.3 # placement constraint - in this case on 'worker' nodes only placement: constraints: [node.role == manager] phpldapadmin: image: osixia/phpldapadmin:latest #container_name: phpldapadmin environment: PHPLDAPADMIN_LDAP_HOSTS: "openldap" PHPLDAPADMIN_HTTPS: "false" ports: - "${PHP_LDAPADMIN_PORT}:80" depends_on: - openldap networks: ldap-network: aliases: - phpldapadmin.local deploy: #endpoint_mode: dnsrr #mode: replicated replicas: 1 resources: # Hard limit - Docker does not allow to allocate more limits: cpus: '1' memory: 256M # Soft limit - Docker makes best effort to return to it reservations: #cpus: '0.25' memory: 256M # service restart policy restart_policy: condition: on-failure delay: 5s max_attempts: 8 window: 3s # service update configuration update_config: parallelism: 1 delay: 10s failure_action: continue monitor: 60s max_failure_ratio: 0.3 # placement constraint - in this case on 'worker' nodes only placement: constraints: [node.role == manager] ##NETWORKS networks: ldap-network: driver: overlay ##VOLUMES volumes: ldap_data: ldap_slap: ldap_certs:
Данные будут храниться в volumes:
ldap_data: ldap_slap: ldap_certs:
Здесь мы указали переменные лимиты и всякую шляпу.
Запускаем.
export $(cat .env) && docker stack deploy --compose-file=docker-compose.yml ldap
Заходим в
127.0.0.1:8080
Логин
cn=admin,dc=itc-life,dc=ru
Пароль - указан в .env.
Всё.
Создаем для начала posix group, затем пользователя и наслаждаемся.
Чтобы проверить работу.
docker exec имяконтейнераopenldap ldapsearch -x -H ldap://localhost -b dc=itc-life,dc=ru -D "cn=admin,dc=itc-life,dc=ru" -w пароль_админа
Увиди текущих пользователей и т.д. и т.п
Чтобы удалить сервис.
docker stack rm ldap