MCPcopy Create free account
hub / github.com/aaPanel/BaoTa / create_project

Method create_project

class/projectModel/nodejsModel.py:544–644  ·  view source on GitHub ↗

@name 创建新的项目 @author hwliang<2021-08-09> @param get { project_name: string<项目名称> project_cwd: string<项目目录> project_script: string<项目脚本> project_ps: string<项目备注信息> bind_extran

(self,get)

Source from the content-addressed store, hash-verified

542
543
544 def create_project(self,get):
545 ''&#x27;
546 @name 创建新的项目
547 @author hwliang<2021-08-09>
548 @param get<dict_obj>{
549 project_name: string<项目名称>
550 project_cwd: string<项目目录>
551 project_script: string<项目脚本>
552 project_ps: string<项目备注信息>
553 bind_extranet: int<是否绑定外网> 1:是 0:否
554 domains: list<域名列表> ["domain1:80","domain2:80"] // 在bind_extranet=1时,需要填写
555 is_power_on: int<是否开机启动> 1:是 0:否
556 run_user: string<运行用户>
557 max_memory_limit: int<最大内存限制> // 超出此值项目将被强制重启
558 nodejs_version: string<nodejs版本>
559 pkg_manager:string["npm", "pnpm", "yarn"], 选择包管理工具
560 }
561 @return dict
562 ''&#x27;
563 if not isinstance(get,public.dict_obj): return public.return_error('参数类型错误,需要dict_obj对像')
564 if not self.is_install_nodejs(get):
565 return public.return_error('请先安装nodejs版本管理器,并安装至少1个node.js版本')
566 if not 'project_script' in get:
567 return public.return_error("请选择【启动选项】")
568
569 project_name = get.project_name.strip()
570 if not re.match("^\w+$",project_name):
571 return public.return_error('项目名称格式不正确,支持字母、数字、下划线,表达式: ^[0-9A-Za-z_]$')
572
573 if public.M('sites').where('name=?',(get.project_name,)).count():
574 return public.return_error('指定项目名称已存在: {}'.format(get.project_name))
575 get.project_cwd = get.project_cwd.strip()
576 if get.project_cwd[-1] == '/':
577 get.project_cwd = get.project_cwd[:-1]
578 if not os.path.exists(get.project_cwd):
579 return public.return_error('项目目录不存在: {}'.format(get.project_cwd))
580
581 # 端口占用检测
582 if self.check_port_is_used(get.get('port/port')):
583 return public.return_error('指定端口已被其它应用占用,请修改您的项目配置使用其它端口, 端口: {}'.format(get.port))
584
585 domains = []
586 if get.bind_extranet == 1:
587 domains = get.domains
588 if not public.is_apache_nginx(): return public.return_error('需要安装Nginx或Apache才能使用外网映射功能')
589 for domain in domains:
590 if "[" in domain and "]" in domain: # IPv6格式特殊处理
591 if "]:" in domain:
592 domain_arr = domain.rsplit(":", 1)
593 else:
594 domain_arr = [domain]
595 else:
596 domain_arr = domain.split(':')
597 if public.M('domain').where('name=?',domain_arr[0]).count():
598 return public.return_error('指定域名已存在: {}'.format(domain))
599 if "pkg_manager" not in get or get.pkg_manager not in ("npm", "pnpm", "yarn"):
600 return public.return_error('可选的包管理器为: 【npm, pnpm, yarn】')
601 else:

Callers

nothing calls this directly

Calls 15

is_install_nodejsMethod · 0.95
check_port_is_usedMethod · 0.95
install_packagesMethod · 0.95
project_add_domainMethod · 0.95
set_configMethod · 0.95
start_projectMethod · 0.95
_release_firewallMethod · 0.80
matchMethod · 0.45
countMethod · 0.45
whereMethod · 0.45
MMethod · 0.45
formatMethod · 0.45

Tested by

no test coverage detected