96 lines
2.4 KiB
Python
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))
|