V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heiya
V2EX  ›  Java

请教关于私有化前后端一键部署的一些问题。

  •  
  •   heiya · 2025 年 7 月 31 日 · 2657 次点击
    这是一个创建于 164 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 技术选型:前端是 Vue ,后端是 SpringBoot+Mysql+Redis+Minio ( OSS ),版本控制是 git ,项目管理是 maven 。
    • 要求:能做到在客户不通外网的普通电脑主机上进行一键部署,开箱即用;且还有一个要求,假设后端有 A 、B 、C 、D 四个功能,每个客户需要的功能是 A 、B 、C 、D 四个功能的不同组合,如果需要 A 、B,则不能包含 CD 的代码,让删掉这些代码!!!但很可能逻辑有交织。
    • 自己能想到的办法:1.对于一键化部署需要通过 docker 、docker compose 去做,缺点就是需要安装这些东西,但客户很多都是非技术人员。2.不同功能的组合,代码不能删除,通过拆分不同模块的办法进行解耦,对逻辑有交织的部分面向接口编程。最后在打包时根据需求进行模块的聚合。
    • 这是目前自己能够想到的,还有什么更优解吗?请赐教
    28 条回复    2025-08-01 15:58:33 +08:00
    make115
        1
    make115  
       2025 年 7 月 31 日
    能改技术架构就改技术架构, 删除 redis ,mysql 换成 sqllite ,oss 也不用要了,
    murmur
        2
    murmur  
       2025 年 7 月 31 日
    是不是信创环境,先问问这个
    sampeng
        3
    sampeng  
       2025 年 7 月 31 日
    如果是非集群部署。最舒服的方式是自己定制 iso 。安装 iso 系统啥就都好了。而且都是一个样。然后这个 iso 的定制做成一个系统能自动构建出来。因为 iso 是不可变的,只要你们 release 了。产生的产品都是一个样。
    什么 docker ,ansible ,不是不能用,就是维护比较恶心。。
    guanzhangzhang
        4
    guanzhangzhang  
       2025 年 7 月 31 日
    你要确认后续客户是否不同的 os 和架构,是的话 golang 轻松些,有些客户是给机器让你们支持部署,上面说的定制 ISO 不现实。
    joyyu
        5
    joyyu  
       2025 年 7 月 31 日
    一般就是通过 docker 去做,离线部署那只能提前确认好部署环境,把必要的环境包存硬盘去现场部署,部署工作最好还是自己搞比较好,尤其后续还有维保更新的话。。。

    模块的话一般细分一下权限,再通过 license 控制就行,删代码控制就太乱了,也不好维护项目版本。
    yishidixia
        6
    yishidixia  
       2025 年 7 月 31 日
    写个一键部署脚本是不是就行了,把依赖的东西都放到包里
    heiya
        7
    heiya  
    OP
       2025 年 7 月 31 日
    @make115 架构已经是改不了了,目前是最简状态
    @murmur 这个倒是没有要求
    @guanzhangzhang
    @joyyu 架构方面公有云架构是 SpringBoot+Mysql+Redis+OSS ,私有云版是 SpringBoot+Mysql+Redis+Minio ,有一些功能在公有云和私有化在执行时是不同的逻辑,这些我已经抽象好了。目前有一个公有云版在阿里云上跑着;另外,之前的私有化部署就是客户给 Linux 环境机器我自己搞的,代码混淆一下,并且制作了一个 license 。现在的私有化部署要求在任意平台包括且不限于在用户的 Windows10 、11 上一键部署,没错,是客户平时使用的个人电脑,并且最好是我不用介入,直接给他一个包双击后 前后端整个起来直接用了。。所以在想到用 docker 方案的时候考虑到如果是 Windows 平台 docker desktop ,wsl 这些就有一些犹豫。我甚至怀疑这种给个人主机一键部署的需求是否合理。模块的话还是像你说的,代码是不能删的,我准备在业务层搞一个 basic-common 解耦一下。
    @yishidixia 是纯 shell 的那种吗?
    heiya
        8
    heiya  
    OP
       2025 年 7 月 31 日
    @sampeng 这个方法我了解一下,谢谢
    sampeng
        9
    sampeng  
       2025 年 7 月 31 日 via iPhone
    @heiya 还要 windows 个人电脑?这一套下去有啥坑鬼知道啊…这其实就比较难搞了…一般这种都是干脆直接重新开发了。你这套架构就 minio 和 redis 。在单机环境下,都是可以替代的。整半天还不如重新写一份…把这两个替代掉就可以了
    heiya
        10
    heiya  
    OP
       2025 年 7 月 31 日
    @sampeng 很明确的说要在个人电脑,而且毫无争议的要。如果是这样我倒是觉得可以按照 @make115 和你的想法进行架构重构,MySQL 换成 SQLite ,Redis 换成本地缓存,minio 换成本文件,进行重写。
    yishidixia
        11
    yishidixia  
       2025 年 7 月 31 日
    @heiya 对的,我记得我们之前都是写 shell 部署
    sampeng
        12
    sampeng  
       2025 年 7 月 31 日 via iPhone
    @heiya 个人端部署要啥 redis…也就一个 java+数据库就完事了…
    samnya
        13
    samnya  
       2025 年 8 月 1 日 via Android
    还要 Windows ?那能不能直接把一整个虚拟机打包给他用啊,一键启动就行。
    heiya
        14
    heiya  
    OP
       2025 年 8 月 1 日
    顶一下
    @samnya 毫无争议的要 打包出来虚拟机还需要用户那头装 vmware 吗?如果需要的话那是不行的。对于非技术的客户还是搞不定,要求就是免安装一键使用
    heiya
        15
    heiya  
    OP
       2025 年 8 月 1 日
    @samnya
    毫无争议的要 打包出来虚拟机还需要用户那头装 vmware 吗?如果需要的话那是不行的。对于非技术的客户还是搞不定,要求就是免安装一键使用
    make115
        16
    make115  
       2025 年 8 月 1 日
    @heiya #10 #10 不改架构就 docker 方便点, 我们是做过这种, 一种是单文件部署, 一种是 docker 部署, 内网安装 docker ,load 离线 image 都能走通,非技术人员按照步骤安装基本都没问题
    guanzhangzhang
        17
    guanzhangzhang  
       2025 年 8 月 1 日
    @heiya #7 docker desktop 不能商用的我记得,私有化如果负责人话语权不大的话搞会非常痛苦的,我就是做私有化的。你们这个最好有个话语权大的人牵头从现有经验去新起代码仓库去做,而不是基于现有的改去适配,不然会非常痛苦
    xubeiyou
        18
    xubeiyou  
       2025 年 8 月 1 日
    需求有点恶心 也太傻逼了 这个球
    thetbw
        19
    thetbw  
       2025 年 8 月 1 日
    把所有项目按照文件夹放好,自己写个启动,类似 phpstudy 这种,里面放上一键启动,启动 tomcat ,启动 redis 等按钮。我看好多企业软件都差不多,例如软帆的那个报表系统就是本地启动个 tomcat ,还有其他 orm erp 之类,比如泛微,都有类似的设计
    heiya
        20
    heiya  
    OP
       2025 年 8 月 1 日
    @guanzhangzhang #17 这个信息对我很重要,谢谢。目前现状是只有我一个人,上边一直要这一套 “能够在客户个人主机上(包括 windows10 、11 )一键运行免安装的后台服务”,劝说无果。另外,如果是重新拉一个仓库去做,以后的代码更新感觉也非常难受。
    joyyu
        21
    joyyu  
       2025 年 8 月 1 日
    @heiya #7 我以为至少是部署在用户那边的服务器上。个人 PC 的话就只能研究研究如何打包成 exe 一键安装了,反正要么迫害自己要么迫害客户
    heiya
        22
    heiya  
    OP
       2025 年 8 月 1 日
    @make115 #16 太感谢了。目前两个方案:1.用 docker ,能够减少不少工作量,缺点是在客户那边需要安装 docker 平台,且根据 @guanzhangzhang 提供的信息,这个是需要有授权的。2. 架构降级,能不用的全都不用,我这边就惨了。。挺多地方需要改的
    heiya
        23
    heiya  
    OP
       2025 年 8 月 1 日
    @xubeiyou 木办法
    heiya
        24
    heiya  
    OP
       2025 年 8 月 1 日
    @thetbw 如果是这样首次安装 Mysql 等中间件过程也需要通过脚本实现吗?
    heiya
        25
    heiya  
    OP
       2025 年 8 月 1 日
    @joyyu #21 部署到服务器上就美滋滋了 ,现在有点子绝望
    thetbw
        26
    thetbw  
       2025 年 8 月 1 日
    @heiya mysql 不需要安装,那种免安装的直接复制过来就可以了,不过初始化数据库是需要脚本,也可以程序里面查询没有对应数据库走初始化 sql
    guanzhangzhang
        27
    guanzhangzhang  
       2025 年 8 月 1 日   ❤️ 1
    @heiya #20 私有化会很多适配场景的,linux 下 docker 能离线安装的,可以看我 github 的那个 docker need to know ,任何中间件都要考虑客户提供现有的和高版本的啥的,还有写客户注重安全,某个组件有 CVE 如何更新,以及由漏洞后如何更新
    skallz
        28
    skallz  
       2025 年 8 月 1 日
    之前这种前后端都塞进 electron 里面,但是后端是 python ,java 没接触过能不能这样打包。。。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5718 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:19 · PVG 11:19 · LAX 19:19 · JFK 22:19
    ♥ Do have faith in what you're doing.