Files
a13labs.infra/terraform/apps/dev-01/config.tf
T
alexandre.pires 040f7a382f Add macOS development station playbook and role
- Created a new Ansible playbook for configuring macOS development stations.
- Added role `macos_dev_station` with default variables, handlers, and tasks.
- Implemented tasks for installing Homebrew packages, managing user configurations, and setting up launch agents for code-server and opencode.
- Included templates for launchd plist files and startup scripts for code-server and opencode.
- Added validation for required environment variables and configurations.
- Updated inventory to include macOS hosts and added a setup script for initial prerequisites.
- Modified Terraform configuration to include DNS records for new services.
2026-07-04 15:37:35 +02:00

327 lines
8.3 KiB
Terraform

locals {
# storage
persistent_folder = "/mnt/srv"
lab_domain = "lab.alexpires.me"
internal_issuer = "internal-ca"
# open-webui
open_webui_fqdn = "open-webui.${local.lab_domain}"
open_webui_log_level = "DEBUG"
# samba
samba_shares = [
{
name = "Storage"
path = "/mnt/md0/storage"
comment = "Main Storage"
}
]
# DNS
dns_nameservers = [
"192.168.0.252",
"1.1.1.1",
"8.8.8.8"
]
override_hosts = [
{
name = "cloud.alexpires.me"
ip = "10.19.4.136"
},
]
zones = [
{
fqdn = "${local.lab_domain}"
records = [
{
name = "vh-01"
type = "A"
content = "10.19.4.254"
},
{
name = "gpu-01"
type = "A"
content = "10.19.4.106"
},
{
name = "dev-01"
type = "A"
content = "10.19.4.136"
},
{
name = "mac-01"
type = "A"
content = "10.19.4.203"
},
{
name = "ollama"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
{
name = "open-webui"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
{
name = "smb"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
{
name = "grafana"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
{
name = "prometheus"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
{
name = "game-01"
type = "A"
content = "10.19.4.245"
},
{
name = "prod-01"
type = "A"
content = "10.5.5.2"
},
{
name = "hpz440"
type = "A"
content = "10.19.4.121"
},
{
name = "music"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
{
name = "search"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
{
name = "ci-01"
type = "A"
content = "10.19.4.207"
},
{
name = "vaultwarden"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
{
name = "terraform-mcp"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
{
name = "opencode"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
{
name = "vscode"
type = "CNAME"
content = "dev-01.${local.lab_domain}."
},
]
}
]
proxy_services = {
# "comfyui" = {
# http_port = 8080
# https_port = 8443
# tls = true
# fqdn = ["comfyui.lab.alexpires.me"]
# upstream = "http://upstream.comfyui.svc.cluster.local:8188"
# resolver = "kube-dns.kube-system.svc.cluster.local"
# locations = [
# {
# path = "/"
# "Upgrade" = "$http_upgrade"
# "Connection" = "upgrade"
# },
# ]
# }
"opencode" = {
http_port = 4096
tls = true
fqdn = ["opencode.lab.alexpires.me"]
upstream = "http://10.19.4.203:4096"
read_timeout = "3600s"
locations = [
{
path = "/"
headers = {
"Upgrade" = "$http_upgrade"
"Connection" = "upgrade"
}
},
]
},
"code-server" = {
http_port = 3000
tls = true
fqdn = ["vscode.lab.alexpires.me"]
upstream = "http://10.19.4.203:3000"
locations = [
{
path = "/"
headers = {
"Upgrade" = "$http_upgrade"
"Connection" = "upgrade"
}
},
]
}
}
streams = {
"dns" = {
port = 53
host_port = 53
upstream = "dns.dns.svc.cluster.local"
protocol = "udp"
}
"smb" = {
port = 445
host_port = 445
upstream = "smb.samba.svc.cluster.local"
protocol = "tcp"
}
"netbios" = {
port = 139
host_port = 139
upstream = "netbios.samba.svc.cluster.local"
protocol = "tcp"
}
}
llm_proxy = {
enabled = true
mac = "04:7c:16:d6:63:66"
ip = "10.19.4.106"
port = 11434
scheme = "http"
}
llm_proxy_1 = {
enabled = true
mac = "52:54:00:CD:DD:2E"
ip = "10.19.4.207"
port = 11434
scheme = "http"
}
# comfyui_proxy = {
# mac = "04:7c:16:d6:63:66"
# ip = "10.19.4.106"
# port = "8188"
# scheme = "http"
# }
scaleway_smtp_host = "smtp.tem.scw.cloud"
nextcloud_fqdn = "cloud.alexpires.me"
nextcloud_db_passwd = var.nextcloud_db_passwd
nextcloud_db_root_password = var.nextcloud_db_root_password
nextcloud_db_path = "/mnt/md0/nextcloud.db"
nextcloud_backup = "/mnt/md0/nextcloud.backups"
nextcloud_data = "/mnt/md0/nextcloud.files"
nextcloud_config = {
mail_from = "cloud"
mail_domain = "alexpires.me"
smtp_user = var.scaleway_project_id
smtp_password = local.mail_app_api_secret_key
smtp_host = local.scaleway_smtp_host
admin_password = var.nextcloud_admin_password
db_host = module.nextcloud_db.host
db_name = module.nextcloud_db.db_name
db_user = module.nextcloud_db.app_crendentials_name
db_password = module.nextcloud_db.app_crendentials_name
}
backup_retention_days = 3
backup_cron_schedule = "0 2 * * *" # Daily at 2 AM
backup_bucket_name = data.terraform_remote_state.scaleway.outputs.backup_bucket_name
backup_app_api_secret_key = data.terraform_remote_state.scaleway.outputs.backup_app_api_secret_key
backup_app_api_access_key = data.terraform_remote_state.scaleway.outputs.backup_app_api_access_key
mail_app_api_secret_key = data.terraform_remote_state.scaleway.outputs.mail_app_api_secret_key
# prometheus and grafana
prometheus_config = file("${path.module}/resources/prometheus.yml")
prometheus_rules = file("${path.module}/resources/prometheus-rules.yml")
alertmanager_config = file("${path.module}/resources/alertmanager.yml")
alertmanager_email_config = {
to = "c.alexandre.pires@alexpires.me"
from = "alertmanager@alexpires.me"
smarthost = "smtp.tem.scw.cloud:587"
auth_username = var.scaleway_project_id
auth_password = local.mail_app_api_secret_key
}
smartctl_static_version = "8.0-198-g34e7e4975211"
smartctl_sha256 = "d7e779664248942bb519b254dcb49cddaec2593e192cc468254c58e64da20840"
telegram_chat_id = "5432313610" # a13labs channel
telegram_message = file("${path.module}/resources/telegram.tpl")
grafana_fqdn = "grafana.${local.lab_domain}"
# devolo_devices = {
# devolo_620 = {
# ip = "192.168.0.199"
# model = "620"
# }
# # devolo_326 = {
# # ip = "192.168.0.200"
# # model = "326"
# # }
# }
# mstream
mstream_music_folder = "/mnt/storage/Music"
mstream_fqdn = "music.${local.lab_domain}"
# searxng
searxng_folder = "/mnt/md0/searxng"
searxng_fqdn = "search.${local.lab_domain}"
searxng_issuer = "letsencrypt-prod"
# vaultwarden
vaultwarden_folder = "/mnt/md0/vaultwarden"
vaultwarden_fqdn = "vaultwarden.${local.lab_domain}"
vaultwarden_issuer = "letsencrypt-prod"
vaultwarden_version = "1.36.0"
vaultwarden_smtp_host = local.scaleway_smtp_host
vaultwarden_smtp_port = 465
vaultwarden_smtp_security = "force_tls"
vaultwarden_smtp_from = "vaultwarden@alexpires.me"
vaultwarden_smtp_from_name = "Vaultwarden"
vaultwarden_smtp_username = var.scaleway_project_id
vaultwarden_smtp_password = local.mail_app_api_secret_key
# terraform-mcp
terraform_mcp_fqdn = "terraform-mcp.${local.lab_domain}"
}
data "terraform_remote_state" "scaleway" {
backend = "s3"
config = {
bucket = "a13labs.infra.eu"
key = "scaleway.core.infra.tfstate"
region = "eu-west-1"
}
}