在现代软件开发中,自动化部署已成为保障项目高效上线的关键环节。GitHub 的 Deploy Key 提供了一种安全、简便的方式,使服务器能够安全地访问 GitHub 仓库,从而实现代码的自动部署。本篇博客将详细介绍如何使用 GitHub 的 Deploy Key 进行项目部署,涵盖其概念、对比分析、准备工作以及具体实施步骤。
Deploy Key 是 GitHub 提供的一种 SSH 公钥,用于授权服务器访问特定的 GitHub 仓库。与个人 SSH 密钥不同,Deploy Key 绑定到单个仓库,具有更细粒度的权限控制。这使得 Deploy Key 成为在持续集成和部署流程中,从服务器安全地拉取代码的理想选择。
主要特点:
在使用 Deploy Key 进行项目部署之前,了解其他常见的授权方式有助于做出更明智的选择。以下是几种常见方案的对比:
优点:
缺点:
优点:
缺点:
优点:
缺点:
对于需要安全、简便地从服务器拉取代码进行部署的场景,Deploy Key 是一个理想的选择。相比于 PAT,Deploy Key 提供了更细粒度的权限控制,降低了安全风险。而与 OAuth 应用相比,Deploy Key 的配置和管理更为简单,适合中小型项目的自动化部署需求。
在配置 Deploy Key 之前,需要确保服务器具备以下条件:
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 上配置 Deploy Key 涉及生成 SSH 密钥,并将公钥添加到仓库的 Deploy Keys 中。具体步骤如下:
在服务器上生成一个新的 SSH 密钥对,用于与 GitHub 进行安全通信。
bashssh-keygen -t ed25519 -C "deploy-key-for-my-project"
命令解释:
-t ed25519
:指定密钥类型为 ED25519,更安全且推荐。-C "deploy-key-for-my-project"
:添加注释,便于识别。当提示输入保存路径时,建议使用默认路径或指定一个用于部署的路径,例如 ~/.ssh/deploy_key
。
这里一般不设置密码,以便自动化部署时无需手动输入。
bashGenerating 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:
将生成的公钥添加到 GitHub 的目标仓库中,步骤如下:
复制公钥内容
bashcat ~/.ssh/deploy_key.pub
复制输出的公钥内容。
登录 GitHub 并导航到目标仓库
进入仓库的设置
点击仓库页面右上角的 Settings。
添加 Deploy Key
在左侧菜单中选择 Deploy keys,然后点击 Add deploy key。
填写 Deploy Key 信息
Server Deploy Key
确认添加
点击 Add key 完成添加。
确保服务器能够使用私钥进行 SSH 认证,不需要输入密码。
创建 SSH 目录(如果尚未存在)
bashmkdir -p ~/.ssh
chmod 700 ~/.ssh
保存私钥并设置权限
将生成的私钥(如 ~/.ssh/deploy_key
)放置在合适的位置,并设置正确的权限。
bashchmod 600 ~/.ssh/deploy_key
配置 SSH 客户端
创建或编辑 ~/.ssh/config
文件,添加如下配置:
bashHost github-deploy
HostName github.com
User git
IdentityFile ~/.ssh/deploy_key
IdentitiesOnly yes
这个配置为 GitHub 的连接指定了使用 Deploy Key,避免使用其他 SSH 密钥。
以下是使用 Deploy Key 从 GitHub 部署项目的详细步骤,包括代码拉取和部署自动化。
使用配置好的 SSH 主机别名 github-deploy
克隆仓库。
bashgit clone git@github-deploy:username/repository.git
示例:
bashgit clone git@github-deploy:silon-j/myproject.git
注意这里 @ 后面的内容和 github 上一键粘贴的内容是不同的。
这里就基本已经完成 deploy key 的配置和拉取的验证了。
为了实现每次代码更新后自动部署,可以使用 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
,并赋予执行权限:
bashchmod +x deploy.sh
使用 GitHub 的 Deploy Key 进行项目部署是一种安全、简便且高效的方法。通过将 SSH 公钥绑定到特定仓库,Deploy Key 能够确保服务器仅访问授权的代码库,降低了安全风险,也避免了多人协作时拉取项目的权限问题。
本文作者:Silon汐冷
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!