编辑
2025-03-21
git
00

目录

使用 GitHub 的 Deploy Key 进行项目部署
目录
Deploy Key 介绍
相似方案对比,优缺点整理
1. Personal Access Token (PAT)
2. OAuth 应用
3. Deploy Key
总结
服务器所需准备
检查 SSH 客户端和 Git 是否安装
GitHub 所需准备
1. 生成 SSH 密钥对
2. 添加公钥到 GitHub 仓库
3. 配置服务器上的私钥
更新仓库
1. 克隆仓库
2. 设置自动部署脚本
总结
相关链接

使用 GitHub 的 Deploy Key 进行项目部署

在现代软件开发中,自动化部署已成为保障项目高效上线的关键环节。GitHub 的 Deploy Key 提供了一种安全、简便的方式,使服务器能够安全地访问 GitHub 仓库,从而实现代码的自动部署。本篇博客将详细介绍如何使用 GitHub 的 Deploy Key 进行项目部署,涵盖其概念、对比分析、准备工作以及具体实施步骤。

目录

  1. Deploy Key 介绍
  2. 相似方案对比,优缺点整理
  3. 服务器所需准备
  4. GitHub 所需准备
  5. 详细的实践指南
  6. 总结

Deploy Key 介绍

Deploy Key 是 GitHub 提供的一种 SSH 公钥,用于授权服务器访问特定的 GitHub 仓库。与个人 SSH 密钥不同,Deploy Key 绑定到单个仓库,具有更细粒度的权限控制。这使得 Deploy Key 成为在持续集成和部署流程中,从服务器安全地拉取代码的理想选择。

主要特点:

  • 安全性高:每个 Deploy Key 只能访问指定的仓库,避免了权限过大的风险。
  • 独立管理:Deploy Key 独立于个人账户,便于团队协作和管理。
  • 简便性:配置简单,适用于各种自动化部署场景。

相似方案对比,优缺点整理

在使用 Deploy Key 进行项目部署之前,了解其他常见的授权方式有助于做出更明智的选择。以下是几种常见方案的对比:

1. Personal Access Token (PAT)

优点:

  • 灵活性高:可以为不同的操作设置不同的权限。
  • 适用范围广:不仅限于 Git 操作,还可以用于 GitHub API 访问。

缺点:

  • 安全性较低:PAT 通常与个人账户关联,权限较大,一旦泄露风险较高。
  • 管理复杂:需要定期更新和管理权限,尤其在团队协作中更为繁琐。

2. OAuth 应用

优点:

  • 集成性强:适用于需要与第三方服务集成的场景。
  • 细粒度权限控制:可以精确控制应用的访问权限。

缺点:

  • 实现复杂:配置和管理较为复杂,适合中大型项目。
  • 依赖外部服务:需要依赖 OAuth 提供方的服务稳定性。

3. Deploy Key

优点:

  • 安全性高:仅限于特定仓库,权限可控。
  • 易于管理:独立于个人账户,便于在团队中共享和管理。
  • 简便性:配置简单,适用于自动化部署场景。

缺点:

  • 作用范围有限:每个 Deploy Key 只能绑定一个仓库,不适用于需要访问多个仓库的场景。

总结

对于需要安全、简便地从服务器拉取代码进行部署的场景,Deploy Key 是一个理想的选择。相比于 PAT,Deploy Key 提供了更细粒度的权限控制,降低了安全风险。而与 OAuth 应用相比,Deploy Key 的配置和管理更为简单,适合中小型项目的自动化部署需求。

服务器所需准备

在配置 Deploy Key 之前,需要确保服务器具备以下条件:

  1. 操作系统:本指南以 Linux 服务器为例,其他操作系统的步骤类似。
  2. SSH 客户端:确保服务器已安装 SSH 客户端,以便与 GitHub 进行通信。
  3. Git 安装:确保服务器上已安装 Git,便于拉取代码库。

检查 SSH 客户端和 Git 是否安装

bash
# 检查 SSH 客户端 ssh -V # 检查 Git 是否安装 git --version

如果未安装,可以使用以下命令进行安装:

bash
# 对于 Debian/Ubuntu 系统 sudo apt update sudo apt install -y git openssh-client # 对于 CentOS/RHEL 系统 sudo yum install -y git openssh-clients

