实际项目开发中,对于自动化部署 php 项目市面上鲜有比较不错的方案,比如瓦力,比如公司 ruby 项目组使用 capistrano,经过少数实践,还是选择使用 pr,issue 比较活跃的 deployer
- 关于
deployer
部署Laravel
项目最初实践方案是比较初级的,composer global
安装到本地,然后编写符合自己项目的 task , 配置主机,配置共享目录,服务器配置 sudo 免密码账号等等一系列操作。 - 刚开始可能遇到的问题比较低级,但是通过翻看 deployer 的各种 issues,逐步的把问题解决,也算是有一点小进步吧。
- 关于使用 deployer 部署 php 项目,我后来在 Laravel-china 社区看到了 Overtrue 的一篇文章,总结的很好,方便以后查阅,再此我记一下链接,文中把整个部署过程讲的很通透,下面的评论也有一些可能会在未来遇到的问题,总体来说很赞👍👍
- 关于使用 deployer 部署 Laravel 项目,虽然此 package 已经提前预设了 laravel recipe,包括共享目录
storage
,共享文件.env
,集成各种artisan
等等,但是我们也在试想如何更优雅与 Laravel 贴近,于是想在此基础上封装一个扩展包,起初在此扩展包我们想添加的功能是:添加部署群消息提醒,添加修订日志,自动上传新的 .env 文件等,搜索博大的 github 仓库,果不其然发现了一个package
集成 deployer,于是在此基础上我们重新整合了需求,定制自己项目的自动化部署扩展包 laravel-unideploy,目前还在不断完善中,但是大部分代码都是基于 laravel-deployer - 选用 Yml 配置加载自定义配置,配置更加轻便灵活
- 更优雅的记录每次修订日志,回滚日志
- 衔接web hook通知,后续也会继续完善,目前暂时只用于公司内部系统通知。
原来开始叨叨别人包 bug 多,一杯咖啡的时间,冷静下来,总有一些独特的思想在里面,一千的 php 程序员眼中,总有一千种代码实现,怎么去权衡代码精简和代码易读易懂是一个不朽的问题😇
总结一下实际项目开发中遇到的一些问题
问题一
acl 未安装,下面如下 shell 返回空
if hash setfacl 2>/dev/null; then echo 'true'; fi
解决方案
sudo apt-get install acl
参考 issues,Unable to setup correct permissions for writable dirs
问题二
reload php-fpm 没有权限
sudo need to enter a password
解决方案
sudo vi /etc/sudoers
your_user_name ALL=(ALL) NOPASSWD: ALL
需要特别注意的地方是 将部署账号的 sudo 配置在文件的最后一行,避免有覆盖的情况,可以配置完执行 sudo cat /etc/sudoers
看看是否有权限
问题三
git deploy failed
Fetching origin
ERROR: Repository not found.
fatal: Could not read from remote repository.
解决方案
eval `ssh-agent -s` &&
ssh-add ~/.ssh/id_rsa
项目部署的主机配置中设置 forwardAgent 为 true,本地 ssh-add 自己的私钥,因为部署过程中需要与服务器保持会话
其他的配置还在逐渐实践中,期间在遇到什么问题,随时补充笔记,吾日三省吾身。
写了这么一段小笔记,现在已经快到12点了,突然发现我电脑的键盘膜上 command + c
已经开始花了,这么多天过去了,往后余生,风雪是你,平淡是你,清贫是你,荣华是你。
无二之旅,定制有温度的旅行,今年的目标之一是定制自己的 uni-package
,实践是成长最好的方式.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。