Git仓库代码部署至生产服务器的操作流程咨询
嘿,我懂你现在的状况——作为开发者参与过项目,但从没独立管过关联生产服务器的仓库,刚搭好自己的GitLab服务器,现在想找个便捷的法子把master分支部署到生产机对吧?下面给你一套从基础手动到自动化的流程,你可以根据项目规模和更新频率来选:
一、基础手动部署流程(适合初期小项目,操作简单)
如果你的项目更新不频繁,手动跑脚本就足够了,步骤如下:
第一步:给生产服务器配置Git免密拉取权限
这是为了避免每次部署都输密码,操作很简单:- 登录生产服务器,生成SSH密钥:
一路按回车就行,不用设密码(设了反而麻烦,部署还要输)。ssh-keygen -t ed25519 -C "prod-server@your-domain.com" - 打开生成的公钥文件
~/.ssh/id_ed25519.pub,复制里面的全部内容。 - 登录你的GitLab,进入目标项目的Settings → Deploy Keys,点击「Add deploy key」,把刚才复制的公钥粘贴进去,勾选「Allow write permissions」(如果不需要往生产机推代码,只拉取的话可以不勾,但勾了也没坏处),然后保存。
- 测试一下:在生产服务器上跑
git clone git@your-gitlab-server:your-group/your-project.git,能顺利克隆下来就说明免密配置成功了。
- 登录生产服务器,生成SSH密钥:
第二步:编写一键部署脚本
每次手动敲一堆命令太麻烦,把部署步骤写成shell脚本:- 在生产服务器的项目目录下创建
deploy.sh文件,内容示例(根据你的项目类型修改):#!/bin/bash # 切换到项目目录 cd /path/to/your/project # 确保在master分支并拉取最新代码 git checkout master git pull origin master # 项目专属操作:比如安装依赖、重启服务 # Node项目示例 npm install --production pm2 restart your-app-name # PHP Laravel项目示例 # composer install --no-dev # php artisan migrate --force # php artisan cache:clear - 给脚本加执行权限:
chmod +x deploy.sh。 - 以后部署只要登录生产服务器,跑
./deploy.sh就行,一键完成。
- 在生产服务器的项目目录下创建
二、自动化部署(适合频繁更新的项目,解放双手)
如果项目更新比较频繁,手动跑脚本还是累,那就用GitLab CI/CD实现代码推送到master就自动部署,步骤如下:
第一步:配置GitLab Runner和生产服务器的SSH连通
- 先在GitLab上注册一个Runner(具体步骤可以在GitLab的Settings → CI/CD → Runners里看引导,选一个能访问到生产服务器的Runner,比如和生产机同网段的服务器,或者用GitLab共享Runner)。
- 生成一个专门用于部署的SSH密钥(和生产服务器的免密配置类似),把私钥存到GitLab项目的Settings → CI/CD → Variables里,变量名设为
SSH_PRIVATE_KEY,类型选「File」或者「Variable」都可以。 - 用
ssh-keyscan your-prod-server-ip命令获取生产服务器的SSH主机指纹,把结果也存到GitLab变量里,变量名设为KNOWN_HOSTS,这样Runner登录生产机时不会弹出确认提示。
第二步:编写GitLab CI配置文件
在项目根目录创建.gitlab-ci.yml文件,内容示例:stages: - deploy deploy_to_production: stage: deploy # 只有master分支有推送时才触发 only: - master script: # 安装SSH客户端(如果Runner上没有的话) - 'which ssh-agent || (apt-get update -y && apt-get install openssh-client -y)' # 启动SSH代理 - eval $(ssh-agent -s) # 加载部署用的私钥 - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - # 配置SSH主机指纹 - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "$KNOWN_HOSTS" >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts # 登录生产服务器执行部署命令 - ssh your-prod-user@your-prod-ip "cd /path/to/project && git checkout master && git pull origin master && npm install --production && pm2 restart your-app-name" # 指定刚才注册的Runner标签 tags: - your-runner-tag保存后推送到master分支,GitLab就会自动触发部署了,以后每次往master推代码,都会自动同步到生产服务器。
三、必看的注意事项
- 生产服务器上绝对不要直接修改代码,所有变更都要通过GitLab的master分支推送,再部署,这样才能保证代码的一致性和可追溯性。
- 如果项目需要构建(比如前端项目要打包成dist文件),建议在GitLab CI里完成构建,再把构建产物传到生产服务器,不要在生产机上构建,既浪费资源又不安全。
- 给master分支开分支保护:在GitLab项目的Settings → Repository → Protected branches里设置master分支只能通过Merge Request合并,禁止直接推送,避免误操作把有问题的代码推到生产。
- 部署前一定要在测试环境验证代码没问题,再合并到master部署到生产,别直接把未测试的代码推上去。
内容的提问来源于stack exchange,提问作者Dushan
相关产品推荐
相关产品推荐

