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

小团队如何搭建远程开发环境

  •  
  •   sanwv · 82 天前 · 5018 次点击
    这是一个创建于 82 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说下背景,主要是 web 开发,都熟悉 linux ,10 人左右,当前用的方案是 wsl2+docker ,vscode 连到 wsl2 写代码,docker 实现运行环境。其实这样也没啥大问题,但是现在有台闲置机器( pc 机 16G )自己想折腾一下-_-

    目前能想到的远程开发方案列一下

    方案 1:VM 方案

    基于 esxi 或者 kvm 给每个人分配一个虚拟机,vscode+ssh remote 开发,在虚拟机里各自安装 docker 运行项目。主要是担心性能不够

    1. 底层选 esxi 还是有更优的推荐?
    2. 不影响体验最多能启动多少个 vm ?

    方案 2:docker in docker 方案

    宿主机上跑 docker ,每人分配一个 docker 容器,用 docker in docker 的方案来实现运行环境。已经折腾了下,开发代码没啥问题,但是每个容器内都有操作宿主机 docker daemon 的能力有点不可控,mounts 也是宿主目录而非容器内目录。主要是没搞定完全隔离

    1. 容器内有全局管理 docker 的能力
    2. 内层容器挂载的是宿主机目录

    方案 3:继续 wsl2 ,或推荐其他更优方案

    希望有前辈推荐下方案,解答下方案的问题,感谢

    52 条回复    2023-01-06 12:53:33 +08:00
    perfectlife
        1
    perfectlife  
       82 天前   ❤️ 2
    感觉 16g 的机器没必要这么折腾吧
    debuggerx
        2
    debuggerx  
       82 天前
    感觉这个“远程开发环境”没啥必要,对开发体验没啥提升,可能还不如搞 CI 跑自动化啥的。
    sanwv
        3
    sanwv  
    OP
       82 天前
    @debuggerx ci 用的 gitea+drone
    r4y
        4
    r4y  
       82 天前
    可以看看 MS 的 Codeserver 的方案,来做远程开发。
    在结合 Git action 来打镜像,和部署发布
    sanwv
        5
    sanwv  
    OP
       82 天前
    @perfectlife 能提升下体验再升级下硬件也可以,现在对准入门槛还没直观认知
    sanwv
        6
    sanwv  
    OP
       82 天前
    @r4y 自己也搜索过方案,有关注到,只看了一眼,现在的认知是 Codeserver 是上层软件,现在的问题是如何搭建基础架构
    ixixi
        7
    ixixi  
       82 天前 via Android
    esxi 我自己用,32g6cpu 感觉很好,10 人用这 16g 的 pc 开发可能不太够吧?
    brust
        8
    brust  
       82 天前
    远程开发不用公网吗
    sanwv
        9
    sanwv  
    OP
       82 天前
    @brust 办公室有公网 ip ,当然也需要 ddns
    jinlong
        10
    jinlong  
       82 天前
    重新配一台机器吧,e5 2696v3 * x 2 ( 36 核 72 线程) + 128G or 256G DDR3 内存 + X99 F8D + 1000W 电源,3000 ~ 4000 成本,ESXI 开虚拟机随便他们造。
    ltkun
        11
    ltkun  
       82 天前
    PVE+lxc 比较不挑硬件 又更轻量级 全开源实现主要
    sanwv
        12
    sanwv  
    OP
       82 天前
    @ltkun 我玩玩先
    @jinlong 方案要先落地才好申请硬件-_-
    cheng6563
        13
    cheng6563  
       82 天前
    内核新的话可以 podman in docker
    me221
        14
    me221  
       82 天前
    不如买 Github CodeSpace
    janxin
        15
    janxin  
       82 天前
    为了上方案而上方案没什么意义啊
    GreatAuk
        16
    GreatAuk  
       82 天前
    @me221 国内有延迟的
    oott123
        17
    oott123  
       82 天前 via Android
    你确定你这是 docker in docker ,而不是把宿主的 docker socket 挂到了 docker 里面?
    wangritian
        18
    wangritian  
       82 天前
    什么 web 项目非要远程开发
    dayeye2006199
        19
    dayeye2006199  
       82 天前
    一台机器,每个人开个用户,大家 SSH 上去用就行。

    一些调试端口冲突可能是个问题,但是也没啥大不了,大家用不一样的端口就行。
    worldquant
        20
    worldquant  
       82 天前
    128g 的 server 才这么搞你这属于瞎折腾
    Nnq
        21
    Nnq  
       82 天前
    就 1 台 16G 的机器,如果个人 PC 配置都不错的话,大可不必这么折腾,没必要,没有人专门维护,浪费在折腾上的时间还不如多出几个 features
    yimiaoxiehou
        22
    yimiaoxiehou  
       81 天前
    就这配置,瞎折腾
    idblife
        23
    idblife  
       81 天前 via iPhone
    16G 的机器性能可能还不如员工电脑,别折腾了
    litchinn
        24
    litchinn  
       81 天前
    服务部署是有另外的服务器吗,不然 16g 干脆直接拿来部署服务给前端调试算了,或者装一些开发用的服务,比如日志工具,还有禅道或者 jira 等
    hanxiV2EX
        25
    hanxiV2EX  
       81 天前 via Android
    直接装 linux 服务器版本,一人分配一个 docker 容器,关键就是分配出网端口段和磁盘,容器里随便别人怎么搞,支持一下 docker in docker 更好,别人可以继续开子容器,限定每个人的资源就好。
    maggch97
        26
    maggch97  
       81 天前
    小项目折腾远程开发是没事找事。本机都能跑起来
    xsir2020
        27
    xsir2020  
       81 天前
    我一直以为远程开发是在异地办公,没想到这是远程调试啊~
    thetbw
        28
    thetbw  
       81 天前
    8355
        29
    8355  
       81 天前
    单纯开发环境除非有特殊条件强依赖 不然自己本地不是效率更高?为啥要这样做呢 OP 介绍下
    sanwv
        30
    sanwv  
    OP
       81 天前
    @oott123 现在是把宿主 socket 挂到 docker 里,遇到的问题是容器内有全局管理权限,还有新启容器再映射的是宿主机目录。感觉能实现完全隔离的 docker in docker 也能满足需求,问题是:1.能否实现完全隔离 2.性能比虚拟机模式好吗否则还不如直接用虚拟机方案了
    sanwv
        31
    sanwv  
    OP
       81 天前
    @8355 现在是每人都在各自电脑上基于 wsl2 实现环境统一,想折腾下的原因无外乎对远程开发的美好幻想,不用纠结硬件是否够用,其实方案可行的话也是先我自己用起来,不会折腾其他人
    zoharSoul
        32
    zoharSoul  
       81 天前
    感觉不如本地开发方便
    IvanLi127
        33
    IvanLi127  
       81 天前 via Android
    建议用 PVE 的 LXC 容器,预装 docker 环境,分给每个人,让他们用远程开发容器就好了。远程开发的话网络得好,不然影响效率。
    james2013
        34
    james2013  
       81 天前
    小团队使用远程开发环境有点得不偿失
    使用远程开发环境可能大公司使用效果好些,对于代码有严格保密需求的好些
    本机内存 32g,固态硬盘,配置高,又没有延时,本机开发不香吗?大家一起去挤远程机子,如果远程机子出现问题,大家都只能干瞪着眼了
    开发环境只需要在机器上配置一次就可以了,熟练后可能 1 天时间都不到
    maggch97
        35
    maggch97  
       81 天前
    用远程开发环境
    1. 本地性能跑不起来。服务必须跑在 512G 内存的机器上,编译必须要 96 核心的机器,IDE 跑起来就要占 100G 内存
    2. 本地环境部署不起来。网关,数据库,消息队列,hdfs 等等全都是一个团队维护的集群,每个组维护的服务还依赖了一百个上下游的服务。这时候一个远程开发环境能够让你的 debug 服务轻松接入测试环境。
    3. 奇葩的保密政策。不允许代码下载到本地


    但是
    1. 你们的服务本地 wsl2 就能跑起来,现在有一台 16G 的机器可能比本地机器还差
    2. 所有服务 docker 就能解决问题
    3. 没有奇葩保密政策

    我看不到有远程开发的必要
    maggch97
        36
    maggch97  
       81 天前
    我觉得你要做的应该是怎么优化这个本地开发的环境。

    比如把你们的代码想办法跑到 Windows 上,让大家能用上 JetBrains
    比如一个一键部署环境的脚本
    sanwv
        37
    sanwv  
    OP
       81 天前
    @maggch97 感谢,综合大家的回复确实没必要非上远程开发,没这样搞的理由和硬件。整理思路,把这个想法当作自己的一次尝试,学习实践下远程开发的系统搭建
    sanwv
        38
    sanwv  
    OP
       81 天前
    @IvanLi127 昨晚安装了一下 pve ,还没深入。目测 lxc 和 docker 玩法是一样的,因为我们是用 docker compose 来实现运行,感觉还是会遇到 docker in docker 如何实现完全隔离的问题
    wuchujie
        39
    wuchujie  
       81 天前
    docker in docker 可能比较好。能自己继续装开发需要的数据库等包。
    我最近看了一下这个项目 https://github.com/yqlbu/neovim-server
    自己折腾了一版本 web 端编程。主要是我没用过 vscode 和 vscode remote 相关的不好评价。
    我这边是手顺把以前 vim script 的配置改 lua 了。用起来挺爽的。代码补全等各个方面都 OK 。而且我跑这个镜像的服务器也是内网的。速度很快。甚至我还装了个 tmux 用 web 登录开发机再用 tmux 登录远程服务器
    wuchujie
        40
    wuchujie  
       81 天前
    @wuchujie 但是这个镜像可能不能直接用。你需要重新再打包一次。他本身的脚本 chown -R 有点问题。
    sanwv
        41
    sanwv  
    OP
       81 天前
    @wuchujie 好几年前关注过 neovim ,也折腾过,vscode 满足了我对编辑器的所有需求
    agmx321
        42
    agmx321  
       81 天前
    pc 机器 16G 性能可能本身会有局限,考虑到成本效率及 pc 硬件的不可控性,10 人共用的话,可以考虑:
    1.宿主机安装 Ubuntu20.04 桌面版并装 kvm(最简单),公共服务直接在 Ubuntu docker 上跑,需要强隔离的可以放在 kvm 里面;免费的 MobaXterm 可以直接图形化创建 kvm 机器,不用大家都需要会后台创建 kvm 。
    2.或者宿主机 Ubuntu20.04 配合 virtualbox+vagrant (稍微要配置下,后续 vagrantfile 用起来很方便)个人不推荐你用这种,pc 16G 的机器没必要这么折腾了,仅提供思路;

    如果还要使用网络隔离:
    1.可以直接使用 Ubuntu 的 iptables
    2.如果大家在家里也想访问公司里面的 ubuntu 宿主机的服务,可以使用 tailscale, 免费的额度就够你们用了;
    learningman
        43
    learningman  
       81 天前
    zhouu
        44
    zhouu  
       81 天前
    部署一套 coder
    greatghoul
        45
    greatghoul  
       81 天前
    试试 gitpod 的 project?
    uncat
        46
    uncat  
       81 天前
    我们在用的方案:

    - 一台物理服务器 7*24 小时运行 Ubuntu LTS
    - 每个人有一个普通帐号(没有 root 权限)基于 vscode remote development 连入,统一开发环境
    - 物理服务器通过 libvirtd 自建虚拟化提供任意数量虚拟机
    - 配置 bridge 网络实现虚拟机、物理机在同一个局域网
    - 封装脚本,实现虚拟机一键快照和回滚
    - 对虚拟机发起测试,测试后如果需要清理现场,恢复快照实现重复测试
    - 自建 wireguard + frpc 实现远程办公接入
    Akkuman
        47
    Akkuman  
       80 天前 via Android
    docker in docker 试试 firecracker ,严格来说是 docker in 轻量虚拟机
    sanwv
        48
    sanwv  
    OP
       80 天前
    @uncat 看着很赞
    sanwv
        49
    sanwv  
    OP
       80 天前
    @Akkuman 刚看了一眼 firecracker ,确实严格来说是 docker in 轻量虚拟机,我周末仔细研究下这个东西 赞
    sanwv
        50
    sanwv  
    OP
       80 天前
    @uncat vpn 也是必备组件,不过为什么还需要 frpc 呢,没公网 ip ?
    uncat
        51
    uncat  
       80 天前
    通过 frpc tcp 在 frps 服务器暴露 wireguard ,签发 wireguard 证书给开发者,远程开发者连接 wireguard 相当于跟所有的虚拟机、物理机在同一个内网
    uncat
        52
    uncat  
       80 天前
    物理服务器在办公区机房,办公区网络,无公网 IP
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   2020 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 00:14 · PVG 08:14 · LAX 17:14 · JFK 20:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.