deploy_to_server.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/env python3
  2. #ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
  3. import os
  4. import sys
  5. import paramiko
  6. from dotenv import load_dotenv
  7. sys.stdout.reconfigure(encoding='utf-8')
  8. sys.stderr.reconfigure(encoding='utf-8')
  9. def deploy():
  10. # Load .env
  11. repo_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  12. env_path = os.path.join(repo_root, ".env")
  13. load_dotenv(dotenv_path=env_path)
  14. host = os.environ.get('SERVER_HOST')
  15. user = os.environ.get('SERVER_USER')
  16. password = os.environ.get('SERVER_PASS')
  17. if not all([host, user]):
  18. print("Error: Server credentials not found in .env file.")
  19. return
  20. if password == "your_db_password_here" or password == "your_password_here" or not password:
  21. password = None
  22. print(f"Connecting to {user}@{host}...")
  23. ssh = paramiko.SSHClient()
  24. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  25. try:
  26. ssh.connect(host, username=user, password=password, timeout=10)
  27. print("Connected successfully!")
  28. command = "cd food_project && rm -f git_version.txt git_id.txt && git pull && docker-compose up -d --build"
  29. print(f"Executing: {command}")
  30. stdin, stdout, stderr = ssh.exec_command(command)
  31. out = stdout.read().decode('utf-8')
  32. err = stderr.read().decode('utf-8')
  33. if out: print(f"Output:\n{out}")
  34. if err: print(f"Errors:\n{err}")
  35. except Exception as e:
  36. print(f"Failed to connect or execute command: {e}")
  37. finally:
  38. ssh.close()
  39. print("Connection closed.")
  40. if __name__ == "__main__":
  41. deploy()