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

hxdm, PHP 项目代码怎么实时部署许多台 ecs 服务器上呢?

  •  
  •   skyrim61 · 2022-12-01 13:28:43 +08:00 · 2492 次点击
    这是一个创建于 504 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT 现在碰到的需求是, 新增的服务器, 自动的同步 php 项目代码

    36 条回复    2022-12-02 13:57:21 +08:00
    skyrim61
        1
    skyrim61  
    OP
       2022-12-01 13:30:59 +08:00
    目前流程是 gitlab 上线发布到每组第一台服务器上, 第一台服务器上 lsyncd 同步到 2 ,3,4,5,6...服务器上,
    现在做自动扩缩容, 新增的服务器如果加入到 php 代码同步流程中
    skyrim61
        2
    skyrim61  
    OP
       2022-12-01 13:31:26 +08:00
    如果=如何
    ainon
        3
    ainon  
       2022-12-01 13:33:08 +08:00
    webhook
    jobcher
        4
    jobcher  
       2022-12-01 13:35:00 +08:00
    gitlab ci/cd
    vZexc0m
        5
    vZexc0m  
       2022-12-01 14:50:12 +08:00
    可以用阿里云的弹性伸缩服务来管理服务器。然后用脚本统一管理每台服务器的更新流程。或者看看你现有的自动扩缩容的服务支不支持相关的功能。
    goodryb
        6
    goodryb  
       2022-12-01 14:58:19 +08:00
    不如服务器启动的时候执行 git pull 拉取下代码, 配置个启动脚本打包到标准镜像中
    skyrim61
        7
    skyrim61  
    OP
       2022-12-01 15:16:53 +08:00
    代码更新十分频繁, 几乎每天会更新发布近百次, 目前使用的 lsyncd 服务同步代码, 实时性和可靠性都还不错, 但是如果要使用自动脚本新增数台服务器, 在第一次部署服务器时, 可以在脚本中自动的去获取一次全量代码, 但之后, 如果代码再更新, 就不好做同步了, 因为需要更新 lsyncd 服务的同步配置文件了.
    skyrim61
        8
    skyrim61  
    OP
       2022-12-01 15:18:08 +08:00
    @vZexc0m 没有采用阿里云的弹性伸缩, 我们自己实现了一个类似的脚本功能.
    skyrim61
        9
    skyrim61  
    OP
       2022-12-01 15:18:44 +08:00
    @goodryb 这个是 docker 镜像的思路, 但是我们项目使用的服务环境, 没有做成镜像呢
    vZexc0m
        10
    vZexc0m  
       2022-12-01 15:27:10 +08:00
    @skyrim61 #8 那就要想办法获取到新增的服务器的 IP 信息,然后进行相应的更新操作。比如在基础镜像上安装好运行环境,然后远程执行 git 命令更新代码,然后重启服务。 还是建议统一用 docker 镜像之内的进行分发好做得多,也更好。
    qa2080639
        11
    qa2080639  
       2022-12-01 15:41:16 +08:00
    https://github.com/openspug/spug
    看下这个是否合适
    sun522198558
        12
    sun522198558  
       2022-12-01 16:13:20 +08:00
    那就写个定时发现新 ip 就同步一次
    Twnysta
        13
    Twnysta  
       2022-12-01 16:31:26 +08:00
    服务器很多就 k8s 管理,运行环境一个 docker ,代码在一个 docker 里面,部署的时候挂在一起
    pota
        14
    pota  
       2022-12-01 16:42:05 +08:00
    之前遇到一个骚操作,所有服务器挂载同一块硬盘。。。
    kevin1234
        15
    kevin1234  
       2022-12-01 16:47:06 +08:00
    给钱 我来操作
    qinrui
        16
    qinrui  
       2022-12-01 17:45:13 +08:00 via iPhone
    每天几百个版本?
    chenqh
        17
    chenqh  
       2022-12-01 18:01:51 +08:00
    写个 sftp 同步脚本不就好了吗,php 这种不是最简单吗,又不需要重启 supervisor
    wangritian
        18
    wangritian  
       2022-12-01 18:12:09 +08:00
    阿里云 k8s+流水线,面板操作,学一下概念就可以配置使用了
    yangyifan
        19
    yangyifan  
       2022-12-01 18:14:46 +08:00 via Android
    我使用阿里云函数计算的时候也遇到类似问题,解决方案是用 ssd 云磁盘挂载到指定目录,所以更新也只需要更新云磁盘内容就行了。不过后来函数计算有了层的概念。
    CnpPt
        20
    CnpPt  
       2022-12-01 20:53:26 +08:00 via Android
    git 的 webhook 触发 ansible 拉取代码
    shanghai1998
        21
    shanghai1998  
       2022-12-01 21:06:21 +08:00
    最稳的还是 docker ,弱弱的问下 php 用的什么框架?现在测试好多非 swoole 、workerman 框架吃数据库链接
    bjzhush
        22
    bjzhush  
       2022-12-01 22:39:31 +08:00
    @pota 两三台还行,几十上百的 IO 要死的
    ywisax
        23
    ywisax  
       2022-12-01 23:36:40 +08:00
    每次更新后做镜像,然后新机器用新作的镜像。
    最后,你要的其实是 k8s 。
    pota
        24
    pota  
       2022-12-02 08:54:07 +08:00
    @bjzhush #22 所以我说遇到的骚操作。。。不知道那个运维怎么想的
    skyrim61
        25
    skyrim61  
    OP
       2022-12-02 09:56:37 +08:00
    @pota 我之前也是这么想的, 把项目代码目录放到 nas 文件存储中, 然后将 nas 挂载到每个 ecs 服务器下, 但是 io 性能是不行的, 服务器数量少, 可能没多大问题, 数量多就不行了, 也咨询了阿里云的人, 说最好不要将代码项目文件放 nas 中
    skyrim61
        26
    skyrim61  
    OP
       2022-12-02 09:57:30 +08:00
    @qinrui 没有几百个版本, 就是开发人员经常需要修改线上的代码, 更新代码比较频繁, 比如增加日志埋点, 小公司, 开发都是把线上作为测试环境的, 你懂的.
    skyrim61
        27
    skyrim61  
    OP
       2022-12-02 09:58:23 +08:00
    @shanghai1998 我们的 php 框架是架构写的一个自定义框架
    skyrim61
        28
    skyrim61  
    OP
       2022-12-02 09:59:10 +08:00
    @CnpPt gitlab 的 server hook 用过, 但是 webhook 没怎么接触过, 我们也用不到 ansible....
    skyrim61
        29
    skyrim61  
    OP
       2022-12-02 10:00:01 +08:00
    @ywisax k8s 没有找到特别好的 lnmp 符合我们情况的样例.
    skyrim61
        30
    skyrim61  
    OP
       2022-12-02 10:03:10 +08:00
    @vZexc0m 是的, 我目前的思路也是类似的, 获取到新增的服务器 ip 地址, 然后在 gitlab 上发布时, 多发布几台, 但是这个也涉及到 同步的先后顺序, 同步完第一台后, 再同步第二台, 第三台... 可能会导致线上某个时间段内, 代码不一致的情况.
    当前使用的是 gitlab 同步到第一台, 然后第一台使用 lsyncd 同步到其它台, 实时性有保证的(我猜的)
    skyrim61
        31
    skyrim61  
    OP
       2022-12-02 10:04:16 +08:00
    @ywisax 我们上线的频繁程度, 简直发指, 10 分钟能上线 10 次的那种....
    skyrim61
        32
    skyrim61  
    OP
       2022-12-02 10:08:06 +08:00
    @chenqh 亲, 有样例吗?
    undefine2020
        33
    undefine2020  
       2022-12-02 10:32:44 +08:00
    gitlab 的 ci/cd
    X3en
        34
    X3en  
       2022-12-02 11:02:56 +08:00
    直接 nfs 挂载
    chenqh
        35
    chenqh  
       2022-12-02 12:11:56 +08:00
    @skyrim61 这种没有哦,而且这种也解决不了时间先后的问题
    ywisax
        36
    ywisax  
       2022-12-02 13:57:21 +08:00
    @skyrim61 10 分钟 10 次,就应该用 k8s 啊。跑通一次 CI/CD ,下面的事情就容易了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   967 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:27 · PVG 04:27 · LAX 13:27 · JFK 16:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.