import os import sys import paramiko HOST = "20.191.152.26" USER = "wakka" PASSWORD = os.environ["DEPLOY_PASSWORD"] REMOTE = "/home/wakka/guest-cs-stack" LOCAL = os.path.dirname(os.path.abspath(__file__)) COMPOSE = "docker-compose.chat.yaml -f docker-compose.chat.test7777.yaml" FILES = [ "docker-compose.chat.yaml", "docker-compose.chat.test7777.yaml", "chatwoot.env", "guest-cs.env", "guest-cs.test.env", "bootstrap-chatwoot-test.sh", ] def run(client, cmd, timeout=900): print(">>>", cmd.split("\n")[0][:100]) _, stdout, stderr = client.exec_command(cmd, timeout=timeout) out = stdout.read().decode("utf-8", errors="replace") err = stderr.read().decode("utf-8", errors="replace") code = stdout.channel.recv_exit_status() if out: print(out) if err: print(err, file=sys.stderr) return code, out def main(): client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(HOST, username=USER, password=PASSWORD, timeout=30) run(client, "hostname; ss -tlnp | grep 7777 || true") run(client, f"mkdir -p {REMOTE}") sftp = client.open_sftp() for name in FILES: sftp.put(os.path.join(LOCAL, name), f"{REMOTE}/{name}") print("uploaded", name) sftp.close() deploy = f""" set -euo pipefail cd {REMOTE} fuser -k 7777/tcp 7788/tcp 2>/dev/null || true pkill -f "python app.py" 2>/dev/null || true sleep 2 sudo docker pull ladioussuapp/guest-chat:latest sudo docker compose -f {COMPOSE} down || true sudo docker compose -f {COMPOSE} up -d --force-recreate """ verify = f""" cd {REMOTE} sleep 25 sudo docker compose -f {COMPOSE} ps curl -sI http://127.0.0.1:7777/guest-customer-service sudo docker exec guest-chat printenv CHATWOOT_GUEST_BASE_URL FRONTEND_URL CHATWOOT_GUEST_WEBSITE_TOKEN """ code, out = run(client, deploy, timeout=600) code, out = run(client, verify, timeout=120) if "gunicorn" not in out.lower(): run(client, f"cd {REMOTE} && chmod +x bootstrap-chatwoot-test.sh && bash bootstrap-chatwoot-test.sh", 300) code, out = run(client, deploy, timeout=900) client.close() return code if __name__ == "__main__": raise SystemExit(main())