nomad/jobs/dcufm.hcl
2023-03-18 13:13:16 +00:00

128 lines
3.5 KiB
HCL

job "dcufm" {
datacenters = ["aperture"]
type = "service"
group "icecast" {
count = 1
network {
port "http" {
static = 2333
}
}
constraint {
attribute = "${attr.unique.hostname}"
value = "wheatley"
}
service {
port = "http"
name = "icecast-stream"
check {
type = "http"
path = "/"
interval = "10s"
timeout = "2s"
}
tags = [
"traefik.enable=true",
"traefik.http.routers.icecast-stream.rule=Host(`dcufm.redbrick.dcu.ie`)",
"traefik.http.routers.icecast-stream.entrypoints=web,websecure",
"traefik.http.routers.icecast-stream.service=icecast-stream",
"traefik.http.routers.icecast-stream.tls=true",
"traefik.tcp.services.icecast-stream.loadbalancer.server.port=${NOMAD_PORT_http}",
"traefik.tcp.routers.icecast-stream.service=icecast-stream",
"traefik.tcp.routers.icecast-stream.rule=HostSNI(`dcufm.redbrick.dcu.ie`)",
"traefik.tcp.routers.icecast-stream.entrypoints=web,websecure",
"traefik.tcp.routers.icecast-stream.tls=true",
"traefik.tcp.routers.icecast-stream.tls.certresolver=lets-encrypt",
]
}
task "icecast2" {
driver = "docker"
config {
image = "moul/icecast"
ports = ["http"]
volumes = [
"local/icecast_dcufm.xml:/etc/icecast2/icecast.xml"
]
}
template {
data = <<EOH
<icecast>
<limits>
<clients>500</clients>
<sources>5</sources>
<threadpool>5</threadpool>
<queue-size>524288</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
<burst-on-connect>1</burst-on-connect>
<burst-size>65535</burst-size>
</limits>
<authentication>
<source-password>{{ key "dcufm/passwords/source" }}</source-password>
<relay-password>{{ key "dcufm/passwords/relay" }}</relay-password>
<admin-user>{{ key "dcufm/users/admin" }}</admin-user>
<admin-password>{{ key "dcufm/passwords/admin" }}</admin-password>
</authentication>
<hostname>dcufm.redbrick.dcu.ie</hostname>
<listen-socket>
<port>{{ env "NOMAD_PORT_http" }}</port>
<bind-address>0.0.0.0</bind-address>
</listen-socket>
<fileserve>1</fileserve>
<paths>
<basedir>/usr/share/icecast2</basedir>
<logdir>/var/log/icecast2</logdir>
<webroot>/usr/share/icecast2/web</webroot>
<adminroot>/usr/share/icecast2/admin</adminroot>
<alias source="/" dest="/status.xsl"/>
</paths>
<mount>
<mount-name>/stream.mp3</mount-name>
<fallback-mount>/fallback.mp3</fallback-mount>
<fallback-override>1</fallback-override>
<fallback-when-full>1</fallback-when-full>
</mount>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>4</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
<logsize>10000</logsize> <!-- Max size of a logfile -->
</logging>
</icecast>
EOH
destination = "local/icecast_dcufm.xml"
perms = "755"
}
template {
data = <<EOH
ICECAST_SOURCE_PASSWORD="{{ key "dcufm/passwords/source" }}"
ICECAST_ADMIN_PASSWORD="{{ key "dcufm/passwords/admin" }}"
ICECAST_RELAY_PASSOWRD="{{ key "dcufm/passwords/relay" }}"
ICECAST_HOSTNAME="dcufm.redbrick.dcu.ie"
EOH
destination = "local/file.env"
env = true
}
}
}
}