2026-11-07 05:32:23 +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-03 20:21:13 +00:00
|
|
|
|
|
2026-11-07 05:32:23 +00:00
|
|
|
|
terraform {
|
2026-11-03 20:21:13 +00:00
|
|
|
|
backend "consul" {
|
|
|
|
|
|
address = "consul:8500"
|
2026-11-07 05:32:23 +00:00
|
|
|
|
path = "terraform/states/mt5_hm" # pro Repo eindeutig
|
2026-11-03 20:21:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-11-07 05:32:23 +00:00
|
|
|
|
variable "ssh_host" {
|
2026-11-03 20:21:13 +00:00
|
|
|
|
type = string
|
2026-11-07 05:32:23 +00:00
|
|
|
|
default = "BITMT503"
|
2026-11-03 20:21:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-11-07 05:32:23 +00:00
|
|
|
|
variable "ssh_user" {
|
2026-11-03 20:21:13 +00:00
|
|
|
|
type = string
|
2026-11-07 05:32:23 +00:00
|
|
|
|
default = "bast"
|
2026-11-03 20:21:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-11-07 05:32:23 +00:00
|
|
|
|
variable "ssh_private_key" {
|
2026-11-03 20:21:13 +00:00
|
|
|
|
type = string
|
|
|
|
|
|
sensitive = true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-11-07 05:32:23 +00:00
|
|
|
|
variable "stack_dir" {
|
2026-11-03 20:21:13 +00:00
|
|
|
|
type = string
|
2026-11-07 05:32:23 +00:00
|
|
|
|
default = "/home/bast/build/MetaTrader5-Docker-Image"
|
2026-11-03 20:21:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-11-07 05:32:23 +00:00
|
|
|
|
# Wird vom Workflow per "git archive HEAD" erzeugt – nur versionierte Dateien
|
|
|
|
|
|
variable "bundle_dir" {
|
|
|
|
|
|
type = string
|
|
|
|
|
|
default = ".deploy-bundle"
|
2026-11-03 20:21:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-11-07 05:32:23 +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-03 20:19:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-11-07 05:32:23 +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-03 20:19:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-11-07 05:32:23 +00:00
|
|
|
|
# 2. Versionierte Dateien in den Stack-Ordner kopieren
|
|
|
|
|
|
provisioner "file" {
|
|
|
|
|
|
source = "${var.bundle_dir}/"
|
|
|
|
|
|
destination = var.stack_dir
|
2026-11-03 20:19:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-11-07 05:32:23 +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-03 20:19:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|