上一篇
如何轻松将Git代码提交到Linux服务器?
- 行业动态
- 2025-05-11
- 10
使用Git将代码提交至Linux服务器需先在服务器安装Git并创建裸仓库,配置SSH密钥实现免密连接,本地项目初始化后,通过
git remote add
关联服务器仓库地址,执行 git push
推送代码,服务器端仓库接收更新后可用于部署或协作开发。
环境准备与基础配置
本地开发环境
- 安装Git(官方下载)并配置用户名与邮箱:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"
- 生成SSH密钥对(用于免密登录服务器):
ssh-keygen -t ed25519 -C "your_email@example.com"
- 安装Git(官方下载)并配置用户名与邮箱:
Linux服务器配置
- 以Ubuntu/CentOS为例,安装Git与必要工具:
sudo apt-get update && sudo apt-get install git nginx -y # Ubuntu sudo yum install git nginx -y # CentOS
- 创建代码仓库目录并初始化裸仓库:
mkdir /var/repo/website.git && cd /var/repo/website.git git init --bare
- 配置SSH密钥认证:
- 将本地
id_ed25519.pub
内容复制到服务器的~/.ssh/authorized_keys
文件。
- 将本地
- 以Ubuntu/CentOS为例,安装Git与必要工具:
本地代码提交与服务器接收
本地仓库关联远程服务器
- 进入本地项目目录,添加远程仓库地址:
git remote add origin ssh://user@your-server-ip:/var/repo/website.git
- 首次推送代码:
git push -u origin main
- 进入本地项目目录,添加远程仓库地址:
服务器端部署钩子(Hook)
在服务器仓库的
hooks
目录创建post-receive
脚本:cd /var/repo/website.git/hooks touch post-receive && chmod +x post-receive
编辑
post-receive
内容(示例为部署到Nginx目录):#!/bin/bash TARGET="/var/www/website" GIT_DIR="/var/repo/website.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 # 可选:重启服务或执行构建命令 systemctl reload nginx fi done
自动化发布与网站配置
Web服务器指向代码目录
配置Nginx(以
/etc/nginx/sites-available/website
为例):server { listen 80; server_name your-domain.com; root /var/www/website; index index.html; location / { try_files $uri $uri/ =404; } }
启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/website /etc/nginx/sites-enabled/ sudo systemctl restart nginx
自动化流程扩展
- 使用Webhook:通过GitHub/GitLab的Webhook触发服务器端的自动拉取脚本。
- 结合CI/CD工具:集成Jenkins或GitHub Actions,实现测试、构建、部署全流程自动化。
安全与权限优化
最小权限原则
- 为Git仓库与网站目录分配专用用户(如
gituser
和www-user
):sudo useradd gituser && sudo useradd www-user sudo chown -R gituser:gituser /var/repo/website.git sudo chown -R www-user:www-user /var/www/website
- 为Git仓库与网站目录分配专用用户(如
防火墙与SSH加固
- 限制SSH端口访问IP范围:
sudo ufw allow from 192.168.1.0/24 to any port 22
- 禁用密码登录,仅允许密钥认证(修改
/etc/ssh/sshd_config
):PasswordAuthentication no
- 限制SSH端口访问IP范围:
常见问题与解决方案
推送代码后网站未更新
- 检查
post-receive
脚本权限是否为可执行。 - 确认Nginx配置中
root
路径是否正确。
- 检查
SSH连接超时或拒绝
- 验证服务器防火墙是否放行SSH端口(默认22)。
- 检查本地与服务器的SSH密钥是否匹配。
文件权限冲突
- 避免直接修改服务器代码,所有变更应通过Git提交。
- 使用
git reset --hard
强制同步本地与远程状态。
参考与引用
- Git官方文档: https://git-scm.com/doc
- Nginx配置指南: https://nginx.org/en/docs/
- Linux权限管理: https://wiki.archlinux.org/title/Users_and_groups