# !/d/ymq/py3/bin/python import asyncio import getpass import os import re import subprocess from appPublic.sshx import SSHNode home = os.getenv('HOME') kgadget_build = False class KbossAppDeploy: def __init__(self, node): self.node = node async def update_code(self): await self.node._l2r("/root/backup/www/www_backup", '~/') await self.node._run(f'cd ~') await self.node._run(f'tar xf ./www_backup/kboss.prod.tar.back') await self.node._run('chmod +x bin/web') await self.node._run('tar xzf ./www_backup/files.tar.gz') await self.node._run(f'cp -r ./files/ ~/www/ ') try: await self.node._run(f'tar zxf ./www_backup/kboss_nginx.tar.gz') await self.node._run('sudo cp ./kboss_nginx/*kaiyuancloud.* /etc/nginx/') await self.node._run(f'sudo cp ./kboss_nginx/kbossprod /etc/nginx/sites-enabled/') except Exception as e: print(f"set nginx config fail :{e}") await self.node._run(f'cd ~') await self.node._run('bin/web') print("deploy ok") async def init_data(self): await self.node._run(f'mysql -h db -ukboss -pkboss123 kboss_prod < ~/initdata/mysql.ddl.sql') await self.node._run(f'mysql -h db -ukboss -pkboss123 kboss_prod < ~/initdata/kboss_init.sql') async def get_remote_data(self): subprocess.run("tar zcf /root/backup/www/www_backup/files.tar.gz files/", shell=True, capture_output=True, text=True) async def deploy(self): await self.get_remote_data() await self.node.connect() await self.update_code() self.node.close() def default_node(host, user, port): node = SSHNode(host, username=user, port=port, password=getpass.getpass(f'{user}@{host} password:') ) return node if __name__ == '__main__': import sys exp = f"python3 {sys.argv[0]} tt@192.168.0.11:10022" if len(sys.argv) != 2: print(f'Usage:\n{exp}') sys.exit(1) if re.findall(r'^[\w\d]+@\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+$', sys.argv[1]): user_ip_prod = sys.argv[1] user, host = user_ip_prod.split('@') host, port = host.split(':') if not port: port = 22 port = int(port) else: print(f'ip not defined ip:{sys.argv[1]}') sys.exit(1) node = default_node(host, user, port) if not node: sys.exit(1) d = KbossAppDeploy(node) loop = asyncio.get_event_loop() loop.run_until_complete(d.deploy())