MetaTrader5-Docker-Goldex/main.tf

73 lines
2 KiB
Terraform
Raw Permalink Normal View History

2026-11-07 05:31:49 +00:00
# Deployt DIESEN Stack per SSH auf den Server – unabhängig von anderen Apps.
# Ablauf: Sperre prüfen -> sauberes Bundle (git archive) in den Stack-Ordner
# kopieren -> scripts/deploy-local.sh (docker compose up -d --build + Check).
# config/, trader-data/, .env und bots.env auf dem Server bleiben unberührt,
# weil sie nicht im Repo (und damit nicht im Bundle) sind.
2026-11-06 13:22:28 +00:00
2026-11-07 05:31:49 +00:00
terraform {
2026-11-06 13:22:28 +00:00
backend "consul" {
address = "consul:8500"
2026-11-07 05:31:49 +00:00
path = "terraform/states/mt5_goldex" # pro Repo eindeutig
2026-11-06 13:22:28 +00:00
}
}
2026-11-07 05:31:49 +00:00
variable "ssh_host" {
2026-11-06 13:22:28 +00:00
type = string
2026-11-07 05:31:49 +00:00
default = "BITMT503"
2026-11-06 13:22:28 +00:00
}
2026-11-07 05:31:49 +00:00
variable "ssh_user" {
2026-11-06 13:22:28 +00:00
type = string
2026-11-07 05:31:49 +00:00
default = "bast"
2026-11-06 13:22:28 +00:00
}
2026-11-07 05:31:49 +00:00
variable "ssh_private_key" {
2026-11-06 13:22:28 +00:00
type = string
sensitive = true
}
2026-11-07 05:31:49 +00:00
variable "stack_dir" {
2026-11-06 13:22:28 +00:00
type = string
2026-11-07 05:31:49 +00:00
default = "/home/bast/build/MetaTrader5-Docker-Goldex"
2026-11-06 13:22:28 +00:00
}
2026-11-07 05:31:49 +00:00
# Wird vom Workflow per "git archive HEAD" erzeugt – nur versionierte Dateien
variable "bundle_dir" {
type = string
default = ".deploy-bundle"
2026-11-06 13:22:28 +00:00
}
2026-11-07 05:31:49 +00:00
resource "terraform_data" "stack" {
# Neu deployen nur, wenn sich eine versionierte Datei geändert hat
triggers_replace = sha1(join("", [
for f in sort(fileset(var.bundle_dir, "**")) : "${f}:${filesha1("${var.bundle_dir}/${f}")}"
]))
connection {
type = "ssh"
host = var.ssh_host
user = var.ssh_user
private_key = var.ssh_private_key
2026-11-06 13:22:28 +00:00
}
2026-11-07 05:31:49 +00:00
# 1. Sperre mit dem Script, das schon auf dem Server liegt (beim ersten Mal fehlt es)
provisioner "remote-exec" {
inline = [
"cd '${var.stack_dir}' && if [ -x scripts/deploy-local.sh ]; then scripts/deploy-local.sh --check-flat; else echo 'Erster Deploy – keine Sperre'; fi",
]
2026-11-06 13:22:28 +00:00
}
2026-11-07 05:31:49 +00:00
# 2. Versionierte Dateien in den Stack-Ordner kopieren
provisioner "file" {
source = "${var.bundle_dir}/"
destination = var.stack_dir
2026-11-06 13:22:28 +00:00
}
2026-11-07 05:31:49 +00:00
# 3. Bauen, starten, auf gesunden Stack warten
provisioner "remote-exec" {
inline = [
"cd '${var.stack_dir}' && chmod +x scripts/*.sh && scripts/deploy-local.sh",
]
2026-11-06 13:22:28 +00:00
}
}