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

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
sanders
最佳答案

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

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

8个月前 评论
yyy123456 8个月前
sanders (作者) 8个月前
yyy123456 8个月前
cccyzloong (楼主) 8个月前
讨论数量: 26

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

8个月前 评论
cccyzloong (楼主) 8个月前
忆往昔弹指间 (作者) 8个月前

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

8个月前 评论
cccyzloong (楼主) 8个月前
轻描淡写 (作者) 8个月前
cccyzloong (楼主) 8个月前
轻描淡写 (作者) 8个月前

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

8个月前 评论
忆往昔弹指间 8个月前
cccyzloong (楼主) 8个月前
陈先生

envoy or deployer

8个月前 评论

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

8个月前 评论

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

8个月前 评论
cccyzloong (楼主) 8个月前
star7th (作者) 8个月前
panda-sir

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

8个月前 评论

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

8个月前 评论
sanders

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

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

8个月前 评论
yyy123456 8个月前
sanders (作者) 8个月前
yyy123456 8个月前
cccyzloong (楼主) 8个月前

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

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

8个月前 评论

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

8个月前 评论

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