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

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

  •  
  •   sanwv · 2023-01-04 17:03:59 +08:00 · 7185 次点击
    这是一个创建于 671 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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


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

    我看不到有远程开发的必要
    maggch97
        36
    maggch97  
       2023-01-05 10:37:09 +08:00
    我觉得你要做的应该是怎么优化这个本地开发的环境。

    比如把你们的代码想办法跑到 Windows 上,让大家能用上 JetBrains
    比如一个一键部署环境的脚本
    sanwv
        37
    sanwv  
    OP
       2023-01-05 10:54:53 +08:00
    @maggch97 感谢,综合大家的回复确实没必要非上远程开发,没这样搞的理由和硬件。整理思路,把这个想法当作自己的一次尝试,学习实践下远程开发的系统搭建
    sanwv
        38
    sanwv  
    OP
       2023-01-05 11:00:27 +08:00
    @IvanLi127 昨晚安装了一下 pve ,还没深入。目测 lxc 和 docker 玩法是一样的,因为我们是用 docker compose 来实现运行,感觉还是会遇到 docker in docker 如何实现完全隔离的问题
    wuchujie
        39
    wuchujie  
       2023-01-05 14:49:13 +08:00
    docker in docker 可能比较好。能自己继续装开发需要的数据库等包。
    我最近看了一下这个项目 https://github.com/yqlbu/neovim-server
    自己折腾了一版本 web 端编程。主要是我没用过 vscode 和 vscode remote 相关的不好评价。
    我这边是手顺把以前 vim script 的配置改 lua 了。用起来挺爽的。代码补全等各个方面都 OK 。而且我跑这个镜像的服务器也是内网的。速度很快。甚至我还装了个 tmux 用 web 登录开发机再用 tmux 登录远程服务器
    wuchujie
        40
    wuchujie  
       2023-01-05 14:50:07 +08:00
    @wuchujie 但是这个镜像可能不能直接用。你需要重新再打包一次。他本身的脚本 chown -R 有点问题。
    sanwv
        41
    sanwv  
    OP
       2023-01-05 15:23:46 +08:00
    @wuchujie 好几年前关注过 neovim ,也折腾过,vscode 满足了我对编辑器的所有需求
    agmx321
        42
    agmx321  
       2023-01-05 16:33:21 +08:00
    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  
       2023-01-05 16:50:38 +08:00
    zhouu
        44
    zhouu  
       2023-01-05 17:37:46 +08:00
    部署一套 coder
    greatghoul
        45
    greatghoul  
       2023-01-05 23:58:39 +08:00
    试试 gitpod 的 project?
    uncat
        46
    uncat  
       2023-01-06 01:20:59 +08:00
    我们在用的方案:

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