























每次向 vpn 分支 push 代码后,GitHub Actions 会自动 SSH 到远程服务器拉取最新代码,无需手动登录操作。
# 安装 Docker
curl -fsSL https://get.docker.com | sh
# 启动并设置开机自启
systemctl enable docker
systemctl start docker
# 在服务器上选择一个目录(后续填入 SSH_TARGET_DIR)
git clone https://github.com/你的用户名/docker-nginx.git /opt/docker-nginx
# 切换到部署分支
cd /opt/docker-nginx
git checkout vpn
建议生成专用密钥,不要使用日常登录的密钥,方便后续独立管理和吊销。
在服务器上执行:
# 生成 ed25519 密钥(推荐)
ssh-keygen -t ed25519 -C "github-actions-deploy" -f ~/.ssh/github_deploy -N ""
执行后会生成两个文件:
~/.ssh/github_deploy — 私钥(填入 GitHub Secret)~/.ssh/github_deploy.pub — 公钥(加入服务器授权列表)将公钥加入 authorized_keys,允许持有私钥的客户端(GitHub Actions)登录:
cat ~/.ssh/github_deploy.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
验证公钥已写入:
cat ~/.ssh/authorized_keys
确认 /etc/ssh/sshd_config 中已开启公钥认证:
vi /etc/ssh/sshd_config
确保以下几项已启用(去掉注释 # 并设为对应值):
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
保存退出后重启 SSH 服务使配置生效:
# systemd 系统(CentOS 7+、Ubuntu 16.04+)
systemctl restart sshd
# 旧版系统
service ssh restart
在 GitHub 仓库页面进入:Settings → Secrets and variables → Actions → New repository secret
依次添加以下 5 个 Secret:
| Secret 名称 | 说明 | 示例值 |
|---|---|---|
SSH_HOST |
服务器 IP 或域名 | 192.168.44.247 |
SSH_USER |
SSH 登录用户名 | root |
SSH_PRIVATE_KEY |
私钥完整内容 | 见下方说明 |
SSH_PORT |
SSH 端口(可选,默认 22) | 22 |
SSH_TARGET_DIR |
服务器上的项目路径 | /opt/docker-nginx |
在服务器上执行,将完整输出(含首尾行)粘贴到 SSH_PRIVATE_KEY:
cat ~/.ssh/github_deploy
输出格式应如下,完整复制包括 -----BEGIN 和 -----END 行:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXkAAAAA...
...
-----END OPENSSH PRIVATE KEY-----
工作流文件位于 .github/workflows/auto-deploy.yml,触发条件:
vpn 分支时部署脚本执行逻辑:
cd /opt/docker-nginx # 进入项目目录
git fetch --all --prune # 拉取所有远程更新
git checkout vpn # 切换到部署分支
git reset --hard origin/vpn # 强制同步到远程最新状态
注意:服务器上的本地修改会被
reset --hard覆盖,请勿在服务器上直接修改文件。
Actions → Auto DeployRun workflow → Run workflow 手动触发[deploy] done 表示成功# 本地修改代码后,提交并推送到 vpn 分支
git add .
git commit -m "更新配置"
git push origin vpn
push 完成后约 10~30 秒,服务器即自动同步最新代码。
authorized_keys 是否包含正确公钥~/.ssh/ 目录权限:chmod 700 ~/.sshauthorized_keys 文件权限:chmod 600 ~/.ssh/authorized_keysSSH_HOST、SSH_USER、SSH_PRIVATE_KEY、SSH_TARGET_DIR 不能为空)git cloneSSH_TARGET_DIR 填写的路径是否正确cat ~/.ssh/github_deploy 输出后完整复制此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。