当前位置:首页 > 行业动态 > 正文

如何轻松将Git代码提交到Linux服务器?

使用Git将代码提交至Linux服务器需先在服务器安装Git并创建裸仓库,配置SSH密钥实现免密连接,本地项目初始化后,通过 git remote add关联服务器仓库地址,执行 git push推送代码,服务器端仓库接收更新后可用于部署或协作开发。

环境准备与基础配置

  1. 本地开发环境

    • 安装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"
  2. 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文件。

本地代码提交与服务器接收

  1. 本地仓库关联远程服务器

    • 进入本地项目目录,添加远程仓库地址:
      git remote add origin ssh://user@your-server-ip:/var/repo/website.git
    • 首次推送代码:
      git push -u origin main
  2. 服务器端部署钩子(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

自动化发布与网站配置

  1. 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
  2. 自动化流程扩展

    • 使用Webhook:通过GitHub/GitLab的Webhook触发服务器端的自动拉取脚本。
    • 结合CI/CD工具:集成Jenkins或GitHub Actions,实现测试、构建、部署全流程自动化。

安全与权限优化

  1. 最小权限原则

    • 为Git仓库与网站目录分配专用用户(如gituserwww-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
  2. 防火墙与SSH加固

    • 限制SSH端口访问IP范围:
      sudo ufw allow from 192.168.1.0/24 to any port 22
    • 禁用密码登录,仅允许密钥认证(修改/etc/ssh/sshd_config):
      PasswordAuthentication no

常见问题与解决方案

  1. 推送代码后网站未更新

    • 检查post-receive脚本权限是否为可执行。
    • 确认Nginx配置中root路径是否正确。
  2. SSH连接超时或拒绝

    • 验证服务器防火墙是否放行SSH端口(默认22)。
    • 检查本地与服务器的SSH密钥是否匹配。
  3. 文件权限冲突

    • 避免直接修改服务器代码,所有变更应通过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
0