更新部分内容,重测中
This commit is contained in:
@@ -36,7 +36,7 @@ fi
|
|||||||
|
|
||||||
# ---------- 配置 ----------
|
# ---------- 配置 ----------
|
||||||
REPO_URL="https://git.whitetop.xyz/lxh2875931338/frpc-console.git"
|
REPO_URL="https://git.whitetop.xyz/lxh2875931338/frpc-console.git"
|
||||||
BRANCH="main"
|
BRANCH="main" # 默认 main,select_channel 会根据选择修改
|
||||||
WORK_DIR="/tmp/frpc-console-build"
|
WORK_DIR="/tmp/frpc-console-build"
|
||||||
DEFAULT_PORT=9300
|
DEFAULT_PORT=9300
|
||||||
DEFAULT_DEPLOY_DIR="/opt/frpc-console"
|
DEFAULT_DEPLOY_DIR="/opt/frpc-console"
|
||||||
@@ -99,8 +99,8 @@ parse_args() {
|
|||||||
echo "用法: ./deploy.sh [选项]"
|
echo "用法: ./deploy.sh [选项]"
|
||||||
echo ""
|
echo ""
|
||||||
echo "选项:"
|
echo "选项:"
|
||||||
echo " --channel lts 使用 LTS 通道"
|
echo " --channel lts 使用 LTS 通道 (main 分支)"
|
||||||
echo " --channel preview 使用 Preview 通道"
|
echo " --channel preview 使用 Preview 通道 (test 分支)"
|
||||||
echo " --yes, -y 跳过所有确认提示"
|
echo " --yes, -y 跳过所有确认提示"
|
||||||
echo " --check 只检测环境,不执行部署"
|
echo " --check 只检测环境,不执行部署"
|
||||||
echo " --dry-run 显示将执行的操作,不实际执行"
|
echo " --dry-run 显示将执行的操作,不实际执行"
|
||||||
@@ -109,6 +109,7 @@ parse_args() {
|
|||||||
echo "示例:"
|
echo "示例:"
|
||||||
echo " ./deploy.sh # 交互式选择通道"
|
echo " ./deploy.sh # 交互式选择通道"
|
||||||
echo " ./deploy.sh --channel lts # 部署 LTS 版本"
|
echo " ./deploy.sh --channel lts # 部署 LTS 版本"
|
||||||
|
echo " ./deploy.sh --channel preview # 部署 Preview 版本"
|
||||||
echo " ./deploy.sh --yes # 无人值守部署"
|
echo " ./deploy.sh --yes # 无人值守部署"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
@@ -283,28 +284,43 @@ compare_version() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# ---------- 通道选择 ----------
|
# ---------- 通道选择(含分支切换)----------
|
||||||
select_channel() {
|
select_channel() {
|
||||||
if [ -n "$CHANNEL" ]; then
|
if [ -n "$CHANNEL" ]; then
|
||||||
if [ "$CHANNEL" != "lts" ] && [ "$CHANNEL" != "preview" ]; then
|
if [ "$CHANNEL" != "lts" ] && [ "$CHANNEL" != "preview" ]; then
|
||||||
print_error "无效通道: $CHANNEL (仅支持 lts / preview)"
|
print_error "无效通道: $CHANNEL (仅支持 lts / preview)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
if [ "$CHANNEL" = "preview" ]; then
|
||||||
|
BRANCH="test"
|
||||||
|
else
|
||||||
|
BRANCH="main"
|
||||||
|
fi
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${CYAN}请选择部署通道:${NC}"
|
echo -e "${CYAN}请选择部署通道:${NC}"
|
||||||
echo " 1. LTS (稳定版,生产推荐) [默认]"
|
echo " 1. LTS (稳定版,生产推荐) [默认] → main 分支"
|
||||||
echo " 2. Preview (技术预览版,包含新特性)"
|
echo " 2. Preview (技术预览版,包含新特性) → test 分支"
|
||||||
echo ""
|
echo ""
|
||||||
read -p "请选择 [1]: " CHANNEL_INPUT </dev/tty
|
read -p "请选择 [1]: " CHANNEL_INPUT </dev/tty
|
||||||
CHANNEL_INPUT=${CHANNEL_INPUT:-1}
|
CHANNEL_INPUT=${CHANNEL_INPUT:-1}
|
||||||
case $CHANNEL_INPUT in
|
case $CHANNEL_INPUT in
|
||||||
1|"") CHANNEL="lts" ;;
|
1|"")
|
||||||
2) CHANNEL="preview" ;;
|
CHANNEL="lts"
|
||||||
*) print_error "无效选择"; exit 1 ;;
|
BRANCH="main"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
CHANNEL="preview"
|
||||||
|
BRANCH="test"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_error "无效选择"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
print_info "已选择: ${CHANNEL} 通道 (${BRANCH} 分支)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ---------- 检测结果汇总 ----------
|
# ---------- 检测结果汇总 ----------
|
||||||
@@ -399,6 +415,7 @@ print_deployment_plan() {
|
|||||||
echo -e " 部署目录 : ${DEPLOY_DIR}"
|
echo -e " 部署目录 : ${DEPLOY_DIR}"
|
||||||
echo -e " 目标版本 : ${TARGET_VERSION}"
|
echo -e " 目标版本 : ${TARGET_VERSION}"
|
||||||
echo -e " 镜像标签 : ${IMAGE_TAG}"
|
echo -e " 镜像标签 : ${IMAGE_TAG}"
|
||||||
|
echo -e " 源码分支 : ${BRANCH}"
|
||||||
echo -e " ────────────────────────────────────"
|
echo -e " ────────────────────────────────────"
|
||||||
|
|
||||||
if [ "$CONTAINER_EXISTS" = true ]; then
|
if [ "$CONTAINER_EXISTS" = true ]; then
|
||||||
@@ -535,7 +552,7 @@ do_deploy() {
|
|||||||
git clone --depth 1 --branch "$BRANCH" "$REPO_URL" "$WORK_DIR"
|
git clone --depth 1 --branch "$BRANCH" "$REPO_URL" "$WORK_DIR"
|
||||||
cd "$WORK_DIR"
|
cd "$WORK_DIR"
|
||||||
mkdir -p bin static
|
mkdir -p bin static
|
||||||
print_success "代码拉取完成"
|
print_success "代码拉取完成 (分支: ${BRANCH})"
|
||||||
|
|
||||||
# ----- 停止旧容器(拉取代码之后)-----
|
# ----- 停止旧容器(拉取代码之后)-----
|
||||||
if [ "$CONTAINER_EXISTS" = true ]; then
|
if [ "$CONTAINER_EXISTS" = true ]; then
|
||||||
@@ -552,7 +569,7 @@ do_deploy() {
|
|||||||
mkdir -p "$DEPLOY_DIR"
|
mkdir -p "$DEPLOY_DIR"
|
||||||
mkdir -p "$DATA_DIR"
|
mkdir -p "$DATA_DIR"
|
||||||
|
|
||||||
# ----- 构建 Docker 镜像(Dockerfile 内部完成编译)-----
|
# ----- 构建 Docker 镜像 -----
|
||||||
print_step "构建 Docker 镜像..."
|
print_step "构建 Docker 镜像..."
|
||||||
docker build -t "${IMAGE_NAME}:${IMAGE_TAG}" \
|
docker build -t "${IMAGE_NAME}:${IMAGE_TAG}" \
|
||||||
--build-arg VERSION="${TARGET_VERSION}" \
|
--build-arg VERSION="${TARGET_VERSION}" \
|
||||||
@@ -644,6 +661,7 @@ do_deploy() {
|
|||||||
echo -e " ${CYAN}📦 备份目录:${NC} /tmp/frpc-console/db-backups"
|
echo -e " ${CYAN}📦 备份目录:${NC} /tmp/frpc-console/db-backups"
|
||||||
echo -e " ${CYAN}🐳 容器名称:${NC} frpc-console"
|
echo -e " ${CYAN}🐳 容器名称:${NC} frpc-console"
|
||||||
echo -e " ${CYAN}🏷️ 版本:${NC} ${TARGET_VERSION}"
|
echo -e " ${CYAN}🏷️ 版本:${NC} ${TARGET_VERSION}"
|
||||||
|
echo -e " ${CYAN}🌿 分支:${NC} ${BRANCH}"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${CYAN}常用命令:${NC}"
|
echo -e " ${CYAN}常用命令:${NC}"
|
||||||
echo " docker logs frpc-console # 查看日志"
|
echo " docker logs frpc-console # 查看日志"
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// ---- 写入 VERSION.ini 文件到持久化目录 ----
|
// 写入 VERSION.ini 到持久化目录
|
||||||
if err := os.WriteFile("./VERSION.ini", []byte(buildVersion+"\n"), 0644); err != nil {
|
if err := os.WriteFile("./VERSION.ini", []byte(buildVersion+"\n"), 0644); err != nil {
|
||||||
log.Printf("⚠️ 写入 VERSION.ini 文件失败: %v", err)
|
log.Printf("⚠️ 写入 VERSION.ini 失败: %v", err)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("📌 版本: %s", buildVersion)
|
log.Printf("📌 版本: %s", buildVersion)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,15 +35,11 @@ const (
|
|||||||
// 版本管理核心
|
// 版本管理核心
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
||||||
// readVersion 读取仓库根目录的 VERSION.ini 文件
|
|
||||||
// Preview 格式: "2.4"
|
|
||||||
// LTS 格式: "2.5 20260729"
|
|
||||||
func readVersion() (semver string, ltsDate string) {
|
func readVersion() (semver string, ltsDate string) {
|
||||||
data, err := os.ReadFile("./VERSION.ini")
|
data, err := os.ReadFile("./VERSION.ini")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "0.0.0", ""
|
return "0.0.0", ""
|
||||||
}
|
}
|
||||||
// 去掉注释行(以 ; 或 # 开头)
|
|
||||||
lines := strings.Split(string(data), "\n")
|
lines := strings.Split(string(data), "\n")
|
||||||
var content string
|
var content string
|
||||||
for _, line := range lines {
|
for _, line := range lines {
|
||||||
@@ -65,8 +61,6 @@ func readVersion() (semver string, ltsDate string) {
|
|||||||
return semver, ltsDate
|
return semver, ltsDate
|
||||||
}
|
}
|
||||||
|
|
||||||
// getVersionType 判断版本类型
|
|
||||||
// 规则: X.0 或 X.5 → LTS,其他 → Preview
|
|
||||||
func getVersionType(semver string) string {
|
func getVersionType(semver string) string {
|
||||||
parts := strings.Split(semver, ".")
|
parts := strings.Split(semver, ".")
|
||||||
if len(parts) < 2 {
|
if len(parts) < 2 {
|
||||||
@@ -79,9 +73,6 @@ func getVersionType(semver string) string {
|
|||||||
return "preview"
|
return "preview"
|
||||||
}
|
}
|
||||||
|
|
||||||
// getFullVersion 生成完整版本字符串
|
|
||||||
// LTS (X.0/X.5): {semver}-lts-{ltsDate} (必须有日期)
|
|
||||||
// Preview (其他): {semver}-preview-{buildTimestamp}
|
|
||||||
func getFullVersion() string {
|
func getFullVersion() string {
|
||||||
semver, ltsDate := readVersion()
|
semver, ltsDate := readVersion()
|
||||||
vType := getVersionType(semver)
|
vType := getVersionType(semver)
|
||||||
@@ -98,9 +89,6 @@ func getFullVersion() string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// getImageTag 生成镜像标签
|
|
||||||
// LTS: {semver}-lts-{ltsDate}
|
|
||||||
// Preview: preview-{buildTimestamp}
|
|
||||||
func getImageTag() string {
|
func getImageTag() string {
|
||||||
semver, ltsDate := readVersion()
|
semver, ltsDate := readVersion()
|
||||||
vType := getVersionType(semver)
|
vType := getVersionType(semver)
|
||||||
@@ -150,10 +138,6 @@ func main() {
|
|||||||
interactiveMenu()
|
interactiveMenu()
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================================
|
|
||||||
// 构建函数
|
|
||||||
// ============================================================
|
|
||||||
|
|
||||||
func listPlatforms() {
|
func listPlatforms() {
|
||||||
fmt.Println("可用平台:")
|
fmt.Println("可用平台:")
|
||||||
for i, p := range platforms {
|
for i, p := range platforms {
|
||||||
|
|||||||
Reference in New Issue
Block a user