diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1601398 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,183 @@ +version: '3.7' + +x-icinga-db-web-config: + &icinga-db-web-config + icingaweb.modules.icingadb.config.icingadb.resource: icingadb + icingaweb.modules.icingadb.redis.redis1.host: icingadb-redis + icingaweb.modules.icingadb.redis.redis1.port: 6379 + icingaweb.modules.icingadb.commandtransports.icinga2.host: icinga2 + icingaweb.modules.icingadb.commandtransports.icinga2.port: 5665 + icingaweb.modules.icingadb.commandtransports.icinga2.password: ${ICINGAWEB_ICINGA2_API_USER_PASSWORD:-icingaweb} + icingaweb.modules.icingadb.commandtransports.icinga2.transport: api + icingaweb.modules.icingadb.commandtransports.icinga2.username: icingaweb + icingaweb.resources.icingadb.charset: utf8mb4 + icingaweb.resources.icingadb.db: mysql + icingaweb.resources.icingadb.dbname: icingadb + icingaweb.resources.icingadb.host: mysql + icingaweb.resources.icingadb.password: ${ICINGADB_MYSQL_PASSWORD:-icingadb} + icingaweb.resources.icingadb.type: db + icingaweb.resources.icingadb.username: icingadb + +x-icinga-director-config: + &icinga-director-config + icingaweb.modules.director.config.db.resource: director-mysql + icingaweb.modules.director.kickstart.config.endpoint: icinga2 + icingaweb.modules.director.kickstart.config.host: icinga2 + icingaweb.modules.director.kickstart.config.port: 5665 + icingaweb.modules.director.kickstart.config.username: icingaweb + icingaweb.modules.director.kickstart.config.password: ${ICINGAWEB_ICINGA2_API_USER_PASSWORD:-icingaweb} + icingaweb.resources.director-mysql.charset: utf8mb4 + icingaweb.resources.director-mysql.db: mysql + icingaweb.resources.director-mysql.dbname: director + icingaweb.resources.director-mysql.host: mysql + icingaweb.resources.director-mysql.password: ${ICINGA_DIRECTOR_MYSQL_PASSWORD:-director} + icingaweb.resources.director-mysql.type: db + icingaweb.resources.director-mysql.username: director + +x-icinga-web-config: + &icinga-web-config + icingaweb.authentication.icingaweb2.backend: db + icingaweb.authentication.icingaweb2.resource: icingaweb-mysql + icingaweb.config.global.config_backend: db + icingaweb.config.global.config_resource: icingaweb-mysql + icingaweb.config.global.module_path: /usr/share/icingaweb2/modules + icingaweb.config.logging.log: php + icingaweb.groups.icingaweb2.backend: db + icingaweb.groups.icingaweb2.resource: icingaweb-mysql + icingaweb.passwords.icingaweb2.icingaadmin: icinga + icingaweb.resources.icingaweb-mysql.charset: utf8mb4 + icingaweb.resources.icingaweb-mysql.db: mysql + icingaweb.resources.icingaweb-mysql.dbname: icingaweb + icingaweb.resources.icingaweb-mysql.host: mysql + icingaweb.resources.icingaweb-mysql.password: icingaweb + icingaweb.resources.icingaweb-mysql.type: db + icingaweb.resources.icingaweb-mysql.username: icingaweb + icingaweb.roles.Administrators.groups: Administrators + icingaweb.roles.Administrators.permissions: '*' + icingaweb.roles.Administrators.users: icingaadmin + +x-icinga2-environment: + &icinga2-environment + ICINGA_CN: icinga2 + ICINGA_MASTER: 1 + VAULT_ADDR: https://10.10.17.11:8200 + PATH: /tools/bin:$PATH + VAULT_SKIP_VERIFY: true + VAULT_ROLE_ID: 15cee1c1-50a9-4b2c-882d-0e4d0f50a411 + VAULT_SECRET_ID: fc7762f0-40a7-8894-1a5e-defc13040b97 + +x-logging: + &default-logging + driver: "json-file" + options: + max-file: "10" + max-size: "1M" + +networks: + default: + name: icinga-playground + +services: + director: + command: + - /bin/bash + - -ce + - | + echo "Testing the database connection. Container could restart." + (echo > /dev/tcp/mysql/3306) >/dev/null 2>&1 + echo "Testing the Icinga 2 API connection. Container could restart." + (echo > /dev/tcp/icinga2/5665) >/dev/null 2>&1 + icingacli director migration run + (icingacli director kickstart required && icingacli director kickstart run && icingacli director config deploy) || true + echo "Starting Icinga Director daemon." + icingacli director daemon run + entrypoint: [] + logging: *default-logging + image: icinga/icingaweb2 + restart: on-failure + volumes: + - icingaweb:/data + + # The Icinga 2 docker image does not support configuration via env vars at the moment. + # So, we have to ship some configs with this little init container. Referenced in depends_on of the icinga2 service. + init-icinga2: + command: [ "/config/init-icinga2.sh" ] + environment: *icinga2-environment + image: icinga/icinga2 + logging: *default-logging + volumes: + - icinga2:/data + - ./icingadb.conf:/config/icingadb.conf + - ./icingaweb-api-user.conf:/config/icingaweb-api-user.conf + - ./init-icinga2.sh:/config/init-icinga2.sh + + icinga2: + build: . + command: [ "sh", "-c", "sleep 5 ; icinga2 daemon" ] + depends_on: + - icingadb-redis + - init-icinga2 + environment: *icinga2-environment + image: icinga/icinga2 + logging: *default-logging + ports: + - 5665:5665 + volumes: + - icinga2:/data + - ./icinga2.conf.d:/custom_data/custom.conf.d + - ./plugins:/usr/lib/nagios/plugins/custom + - /etc/icinga2/vault:/vault-creds:ro + - ./bin:/tools/bin:ro + - ./requirements.txt:/tmp/requirements.txt + icingadb: + environment: + ICINGADB_DATABASE_HOST: mysql + ICINGADB_DATABASE_PORT: 3306 + ICINGADB_DATABASE_DATABASE: icingadb + ICINGADB_DATABASE_USER: icingadb + ICINGADB_DATABASE_PASSWORD: ${ICINGADB_MYSQL_PASSWORD:-icingadb} + ICINGADB_REDIS_HOST: icingadb-redis + ICINGADB_REDIS_PORT: 6379 + depends_on: + - mysql + - icingadb-redis + image: icinga/icingadb + logging: *default-logging + + icingadb-redis: + image: redis + logging: *default-logging + + icingaweb: + depends_on: + - mysql + environment: + icingaweb.enabledModules: director, icingadb, incubator + <<: [*icinga-db-web-config, *icinga-director-config, *icinga-web-config] + logging: *default-logging + image: icinga/icingaweb2 + ports: + - 8080:8080 + # Restart Icinga Web container automatically since we have to wait for the database to be ready. + # Please note that this needs a more sophisticated solution. + restart: on-failure + volumes: + - icingaweb:/data + + mysql: + image: mariadb:10.7 + command: --default-authentication-plugin=mysql_native_password + environment: + MYSQL_RANDOM_ROOT_PASSWORD: 1 + ICINGADB_MYSQL_PASSWORD: ${ICINGADB_MYSQL_PASSWORD:-icingadb} + ICINGAWEB_MYSQL_PASSWORD: ${ICINGAWEB_MYSQL_PASSWORD:-icingaweb} + ICINGA_DIRECTOR_MYSQL_PASSWORD: ${ICINGA_DIRECTOR_MYSQL_PASSWORD:-director} + logging: *default-logging + volumes: + - mysql:/var/lib/mysql + - ./env/mysql/:/docker-entrypoint-initdb.d/ + +volumes: + icinga2: + icingaweb: + mysql: