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 获取。原因:
|
用户同步 stackhub 上已经存放的清单,而不是通过 API 获取。原因:
|
||||||
|
|
||||||
1. 避免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_repo = "./data/application.list"
|
||||||
path_project = ""
|
path_project = ""
|
||||||
|
@ -29,14 +30,27 @@ class Create:
|
||||||
self.folder = self.app_name
|
self.folder = self.app_name
|
||||||
|
|
||||||
def downRepo(self):
|
def downRepo(self):
|
||||||
|
'''download repository'''
|
||||||
|
|
||||||
cmd = "git clone --depth=1 " + model.SmoothUrl.res(github_url) + "/websoft9/docker-" + self.app_name + " " + self.folder
|
cmd = "git clone --depth=1 " + model.SmoothUrl.res(github_url) + "/websoft9/docker-" + self.app_name + " " + self.folder
|
||||||
if os.path.exists("./"+self.folder):
|
if os.path.exists("./"+self.folder):
|
||||||
print(os.path.abspath(self.folder)+" folder already exists")
|
print(os.path.abspath(self.folder)+" folder already exists")
|
||||||
|
sys.exit(0)
|
||||||
else:
|
else:
|
||||||
os.system(cmd)
|
GitOp.gitClone(cmd)
|
||||||
|
|
||||||
|
def setEnv(self):
|
||||||
|
'''set the usable port for application'''
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
def upRepo(self):
|
def upRepo(self):
|
||||||
|
'''docker-compose up repository'''
|
||||||
|
|
||||||
cmd = "docker-compose -f docker-compose-production.yml --env-file .env_all up -d"
|
cmd = "docker-compose -f docker-compose-production.yml --env-file .env_all up -d"
|
||||||
print(cmd)
|
print(cmd)
|
||||||
os.chdir(self.folder)
|
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
|
from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Type, Union
|
||||||
|
|
||||||
import urllib.parse
|
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
|
||||||
|
|
||||||
class SmoothUrl:
|
class SmoothUrl:
|
||||||
''' get url '''
|
''' Get the best smooth url for Git or Download'''
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
@ -14,28 +14,31 @@ class SmoothUrl:
|
||||||
def res(url_list: Tuple):
|
def res(url_list: Tuple):
|
||||||
|
|
||||||
for item in url_list:
|
for item in url_list:
|
||||||
req = urllib.request.Request(item)
|
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen(item,timeout=3).read()
|
urllib.request.urlopen(item,timeout=3).read()
|
||||||
|
print("Smooth URL is: " + item)
|
||||||
return item
|
return item
|
||||||
except urllib.error.URLError as e:
|
except:
|
||||||
print(e.reason)
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
return None
|
print("Necessary resource URL can not reachable, system exit!")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
class GitOp:
|
||||||
class Github:
|
'''Git operation'''
|
||||||
'''Github operation'''
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def gitClone():
|
def gitClone(cmd: str):
|
||||||
pass
|
'''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:
|
class FileOp:
|
||||||
'''File operation'''
|
'''File operation'''
|
||||||
|
@ -45,4 +48,55 @@ class FileOp:
|
||||||
|
|
||||||
def printJson(path: str):
|
def printJson(path: str):
|
||||||
with open(path,newline='') as file:
|
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 = controller.Create(app_name, project_name)
|
||||||
create.downRepo()
|
create.downRepo()
|
||||||
create.upRepo()
|
create.upRepo()
|
||||||
|
create.setEnv()
|
||||||
|
create.printResult()
|
||||||
|
|
||||||
|
@app.command()
|
||||||
|
def start(app_name: str, project_name: Optional[str] = None):
|
||||||
|
'''start one application'''
|
||||||
|
pass
|
||||||
|
|
||||||
@app.command()
|
@app.command()
|
||||||
def update(name: str):
|
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