72 lines
2 KiB
HCL
72 lines
2 KiB
HCL
# 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.
|
||
|
||
terraform {
|
||
backend "consul" {
|
||
address = "consul:8500"
|
||
path = "terraform/states/mt5_goldex" # pro Repo eindeutig
|
||
}
|
||
}
|
||
|
||
variable "ssh_host" {
|
||
type = string
|
||
default = "BITMT503"
|
||
}
|
||
|
||
variable "ssh_user" {
|
||
type = string
|
||
default = "bast"
|
||
}
|
||
|
||
variable "ssh_private_key" {
|
||
type = string
|
||
sensitive = true
|
||
}
|
||
|
||
variable "stack_dir" {
|
||
type = string
|
||
default = "/home/bast/build/MetaTrader5-Docker-Goldex"
|
||
}
|
||
|
||
# Wird vom Workflow per "git archive HEAD" erzeugt – nur versionierte Dateien
|
||
variable "bundle_dir" {
|
||
type = string
|
||
default = ".deploy-bundle"
|
||
}
|
||
|
||
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
|
||
}
|
||
|
||
# 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",
|
||
]
|
||
}
|
||
|
||
# 2. Versionierte Dateien in den Stack-Ordner kopieren
|
||
provisioner "file" {
|
||
source = "${var.bundle_dir}/"
|
||
destination = var.stack_dir
|
||
}
|
||
|
||
# 3. Bauen, starten, auf gesunden Stack warten
|
||
provisioner "remote-exec" {
|
||
inline = [
|
||
"cd '${var.stack_dir}' && chmod +x scripts/*.sh && scripts/deploy-local.sh",
|
||
]
|
||
}
|
||
}
|