https://github.com/mutablelogic/tf-nomad
Terraform for nomad clusters
https://github.com/mutablelogic/tf-nomad
Last synced: 2 months ago
JSON representation
Terraform for nomad clusters
- Host: GitHub
- URL: https://github.com/mutablelogic/tf-nomad
- Owner: mutablelogic
- License: apache-2.0
- Created: 2024-01-22T11:20:03.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-04T19:16:50.000Z (3 months ago)
- Last Synced: 2025-03-04T20:25:34.633Z (3 months ago)
- Language: HCL
- Size: 309 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# tf-nomad
Terraform modules for nomad clusters. In order to use these modules, please use
the following provider block:```hcl
provider "nomad" {
address = env.NOMAD_ADDR
region = env.NOMAD_REGION
secret_id = env.NOMAD_TOKEN
}
```## coredns
DNS server which could be used to resolve nomad services into dns records
* [Documentation](https://coredns.io/)
* [Terraform Example](_examples/coredns.tf)
* [Nomad Job](coredns/nomad/coredns.hcl)TODO:
* [ ] All nomad jobs will need to use the coredns service as a dns_server option
## github-action-runner
GitHub action runner, which can be placed on several nodes
* [Documentation](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners)
* [Terraform Example](_examples/github-action-runner.tf)
* [Nomad Job](github-action-runner/nomad/github-action-runner.hcl)TODO:
* [ ] Remove runner from github when job is removed
## grafana
grafana is a database server
* [Documentation](https://grafana.com/docs/grafana/latest/)
* [Terraform Example](_examples/grafana.tf)
* [Nomad Job](grafana/nomad/grafana.hcl)TODO:
* [ ] LDAP integration
* [ ] Add TLS support
* [ ] Data source provisioning
* [ ] Dashboard provisioning## immich
Photo storage and sharing service
* [Documentation](https://immich.app/docs/overview/introduction)
* [Terraform Example](_examples/immich.tf)
* [Nomad Job](immich/nomad/immich.hcl)## InfluxDB
Time-series database, which can be placed on several nodes
* [Documentation](https://docs.influxdata.com/influxdb/v2/)
* [Terraform Example](_examples/influxdb.tf)
* [Nomad Job](influxdb/nomad/influxdb.hcl)TODO:
* [ ] Add TLS support
## metabase
Analytics dashboard builder
* [Documentation](https://www.metabase.com/product/starter)
* [Terraform Example](_examples/metabase.tf)
* [Nomad Job](metabase/nomad/metabase.hcl)TODO:
* [ ] Add LDAP support
## mongodb
Document database, which can be replicated on several nodes
* [Documentation](https://www.mongodb.com/docs/manual/)
* [Terraform Example](_examples/mongodb.tf)
* [Nomad Job](mongodb/nomad/mongodb.hcl)TODO:
* [ ] Add TLS support
## mosquitto
MQTT broker, which can be placed on several nodes
* [Documentation](https://mosquitto.org/)
* [Terraform Example](_examples/mosquitto.tf)
* [Nomad Job](mosquitto/nomad/mosquitto.hcl)TODO:
* [ ] Add TLS support
## nginx
Web server and reverse proxy, which can be placed on several nodes
* [Documentation](https://nginx.org/en/)
* [Terraform Example](_examples/nginx.tf)
* [Nomad Job](nginx/nomad/nginx.hcl)TODO:
* [ ] In progress
* [ ] Add TLS certificate support
* [ ] Not sure how we can integrate with nomad services## Ollama
Ollama LLM service, with the Open WebUI.
* [Ollama](https://ollama.com/)
* [Open WebUI](https://docs.openwebui.com/)
* [Terraform Example](_examples/ollama.tf)
* [Nomad Job](ollama/nomad/ollama.hcl)TODO:
* [ ] Add multiple AI service keys and hosts
* [ ] Potentiallty don't call Ollama like this from the Web UI, if there is more than one host## OpenLDAP
OpenLDAP server, which can be placed on several nodes
* [Documentation](https://www.openldap.org/)
* [Terraform Example](_examples/openldap.tf)
* [Nomad Job](openldap/nomad/openldap.hcl)TODO:
* [ ] In progress
* [ ] Add TLS support
* [ ] Add replication support
* [ ] Add custom schema support## OpenLDAP Administation
OpenLDAP administration, for adding users and groups, and changing
passwords* [Documentation](https://github.com/wheelybird/ldap-user-manager)
* [Terraform Example](_examples/openldap-admin.tf)
* [Nomad Job](postgresql/openldap-admin/openldap-admin.hcl)TODO:
* [ ] Add TLS support
* [ ] Add SNMP support## PostgreSQL
PostgreSQL is a database server
* [Documentation](https://www.postgresql.org/)
* [Terraform Example](_examples/postgres.tf)
* [Nomad Job](postgres/nomad/postgres.hcl)TODO:
* [ ] LDAP integration
* [ ] Add TLS support
* [ ] Use volume instead when the data does not have '/' as prefix
* [ ] Add users, databases and roles support on initialization## Photoprism
Photoprism is a photo library hosting service. It uses it's own
MariaDB database.* [Documentation](https://www.photoprism.app/)
* [Terraform Example](_examples/photoprism.tf)
* [Nomad Job](photoprism/nomad/photoprism.hcl)## seaweedfs
Cluster filesystem, which can be spread across multiple nodes.
* [Documentation](https://github.com/seaweedfs/seaweedfs)
* [Terraform Example](_examples/seaweedfs.tf)
* [Nomad Job](seaweedfs/nomad/seaweedfs.hcl)TODO:
* [ ] A lot of testing is needed
## semaphore
Semaphore is a Ansible front-end
* [Documentation](https://www.semui.co/)
* [Terraform Example](_examples/semaphore.tf)
* [Nomad Job](semaphore/nomad/semaphore.hcl)TODO:
* [ ] In progress
* [ ] LDAP integration## telegraf
Time-series metrics collector, which can be placed on several nodes
* [Documentation](https://docs.influxdata.com/telegraf/v1/)
* [Terraform Example](_examples/telegraf.tf)
* [Nomad Job](telegraf/nomad/telegraf.hcl)When setting up your configuration with inputs and outputs, each value needs
to be JSON encoded, so that the configuration can be passed as a map of strings,
as Terraform does not support maps of more than one type. See the terraform
example above for a demonstration of this.TODO:
* [ ] Add processors support