jsite.sh参数改成与install_jsite.sh一致
This commit is contained in:
parent
bcab28d97f
commit
018555a401
191
jsite.sh
191
jsite.sh
@ -19,17 +19,23 @@ NC='\033[0m' # No Color
|
||||
# 基础配置
|
||||
DEFAULT_GIT_REPO="http://git.jingrow.com:3000/jsite/jingrow"
|
||||
JSITE_BASE_DIR="/home/jingrow/jsite"
|
||||
USER_NAME="jingrow"
|
||||
TRAEFIK_CONFIG_DIR="/home/jingrow/traefik-docker/conf.d/website"
|
||||
|
||||
# 默认配置参数
|
||||
DEFAULT_SITE_URL="example.com"
|
||||
SITE_NAME="jingrow"
|
||||
START_PORT=3001
|
||||
PORT_INCREMENT=1
|
||||
|
||||
# 网络配置
|
||||
PUBLIC_IP="" # 公网IP地址 (用于内网IP不可用时)
|
||||
|
||||
# .env文件参数
|
||||
SITE_URL="starrbud.com"
|
||||
REVALIDATE_TOKEN="535bc122f3e364c"
|
||||
SERVER_URL="https://admin.jingrow.com"
|
||||
API_KEY="535bc122f3e364c"
|
||||
API_SECRET="8629a3b12fc1cc2"
|
||||
|
||||
# ========================================
|
||||
# 日志函数
|
||||
# ========================================
|
||||
@ -56,8 +62,8 @@ log_error() {
|
||||
|
||||
# 检查用户是否存在
|
||||
check_user() {
|
||||
if ! id "$USER_NAME" &>/dev/null; then
|
||||
log_error "用户 $USER_NAME 不存在,请先创建用户"
|
||||
if ! id "jingrow" &>/dev/null; then
|
||||
log_error "用户 jingrow 不存在,请先创建用户"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
@ -67,7 +73,7 @@ check_base_dir() {
|
||||
if [ ! -d "$JSITE_BASE_DIR" ]; then
|
||||
log_info "创建jsite基础目录: $JSITE_BASE_DIR"
|
||||
mkdir -p "$JSITE_BASE_DIR"
|
||||
chown "$USER_NAME:$USER_NAME" "$JSITE_BASE_DIR"
|
||||
chown "jingrow:jingrow" "$JSITE_BASE_DIR"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -87,7 +93,7 @@ get_site_status() {
|
||||
fi
|
||||
|
||||
# 检查PM2进程状态
|
||||
local pm2_status=$(su - "$USER_NAME" -c "
|
||||
local pm2_status=$(su - "jingrow" -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
pm2 list 2>/dev/null | grep -w '$site_name' | grep -c 'online' || echo '0'
|
||||
@ -141,10 +147,10 @@ get_optimal_host_ip() {
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "用法: $0 <命令> <网站名称> [选项]"
|
||||
echo "用法: $0 <命令> [选项]"
|
||||
echo ""
|
||||
echo "命令:"
|
||||
echo " create <name> [git-repo] [domain] 新建网站"
|
||||
echo " create 新建网站"
|
||||
echo " delete <name> 删除网站"
|
||||
echo " build <name> 构建网站"
|
||||
echo " start <name> 启动网站"
|
||||
@ -154,13 +160,19 @@ show_help() {
|
||||
echo " list 列出所有网站"
|
||||
echo " logs <name> 查看网站日志"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo "create命令选项:"
|
||||
echo " --site-name NAME 网站名称 (必需)"
|
||||
echo " --git-repo URL Git仓库地址 (可选)"
|
||||
echo " --site-url URL 网站URL (可选)"
|
||||
echo ""
|
||||
echo "全局选项:"
|
||||
echo " -h, --help 显示此帮助信息"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 create mysite"
|
||||
echo " $0 create mysite http://git.example.com/myproject"
|
||||
echo " $0 create mysite http://git.example.com/myproject mysite.com"
|
||||
echo " $0 create --site-name mysite"
|
||||
echo " $0 create --site-name mysite --git-repo http://git.example.com/project"
|
||||
echo " $0 create --site-name mysite --site-url mysite.com"
|
||||
echo " $0 create --site-name mysite --git-repo http://git.example.com/project --site-url mysite.com"
|
||||
echo " $0 start mysite"
|
||||
echo " $0 stop mysite"
|
||||
echo " $0 restart mysite"
|
||||
@ -223,7 +235,7 @@ save_port_assignment() {
|
||||
fi
|
||||
fi
|
||||
|
||||
chown "$USER_NAME:$USER_NAME" "$port_file" 2>/dev/null || true
|
||||
chown "jingrow:jingrow" "$port_file" 2>/dev/null || true
|
||||
}
|
||||
|
||||
# 生成Host规则
|
||||
@ -243,6 +255,58 @@ generate_host_rule() {
|
||||
fi
|
||||
}
|
||||
|
||||
# 创建.env文件
|
||||
create_env_file() {
|
||||
local site_name="$1"
|
||||
local port="$2"
|
||||
|
||||
log_info "创建.env文件..."
|
||||
|
||||
cd "$JSITE_BASE_DIR/$site_name"
|
||||
|
||||
# 智能IP选择:优先使用内网IP,没有内网IP时使用公网IP(与traefik配置保持一致)
|
||||
local host_ip=$(get_optimal_host_ip)
|
||||
|
||||
# 输出IP选择结果
|
||||
if [[ "$host_ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
log_success "使用IP地址: $host_ip"
|
||||
else
|
||||
log_warning "IP地址格式异常: $host_ip"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 构建PUBLIC_SITE_URL(优先使用内网IP,没有内网IP时使用公网IP)
|
||||
local public_site_url="http://$host_ip:$port"
|
||||
|
||||
# 检查.env文件是否已存在
|
||||
if [ -f "$JSITE_BASE_DIR/$site_name/.env" ]; then
|
||||
log_warning ".env文件已存在,将会覆盖..."
|
||||
fi
|
||||
|
||||
# 创建.env文件
|
||||
cat > "$JSITE_BASE_DIR/$site_name/.env" << EOF
|
||||
# 网站配置
|
||||
PUBLIC_SITE_URL=$public_site_url
|
||||
|
||||
# 重新验证令牌
|
||||
REVALIDATE_TOKEN=$REVALIDATE_TOKEN
|
||||
|
||||
# 项目配置
|
||||
JINGROW_SITE_NAME=$site_name
|
||||
|
||||
# 服务器配置
|
||||
JINGROW_SERVER_URL=$SERVER_URL
|
||||
JINGROW_API_KEY=$API_KEY
|
||||
JINGROW_API_SECRET=$API_SECRET
|
||||
EOF
|
||||
|
||||
# 设置文件权限
|
||||
chown "jingrow:jingrow" "$JSITE_BASE_DIR/$site_name/.env"
|
||||
chmod 600 "$JSITE_BASE_DIR/$site_name/.env"
|
||||
|
||||
log_success ".env文件创建完成 (端口: $port, PUBLIC_SITE_URL: $public_site_url)"
|
||||
}
|
||||
|
||||
# 创建traefik网站配置文件
|
||||
create_traefik_config() {
|
||||
local site_name="$1"
|
||||
@ -299,7 +363,7 @@ http:
|
||||
permanent: true
|
||||
EOF
|
||||
|
||||
chown "$USER_NAME:$USER_NAME" "$config_file" 2>/dev/null || true
|
||||
chown "jingrow:jingrow" "$config_file" 2>/dev/null || true
|
||||
chmod 644 "$config_file"
|
||||
|
||||
log_success "Traefik配置文件已创建: $config_file"
|
||||
@ -323,7 +387,7 @@ restart_traefik() {
|
||||
|
||||
if [ -d "$traefik_dir" ] && [ -f "$traefik_dir/docker-compose.yml" ]; then
|
||||
log_info "重启Traefik服务以加载新配置..."
|
||||
su - "$USER_NAME" -c "cd '$traefik_dir' && docker compose restart" 2>/dev/null || {
|
||||
su - "jingrow" -c "cd '$traefik_dir' && docker compose restart" 2>/dev/null || {
|
||||
log_warning "无法重启Traefik服务,请手动重启"
|
||||
}
|
||||
fi
|
||||
@ -333,18 +397,57 @@ restart_traefik() {
|
||||
# 核心功能函数
|
||||
# ========================================
|
||||
|
||||
# 解析create命令的参数
|
||||
parse_create_args() {
|
||||
# 重置变量
|
||||
CREATE_SITE_NAME=""
|
||||
CREATE_GIT_REPO="$DEFAULT_GIT_REPO"
|
||||
CREATE_DOMAIN="$SITE_URL"
|
||||
|
||||
# 解析参数
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--site-name)
|
||||
CREATE_SITE_NAME="$2"
|
||||
shift 2
|
||||
;;
|
||||
--git-repo)
|
||||
CREATE_GIT_REPO="$2"
|
||||
shift 2
|
||||
;;
|
||||
--site-url)
|
||||
CREATE_DOMAIN="$2"
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
log_error "未知参数: $1"
|
||||
echo "使用 $0 create --help 查看帮助"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 验证必需参数
|
||||
if [ -z "$CREATE_SITE_NAME" ]; then
|
||||
log_error "必需参数: --site-name"
|
||||
echo "使用: $0 create --site-name <网站名称>"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 新建网站
|
||||
create_site() {
|
||||
local site_name="$1"
|
||||
local git_repo="${2:-$DEFAULT_GIT_REPO}"
|
||||
local domain="${3:-$DEFAULT_SITE_URL}"
|
||||
|
||||
if [ -z "$site_name" ]; then
|
||||
log_error "请指定网站名称"
|
||||
return 1
|
||||
fi
|
||||
local site_name="$CREATE_SITE_NAME"
|
||||
local git_repo="$CREATE_GIT_REPO"
|
||||
local domain="$CREATE_DOMAIN"
|
||||
|
||||
log_info "开始创建网站: $site_name"
|
||||
log_info "Git仓库: $git_repo"
|
||||
log_info "域名: $domain"
|
||||
|
||||
# 检查网站是否已存在
|
||||
if check_site_exists "$site_name"; then
|
||||
@ -357,7 +460,7 @@ create_site() {
|
||||
|
||||
# 克隆项目
|
||||
log_info "克隆项目: $git_repo"
|
||||
if ! su - "$USER_NAME" -c "cd '$JSITE_BASE_DIR' && git clone '$git_repo' '$site_name'"; then
|
||||
if ! su - "jingrow" -c "cd '$JSITE_BASE_DIR' && git clone '$git_repo' '$site_name'"; then
|
||||
log_error "项目克隆失败"
|
||||
return 1
|
||||
fi
|
||||
@ -372,6 +475,9 @@ create_site() {
|
||||
# 保存端口分配
|
||||
save_port_assignment "$site_name" "$port"
|
||||
|
||||
# 创建.env文件
|
||||
create_env_file "$site_name" "$port"
|
||||
|
||||
# 创建traefik配置文件
|
||||
if create_traefik_config "$site_name" "$domain" "$port"; then
|
||||
restart_traefik
|
||||
@ -418,7 +524,7 @@ delete_site() {
|
||||
fi
|
||||
|
||||
# 删除PM2配置
|
||||
su - "$USER_NAME" -c "
|
||||
su - "jingrow" -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
pm2 delete '$site_name' 2>/dev/null || true
|
||||
@ -431,7 +537,7 @@ delete_site() {
|
||||
local port_file="$JSITE_BASE_DIR/site_ports.json"
|
||||
if [ -f "$port_file" ] && command -v jq &> /dev/null; then
|
||||
jq "del(.$site_name)" "$port_file" > "${port_file}.tmp" && mv "${port_file}.tmp" "$port_file"
|
||||
chown "$USER_NAME:$USER_NAME" "$port_file" 2>/dev/null || true
|
||||
chown "jingrow:jingrow" "$port_file" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 删除项目目录
|
||||
@ -462,7 +568,7 @@ build_site() {
|
||||
|
||||
# 安装依赖
|
||||
log_info "安装依赖..."
|
||||
if ! su - "$USER_NAME" -c "
|
||||
if ! su - "jingrow" -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
cd '$JSITE_BASE_DIR/$site_name'
|
||||
@ -474,7 +580,7 @@ build_site() {
|
||||
|
||||
# 构建项目
|
||||
log_info "构建项目..."
|
||||
if ! su - "$USER_NAME" -c "
|
||||
if ! su - "jingrow" -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
cd '$JSITE_BASE_DIR/$site_name'
|
||||
@ -518,7 +624,7 @@ start_site() {
|
||||
fi
|
||||
|
||||
# 使用PM2启动,设置端口环境变量
|
||||
if ! su - "$USER_NAME" -c "
|
||||
if ! su - "jingrow" -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
cd '$JSITE_BASE_DIR/$site_name'
|
||||
@ -562,7 +668,7 @@ stop_site() {
|
||||
|
||||
log_info "停止网站: $site_name"
|
||||
|
||||
if ! su - "$USER_NAME" -c "
|
||||
if ! su - "jingrow" -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
pm2 stop '$site_name'
|
||||
@ -592,7 +698,7 @@ restart_site() {
|
||||
log_info "重启网站: $site_name"
|
||||
|
||||
if [ "$status" = "running" ]; then
|
||||
if ! su - "$USER_NAME" -c "
|
||||
if ! su - "jingrow" -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
pm2 restart '$site_name'
|
||||
@ -636,7 +742,7 @@ show_site_status() {
|
||||
# 显示PM2详细状态
|
||||
if [ "$status" != "not_exists" ]; then
|
||||
log_info "PM2状态:"
|
||||
su - "$USER_NAME" -c "
|
||||
su - "jingrow" -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
pm2 list | grep -E '(App name|$site_name)' || echo '未找到PM2进程'
|
||||
@ -689,7 +795,7 @@ show_site_logs() {
|
||||
fi
|
||||
|
||||
log_info "网站 $site_name 的日志:"
|
||||
su - "$USER_NAME" -c "
|
||||
su - "jingrow" -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
pm2 logs '$site_name'
|
||||
@ -721,41 +827,42 @@ main() {
|
||||
|
||||
# 解析命令
|
||||
local command="$1"
|
||||
local site_name="$2"
|
||||
local extra_param="$3"
|
||||
local fourth_param="$4"
|
||||
shift # 移除命令,剩下的都是参数
|
||||
|
||||
case "$command" in
|
||||
create)
|
||||
# create命令支持第三个参数作为域名
|
||||
if [ -n "$fourth_param" ]; then
|
||||
create_site "$site_name" "$extra_param" "$fourth_param"
|
||||
else
|
||||
create_site "$site_name" "$extra_param"
|
||||
fi
|
||||
parse_create_args "$@"
|
||||
create_site
|
||||
;;
|
||||
delete)
|
||||
local site_name="$1"
|
||||
delete_site "$site_name"
|
||||
;;
|
||||
build)
|
||||
local site_name="$1"
|
||||
build_site "$site_name"
|
||||
;;
|
||||
start)
|
||||
local site_name="$1"
|
||||
start_site "$site_name"
|
||||
;;
|
||||
stop)
|
||||
local site_name="$1"
|
||||
stop_site "$site_name"
|
||||
;;
|
||||
restart)
|
||||
local site_name="$1"
|
||||
restart_site "$site_name"
|
||||
;;
|
||||
status)
|
||||
local site_name="$1"
|
||||
show_site_status "$site_name"
|
||||
;;
|
||||
list)
|
||||
list_sites
|
||||
;;
|
||||
logs)
|
||||
local site_name="$1"
|
||||
show_site_logs "$site_name"
|
||||
;;
|
||||
*)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user