kboss/kgadget/src/deploy.py
2025-07-16 14:27:17 +08:00

96 lines
2.4 KiB
Python

# !/d/ymq/py3/bin/python
import sh
import os
import sys
import time
import getpass
import asyncio
from appPublic.timeUtils import getCurrentTimeStamp, TimeStamp
from appPublic.folderUtils import listFile, _mkdir
from appPublic.sshx import SSHNode
from appPublic.log import MyLogger
import asyncssh
home = os.getenv('HOME')
kgadget_build = False
class KbossAppDeploy:
def __init__(self, node, mode):
self.mode = mode
self.user = 'kboss' + mode
self.node = node
async def update_code(self):
current_date = int(time.time())
mode = self.mode
try:
await self.node._run('killall -9 kgadget')
except:
pass
await self.node._run(f'mv ./kboss.{mode}.tar ./kboss.{mode}.tar.old')
await self.node._l2r(f'{kboss_path}/kboss.{mode}.tar', '.')
await self.node._run(f'tar xf ./kboss.{mode}.tar')
await self.node._run('chmod +x bin/web')
await self.node._run(f'cp ./kboss.{mode}.tar ./kboss.{mode}.{current_date}.tar')
await self.node._run(f'mv ./kboss.{mode}.tar ./kboss.{mode}.tar.back')
await self.node._run('bin/web')
async def init_data(self):
mode = self.mode
await self.node._run(f'mysql -h db -ukboss -pkboss123 kboss_{mode} < ~/initdata/mysql.ddl.sql')
await self.node._run(f'mysql -h db -ukboss -pkboss123 kboss_{mode} < ~/initdata/kboss_init.sql')
async def deploy(self, initdata=False):
await self.node.connect()
await self.update_code()
if initdata:
await self.init_data()
self.node.close()
def default_node(mode):
host = 'www.kaiyuancloud.cn'
user = f'kboss{mode}'
# if mode in ['test', 'dev']:
# host = f'{mode}.kaiyuancloud.cn'
if mode == 'dev':
host = '47.93.12.75'
port = 22
elif mode == 'ncmatch':
host = '47.93.243.22'
port = 22
else:
port = 22
node = SSHNode(host,
username=user,
port=port,
password=getpass.getpass(f'{user}@{host} password:'),
)
return node
if __name__ == '__main__':
import sys
MyLogger('deploy', levelname='info')
mode = 'dev'
if len(sys.argv) < 2:
print(f'Usage:\n{sys.argv[0]} dev|test|prod|ncmatch [y]')
sys.exit(1)
if len(sys.argv) > 1:
mode = sys.argv[1]
kboss_path = f'{home}/kboss_{mode}'
initdata = False
if len(sys.argv) > 2:
if sys.argv[2] == "y":
initdata = True
if mode not in ['dev', 'test:bug', 'prod', 'ncmatch']:
print(f'{mode} not defined')
sys.exit(1)
node = default_node(mode)
d = KbossAppDeploy(node, mode)
loop = asyncio.get_event_loop()
loop.run_until_complete(d.deploy(initdata))