#!/usr/bin/env python3 from __future__ import annotations import os import sys from pathlib import Path import paramiko HOST = os.getenv("NOMAD_SSH_HOST", "82.157.112.245") USER = os.getenv("NOMAD_SSH_USER", "ubuntu") PASSWORD = os.getenv("NOMAD_SSH_PASSWORD", "Xiao4669805") REMOTE_DIR = "/opt/nomadro-services/integrations" ROOT = Path(__file__).resolve().parent.parent def run(c: paramiko.SSHClient, cmd: str) -> None: print(f"\n$ {cmd.replace(PASSWORD, '***')}") _, o, e = c.exec_command(f"echo '{PASSWORD}' | sudo -S bash -lc \"{cmd}\"", timeout=120, get_pty=True) sys.stdout.buffer.write(o.read()) sys.stdout.buffer.write(e.read()) def main() -> None: c = paramiko.SSHClient() c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) c.connect(HOST, username=USER, password=PASSWORD, timeout=30) try: sftp = c.open_sftp() sftp.put(str(ROOT / "docker" / "integrations" / "docker-compose.yml"), f"{REMOTE_DIR}/docker-compose.yml") sftp.close() run(c, f"cd {REMOTE_DIR} && docker compose rm -f postgres-listmonk listmonk 2>/dev/null || true") run(c, f"cd {REMOTE_DIR} && docker compose up -d postgres-int listmonk") run(c, "sleep 6") run(c, "docker logs integrations-listmonk-1 --tail 10") run(c, "curl -sI http://127.0.0.1:9030/ | head -3") run(c, "curl -sI https://listmonk.nomadro.cn/ | head -3") run(c, f"cd {REMOTE_DIR} && docker compose ps") run(c, "free -h | head -2") finally: c.close() if __name__ == "__main__": main()