salescrm/DevOps/deploy_to_server.py
2025-10-27 15:50:44 +08:00

82 lines
2.5 KiB
Python

# !/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())