V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhuzhibin
V2EX  ›  问与答

PHP 项目如果使用 docker 进行多机分布式部署有什么好的方案?

  •  
  •   zhuzhibin · 2021-02-04 18:47:23 +08:00 · 1344 次点击
    这是一个创建于 1406 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT,常规的扩容流程基本是如下:

    1 、更新最新的且最稳定的版本代码
    2 、机器做镜像
    3 、从镜像中克隆机器
    4 、把机器加到 LB

    但是这种流程实际上也会存在一些问题,例如我扩容了 20 台机器,这个时候我可能需要去紧急修改一些配置,这样一般要如何高效且无误的去更新这些配置,这里其实也顺便问一下多机配置如何管理的问题(例如.env 读文件),例如配置中心还是啥?期望的肯定是不管你有多少台机器,我只需修改一次配置即可,所有机器的配置会自动同步

    总结一下问题:

    1 、PHP 项目如果使用 docker 进行多机分布式部署有什么好的方案?
    2 、多机部署配置如何更好的管理?

    14 条回复    2021-02-05 14:18:11 +08:00
    dapang1221
        1
    dapang1221  
       2021-02-04 18:49:50 +08:00
    你都 docker 多机分布了,为啥不用 k8s,配置文件同步、加入负载均衡都能在 k8s 层面上解决的
    zhuzhibin
        2
    zhuzhibin  
    OP
       2021-02-04 18:51:14 +08:00
    @dapang1221 老哥有无一些案例部署的看看?例如一些运维的链接啥的,因为我太了解 k8s 那套,不好意思哈~
    zhuzhibin
        3
    zhuzhibin  
    OP
       2021-02-04 18:52:23 +08:00
    @dapang1221 现在没上 docker 呢,配置以及部署遇到那些问题所以才想方案看能否迁移到 docker,现在还是在 Linux 上面跑的 nginx+php-fpm 跑呢
    liuzhaowei55
        4
    liuzhaowei55  
       2021-02-04 19:52:37 +08:00 via Android
    我的理想模型是,开发推送 release 版本代码,ci 工具拉取线上环境配置构建镜像,通知到 cd 工具,自动根据灰度发布策略上线。
    这样的好处是开发与线上配置解耦,配置写入镜像这样重新运行过往镜像不需要再回忆当时的配置了。
    现在比较多的是用 apollo 这样的配置中心解决方案。
    liuzhaowei55
        5
    liuzhaowei55  
       2021-02-04 19:56:34 +08:00 via Android
    想试验的话可以用 GitHub 的 actions 打包,然后推送到 aliyun 镜像服务器,然后用 docker swarm 模式搭配 portainer gui 来管理 docker 的自动发布,actions 打包镜像完成推送 aliyun 镜像仓库,推送完镜像仓库通知 portainer 去灰度发布,简单实用,如果没有 sql 发布的话。
    riverfell
        6
    riverfell  
       2021-02-05 09:27:23 +08:00
    我现在在一家 php 后端的手游公司,我也不是很懂手游,不知道有没有必要上你这种方案?
    zhuzhibin
        7
    zhuzhibin  
    OP
       2021-02-05 09:58:07 +08:00 via iPhone
    @liuzhaowei55 阿波罗会不会太重了 你说的那套其实就是 k8s CI/CD 吧
    zhuzhibin
        8
    zhuzhibin  
    OP
       2021-02-05 09:59:44 +08:00 via iPhone
    @liuzhaowei55 老哥有实践过这个流程嘛?成本以及维护起来会不会很高?
    zhuzhibin
        9
    zhuzhibin  
    OP
       2021-02-05 10:04:59 +08:00 via iPhone
    @riverfell 看具体情况吧 k8s 那套是需要成本的
    liuzhaowei55
        10
    liuzhaowei55  
       2021-02-05 12:00:29 +08:00 via Android
    @zhuzhibin 配置读取可以自己选的,可以直接放入项目中,也可以在镜像生成时注入,还可以用 Apollo 在线读取。
    这一套和 k8s 没啥关系,传统的部署也可以实现自动化的,简单体验就用 docker swarm + portainer 就可以了,单机就能实现
    k8s 用阿里云的按时收费体验也没有很贵三台机器的价格,用完关掉就可以了
    liuzhaowei55
        11
    liuzhaowei55  
       2021-02-05 12:04:41 +08:00 via Android
    @zhuzhibin 真实运行过的,小项目还是不错的。
    大项目一般有流程控制,不会让太随意的上线。
    docker swarm 的负载自动扩容没体验过,都是自己手动起一台机器,初始化环境加入 swarm 集群,swarm 会自动调整,k8s 如果用阿里云的话应该可以自动根据负载上线机器吧
    liuzhaowei55
        12
    liuzhaowei55  
       2021-02-05 12:09:04 +08:00
    @zhuzhibin 基于 Docker Swarm 项目部署架构: https://www.yuque.com/where/dib969/bg1cff 可以看这里,都是已经上线运行了的,可以 tg 沟通一起学习
    zhuzhibin
        13
    zhuzhibin  
    OP
       2021-02-05 14:17:47 +08:00
    @liuzhaowei55 谢谢老哥 可以留个联系不 不介意到时可以跟你请教一下😃~
    zhuzhibin
        14
    zhuzhibin  
    OP
       2021-02-05 14:18:11 +08:00
    @liuzhaowei55 找时间实践一下应该就清楚了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   861 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:11 · PVG 06:11 · LAX 14:11 · JFK 17:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.