更新部分内容,重测中

This commit is contained in:
2026-07-29 22:55:02 +08:00
parent 42058e724d
commit 761047009e
4 changed files with 31 additions and 29 deletions
BIN
View File
Binary file not shown.
+29 -11
View File
@@ -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" # 默认 mainselect_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 # 查看日志"
+2 -2
View File
@@ -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)
} }
-16
View File
@@ -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 {