php-deployer

实际项目开发中,对于自动化部署 php 项目市面上鲜有比较不错的方案,比如瓦力,比如公司 ruby 项目组使用 capistrano,经过少数实践,还是选择使用 pr,issue 比较活跃的 deployer

  1. 关于 deployer 部署 Laravel 项目最初实践方案是比较初级的,composer global 安装到本地,然后编写符合自己项目的 task , 配置主机,配置共享目录,服务器配置 sudo 免密码账号等等一系列操作。

  2. 刚开始可能遇到的问题比较低级,但是通过翻看 deployer 的各种 issues,逐步的把问题解决,也算是有一点小进步吧。

  3. 关于使用 deployer 部署 php 项目,我后来在 Laravel-china 社区看到了 Overtrue 的一篇文章,总结的很好,方便以后查阅,再此我记一下链接,文中把整个部署过程讲的很通透,下面的评论也有一些可能会在未来遇到的问题,总体来说很赞👍👍

  4. 关于使用 deployer 部署 Laravel 项目,虽然此 package 已经提前预设了 laravel recipe,包括共享目录 storage,共享文件 .env,集成各种 artisan 等等,但是我们也在试想如何更优雅与 Laravel 贴近,于是想在此基础上封装一个扩展包,起初在此扩展包我们想添加的功能是:添加部署群消息提醒,添加修订日志,自动上传新的 .env 文件等,搜索博大的 github 仓库,果不其然发现了一个 package 集成 deployer,于是在此基础上我们重新整合了需求,定制自己项目的自动化部署扩展包 laravel-unideploy,目前还在不断完善中,但是大部分代码都是基于 laravel-deployer

原来开始叨叨别人包 bug 多,一杯咖啡的时间,冷静下来,总有一些独特的思想在里面,一千的 php 程序员眼中,总有一千种代码实现,怎么去权衡代码精简和代码易读易懂是一个不朽的问题😇

总结一下实际项目开发中遇到的一些问题

问题一

acl 未安装,下面如下 shell 返回空

1
if hash setfacl 2>/dev/null; then echo 'true'; fi

解决方案

1
sudo apt-get install acl

参考 issues,Unable to setup correct permissions for writable dirs

问题二

reload php-fpm 没有权限

1
sudo need to enter a password

解决方案

1
2
sudo vi /etc/sudoers
your_user_name ALL=(ALL) NOPASSWD: ALL

需要特别注意的地方是 将部署账号的 sudo 配置在文件的最后一行,避免有*覆盖*的情况,可以配置完执行 sudo cat /etc/sudoers 看看是否有权限

问题三

git deploy failed

1
2
3
Fetching origin
ERROR: Repository not found.
fatal: Could not read from remote repository.

解决方案

1
2
eval `ssh-agent -s` &&
ssh-add ~/.ssh/id_rsa

项目部署的主机配置中设置 forwardAgent 为 true,本地 ssh-add 自己的私钥,因为部署过程中需要与服务器保持会话

其他的配置还在逐渐实践中,期间在遇到什么问题,随时补充笔记,吾日三省吾身。

写了这么一段小笔记,现在已经快到12点了,突然发现我电脑的键盘膜上 command + c已经开始花了,这么多天过去了,往后余生,风雪是你,平淡是你,清贫是你,荣华是你。

无二之旅,定制有温度的旅行,今年的目标之一是定制自己的 uni-package,实践是成长最好的方式,等待周五的好消息,因为余生有你,才有更大的动力和信心。🌙