PHP错误排查

服务器配置

工欲善其事必先利其器,如果都不知道什么时候可能会产生日志,不知道哪里能查到错误日志,那么谈何排查?

使用Gitlab Webhooks自动部署代码

为什么要用Webhooks来更新代码

  • 服务端的代码,不希望直接在服务器上面做更改,需要有中央仓库做托管管理,也利于协作
  • 某些情况下,不希望给开发人员服务器ssh登录权限
  • 开发时,希望得到更快的上线部署速度,享受git commit & git push & refresh的快感

Webhooks部署时需要考虑的一些因素

  • 现有github,gitlab,oschina等一些托管基本都支持Webhooks,原理都是利用git hooks来做的拓展
  • 什么情况下需要更新代码?根据commit message?根据branch?
  • 更新代码时的执行身份?由什么用户来执行git?

设置Linux服务器

  1. 前提:当前已经登录root用户或者具有sudo权限的用户
  2. 确认即将用于执行git命令的用户,假定我们新增一个用户名git,专门用于跑git命令,那么执行 sudo adduser git,并设置密码
  3. 接下来,将git用户添加到sudo组:sudo adduser git sudo[此步骤非必须]
  4. 假定项目代码放在/www下面,且Owner是git,那么执行sudo mkdir /www && sudo chown -R git:git /www
  5. 由于我们的Webhooks代码是用Nginx + PHP-FPM部署的,那么确认下PHP脚本的运行用户情况:ps aux | grep php-fpm, 确认www-data为我们的运行用户 /images/14974977972484.jpg
  6. www-data加到git用户组:sudo usermod -aG git www-data
  7. www-data用户不需要密码就能切换到git用户,并且用git用户的身份执行/usr/bin/git命令,修改sudoers:sudo vim /etc/sudoers,添加一行配置:www-data ALL=(git) NOPASSWD: /usr/bin/git
  8. 允许同组用户新增文件时继承原有文件夹权限位:sudo chmod -R g+s /www[此步骤非必须]
  9. 由于我们希望无密码自动拉取代码,那么gitlab代码也是使用ssh方式来配置连接方式的,且hooks被触发时是通过www-data切换成git用户来执行/usr/bin/git命令,那么实际上git pull等命令使用的SSH key是git用户的SSH key,确保已经将git用户的/home/git/.ssh/id_rsa.pub文件的内容设置到gitlab项目中

实现Webhooks项目的代码

打造基于Docker的Ubuntu 14.04 + PHP-FPM + Nginx运行环境

准备工作

创建Dockerfile

  1. 在用户目录下创建docker项目文件夹
$ mkdir -p ~/docker && cd ~/docker
  1. 创建Dockerfile
$ vim Dockerfile
  1. 由于我们是基于Ubuntu14.04做的镜像,所以定义好官方Ubuntu地址即可,在Dockerfile插入:FROM ubuntu:trusty,保存Dockerfile,然后运行docker build -t ubuntu:14.04-php-nginx .,如果你是第一次运行,需要从上面修改的docker源拉取ubuntu的镜像,会比较久。

/images/14956931611685.jpg