mirror of
https://mirror.skon.top/github.com/zabbix/zabbix-docker
synced 2026-04-21 05:11:21 +08:00
281 lines
9.4 KiB
Makefile
281 lines
9.4 KiB
Makefile
# =========================
|
|
# Zabbix images build + run helper (bake v3-phase)
|
|
# =========================
|
|
.DEFAULT_GOAL := up
|
|
|
|
COMPOSE_PROFILES ?=
|
|
|
|
# -------- User-facing knobs (override via CLI) --------
|
|
OS ?= alpine
|
|
DB ?= mysql
|
|
ZBX_VERSION ?= 8.0
|
|
|
|
# Remote defaults (Official image registry)
|
|
REMOTE_IMAGE_PREFIX ?= zabbix/
|
|
REMOTE_ZBX_TAG ?= $(OS)-trunk
|
|
|
|
# Local defaults (what bake builds)
|
|
LOCAL_IMAGE_PREFIX ?=
|
|
LOCAL_ZBX_TAG ?= $(OS)-$(ZBX_VERSION)-local
|
|
|
|
# Optional multi-arch platforms: "linux/amd64,linux/arm64"
|
|
PLATFORMS ?=
|
|
|
|
# ---- Base images per OS ----
|
|
ALPINE_BASE_IMAGE ?= alpine:3.23
|
|
CENTOS_BASE_IMAGE ?= quay.io/centos/centos:stream10-minimal
|
|
OL_BASE_IMAGE ?= container-registry.oracle.com/os/oraclelinux:10-slim
|
|
UBUNTU_BASE_IMAGE ?= ubuntu:resolute
|
|
RHEL_BASE_IMAGE ?= registry.access.redhat.com/ubi10/ubi-minimal:10.1
|
|
|
|
# Auto-select base image by OS (unless explicitly overridden)
|
|
ifeq ($(origin OS_BASE_IMAGE), undefined)
|
|
ifeq ($(OS),alpine)
|
|
OS_BASE_IMAGE := $(ALPINE_BASE_IMAGE)
|
|
else ifeq ($(OS),centos)
|
|
OS_BASE_IMAGE := $(CENTOS_BASE_IMAGE)
|
|
else ifeq ($(OS),ol)
|
|
OS_BASE_IMAGE := $(OL_BASE_IMAGE)
|
|
else ifeq ($(OS),ubuntu)
|
|
OS_BASE_IMAGE := $(UBUNTU_BASE_IMAGE)
|
|
else ifeq ($(OS),rhel)
|
|
OS_BASE_IMAGE := $(RHEL_BASE_IMAGE)
|
|
else
|
|
$(error Unsupported OS: $(OS))
|
|
endif
|
|
endif
|
|
|
|
# Compose
|
|
COMPOSE ?= docker compose
|
|
ENV_FILE ?= .env
|
|
|
|
# -------- Bake group names (as in docker-bake.hcl) --------
|
|
BAKE_BASE_GROUP := base
|
|
BAKE_BUILDERS_MYSQL_GROUP := builder-mysql
|
|
BAKE_BUILDERS_PGSQL_GROUP := builder-pgsql
|
|
BAKE_BUILDERS_SQLITE3_GROUP := builder-sqlite3
|
|
|
|
BAKE_RUNTIME_MYSQL_ALL := runtime-mysql-all
|
|
BAKE_RUNTIME_MYSQL_MINIMAL := runtime-mysql-minimal
|
|
BAKE_RUNTIME_PGSQL_ALL := runtime-pgsql-all
|
|
BAKE_RUNTIME_PGSQL_MINIMAL := runtime-pgsql-minimal
|
|
|
|
# Export for sub-make / shells
|
|
export OS DB MAJOR_VERSION ZBX_VERSION OS_BASE_IMAGE PLATFORMS
|
|
export LOCAL_IMAGE_PREFIX LOCAL_ZBX_TAG REMOTE_IMAGE_PREFIX REMOTE_ZBX_TAG
|
|
export COMPOSE_PROFILES
|
|
|
|
# Pick compose file based on DB
|
|
ifeq ($(DB),mysql)
|
|
COMPOSE_FILE := compose.yaml
|
|
else ifeq ($(DB),pgsql)
|
|
COMPOSE_FILE := compose_pgsql.yaml
|
|
else
|
|
COMPOSE_FILE := compose.yaml
|
|
endif
|
|
|
|
# Compose env passthrough: ensure compose sees the same variables
|
|
# (useful if compose uses ${OS}/${DB}/${IMAGE_TAG}/${IMAGE_PREFIX})
|
|
define compose_env
|
|
OS="$(OS)" DB="$(DB)" ZBX_IMAGE_TAG="$(1)" ZBX_IMAGE_REGISTRY="$(2)" ZBX_IMAGE_NAMESPACE="" $(COMPOSE) -f "$(COMPOSE_FILE)" --env-file "$(ENV_FILE)"
|
|
endef
|
|
|
|
# Bake env passthrough (match docker-bake.hcl variable names!)
|
|
define bake_env
|
|
OS="$(OS)" \
|
|
ZBX_VERSION="$(ZBX_VERSION)" \
|
|
OS_BASE_IMAGE="$(OS_BASE_IMAGE)" \
|
|
ZBX_IMAGE_TAG="$(LOCAL_ZBX_TAG)" \
|
|
PLATFORMS="$(PLATFORMS)" \
|
|
ZBX_IMAGE_NAMESPACE="$(LOCAL_IMAGE_PREFIX)" \
|
|
docker buildx bake
|
|
endef
|
|
|
|
# Choose runtime groups by DB
|
|
ifeq ($(DB),mysql)
|
|
BAKE_RUNTIME_ALL_GROUP := $(BAKE_RUNTIME_MYSQL_ALL)
|
|
BAKE_RUNTIME_MINIMAL_GROUP := $(BAKE_RUNTIME_MYSQL_MINIMAL)
|
|
BAKE_BUILDERS_GROUP := $(BAKE_BUILDERS_MYSQL_GROUP)
|
|
else ifeq ($(DB),pgsql)
|
|
BAKE_RUNTIME_ALL_GROUP := $(BAKE_RUNTIME_PGSQL_ALL)
|
|
BAKE_RUNTIME_MINIMAL_GROUP := $(BAKE_RUNTIME_PGSQL_MINIMAL)
|
|
BAKE_BUILDERS_GROUP := $(BAKE_BUILDERS_PGSQL_GROUP)
|
|
else ifeq ($(DB),sqlite3)
|
|
# No sqlite3 runtime groups listed in your target table; keep builders only.
|
|
BAKE_BUILDERS_GROUP := $(BAKE_BUILDERS_SQLITE3_GROUP)
|
|
BAKE_RUNTIME_ALL_GROUP :=
|
|
BAKE_RUNTIME_MINIMAL_GROUP :=
|
|
endif
|
|
|
|
# ---- Guards ----
|
|
check-rhel-host:
|
|
@if [ "$(OS)" = "rhel" ]; then \
|
|
if [ -r /etc/os-release ]; then \
|
|
. /etc/os-release; HOST_ID="$$ID"; \
|
|
else \
|
|
HOST_ID="$$(uname -s | tr A-Z a-z)"; \
|
|
fi; \
|
|
if [ "$$HOST_ID" != "rhel" ]; then \
|
|
echo "ERROR: Refusing to build Red Hat images on host '$$HOST_ID'."; \
|
|
echo "This build requires RHEL subscription repositories. Run the build on a Red Hat host."; \
|
|
exit 1; \
|
|
fi; \
|
|
fi
|
|
|
|
# -------- Targets --------
|
|
.PHONY: help print-vars \
|
|
base builders-mysql builders-pgsql builders-sqlite3 builders \
|
|
runtime-mysql-all runtime-mysql-minimal runtime-pgsql-all runtime-pgsql-minimal \
|
|
runtime-all runtime-minimal runtime \
|
|
build build-all \
|
|
up up-local down restart logs ps \
|
|
bake-target clean
|
|
|
|
help:
|
|
@echo "Usage:"
|
|
@echo " make base # build build-base"
|
|
@echo " make builders # build builders for DB=$(DB) (mysql/pgsql/sqlite3)"
|
|
@echo " make runtime-minimal # build runtime-<db>-minimal (mysql/pgsql only)"
|
|
@echo " make runtime-all # build runtime-<db>-all (mysql/pgsql only)"
|
|
@echo " make build # base + builders + runtime-minimal (mysql/pgsql only)"
|
|
@echo " make build-all # base + builders + runtime-all (mysql/pgsql only)"
|
|
@echo " make bake-target TARGET=server-mysql # build a single bake target by name"
|
|
@echo ""
|
|
@echo "Compose:"
|
|
@echo " make up # pull+up using REMOTE_* images"
|
|
@echo " make up-local # build (minimal) then up using LOCAL_* images"
|
|
@echo ""
|
|
@echo "Common overrides:"
|
|
@echo " make build DB=mysql"
|
|
@echo " make build DB=pgsql"
|
|
@echo " make builders DB=sqlite3"
|
|
@echo " make build OS=ubuntu OS_BASE_IMAGE=ubuntu:noble"
|
|
@echo " make build PLATFORMS=linux/amd64,linux/arm64"
|
|
@echo " make build LOCAL_IMAGE_PREFIX=ghcr.io/zabbix/"
|
|
@echo ""
|
|
@echo "Current config:"
|
|
@$(MAKE) --no-print-directory print-vars
|
|
|
|
print-vars:
|
|
@echo "OS=$(OS)"
|
|
@echo "OS_BASE_IMAGE=$(OS_BASE_IMAGE)"
|
|
@echo "DB=$(DB)"
|
|
@echo "MAJOR_VERSION=$(MAJOR_VERSION)"
|
|
@echo "ZBX_VERSION=$(ZBX_VERSION)"
|
|
@echo "LOCAL_ZBX_TAG=$(LOCAL_ZBX_TAG)"
|
|
@echo "LOCAL_IMAGE_PREFIX=$(LOCAL_IMAGE_PREFIX)"
|
|
@echo "PLATFORMS=$(PLATFORMS)"
|
|
@echo "ENV_FILE=$(ENV_FILE)"
|
|
@echo "COMPOSE_FILE=$(COMPOSE_FILE)"
|
|
@echo "BAKE_BUILDERS_GROUP=$(BAKE_BUILDERS_GROUP)"
|
|
@echo "BAKE_RUNTIME_MINIMAL_GROUP=$(BAKE_RUNTIME_MINIMAL_GROUP)"
|
|
@echo "BAKE_RUNTIME_ALL_GROUP=$(BAKE_RUNTIME_ALL_GROUP)"
|
|
|
|
# ---- Bake groups ----
|
|
base: check-rhel-host
|
|
@echo "==> Bake group: $(BAKE_BASE_GROUP) (OS=$(OS))"
|
|
@$(bake_env) $(BAKE_BASE_GROUP)
|
|
|
|
builders-mysql: check-rhel-host
|
|
@echo "==> Bake group: $(BAKE_BUILDERS_MYSQL_GROUP) (OS=$(OS))"
|
|
@$(bake_env) $(BAKE_BUILDERS_MYSQL_GROUP)
|
|
|
|
builders-pgsql: check-rhel-host
|
|
@echo "==> Bake group: $(BAKE_BUILDERS_PGSQL_GROUP) (OS=$(OS))"
|
|
@$(bake_env) $(BAKE_BUILDERS_PGSQL_GROUP)
|
|
|
|
builders-sqlite3: check-rhel-host
|
|
@echo "==> Bake group: $(BAKE_BUILDERS_SQLITE3_GROUP) (OS=$(OS))"
|
|
@$(bake_env) $(BAKE_BUILDERS_SQLITE3_GROUP)
|
|
|
|
builders: check-rhel-host
|
|
@echo "==> Bake group: $(BAKE_BUILDERS_GROUP) (DB=$(DB), OS=$(OS))"
|
|
@$(bake_env) $(BAKE_BUILDERS_GROUP)
|
|
|
|
runtime-mysql-all: check-rhel-host
|
|
@echo "==> Bake group: $(BAKE_RUNTIME_MYSQL_ALL) (OS=$(OS))"
|
|
@$(bake_env) $(BAKE_RUNTIME_MYSQL_ALL)
|
|
|
|
runtime-mysql-minimal: check-rhel-host
|
|
@echo "==> Bake group: $(BAKE_RUNTIME_MYSQL_MINIMAL) (OS=$(OS))"
|
|
@$(bake_env) $(BAKE_RUNTIME_MYSQL_MINIMAL)
|
|
|
|
runtime-pgsql-all: check-rhel-host
|
|
@echo "==> Bake group: $(BAKE_RUNTIME_PGSQL_ALL) (OS=$(OS))"
|
|
@$(bake_env) $(BAKE_RUNTIME_PGSQL_ALL)
|
|
|
|
runtime-pgsql-minimal: check-rhel-host
|
|
@echo "==> Bake group: $(BAKE_RUNTIME_PGSQL_MINIMAL) (OS=$(OS))"
|
|
@$(bake_env) $(BAKE_RUNTIME_PGSQL_MINIMAL)
|
|
|
|
runtime-all: check-rhel-host
|
|
@if [ -z "$(BAKE_RUNTIME_ALL_GROUP)" ]; then \
|
|
echo "ERROR: runtime-all is not defined for DB=$(DB) (no runtime groups listed for sqlite3)."; \
|
|
exit 1; \
|
|
fi
|
|
@echo "==> Bake group: $(BAKE_RUNTIME_ALL_GROUP) (DB=$(DB), OS=$(OS))"
|
|
@$(bake_env) $(BAKE_RUNTIME_ALL_GROUP)
|
|
|
|
runtime-minimal: check-rhel-host
|
|
@if [ -z "$(BAKE_RUNTIME_MINIMAL_GROUP)" ]; then \
|
|
echo "ERROR: runtime-minimal is not defined for DB=$(DB) (no runtime groups listed for sqlite3)."; \
|
|
exit 1; \
|
|
fi
|
|
@echo "==> Bake group: $(BAKE_RUNTIME_MINIMAL_GROUP) (DB=$(DB), OS=$(OS))"
|
|
@$(bake_env) $(BAKE_RUNTIME_MINIMAL_GROUP)
|
|
|
|
# Alias
|
|
runtime: runtime-minimal
|
|
|
|
# Convenience: full build
|
|
build: base builders runtime-minimal
|
|
build-all: base builders runtime-all
|
|
|
|
# Build a single bake target by name (not group)
|
|
bake-target: check-rhel-host
|
|
@if [ -z "$(TARGET)" ]; then \
|
|
echo "ERROR: TARGET is required. Example: make bake-target TARGET=server-mysql"; \
|
|
exit 1; \
|
|
fi
|
|
@echo "==> Bake target: $(TARGET) (OS=$(OS), DB=$(DB), local tag=$(LOCAL_ZBX_TAG))"
|
|
@$(bake_env) "$(TARGET)"
|
|
|
|
# ---- Compose helpers ----
|
|
up:
|
|
@$(call compose_env,$(REMOTE_ZBX_TAG),$(REMOTE_IMAGE_PREFIX)) pull --ignore-pull-failures
|
|
@$(call compose_env,$(REMOTE_ZBX_TAG),$(REMOTE_IMAGE_PREFIX)) up -d --pull always
|
|
|
|
up-local:
|
|
@$(MAKE) --no-print-directory build
|
|
@echo "==> up-local (local) tag=$(LOCAL_ZBX_TAG) prefix=$(LOCAL_IMAGE_PREFIX)"
|
|
@$(call compose_env,$(LOCAL_ZBX_TAG),$(LOCAL_IMAGE_PREFIX)) up -d
|
|
|
|
# ---- Compose command sets ----
|
|
COMPOSE_CMDS := pull down ps logs config restart start stop
|
|
|
|
define compose_remote
|
|
@$(call compose_env,$(REMOTE_ZBX_TAG),$(REMOTE_IMAGE_PREFIX)) $(1)
|
|
endef
|
|
|
|
define compose_local
|
|
@$(call compose_env,$(LOCAL_ZBX_TAG),$(LOCAL_IMAGE_PREFIX)) $(1)
|
|
endef
|
|
|
|
.PHONY: $(COMPOSE_CMDS) l-$(COMPOSE_CMDS)
|
|
|
|
$(COMPOSE_CMDS):
|
|
$(call compose_remote,$@ $(ARGS))
|
|
|
|
l-%:
|
|
$(call compose_local,$* $(ARGS))
|
|
|
|
# ---- Cleanup ----
|
|
clean:
|
|
@echo "==> Removing local images for OS=$(OS) tag=$(LOCAL_ZBX_TAG) (best-effort)"
|
|
@docker image rm -f \
|
|
"$(LOCAL_IMAGE_PREFIX)build-base:$(LOCAL_ZBX_TAG)" \
|
|
"$(LOCAL_IMAGE_PREFIX)build-mysql:$(LOCAL_ZBX_TAG)" \
|
|
"$(LOCAL_IMAGE_PREFIX)build-pgsql:$(LOCAL_ZBX_TAG)" \
|
|
"$(LOCAL_IMAGE_PREFIX)build-sqlite3:$(LOCAL_ZBX_TAG)" \
|
|
2>/dev/null || true
|