GitHub 所需准备

在 GitHub 上配置 Deploy Key 涉及生成 SSH 密钥,并将公钥添加到仓库的 Deploy Keys 中。具体步骤如下:

  1. 生成 SSH 密钥对
  2. 添加公钥到 GitHub 仓库
  3. 配置服务器上的私钥

1. 生成 SSH 密钥对

在服务器上生成一个新的 SSH 密钥对,用于与 GitHub 进行安全通信。

bash
ssh-keygen -t ed25519 -C "deploy-key-for-my-project"

命令解释:

  • -t ed25519:指定密钥类型为 ED25519,更安全且推荐。
  • -C "deploy-key-for-my-project":添加注释,便于识别。

当提示输入保存路径时,建议使用默认路径或指定一个用于部署的路径,例如 ~/.ssh/deploy_key

这里一般不设置密码,以便自动化部署时无需手动输入。

bash
Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519): /home/user/.ssh/deploy_key Enter passphrase (empty for no passphrase): Enter same passphrase again:

2. 添加公钥到 GitHub 仓库

将生成的公钥添加到 GitHub 的目标仓库中,步骤如下:

  1. 复制公钥内容

    bash
    cat ~/.ssh/deploy_key.pub

    复制输出的公钥内容。

  2. 登录 GitHub 并导航到目标仓库

  3. 进入仓库的设置

    点击仓库页面右上角的 Settings

  4. 添加 Deploy Key

    在左侧菜单中选择 Deploy keys,然后点击 Add deploy key

  5. 填写 Deploy Key 信息

    • Title:为 Deploy Key 命名,例如 Server Deploy Key
    • Key:粘贴复制的公钥内容。
    • Allow write access:根据需要选择是否允许写权限。对于只需拉取代码的部署场景,保持默认的只读权限即可。
  6. 确认添加

    点击 Add key 完成添加。

3. 配置服务器上的私钥

确保服务器能够使用私钥进行 SSH 认证,不需要输入密码。

  1. 创建 SSH 目录(如果尚未存在)

    bash
    mkdir -p ~/.ssh chmod 700 ~/.ssh
  2. 保存私钥并设置权限

    将生成的私钥(如 ~/.ssh/deploy_key)放置在合适的位置,并设置正确的权限。

    bash
    chmod 600 ~/.ssh/deploy_key
  3. 配置 SSH 客户端

    创建或编辑 ~/.ssh/config 文件,添加如下配置:

    bash
    Host github-deploy HostName github.com User git IdentityFile ~/.ssh/deploy_key IdentitiesOnly yes

    这个配置为 GitHub 的连接指定了使用 Deploy Key,避免使用其他 SSH 密钥。

更新仓库

以下是使用 Deploy Key 从 GitHub 部署项目的详细步骤,包括代码拉取和部署自动化。

1. 克隆仓库

使用配置好的 SSH 主机别名 github-deploy 克隆仓库。

bash
git clone git@github-deploy:username/repository.git

示例:

bash
git clone git@github-deploy:silon-j/myproject.git

注意这里 @ 后面的内容和 github 上一键粘贴的内容是不同的。

这里就基本已经完成 deploy key 的配置和拉取的验证了。

2. 设置自动部署脚本

为了实现每次代码更新后自动部署,可以使用 GitHub 的 Webhooks 或者在服务器上设置定时任务(如使用 cron)。

以下以简单的 Git pull 脚本为例:

bash
#!/bin/bash # 定义项目目录 PROJECT_DIR=/path/to/myproject # 进入项目目录 cd $PROJECT_DIR || exit # 拉取最新代码 git pull origin main # 重新启动服务(根据项目需求调整) # 示例:使用 PM2 管理 Node.js 应用 pm2 restart myproject

将以上脚本保存为 deploy.sh,并赋予执行权限:

bash
chmod +x deploy.sh

总结

使用 GitHub 的 Deploy Key 进行项目部署是一种安全、简便且高效的方法。通过将 SSH 公钥绑定到特定仓库,Deploy Key 能够确保服务器仅访问授权的代码库,降低了安全风险,也避免了多人协作时拉取项目的权限问题。

相关链接

本文作者:Silon汐冷

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!