mirror of
https://github.com/Websoft9/websoft9.git
synced 2024-11-21 15:10:22 +00:00
docs
This commit is contained in:
parent
ba4142e7fe
commit
76c58aabef
12 changed files with 110 additions and 23 deletions
|
@ -11,4 +11,8 @@
|
|||
用户同步 stackhub 上已经存放的清单,而不是通过 API 获取。原因:
|
||||
|
||||
1. 避免API使用需要授权或超时
|
||||
2. 避免未发布的应用被安装
|
||||
2. 避免未发布的应用被安装
|
||||
|
||||
#### 如何获取所有已占用的端口号?
|
||||
|
||||
基于 psutil 模块打印所有端口信息,然后匹配关键词
|
Binary file not shown.
Binary file not shown.
|
@ -1,4 +1,5 @@
|
|||
import model, os
|
||||
import model, os, sys, subprocess
|
||||
from model import GitOp
|
||||
|
||||
path_repo = "./data/application.list"
|
||||
path_project = ""
|
||||
|
@ -29,14 +30,27 @@ class Create:
|
|||
self.folder = self.app_name
|
||||
|
||||
def downRepo(self):
|
||||
'''download repository'''
|
||||
|
||||
cmd = "git clone --depth=1 " + model.SmoothUrl.res(github_url) + "/websoft9/docker-" + self.app_name + " " + self.folder
|
||||
if os.path.exists("./"+self.folder):
|
||||
print(os.path.abspath(self.folder)+" folder already exists")
|
||||
sys.exit(0)
|
||||
else:
|
||||
os.system(cmd)
|
||||
GitOp.gitClone(cmd)
|
||||
|
||||
def setEnv(self):
|
||||
'''set the usable port for application'''
|
||||
|
||||
pass
|
||||
|
||||
def upRepo(self):
|
||||
'''docker-compose up repository'''
|
||||
|
||||
cmd = "docker-compose -f docker-compose-production.yml --env-file .env_all up -d"
|
||||
print(cmd)
|
||||
os.chdir(self.folder)
|
||||
os.system(cmd)
|
||||
os.system(cmd)
|
||||
|
||||
def printResult(self):
|
||||
pass
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 8531fd12cacfb9881de3c270f2b81e17b20f5a99
|
|
@ -1 +1 @@
|
|||
yum install git pwgen jq wget curl figlet boxes -y
|
||||
yum install git wget figlet boxes -y
|
1
cli/joomla
Submodule
1
cli/joomla
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 93735135cf4529fc7830446bb6604f7c15daae2f
|
86
cli/model.py
86
cli/model.py
|
@ -1,12 +1,12 @@
|
|||
|
||||
import os, io, sys, platform, shutil, urllib3, json, time, subprocess, pprint
|
||||
import os, io, sys, platform, psutil, json, secrets, string
|
||||
from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Type, Union
|
||||
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
|
||||
|
||||
class SmoothUrl:
|
||||
''' get url '''
|
||||
''' Get the best smooth url for Git or Download'''
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
@ -14,28 +14,31 @@ class SmoothUrl:
|
|||
def res(url_list: Tuple):
|
||||
|
||||
for item in url_list:
|
||||
req = urllib.request.Request(item)
|
||||
try:
|
||||
urllib.request.urlopen(item,timeout=3).read()
|
||||
print("Smooth URL is: " + item)
|
||||
return item
|
||||
except urllib.error.URLError as e:
|
||||
print(e.reason)
|
||||
except:
|
||||
continue
|
||||
|
||||
return None
|
||||
print("Necessary resource URL can not reachable, system exit!")
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
|
||||
class Github:
|
||||
'''Github operation'''
|
||||
class GitOp:
|
||||
'''Git operation'''
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def gitClone():
|
||||
pass
|
||||
|
||||
|
||||
|
||||
def gitClone(cmd: str):
|
||||
'''git clone'''
|
||||
try:
|
||||
print("Command is: "+cmd)
|
||||
os.system(cmd)
|
||||
except:
|
||||
print("Git clone failed, try again and check your URL can be accessed")
|
||||
sys.exit(0)
|
||||
|
||||
class FileOp:
|
||||
'''File operation'''
|
||||
|
@ -45,4 +48,55 @@ class FileOp:
|
|||
|
||||
def printJson(path: str):
|
||||
with open(path,newline='') as file:
|
||||
print(file.read())
|
||||
print(file.read())
|
||||
|
||||
def convertToJson(path: str):
|
||||
pass
|
||||
|
||||
|
||||
class NetOp:
|
||||
'''Network and port manage'''
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def checkPort(self, port: int):
|
||||
'''check the target port's status'''
|
||||
search_key = "port="+str(port)
|
||||
if str(psutil.net_connections()).find(search_key) != -1:
|
||||
print(str(port)+" is used")
|
||||
return False
|
||||
else:
|
||||
print(str(port)+" is free")
|
||||
return True
|
||||
|
||||
def setPort(self, port: int):
|
||||
'''set usable port'''
|
||||
while self.checkPort(port) == False:
|
||||
port=port+1
|
||||
|
||||
print(port)
|
||||
return port
|
||||
|
||||
class SecurityOp:
|
||||
'''Password and security operation'''
|
||||
|
||||
def __int__(self):
|
||||
pass
|
||||
|
||||
def randomPass(self, length: Optional[int] = 16):
|
||||
'''set password'''
|
||||
|
||||
alphabet = string.ascii_letters + string.digits
|
||||
while True:
|
||||
password = ''.join(secrets.choice(alphabet) for i in range(length))
|
||||
if (any(c.islower() for c in password)
|
||||
and any(c.isupper() for c in password)
|
||||
and sum(c.isdigit() for c in password) >= 3):
|
||||
break
|
||||
print(password)
|
||||
|
||||
|
||||
test=SecurityOp()
|
||||
#test.setPort(9001)
|
||||
test.randomPass(25)
|
|
@ -1 +1,3 @@
|
|||
typer
|
||||
typer
|
||||
psutil
|
||||
jq
|
|
@ -19,6 +19,13 @@ def create(app_name: str, project_name: Optional[str] = None):
|
|||
create = controller.Create(app_name, project_name)
|
||||
create.downRepo()
|
||||
create.upRepo()
|
||||
create.setEnv()
|
||||
create.printResult()
|
||||
|
||||
@app.command()
|
||||
def start(app_name: str, project_name: Optional[str] = None):
|
||||
'''start one application'''
|
||||
pass
|
||||
|
||||
@app.command()
|
||||
def update(name: str):
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
import json
|
||||
|
||||
with open("./joomla/.env_all","r") as file:
|
||||
jsonData = json.dump(file, tempfile)
|
2
cli/version
Normal file
2
cli/version
Normal file
|
@ -0,0 +1,2 @@
|
|||
stable: 1.3
|
||||
compatible: 1.23
|
Loading…
Reference in a new issue