homelab-nomad/services/main.tf

301 lines
8.4 KiB
HCL

# module "nextcloud" {
# source = "./nextcloud"
#
# depends_on = [module.databases]
# }
module "backups" {
source = "./backups"
# In parent module
# depends_on = [module.databases]
}
module "media" {
source = "./media"
}
resource "nomad_job" "whoami" {
hcl2 {
enabled = true
vars = {
"count" = 1,
# "count" = "${2 * length(data.consul_service.nomad.service)}",
}
}
jobspec = file("${path.module}/whoami.nomad")
}
resource "nomad_job" "ipdvr" {
jobspec = file("${path.module}/ip-dvr.nomad")
}
resource "consul_config_entry" "nzbget_intents" {
depends_on = [nomad_job.ipdvr]
name = "nzbget"
kind = "service-intentions"
config_json = jsonencode({
Sources = [
{
Action = "allow"
Name = "sonarr"
Precedence = 9
Type = "consul"
},
]
})
}
# module "nzbget" {
# source "./levant"
#
# template_path = "service.nomad"
# variables = {
# name = "nzbget"
# image = "linuxserver/nzbget"
# service_port = 6789
# ingress = true
# env = jsonencode({
# PGID = 100
# PUID = 1001
# TZ = "America/Los_Angeles"
# })
# host_volumes = jsonencode([
# {
# name = "download"
# dest = "/srv/volumes/download"
# read_only = false
# },
# ])
# }
# }
#
# module "sonarr" {
# source = "./levant"
#
# template_path = "service.nomad"
# variables = {
# name = "sonarr"
# image = "linuxserver/sonarr"
# service_port = 8989
# ingress = true
# env = jsonencode({
# PGID = 100
# PUID = 1001
# TZ = "America/Los_Angeles"
#
# })
# host_volumes = jsonencode([
# {
# name = "sonarr-data"
# dest = "/config"
# read_only = false
# },
# {
# name = "tv-sonarr"
# dest = "/srv/volumes/media-write/TV Shows"
# read_only = false
# },
# {
# name = "download"
# dest = "/srv/volumes/download"
# read_only = false
# },
# ])
# }
# }
# resource "nomad_job" "photoprism" {
# jobspec = templatefile("services_tf.nomad", {
# vars = {
# name = "photoprism"
# image = "photoprism/photoprism:latest"
# ingress = true
# service_port = 2342
# sticky_disk = true
# healthcheck = "/library/login"
# env = {
# PHOTOPRISM_SITE_CAPTION = "AI-Powered Photos App"
# PHOTOPRISM_SITE_DESCRIPTION = "Fijolek home photos"
# PHOTOPRISM_SITE_TITLE = "PhotoPrism"
# PHOTOPRISM_SITE_URL = "https://photoprism.thefij.rocks:2342/" # server URL in the format "http(s)://domain.name(:port)/(path)"
# PHOTOPRISM_SPONSOR = "true"
# # Paths
# PHOTOPRISM_ORIGINALS_PATH = "/photoprism-media/Library"
# PHOTOPRISM_IMPORT_PATH = "/photoprism-media/Import"
# PHOTOPRISM_STORAGE_PATH = "$${NOMAD_TASK_DIR}/storage" # Storage PATH for generated files like cache and index
# # Unix permissions
# PHOTOPRISM_UID = 500
# PHOTOPRISM_GID = 100
# PHOTOPRISM_UMASK = 0000
# }
# mysql = true
# vault = true
# resources = {
# cpu = 100
# memory = 500
# memory_max = 1000
# }
# host_volumes = [
# {
# name = "photoprism-media"
# dest = "/photoprism-media"
# read_only = false
# },
# ]
# mysql_bootstrap = {
# vault_key = "kv/data/photoprism"
# }
# templates = [
# {
# data = <<EOF
# {{ with secret "kv/data/photoprism" -}}
# PHOTOPRISM_ADMIN_USER={{ .Data.data.admin_user }}
# PHOTOPRISM_ADMIN_PASSWORD={{ .Data.data.admin_password }}
# PHOTOPRISM_DATABASE_DRIVER=mysql
# PHOTOPRISM_DATABASE_NAME={{ .Data.data.db_name }}
# PHOTOPRISM_DATABASE_USER={{ .Data.data.db_user }}
# PHOTOPRISM_DATABASE_PASSWORD={{ .Data.data.db_pass }}
# PHOTOPRISM_DATABASE_SERVER="{{ env "NOMAD_UPSTREAM_ADDR_mysql_server" }}"
# {{ end -}}
# EOF
# dest_prefix = "$${NOMAD_SECRETS_DIR}/"
# dest = "env"
# env = true
# mount = false
# },
# ]
# }
# })
# }
# module "photoprism" {
# source = "IamTheFij/levant/nomad"
# version = "0.1.0"
#
# template_path = "service.nomad"
# variables = {
# name = "photoprism"
# image = "photoprism/photoprism:latest"
# ingress = true
# service_port = 2342
# sticky_disk = true
# healthcheck = "/library/login"
# env = jsonencode({
# PHOTOPRISM_SITE_CAPTION = "AI-Powered Photos App"
# PHOTOPRISM_SITE_DESCRIPTION = "Fijolek home photos"
# PHOTOPRISM_SITE_TITLE = "PhotoPrism"
# PHOTOPRISM_SITE_URL = "https://photoprism.thefij.rocks:2342/" # server URL in the format "http(s)://domain.name(:port)/(path)"
# PHOTOPRISM_SPONSOR = "true"
# # Paths
# PHOTOPRISM_ORIGINALS_PATH = "/photoprism-media/Library"
# PHOTOPRISM_IMPORT_PATH = "/photoprism-media/Import"
# PHOTOPRISM_STORAGE_PATH = "$${NOMAD_TASK_DIR}/storage" # Storage PATH for generated files like cache and index
# # Unix permissions
# PHOTOPRISM_UID = 500
# PHOTOPRISM_GID = 100
# PHOTOPRISM_UMASK = 0000
# })
# mysql = true
# vault = true
# host_volumes = jsonencode([
# {
# name = "photoprism-media"
# dest = "/photoprism-media"
# read_only = false
# },
# ])
# mysql_bootstrap = jsonencode({
# vault_key = "kv/data/photoprism"
# })
# templates = jsonencode([
# {
# data = <<EOF
# {{ with secret "kv/data/photoprism" -}}
# PHOTOPRISM_ADMIN_USER={{ .Data.data.admin_user }}
# PHOTOPRISM_ADMIN_PASSWORD={{ .Data.data.admin_password }}
# PHOTOPRISM_DATABASE_DRIVER=mysql
# PHOTOPRISM_DATABASE_NAME={{ .Data.data.db_name }}
# PHOTOPRISM_DATABASE_USER={{ .Data.data.db_user }}
# PHOTOPRISM_DATABASE_PASSWORD={{ .Data.data.db_pass }}
# PHOTOPRISM_DATABASE_SERVER="{{ env "NOMAD_UPSTREAM_ADDR_mysql_server" }}"
# {{ end -}}
# EOF
# dest_prefix = "$${NOMAD_SECRETS_DIR}/"
# dest = "env"
# env = true
# mount = false
# },
# ])
# }
# }
module "photoprism_module" {
source = "./service"
name = "photoprism"
image = "photoprism/photoprism:latest"
ingress = true
service_port = 2342
sticky_disk = true
healthcheck_path = "/library/login"
env = {
# UI
PHOTOPRISM_SITE_CAPTION = "AI-Powered Photos App"
PHOTOPRISM_SITE_DESCRIPTION = "Fijolek home photos"
PHOTOPRISM_SITE_TITLE = "PhotoPrism"
PHOTOPRISM_SITE_URL = "https://photoprism.thefij.rocks:2342/" # server URL in the format "http(s)://domain.name(:port)/(path)"
PHOTOPRISM_SPONSOR = "true"
# Worker config
PHOTOPRISM_WORKERS = 2
# Paths
PHOTOPRISM_ORIGINALS_PATH = "/photoprism-media/Library"
PHOTOPRISM_IMPORT_PATH = "/photoprism-media/Import"
PHOTOPRISM_STORAGE_PATH = "$${NOMAD_TASK_DIR}/storage" # Storage PATH for generated files like cache and index
# Unix permissions
PHOTOPRISM_UID = 500
PHOTOPRISM_GID = 100
PHOTOPRISM_UMASK = 0000
}
resources = {
cpu = 1000
memory = 2000
# memory_max = 2000
}
use_mysql = true
use_vault = true
host_volumes = [
{
name = "photoprism-media"
dest = "/photoprism-media"
read_only = false
},
]
mysql_bootstrap = {
vault_key = "kv/data/photoprism"
}
templates = [
{
data = <<EOF
{{ with secret "kv/data/photoprism" -}}
PHOTOPRISM_ADMIN_USER={{ .Data.data.admin_user }}
PHOTOPRISM_ADMIN_PASSWORD={{ .Data.data.admin_password }}
PHOTOPRISM_DATABASE_DRIVER=mysql
PHOTOPRISM_DATABASE_NAME={{ .Data.data.db_name }}
PHOTOPRISM_DATABASE_USER={{ .Data.data.db_user }}
PHOTOPRISM_DATABASE_PASSWORD={{ .Data.data.db_pass }}
PHOTOPRISM_DATABASE_SERVER="{{ env "NOMAD_UPSTREAM_ADDR_mysql_server" }}"
{{ end -}}
EOF
dest_prefix = "$${NOMAD_SECRETS_DIR}/"
dest = "env"
env = true
mount = false
},
]
}