Walle 的简介我就不多说了它主要是一个 web 部署系统工具, 具有一键快速回滚的功能, 它能清晰的记录 上线单申请, 审核, 部署和实时操作日志, 能支持各种 web 代码发布和回滚, 对于 jenkins 来说应用时比较简单一点.
对于 walle, 我现在的公司主要是使用 walle 实现代码发布,(搭建可参考 walle 搭建) 下面是我配置的一个项目,(有修改, 理解意思就好) 先给大家贴个图.
各配置的理解如下:
. 代码的检测仓库目录: 如 /data/code/api
. 项目的用户权限管理 www
. 生产环境的 web 目录, 该目录的最后一个目录不需要创建, 发布时自动软连生成 如:/data/www/www.api.com
. Walle 的发布临时目录, 存放 web 的版本如: /data/publish/www/api
. 部署前准备任务: pre-deploy (前置检查)
. 代码检出后处理任务 post-deploy: 如 vendor 和处理 php 命令
. 同步后更新软链前置任务 pre-release
. 发布完毕后收尾任务 post-release: 如重启, 一些文件的操作
一, 问题出现
今天我在发布代码的时候出现了错误 (上线错误: 更新代码文件错误)
这时, 我就重复的再发布, 还是不行, 这个项目明前两天还是可以发布的.(这时很纳闷), 没办法, 百度找资料, 结果没找到, 还是自己解决.
二, 解决办法与思路
1, 问题出现地方, post-deploy 命令执行不了
这时我就想, 是不是 post-deploy 的命令执行不了, 导致上线不了.
解决办法:
想好就干, 然后, 我把项目的 post-deploy 命令删除了, 然后上线.
测试结果:
结果, 上线失败, 还是同样的错误. 证明发布不了还是命令的问题.
2, 问题出现地方, www 没有权限.
自己思考了一下, 既然是 post-deploy 命令还没执行, 就已经出现了问题, 那个可能是. www 用户没有权限拉取代码.
解决办法:
给予代码检出目录的 www 权限, 代码检出目录的拥有者为 www, 命令如下 (操作在 walle 主机上)
#chown -R www:www /data/code/api
切换用户测试
#su - www
代码拉取, 测试 post-deploy 命令
去到代码检出目录
- #cd /data/code/api
- #git pull origin master
www 用户测试 php 命令
- #composer update
- #php artisan migrate
测试结果:
结果, 上线失败, 还是同样的错误.(感觉眼都要黑了)
3, 问题出现地方, 查看 walle 日志.
正常安装的情况, walle 的日志是放到 / tmp/walle/ 目录下, 查看最新的文件. 日志已经自动安照时间来命令的了
解决思路: 查看日志的错误地方
#cat /tmp/walle/walle-20180619.log | grep error
发现错误如下
果然, 我们找到了错误了, 原来错误原因是 cp 命令复制错误, 是因为没有多余的空间导致的, 我们找到问题出现的地方就好解决了.
查看本地的磁盘使用情况:
发现果然沾满了
我们再查看一下 Inodes 的使用情况,
#df -i
发现它 / data 目录 Inodes 使用情况是很少的. 所以是 / data 的目录磁盘沾满了
接下来我们继续查看 data 目录占用是什么情况导致磁盘空间沾满的.
# du -sh /data
惊奇的发现,/data 目录占用, 还远远达到 90 多 G 的占用情况, 这时, 我们已经找到解决的思路了.
解决办法:
出现了这种情况, 我们就已经想到, 是 / data 目录肯定是被那个进程占用了, 解决办法就是把进程杀死, 就基本完事了. Walle 部署项目通过 php 的来执行的, 我们把一些占用,/data 的线程杀死就可以了
#lsof | grep /data/code | awk '{print $2}'| xargs kill - 9
或者你可以这样
- #lsof | grep deleted | awk '{print $2}' | xargs kill - 9
- (这里没能及时截到图)
杀完后重启 php, 因为刚刚的杀死进程的时候, 已经把 php 杀死了
所以需要重启 php
#service php-fpm restart
测试结果:
查看磁盘占用情况, 发现占用的空间回来了
重新发布项目, 成功了 (谢天谢地), 艰难的解决了一个问题.
结果分析:
首先是 www 用户的权限所引起的, 然后就是 php 进程占用, 导致同步不成功.
三, 项目问题又出现.
第二天上班, 想着发布一下项目上线啦, 谁知道, 又出现了错误, 这就让人崩溃了, 明明昨天还能发布的. 没有想得太多, 立刻就查看 walle 的日志, 发现又是磁盘空间不足.
1, 问题的再度出现
使用命令查看 / data 目录的磁盘使用情况, 发现如下
[root@centos api]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 10G 37G 22% /
devtmpfs 3.9G 0 3.9G 0% /dev
- tmpfs 3.9G 24K 3.9G 1% /dev/shm
- tmpfs 3.9G 612K 3.9G 1% /run
- tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
- /dev/vdb1 99G 92G 1.6G 99% /data
- tmpfs 783M 0 783M 0% /run/user/0
- tmpfs 783M 0 783M 0% /run/user/1004
接着发现我又把 php 的进程杀掉, 再查看一下空间, 发现还是那样.
2, 解决办法.
出现了上面的结果, 说明不是进程占用而导致的. 说明是有文件占用而导致的.
查看 / data 的目录大少
- [root@centos api]# du --max-depth=1 -h /data
- 2.9G /data/wwwlogs
- 149M /data/wwwroot
- 20G /data/files
- 68G /data/code
- 474M /data/mysql
- 92G /data
我们发现, 源来 / data/code 目录出现了问题, 使用 du --max-depth=1 -h 命令, 一步步找到文件, 删除文件.
结果:
重新查看 / data 的使用情况, 发现占用的空间已经回来了. 重新发布
发布成功, 问题解决了.
3, 问题出现分析
我在删除文件的时候, 发现, 有十几个文件的重复的, 每个文件的大少达几 G, 到底是什么原因导致的呢.
最后发现肯定是自己在发布项目的时候, 没有等到发布完就刷新, 然后又安部署, 导致重复出现代码目录的出现, 然后保留在发布目录, 导致累积.
注意事项:
在使用 walle 上线项目的时候, 需要按 F12 来查看项目是否发布完成, 再刷新, 这样的话就不会重复发布, 导致代码文件累积.
四, 总结
遇到错误, 分析日志是一个很好解决错误的办法. 要养成习惯才行.
来源: http://blog.51cto.com/xiaozhagn/2131334