如何让远程生产服务器从GitLab私有项目拉取代码?
解决GitLab私有项目部署到生产服务器的权限问题
GitLab提供的**部署密钥(Deploy Keys)**正好匹配你的需求——它是绑定到项目而非个人账户的SSH密钥,专门用于服务器等非个人实体的权限管控,完全符合团队协作场景。
操作步骤
1. 在生产服务器生成SSH密钥对
以www-data用户身份登录服务器后,执行密钥生成命令:
ssh-keygen -t ed25519 -C "deploy@1.2.3.4"
- 按提示一路回车即可(不需要设置密码,避免自动部署时需手动输入)
- 生成的密钥对默认存放在
/home/www-data/.ssh/目录下,私钥为id_ed25519,公钥为id_ed25519.pub
2. 获取生产服务器的公钥内容
执行命令复制公钥文本:
cat /home/www-data/.ssh/id_ed25519.pub
将输出的全部内容复制下来。
3. 在GitLab项目中添加部署密钥
- 打开你的GitLab项目页面,进入Settings → Repository
- 在页面找到Deploy Keys板块,点击「Add deploy key」
- 在表单中:
- 填写标题(比如「Production Server 1.2.3.4」,方便识别)
- 粘贴刚才复制的公钥内容
- 如果只需要拉取代码更新,保持默认的只读权限即可;如果需要向项目推送内容,勾选「Write access allowed」
- 点击「Add key」完成添加
4. 测试权限
回到生产服务器,执行克隆或拉取命令验证:
# 首次克隆项目 git clone git@mygitlab.com:mygroup/myproject.git # 已有项目时更新代码 git pull
额外注意事项
- 权限管控:每个生产服务器可以单独生成密钥添加为部署密钥,后续如果服务器下线,直接在GitLab中删除对应密钥即可,不会影响个人账户或其他服务器
- 文件权限检查:确保
www-data用户对.ssh目录及密钥文件的权限正确,避免SSH验证失败:chmod 700 /home/www-data/.ssh chmod 600 /home/www-data/.ssh/id_ed25519 - 团队协作:部署密钥是项目级资源,团队内有权限管理项目设置的成员都可以操作,无需依赖个人账号,符合协作规范
内容的提问来源于stack exchange,提问作者Vaks
相关产品推荐
相关产品推荐

