Files
ai-customer-service/guest-cs-stack/deploy_wakka_test7777.py
T
2026-08-15 14:51:51 +08:00

81 lines
2.2 KiB
Python

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())