本文最后更新于 2026-02-02,文章内容可能已经过时。

将私有 GitHub 仓库部署到个人服务器实战

在开发过程中,我们经常需要将代码从私有 GitHub 仓库部署到个人服务器进行测试或生产。本文将详细介绍两种常见的部署方式:通过 Git 直接拉取部署,以及通过 Docker 容器化部署。无论哪种方式,我们都需要先处理好 GitHub 私有仓库的认证问题,即创建 GitHub Personal Access Token (PAT)。


一、创建 GitHub Personal Access Token (PAT)

为了让服务器能够访问您的私有 GitHub 仓库,我们需要创建一个 Personal Access Token (PAT)。这是一个比使用您的 GitHub 密码更安全、更灵活的认证方式。

  1. 登录 GitHub
    访问 GitHub 并登录您的账号。

  2. 进入开发者设置
    点击右上角您的头像 -> Settings (设置) -> 左侧菜单栏 Developer settings (开发者设置)。

  3. 生成新的令牌
    Developer settings 页面,点击左侧 Personal access tokens (个人访问令牌) -> Tokens (classic) -> Generate new token (生成新令牌)。

  4. 配置新令牌

    • Note (备注): 为您的令牌起一个有意义的名字,例如 "Server_Deployment_Token"。
    • Expiration (有效期): 选择一个合适的有效期。为了安全,建议选择最短的可用时间或自定义日期,并在过期前及时更新。
    • Select scopes (选择范围): 这是非常关键的一步。
      • 如果您只需要拉取私有仓库代码,勾选 repo -> repo:status (访问仓库状态), repo_deployment (访问部署状态), public_repo (访问公共仓库), repo:invite (邀请协作者), security_events (访问安全事件)。
      • 最常用且安全的做法是仅勾选 repo 下的 repo (Full control of private repositories),它包含了访问私有仓库的所有权限。
      • 注意:根据您的具体需求,仅授予最小权限原则。例如,如果仅仅是拉取代码,只勾选 repo 即可。
  5. 生成令牌并保存
    点击最下方的 Generate token (生成令牌)。
    重要:生成的令牌只会显示一次,请务必立即复制并妥善保存。一旦离开页面,您将无法再次看到它。

您的 PAT 看起来会像这样:ghp_XXXXXXXXXXXXXXX


二、服务器环境准备

在部署之前,您的服务器需要进行一些基本的配置和安装必要的工具。这里以 Ubuntu/Debian 系统为例。

1. 更新系统

为了确保所有软件包都是最新的,首先更新您的服务器:

sudo apt update
sudo apt upgrade -y

2. 安装 Git

Git 是我们从 GitHub 拉取代码的必要工具。

sudo apt install git -y

安装完成后,您可以验证 Git 是否成功安装:

git --version

3. 安装 Docker (如果使用 Docker 部署)

如果选择 Docker 部署方式,您需要安装 Docker 引擎。

卸载旧版本 (如果存在)

for pkg in docker.io docker-doc docker-compose docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin apt-transport-https ca-certificates curl gnupg lsb-release; do sudo apt remove $pkg; done

安装 Docker Engine

# 添加 Docker 的官方 GPG 密钥
sudo apt update
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 添加 Docker 仓库
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

# 安装 Docker Engine, containerd 和 Docker Compose
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

配置 Docker 用户权限 (可选但推荐)

为了避免每次运行 Docker 命令都使用 sudo,您可以将当前用户添加到 docker 用户组:

sudo usermod -aG docker ${USER}
# 退出并重新登录,或重启终端使更改生效
# exit

验证 Docker 安装:

docker run hello-world

三、Git 部署方式

这种方式直接将代码克隆到服务器上,适用于简单的应用部署。

1. 克隆私有仓库

使用您之前生成的 GitHub PAT 来克隆私有仓库。

git clone https://<YOUR_GITHUB_PAT>@github.com/<YOUR_USERNAME>/<YOUR_PRIVATE_REPO>.git

替换以下内容:

  • <YOUR_GITHUB_PAT>: 您的 GitHub Personal Access Token。
  • <YOUR_USERNAME>: 您的 GitHub 用户名。
  • <YOUR_PRIVATE_REPO>: 您的私有仓库名称。

