将本地代码通过Git部署到远程服务器的完整指南
在开发过程中,将本地代码快速、安全地同步到远程服务器是部署网站或应用的核心步骤,通过Git实现这一流程,不仅能提高效率,还能确保版本控制的连贯性,以下是详细的操作指南:
本地环境要求
git init
)。服务器环境要求
sudo apt-get install git
)。root
或具有sudo
权限的用户)。配置SSH免密登录
ssh-keygen -t rsa -b 4096
ssh-copy-id user@your-server-ip
创建裸仓库(Bare Repository)
裸仓库不包含工作目录,仅用于代码同步。
mkdir -p /var/repo/my-project.git cd /var/repo/my-project.git git init --bare
配置Git钩子(Hook)
通过post-receive
钩子触发自动部署:
创建钩子文件:
vi hooks/post-receive
输入以下脚本(按需修改部署目录):
#!/bin/bash TARGET="/var/www/my-project" GIT_DIR="/var/repo/my-project.git" BRANCH="main" while read oldrev newrev ref do if [[ $ref = refs/heads/$BRANCH ]]; then echo "Deploying $BRANCH to $TARGET..." git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH # 可选:执行构建命令(如npm install) echo "Deployment completed." fi done
赋予脚本执行权限:
chmod +x hooks/post-receive
设置网站根目录权限
确保部署目录存在且权限正确:
mkdir -p /var/www/my-project chown -R user:www-data /var/www/my-project # 按需替换用户和组
添加远程仓库地址
git remote add prod user@your-server-ip:/var/repo/my-project.git
推送代码到服务器
git push prod main # 替换为你的分支名
如果首次推送需指定上游分支:
git push -u prod main
使用Git钩子扩展功能
post-receive
中追加命令(如重启服务、清理缓存): systemctl restart nginx
集成CI/CD工具
最小化权限原则
root
。~/.ssh/authorized_keys
的command
选项)。防火墙与日志监控
/var/log/auth.log
(Linux系统)中的登录记录。备份策略
git bundle create repo.bundle --all
。权限错误
执行chmod -R 755 /var/www/my-project
确保部署目录可读。
检查钩子脚本的用户权限是否与目录所有者一致。
SSH连接失败
验证密钥权限:本地.ssh/id_rsa
应为600
,服务器.ssh/authorized_keys
应为644
。
代码未实时更新
检查钩子脚本中的分支名是否与推送分支匹配,或强制重置部署目录:
git reset --hard HEAD
引用说明