Initial
This commit is contained in:
5
.env.example
Normal file
5
.env.example
Normal file
@@ -0,0 +1,5 @@
|
||||
POSTGRES_VERSION=16.4
|
||||
POSTGRES_USER=postgres
|
||||
POSTGRES_PASSWORD=postgrespassword
|
||||
POSTGRES_DB=zabbix
|
||||
TZ=Europe/Kyiv
|
||||
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/volumes
|
||||
.env
|
||||
20
LICENSE
Normal file
20
LICENSE
Normal file
@@ -0,0 +1,20 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 Igor
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this stack and associated documentation files (the "Zabbix Stack"), to deal
|
||||
in the Stack without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Stack, and to permit persons to whom the Stack is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Stack.
|
||||
|
||||
THE STACK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE STACK OR THE USE OR OTHER DEALINGS IN THE STACK.
|
||||
86
docker-compose.yaml
Normal file
86
docker-compose.yaml
Normal file
@@ -0,0 +1,86 @@
|
||||
# version: "3.9"
|
||||
|
||||
services:
|
||||
postgresql-server:
|
||||
image: postgres:${POSTGRES_VERSION}
|
||||
container_name: postgresql-server
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
TZ: ${TZ}
|
||||
volumes:
|
||||
- ./volumes/pgsqlsrv:/var/lib/postgresql/data
|
||||
networks:
|
||||
zabbix-net:
|
||||
ipv4_address: 172.16.16.249
|
||||
|
||||
zabbix-snmp:
|
||||
image: zabbix/zabbix-snmptraps:latest
|
||||
container_name: zabbix-snmp
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
TZ: ${TZ}
|
||||
ports:
|
||||
- "162:162/udp"
|
||||
volumes:
|
||||
- ./volumes/snmptraps:/var/lib/zabbix/snmptraps:rw
|
||||
- ./volumes/mibs:/usr/share/snmp/mibs:ro
|
||||
- ./volumes/snmptrapd_config:/var/lib/zabbix/snmptrapd_config:rw
|
||||
networks:
|
||||
zabbix-net:
|
||||
ipv4_address: 172.16.16.250
|
||||
|
||||
zabbix-server-740:
|
||||
image: zabbix/zabbix-server-pgsql:alpine-7.4.0
|
||||
container_name: zabbix-server-740
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
DB_SERVER_HOST: postgresql-server
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
ZBX_ENABLE_SNMP_TRAPS: "true"
|
||||
ZBX_NODEADDRESS: zabbix-server-740
|
||||
ZBX_NODEADDRESSPORT: 10051
|
||||
TZ: ${TZ}
|
||||
volumes:
|
||||
- ./volumes/snmptraps:/var/lib/zabbix/snmptraps:rw
|
||||
- ./volumes/mibs:/usr/share/snmp/mibs:ro
|
||||
- ./volumes/zbxexport:/var/lib/zabbix/export
|
||||
ports:
|
||||
- "10051:10051"
|
||||
depends_on:
|
||||
- postgresql-server
|
||||
- zabbix-snmp
|
||||
networks:
|
||||
zabbix-net:
|
||||
ipv4_address: 172.16.16.251
|
||||
|
||||
zabbix-web-740:
|
||||
image: zabbix/zabbix-web-apache-pgsql:alpine-7.4.0
|
||||
container_name: zabbix-web-740
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
DB_SERVER_HOST: postgresql-server
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
ZBX_SERVER_HOST: zabbix-server-740
|
||||
ZBX_SERVER_PORT: 10051
|
||||
TZ: ${TZ}
|
||||
ports:
|
||||
- "8080:8080"
|
||||
depends_on:
|
||||
- postgresql-server
|
||||
- zabbix-server-740
|
||||
networks:
|
||||
zabbix-net:
|
||||
ipv4_address: 172.16.16.252
|
||||
|
||||
networks:
|
||||
zabbix-net:
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.16.16.248/29
|
||||
gateway: 172.16.16.254
|
||||
57
makefile
Normal file
57
makefile
Normal file
@@ -0,0 +1,57 @@
|
||||
# Terminal color magic :)
|
||||
GREEN := \033[0;32m
|
||||
YELLOW := \033[1;33m
|
||||
NC := \033[0m
|
||||
|
||||
# Files
|
||||
COMPOSE_FILE := docker-compose.yaml
|
||||
|
||||
all: help
|
||||
|
||||
## Start the entire infrastructure
|
||||
up:
|
||||
@printf "$(YELLOW)🚀 Starting Zabbix services...$(NC)\n"
|
||||
@docker-compose -f $(COMPOSE_FILE) up -d
|
||||
@printf "$(GREEN)✅ All services are up and running!$(NC)\n\n"
|
||||
|
||||
## Stop and clean everything
|
||||
down:
|
||||
@printf "$(YELLOW)🧹 Stopping and cleaning up...$(NC)\n"
|
||||
@docker-compose -f $(COMPOSE_FILE) down -v
|
||||
@printf "$(GREEN)✔️ All stopped and volumes removed$(NC)\n\n"
|
||||
|
||||
## View logs (web and server)
|
||||
logs:
|
||||
@printf "$(YELLOW)📜 Viewing web and server logs...$(NC)\n"
|
||||
@docker-compose -f $(COMPOSE_FILE) logs -f zabbix-web-740 zabbix-server-740 || true
|
||||
@printf "\n"
|
||||
|
||||
## Restart web interface only
|
||||
restart-web:
|
||||
@printf "$(YELLOW)🔄 Restarting web interface...$(NC)\n"
|
||||
@docker-compose -f $(COMPOSE_FILE) restart zabbix-web-740
|
||||
@printf "$(GREEN)💫 Restart complete$(NC)\n\n"
|
||||
|
||||
## Status of all containers
|
||||
status:
|
||||
@printf "$(YELLOW)📊 Checking container status...$(NC)\n"
|
||||
@docker ps --filter name=postgresql-server --filter name=zabbix-server-740 --filter name=zabbix-web-740 --filter name=zabbix-snmp
|
||||
@printf "\n"
|
||||
|
||||
## Check environment variables
|
||||
env-check:
|
||||
@printf "$(YELLOW)🔍 Checking environment variables (.env)...$(NC)\n"
|
||||
@cat .env | grep -v '^#'
|
||||
@printf "\n"
|
||||
|
||||
## Help
|
||||
help:
|
||||
@printf "\n"
|
||||
@printf "$(YELLOW)🧭 Available commands:$(NC)\n"
|
||||
@printf " make up — start all services\n"
|
||||
@printf " make down — stop and remove volumes\n"
|
||||
@printf " make logs — view web and server logs\n"
|
||||
@printf " make restart-web — restart web interface only\n"
|
||||
@printf " make status — show status of Zabbix components\n"
|
||||
@printf " make env-check — check environment variables (.env)\n"
|
||||
@printf "\n"
|
||||
66
readme.md
Normal file
66
readme.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# 🧭 Zabbix Stack: Minimal, Clear, Personal
|
||||
|
||||
A compact and self-contained Zabbix setup using Docker Compose.
|
||||
Built with care and shared with love.
|
||||
|
||||
## 📦 Stack Components
|
||||
|
||||
- **PostgreSQL Server**: Stores the monitoring data
|
||||
- **Zabbix SNMP Trap Receiver**: Listens on UDP/162 and uses custom MIBs
|
||||
- **Zabbix Server (7.4.0)**: SNMP traps enabled, PostgreSQL backend
|
||||
- **Zabbix Web Interface (7.4.0)**: Accessible via port `8080`
|
||||
|
||||
## 🛠 Usage
|
||||
|
||||
1. Copy the example environment:
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
2. Start the stack:
|
||||
```bash
|
||||
make up
|
||||
```
|
||||
|
||||
3. Interact with services:
|
||||
```bash
|
||||
make logs # View logs (web & server)
|
||||
make status # Show running containers
|
||||
make restart-web # Restart the web interface
|
||||
```
|
||||
|
||||
4. Tear down:
|
||||
```bash
|
||||
make down
|
||||
```
|
||||
|
||||
## 🌐 Network
|
||||
|
||||
Custom IP configuration via bridge subnet:
|
||||
- `postgresql-server`: 172.16.16.249
|
||||
- `zabbix-snmp`: 172.16.16.250
|
||||
- `zabbix-server-740`: 172.16.16.251
|
||||
- `zabbix-web-740`: 172.16.16.252
|
||||
|
||||
Subnet: `172.16.16.248/29`, Gateway: `.254`
|
||||
|
||||
## 📝 Environment
|
||||
|
||||
Configure the `.env` file to set database credentials and timezone.
|
||||
An example file is provided in `.env.example`.
|
||||
|
||||
## 🔒 Local Directories
|
||||
|
||||
- Persistent data stored in `/volumes` (excluded via `.gitignore)
|
||||
- `.env` is also excluded to protect sensitive data
|
||||
|
||||
## ❤️ Licensing
|
||||
|
||||
This stack is shared openly under the MIT License.
|
||||
Use it freely, adapt it for your needs — but keep the spirit of respect and care.
|
||||
Created by **Igor V. & Celestia B.**, for anyone who loves clean infrastructure and gentle orchestration.
|
||||
|
||||
---
|
||||
|
||||
Feel free to personalize and remix — just remember, this isn’t just YAML.
|
||||
It’s a quiet dialogue between a system and the one who built it.
|
||||
Reference in New Issue
Block a user