使用git搭建自动部署服务器代码

目标效果:在本地改好代码,git push完成,服务端可以自动同步代码。
基本思路:在服务器搭建一个 git 仓库,利用 post-receive 钩子,实现自动更新代码。
操作步骤:
1,用 root 通过ssh登录远程服务器,然后添加 git 用户

ssh root@server_ip
# 输入密码
# ...
  
adduser gituser // 添加一个名为 gituser 的用户,目录为 /home/gituser

2,打开rsa认证

vim /etc/ssh/sshd_config 
# 移动到滑动到末尾,命令 Shift+g
RSAAuthentication yes     
PubkeyAuthentication yes     
AuthorizedKeysFile  .ssh/authorized_keys 

3,创建 gituser 的ssh

cd  /home/gituser
mkdir .ssh
cd .ssh
vim  authorized_keys   

这时候远程处于编辑 authorized_keys 状态。
如果本地没有创建过ssh公钥,建议开启另一个本地的终端,创建本地的ssh

cd ~/.ssh 
ssh-keygen -t rsa -C "your_email"
# 一路回车即可

然后将 id_rsa.pub 的内容拷贝到 authorized_keys 中。

4,设置 git 用户信息

git config --global user.email "your_email"
git config --global user.name "git_user_name"

本地也要设置,本地和远程可以不一致。

5,远程创建裸仓库

cd /home/gituser
mkdir git
cd git
mkdir webserver.git
git init --bare webserver.git  

6,clone 一份到 www 目录
例如服务器设置的目录是 /home/gituser/www/webserver

cd /home/gituser/www
git clone /home/gituser/git/webserver.git webserver

7,配置 post-receive 钩子

cd /home/gituser/git/webserver.git/hooks
vim post-receive 

# 文件内容
#!/bin/bash
cd /home/gituser/www/webserver
unset GIT_DIR // https://stackoverflow.com/questions/9905882/git-post-receive-not-working-correctly
git pull

8,修改权限和所有者
上面有些文件是在 root 下面创建的,所以要改回给 gituser

chown -R gituser:gituser /home/gituser
chmod -R 777 /home/gituser/git/webserver.git/hooks

9,本地拉代码回来,提交

git clone gituser@server_ip:/home/gituser/git/webserver.git webserver
# 随便写点什么
git commit -m "message"
git push

然后检查远程 /home/gituser/www/webserver 目录即可。

调试:
如果发现远程webserver文件没有更新,可以尝试在 post-receive 加命令,输出日志到 ~/log.txt
可以参考:

echo "beign" > /home/gituser/log.txt #判断钩子是否被触发,如果没有,检查权限和文件名
git fetch >> /home/gituser/log.txt
git pull &> /home/gituser/pull_log.txt # 查看pull错误

你可能感兴趣的:(使用git搭建自动部署服务器代码)