请问大家正式环境如何部署php的docker项目呢?

是不是在服务器上将docker环境搭起来,每次发布的时候git pull 自动化部署的时候将git pull 这些操作放到一个shell中 jenkins就触发这个脚本就发布了,总感觉这种方式不太好,每次发布要重新构建容器还是怎么样,有没有好的实践方案

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
sanders
最佳答案

我们在部署单机的时候使用的方案较为简单,对于用 php-fpm 执行的代码,直接更新代码便可以了,docker 只用来启动并管理 php-fpm 的容器。使用 docker-compose 管理各个容器之间的启动顺序、挂载卷和网络,yaml 配置使用代码仓库进行管理。唯一需要注意的是,如果使用了队列,需要在代码部署前后重启队列消费者容器,这取决于消息的生产者和消费者在升级前后是否兼容的问题,以及消息处理失败是否有补救的方法。

但如果你使用集群的话,我倒觉得更简单一些,可以依靠集群的滚动升级机制。

1年前 评论
yyy123456 1年前
sanders (作者) 1年前
yyy123456 1年前
cccyzloong (楼主) 1年前
讨论数量: 26

你们没有运维吗?没有的话,我猜你们项目目前还是单机吧,应该不用集群部署?

1年前 评论
cccyzloong (楼主) 1年前
忆往昔弹指间 (作者) 1年前

直接到docker里面 git pull 反正php又不需要编译。最好不用docker吧,配个钩子自己拉

1年前 评论
cccyzloong (楼主) 1年前
轻描淡写 (作者) 1年前
cccyzloong (楼主) 1年前
轻描淡写 (作者) 1年前

我都是写个脚本手动执行的 是不是太低端了 :joy:

1年前 评论
忆往昔弹指间 1年前
cccyzloong (楼主) 1年前

envoy or deployer

1年前 评论

PHP 项目用 Deployer 部署就行了,基本可以做到零宕机!在结合 CI/CD 的流水线,例如 Gitlab CI/CD。

1年前 评论

我每次发布都是构建一个新镜像来起容器服务。这个构建过程是写死在构建脚本里的

1年前 评论
cccyzloong (楼主) 1年前
star7th (作者) 1年前
panda-sir

jenkins + k8s 项目打镜像的时候就pull把源代码放包里 jenkins负责构建和触发部署 k8s负责项目的平滑重启

1年前 评论

如果只是单机的话,别给自己找不痛快。直接实例部署。用 deployer 脚本就可以了。简单方便

1年前 评论
sanders

我们在部署单机的时候使用的方案较为简单,对于用 php-fpm 执行的代码,直接更新代码便可以了,docker 只用来启动并管理 php-fpm 的容器。使用 docker-compose 管理各个容器之间的启动顺序、挂载卷和网络,yaml 配置使用代码仓库进行管理。唯一需要注意的是,如果使用了队列,需要在代码部署前后重启队列消费者容器,这取决于消息的生产者和消费者在升级前后是否兼容的问题,以及消息处理失败是否有补救的方法。

但如果你使用集群的话,我倒觉得更简单一些,可以依靠集群的滚动升级机制。

1年前 评论
yyy123456 1年前
sanders (作者) 1年前
yyy123456 1年前
cccyzloong (楼主) 1年前

PHP 比较特殊, 正常来说都是把项目构建成二进制文件然后打包到镜像里运行 PHP 的话可以挂载目录到宿主机, 然后每次更新, 宿主机 pull 代码就可以, 只有当需要新扩展才重新构建容器

我的话因为用 laravel-s, 所以也和 golang 一样, 在专门的构建机器上把代码什么的打包到镜像, 然后推送到镜像库, 部署的机器统一拉取构建好的镜像即可

1年前 评论

单机没那么多讲究,直接webhook git pull 或者 Laravel Envoy.如果是集群的话 直接写个dockerfile 配合CI/CD 自动创建镜像上传镜像到私有仓库, 线上直接pull 最新tag启动容器完活,

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!