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

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

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

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

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