-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathdocker-compose.yaml
More file actions
139 lines (114 loc) · 3.7 KB
/
Copy pathdocker-compose.yaml
File metadata and controls
139 lines (114 loc) · 3.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# Development Docker Compose Configuration (DEFAULT)
# Builds from source with hot-reload support (Air)
#
# Setup:
# 1. Copy .env.example to .env
# 2. Edit .env with your credentials
# 3. Run: docker compose up --build
#
# Features:
# - Hot reload with Air
# - Volume mount for live code changes
# - Debug-friendly configuration
services:
app:
restart: always
container_name: snmp-olt-zte-dev
build:
context: .
target: dev
dockerfile: Dockerfile
command: air -c .air.toml
environment:
# Application
APP_ENV: ${APP_ENV:-development}
# Server
SERVER_HOST: ${SERVER_HOST:-0.0.0.0}
SERVER_PORT: ${SERVER_PORT:-8081}
# SNMP Configuration
SNMP_HOST: ${SNMP_HOST}
SNMP_PORT: ${SNMP_PORT:-161}
SNMP_COMMUNITY: ${SNMP_COMMUNITY}
# Redis (use Docker service name)
REDIS_HOST: redis
REDIS_PORT: ${REDIS_PORT:-6379}
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
REDIS_DB: ${REDIS_DB:-0}
REDIS_MIN_IDLE_CONNECTIONS: ${REDIS_MIN_IDLE_CONNECTIONS:-10}
REDIS_POOL_SIZE: ${REDIS_POOL_SIZE:-100}
REDIS_POOL_TIMEOUT: ${REDIS_POOL_TIMEOUT:-240}
# TLS/HTTPS
USE_TLS: ${USE_TLS:-false}
TLS_CERT_FILE: ${TLS_CERT_FILE:-/certs/cert.pem}
TLS_KEY_FILE: ${TLS_KEY_FILE:-/certs/key.pem}
# Authentication
API_KEY: ${API_KEY:-}
# CORS
CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-*}
CORS_ALLOWED_METHODS: ${CORS_ALLOWED_METHODS:-GET,POST,PUT,DELETE,OPTIONS}
CORS_ALLOWED_HEADERS: ${CORS_ALLOWED_HEADERS:-Accept,Authorization,Content-Type,X-API-Key,X-Request-ID}
CORS_ALLOW_CREDENTIALS: ${CORS_ALLOW_CREDENTIALS:-true}
CORS_MAX_AGE: ${CORS_MAX_AGE:-300}
# SNMP Trap
TRAP_ENABLED: ${TRAP_ENABLED:-false}
TRAP_PORT: ${TRAP_PORT:-1620}
TRAP_WEBHOOK_URL: ${TRAP_WEBHOOK_URL:-}
TRAP_WEBHOOK_TYPE: ${TRAP_WEBHOOK_TYPE:-}
TRAP_WEBHOOK_CHAT_ID: ${TRAP_WEBHOOK_CHAT_ID:-}
TRAP_CRITICAL_INTERVAL: ${TRAP_CRITICAL_INTERVAL:-300}
TRAP_HIGH_INTERVAL: ${TRAP_HIGH_INTERVAL:-3600}
TRAP_MEDIUM_INTERVAL: ${TRAP_MEDIUM_INTERVAL:-14400}
TRAP_LOW_INTERVAL: ${TRAP_LOW_INTERVAL:-28800}
TRAP_CRITICAL_REPEAT: ${TRAP_CRITICAL_REPEAT:-0}
TRAP_HIGH_REPEAT: ${TRAP_HIGH_REPEAT:-0}
TRAP_MEDIUM_REPEAT: ${TRAP_MEDIUM_REPEAT:-0}
TRAP_LOW_REPEAT: ${TRAP_LOW_REPEAT:-0}
TRAP_WEBHOOK_RETRIES: ${TRAP_WEBHOOK_RETRIES:-3}
TRAP_WEBHOOK_TIMEOUT: ${TRAP_WEBHOOK_TIMEOUT:-10}
# RX Power Monitor
POWER_MONITOR_ENABLED: ${POWER_MONITOR_ENABLED:-false}
POWER_MONITOR_INTERVAL: ${POWER_MONITOR_INTERVAL:-300}
POWER_MONITOR_CRON: ${POWER_MONITOR_CRON:-}
POWER_MONITOR_TIMEZONE: ${POWER_MONITOR_TIMEZONE:-}
RX_POWER_HIGH_THRESHOLD: ${RX_POWER_HIGH_THRESHOLD:--8.0}
RX_POWER_LOW_THRESHOLD: ${RX_POWER_LOW_THRESHOLD:--25.0}
# Timezone
TZ: ${TZ:-Asia/Jakarta}
volumes:
- ./:/app # Mount the entire project for hot reload
depends_on:
redis:
condition: service_healthy
ports:
- "${SERVER_PORT:-8081}:8081"
- "${TRAP_PORT:-1620}:1620/udp"
networks:
- snmp-olt-network
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
redis:
image: redis:7.2-alpine
container_name: redis-dev
restart: unless-stopped
environment:
TZ: ${TZ:-Asia/Jakarta}
ports:
- "${REDIS_PORT:-6379}:6379"
networks:
- snmp-olt-network
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 3
networks:
snmp-olt-network:
driver: bridge
volumes:
redis-data:
driver: local