传统部署方案
windows 远程桌面
FTP/SFTP
登陆服务器pull github代码
Phing(PHP专业部署工具)
git 自动部署流程图
html
![]() |
服务器端准备工做:
0. 这些工做都在root或有管理权限的账号下进行,下面以root为用户,切换到其余用户的时候会提示
1. 确保安装了git
2. 为了安全起见,新建一个专门用于代码部署的无特权用户
useradd -m deployuser
passwd deployuser #设置该用户的密码,也可根据喜爱配置成免密码登录
3. 新建一个目录做为要部署代码的根目录,如:
mkdir /var/www/html/deploy
4. 将这个目录的属主和属组都改成上面新建的用户deployuser
cd /var/www/html
chown deployuser:deployuser deploy
5. 切换到部署代码的专用用户
su deployuser
6. 进入项目根目录,初始化为git仓库
cd deploy
git init
7. 【重要】让仓库接受代码提交
git config receive.denyCurrentBranch ignore
[可选] git config core.worktree ~/www
[可选] git config --bool receive.denyNonFastForwards false #禁止强制推送
至此,一个空的git仓库就在服务器上建好了,仓库的地址为:
ssh://deployuser@ipaddress/var/www/html/deploy/.git
本地仓库准备工做:
1. 经过 git clone 或 git pull 从 github 仓库上将代码获取到本地
2. 将服务器添加到远程仓库列表,使用名字来区分不一样的服务器,如测试服务器能够叫作testing
git remote add testing ssh://deployuser@ipaddress/var/www/html/deploy/.git
3. 将本地代码提交到测试服务器上面
git push testing master
回到服务器端:
1. 更新服务端 git 仓库状态并检出文件
cd /var/www/html/deploy
git update-server-info
git checkout -f
OR:
git checkout branch_name # 若是push的不是master分支
2. 检查是否是将文件更新进来了
3. 设置服务器端更新钩子 post-update
cd .git/hooks
新建 post-receive 或将 post-receive.sample 重命名为 post-receive
touch post-receive
OR:
mv post-receive.sample post-receive
vim post-receive
将以下内容复制到文件中
#!/bin/sh
unset GIT_DIR
cd ..
git checkout -f
注: 第3步的操做将post-receive 替换为 post-update也能够, 不过须要先将post-update中的exec git update-server-info这一行删掉
后续代码的更新:
1. github 有更新的时候 pull 更新本地部署仓库
2. 而后本地先 push 到测试服务器进行测试
3. 测试经过以后 push 到正式服务器进行上线
4. 代码的回滚:
*服务器端回滚:推荐 git reset --hard HEAD^
本地仓库回滚: 无需登录服务器便可实现代码回滚,git reset HEAD^ 保留代码回滚,而后使用 git push remote_name local_branch_name -f 强制推送
使用过程当中须要注意的问题:
1. 须要约定好 git 不能更新的操做要怎么处理,好比新增数据库的字段,新安装必要的扩...git