背景本人在一家小公司工作,原来的系统还是通过传统的ftp上传部署,部署起来太麻烦,线上代码也不好控制。在网上找了一个git部署的教程。我一路跟着,也遇到了很多坑。现在把整个过程发出来,希望对大家有所帮助。accountrelateduseradd-mgit//添加git账号ssh-keygen//密钥生成,如果已经有可以跳过sugit//切换到git账号cd~//切换到git账号根目录mkdir.ssh//创建.ssh目录cat/keystoragedirectory/xxx.pub>>~/.ssh/authorized_keys//这里设置公钥一定要注意权限问题,否则密钥登录无法生效,并且每个文件夹对应的权限如下。ssh文件夹权限700id_rsa600id_rsa.pub644authorized_keys600文件权限设置把git和本站运行nginx或apache的用户放在同一个用户组,比如wwwvim/etc/passwd找到git账号和www账号,更改git的组IDaccount要和www组ID一致,setthesiteownertogit,andsettheusergrouptowww//假设nginx和git都属于www用户组目录权限设置775,文件权限设置为664仓库codeserver-sidecdsitedirectorygitinit//初始化目录git配置gitconfigreceive.denyCurrentBranchignore//设置仓库接受代码提交并设置sudo免密码vim/etc/sudoers#defaultssecure_path如果没有command需要的,注意添加#php的命令默认需要在secure_path的末尾添加:/usr/local/php/bin"将gitALL=(ALL)NOPASSWD:ALL添加到rootALL=(ALL)ALL#保存并退出,所以对于Laravel来说可以用它来重启队列命令。#sudophpartisanqueue:restarthooksettingcd.git/hooks//切换到站点hook目录touchpost-receive//创建接收提交时挂钩//挂钩文件内容如下:#!/bin/sh#设置账户创建文件的默认权限umaskumask002unsetGIT_DIRcd..gitcheckout-f#执行PHP挂钩逻辑/usr/bin/curlhttp(s)://域名/hook文本位置/hook.php#如果使用laravelqueue,需要重启queue进程才能使新代码生效#sudophpartisanqueue:restartexit0hook.php内容=')){opcache_reset();}添加hook可执行权限chmoda+x.git/hooks/post-receive本地代码gitremote添加远程仓库名ssh://git@IP地址:/site目录//添加远程仓库gitpush远程仓库namemaster特别注意用户上传的图片目录,该文件一定要忽略Action,否则清除未追踪文件时有可能删除这部分文件,后果不堪设想