例如:git clone https://ghp_XXXXXXXXXXXXXXXXX@github.com/yourname/my-private-app.git

2. 进入项目目录并安装依赖

cd <YOUR_PRIVATE_REPO>
# 根据您的项目类型安装依赖,例如 Node.js 项目:
npm install
# Python 项目:
pip install -r requirements.txt

3. 运行您的应用

根据您的应用类型运行程序。例如:

# Node.js 项目
npm start
# Python Flask/Django 项目
python app.py

您可能需要使用 nohuppm2 等工具来在后台运行应用,并配合 Nginx 或 Caddy 进行反向代理。

4. 更新部署

当您的 GitHub 仓库代码有更新时,在服务器上进入项目目录并拉取最新代码:

cd <YOUR_PRIVATE_REPO>
git pull
# 重新安装/构建依赖(如果需要)
# npm install
# ...
# 重启您的应用
# 例如,如果您使用 pm2: pm2 restart <app_name>

四、Docker 部署方式

使用 Docker 进行部署可以更好地隔离应用环境,简化部署流程。

1. 在项目根目录创建 `Dockerfile`

Dockerfile 是一个文本文件,包含构建 Docker 镜像的指令。以下是一个示例 Dockerfile,适用于一个简单的 Node.js 应用。您可以根据自己的项目类型进行修改。

# 使用官方 Node.js 18 作为基础镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 将 package.json 和 package-lock.json (或 yarn.lock) 拷贝到工作目录
COPY package*.json ./

# 安装项目依赖
RUN npm install

# 将所有本地代码拷贝到工作目录
COPY . .

# 暴露应用监听的端口
EXPOSE 3000

# 定义容器启动时运行的命令
CMD ["npm", "start"]

说明:

  • FROM: 指定基础镜像。
  • WORKDIR: 设置工作目录。
  • COPY: 复制文件。
  • RUN: 执行命令(在镜像构建时)。
  • EXPOSE: 声明容器运行时会监听的端口。
  • CMD: 容器启动时运行的命令(只能有一个)。

2. 构建 Docker 镜像

在服务器上,进入您的项目根目录,也就是 Dockerfile 所在的目录。

cd <YOUR_PRIVATE_REPO>
# 构建镜像
# 使用您之前生成的 GitHub PAT 作为构建参数,确保 Docker 构建时能访问私有仓库(如果Dockerfile里有需要)。
# 通常情况下,如果Dockerfile只COPY本地文件,则不需要在构建时传递PAT。
# 如果您的Dockerfile内部有git clone或其他需要认证的操作,才需要传递。
# 例如:
# docker build --build-arg GITHUB_PAT=<YOUR_GITHUB_PAT> -t my-private-app:latest .
# 或者,如果Dockerfile中不直接访问github,只需要简单构建:
docker build -t my-private-app:latest .
  • -t my-private-app:latest: 给镜像命名并打标签。
  • .: 表示 Dockerfile 在当前目录。

3. 运行 Docker 容器

构建完成后,您可以运行容器:

docker run -d -p 80:3000 --name my-private-app-container my-private-app:latest
  • -d: 后台运行容器。
  • -p 80:3000: 将服务器的 80 端口映射到容器的 3000 端口(根据您的 EXPOSE 端口调整)。
  • --name my-private-app-container: 给容器命名。

4. 更新 Docker 部署

当您的 GitHub 仓库代码有更新时,需要重新构建和运行 Docker 容器:

# 1. 停止并删除旧容器
docker stop my-private-app-container
docker rm my-private-app-container

# 2. 拉取最新代码
cd <YOUR_PRIVATE_REPO>\ngit pull

# 3. 重新构建镜像
docker build -t my-private-app:latest .

# 4. 运行新容器
docker run -d -p 80:3000 --name my-private-app-container my-private-app:latest

总结

本文详细介绍了将私有 GitHub 仓库部署到个人服务器的两种方法:Git 直接部署和 Docker 容器化部署。无论您选择哪种方式,关键都在于正确地创建和使用 GitHub Personal Access Token 来进行认证。Docker 部署提供了更好的环境隔离和可移植性,而 Git 直接部署则更为简单快捷。根据您的项目需求和复杂度,选择最适合您的部署策略。

希望这篇指南对您有所帮助!🦊