使用gitlab action部署gin项目到服务器
gitlab action 部署到服务器
1. 准备ssh登录密钥
生成ssh密钥对
ssh-keygen -m PEM -t rsa -b 4096注意生成密钥对的时候Passphrase要为空
2. 在github的setting中配置secrets
settings => security => Secrets and variables => New repository secret 在这里创建名为SSH_PRIVATE_KEY的secret,值为第一步生成的~/.ssh/id_rsa的值
-
name: SSH_PRIVATE_KEY
-
value: | -----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----
3. 服务器安装PM2
PM2用于程序进程管理器,进程后台启动,多进程服务
- 首先安装nodejs,安装npm
- 使用npm全局安装pm2
npm install -g pm2pm2常用命令参考↗ (opens in a new tab)
# 查看list
pm2 list
# 启动
pm2 start go -- run main.go
# 停止
pm2 stop go
# 重启
pm2 restart go
# 删除
pm2 delete go
# 日志
pm2 logs go --lines 1004. 编写gitlab workflows yml文件
在项目中创建.github/workflows/ci.yml文件,不一定叫ci.yml,只要是.yml后缀就行
这里用到的是easingthemes/ssh-deploy↗ (opens in a new tab)工具部署
# 名称
name: Deploy to aliyun
# 监控哪些分支
on:
push:
branches:
- "feat/deploy"
# 执行的任务
jobs:
deploy:
# 运行环境
runs-on: ubuntu-latest
# 步骤
steps:
# 固定的checkout
- name: Checkout
uses: actions/checkout@v3
# 复制项目代码到目标服务器
- name: Copy project
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rlgoDzvc -i --delete"
SOURCE: ""
REMOTE_HOST: '47.250.51.76'
REMOTE_USER: 'root'
TARGET: '/root/test/deploy/llm-chat'
# 使用pm2启动服务
- name: Start server
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rlgoDzvc -i --delete"
SOURCE: ".gitignore"
REMOTE_HOST: '47.250.51.76'
REMOTE_USER: 'root'
TARGET: '/root/test/deploy/llm-chat/gitignore'
SCRIPT_BEFORE: |
cd /root/test/deploy/llm-chat
pm2 stop go
pm2 delete go
pm2 start /usr/local/go/bin/go -- run main.go错误处理
Permission denied (publickey).
cd ~/.ssh && cat id_rsa.pub >> authorized_keys可以看这个issue↗ (opens in a new tab)
Script not found: /usr/local/go/bin/go
原因是在执行go文件时该用户没有这个环境变量,所以要指定go所在的目录/usr/local/go/bin/go
查找go所在的目录
which go