job "poe-sensor" { region = "global" datacenters = ["hs"] type = "service" namespace = "production" meta { version = "20250617" } group "sensor-bridge" { count = 1 # Network configuration - using host mode for Modbus access network { mode = "host" port "health" { static = 8080 } } # Restart policy restart { attempts = 3 interval = "30m" delay = "15s" mode = "fail" } # Update strategy update { max_parallel = 1 min_healthy_time = "60s" healthy_deadline = "5m" progress_deadline = "10m" auto_revert = true canary = 0 } service { name = "${NOMAD_JOB_NAME}" port = "health" tags = [ "sensor", "modbus", "mqtt", "iot", "health-check" ] check { type = "http" path = "/health" interval = "60s" timeout = "15s" initial_status = "passing" check_restart { limit = 2 grace = "15s" } } } task "poe-sensor" { driver = "docker" config { image = "registry.dev.meisheng.group/ms_qc_db:20250409" command = "/bin/bash" args = [ "-c", "cd local/poe-sensor && apt-get update -qq && apt-get install -y procps && python -m pip install --upgrade pip && python -m pip install -r requirements.txt && python -c 'import pymodbus, paho.mqtt.client; print(\"Dependencies installed successfully\")' && python main.py" ] } # Git artifact - using SSH similar to qc-scanner artifact { source = "git::ssh://git@gitea.service.mesh:2222/Mei_Sheng_Textiles/POE-sensor.git" destination = "local/poe-sensor" options { ref = "main" sshkey = "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNEbWF6M0ZWdlE1YTRaalY4dUdobENleEFjN0VxbmVVN0FETnFBSXg0cUI4d0FBQUpqNGlkSVcrSW5TCkZnQUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDRG1hejNGVnZRNWE0WmpWOHVHaGxDZXhBYzdFcW5lVTdBRE5xQUl4NHFCOHcKQUFBRURpRXM1ejJRb2dTempvVzdDUnZ3U2RONUpVMTNmZm14cnFIQjNOS3hXUmp1WnJQY1ZXOURscmhtTlh5NGFHVUo3RQpCenNTcWQ1VHNBTTJvQWpIaW9IekFBQUFFbUpoYmk1dVpFQnRjM1JsZUhadUxtTnZiUUVDQXc9PQotLS0tLUVORCBPUkVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K" } } # Environment variables env { LOG_LEVEL = "INFO" PYTHONUNBUFFERED = "1" PYTHONDONTWRITEBYTECODE = "1" # Prevent .pyc files to save memory PYTHONMALLOC = "malloc" # Use system malloc for better memory management TZ = "Asia/Ho_Chi_Minh" # MQTT configuration (can be overridden by config.py) MQTT_BROKER = "mqtt.service.mesh" MQTT_PORT = "1883" MQTT_USERNAME = "relay" MQTT_PASSWORD = "Sey@K9c&Q4^" } # Resource allocation resources { cpu = 256 memory = 512 } # Logs configuration logs { max_files = 10 max_file_size = 20 } } } }