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

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
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年前 评论