job "nomad-mcp" { datacenters = ["jm"] type = "service" namespace = "development" group "app" { count = 1 network { port "http" { to = 8000 } } task "nomad-mcp" { driver = "docker" config { image = "registry.dev.meisheng.group/nomad_mcp:20250226" ports = ["http"] command = "python" args = ["-m", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] # Mount the local directory containing the code mount { type = "bind" source = "local/nomad_mcp" target = "/app" readonly = false } } # Pull code from Gitea artifact { source = "git::ssh://git@gitea.service.mesh:2222/Mei_Sheng_Textiles/nomad_mcp.git" destination = "local/nomad_mcp" options { ref = "main" # or whichever branch/tag you want to use sshkey = "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNBY01oYkNPVXhFOHBYQ3d5UEh0ZFR4aThHU0pzNEdTNXZ6ZTR6Tm1ueUYvUUFBQUtCQm5RZi9RWjBICi93QUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQWNNaGJDT1V4RThwWEN3eVBIdGRUeGk4R1NKczRHUzV2emU0ek5tbnlGL1EKQUFBRURreWwzQlZlek9YUWZUNzZac0NkYTZPNTFnMExsb25EMEd6L2Y4SHh3dzRCd3lGc0k1VEVUeWxjTEREOGUxMVBHTAp3WkltemdaTG0vTjdqTTJhZklYOUFBQUFHR1JsY0d4dmVTQnJaWGtnWm05eUlHNXZiV0ZrWDIxamNBRUNBd1FGCi0tLS0tRU5EIE9QRU5TU0ggUFJJVkFURSBLRVktLS0tLQo=" } } env { # Nomad connection settings NOMAD_ADDR = "http://pjmldk01.ds.meisheng.group:4646" NOMAD_NAMESPACE = "development" NOMAD_SKIP_VERIFY = "true" # API settings PORT = "8000" HOST = "0.0.0.0" # Logging level LOG_LEVEL = "INFO" # Enable to make development easier RELOAD = "true" # Set PYTHONPATH to include the app directory PYTHONPATH = "/app" } resources { cpu = 200 memory = 256 } service { name = "nomad-mcp" port = "http" tags = [ "traefik.enable=true", "traefik.http.routers.nomad-mcp.entryPoints=https", "traefik.http.routers.nomad-mcp.rule=Host(`nomad_mcp.dev.meisheng.group`)", "traefik.http.routers.nomad-mcp.middlewares=proxyheaders@consulcatalog" ] check { type = "http" path = "/api/health" interval = "10s" timeout = "2s" check_restart { limit = 3 grace = "60s" } } } } } # Define update strategy update { max_parallel = 1 min_healthy_time = "30s" healthy_deadline = "5m" auto_revert = true } }