Skip to content
Open
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
77 changes: 61 additions & 16 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
version: '3.7'

x-icinga-db-web-config:
&icinga-db-web-config
icingaweb.modules.icingadb.config.icingadb.resource: icingadb
Expand Down Expand Up @@ -89,36 +87,62 @@ services:
entrypoint: []
logging: *default-logging
image: icinga/icingaweb2
restart: on-failure
restart: unless-stopped
volumes:
- icingaweb:/data
# ADDED: Depend on mysql and icinga2 to ensure they're ready before starting the director
depends_on:
mysql:
condition: service_healthy
icinga2:
condition: service_healthy

# 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
environment:
# ADDED/CONFIRMED: Explicitly pass the password to the init script
ICINGAWEB_ICINGA2_API_USER_PASSWORD: ${ICINGAWEB_ICINGA2_API_USER_PASSWORD:-icingaweb}
<<: *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
# UNIFIED: Depend on healthy services before running the init script
depends_on:
icingadb-redis:
condition: service_healthy
mysql:
condition: service_healthy

icinga2:
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
- "127.0.0.1:3070:5665"
restart: unless-stopped
volumes:
- icinga2:/data
- ./icinga2.conf.d:/custom_data/custom.conf.d
# UNIFIED: Use condition-based dependency for init completion and redis readiness
depends_on:
init-icinga2:
condition: service_completed_successfully
icingadb-redis:
condition: service_healthy
healthcheck:
# Use HTTPS (-k), fail on error (-f), and include Basic Auth (-u)
test: ["CMD", "curl", "-k", "-f", "-u", "icingaweb:${ICINGAWEB_ICINGA2_API_USER_PASSWORD:-icingaweb}", "https://localhost:5665/v1/"]
interval: 10s
timeout: 5s
retries: 5
start_period: 90s

icingadb:
environment:
Expand All @@ -129,44 +153,65 @@ services:
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
restart: unless-stopped
# UNIFIED: Use condition-based dependency for database and redis readiness
depends_on:
mysql:
condition: service_healthy
icingadb-redis:
condition: service_healthy

icingadb-redis:
image: redis
logging: *default-logging
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 1s
timeout: 3s
retries: 5

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
- "127.0.0.1:3065: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
restart: unless-stopped
volumes:
- icingaweb:/data
# UNIFIED: Use condition-based dependency for database readiness
depends_on:
mysql:
condition: service_healthy

mysql:
image: mariadb:10.7
command: --default-authentication-plugin=mysql_native_password
command:
- --sql-mode=TRADITIONAL,ANSI_QUOTES # FIXED: Removed quotes around the value
- --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
restart: unless-stopped
volumes:
- mysql:/var/lib/mysql
- ./env/mysql/:/docker-entrypoint-initdb.d/
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$MYSQL_RANDOM_ROOT_PASSWORD"]
interval: 10s
timeout: 5s
retries: 5
start_period: 20s

volumes:
icinga2:
Expand Down