使用 Github Actions 部署应用到云服务器
王深 2/8/2022 前端工程linux
使用 Github Actions 部署应用到云服务器
使用GitHub Actions 将自己静态网站(vuepress)部署到云服务器,原理如下
# 一、准备工作
# 1. 创建work账号
- 处于安全考虑,日常不会使用root账号登录,权限太高了
- 用root登录,创建work账号
Linux 系统中用户相关学习请移步 Linux 用户(user)用户组(group)
adduser work
passwd work
whoami # 查看当前登录用户名
1
2
3
4
2
3
4
- 添加work的sudo权限
whereis sudoers # 找到文件位置 /etc/sudoers
chmod u+w /etc/sudoers # 修改权限 u 标识所有者 w 表示写权限 + 表示添加
vim /etc/sudoers # 编辑该文件
# 找到 `root ALL=(ALL) ALL`
# 添加一行 `work ALL=(ALL) ALL`
chmod u-w /etc/sudoers # 还原权限
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
使用work登录机器,输入su,再输入root账号的密码,即可拥有超级权限。
# 2. 登录信任
ssh免登陆的原理是这样的,A将自己的公钥发送给B,A要登陆B,B给A发送一个随机数,然后A用自己的私钥对这个随机数加密,B用保存的A的公钥解密,如果得到的随机数和之前发送的一样,则验证通过。
- 方法1
为了避免每次登录输入密码,需要进行登录信任,创建
~/.ssh/authorized_keys
文件
# 修改文件夹权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
1
2
3
2
3
将本机的 id_rsa.pub
内容粘贴进来
- 方法2
在本地执行ssh-copy-id
命令将公钥文件传输的远程机器,并生效
# 本机如果没有.ssh文件,需要先生成
# ssh-keygen -t rsa -C "xx@qq.com"(随便编个字符串,一般用邮箱)
ssh-copy-id -i ~/.ssh/id_rsa.pub work@xx.xx.xx.xx
1
2
3
2
3
以上两种方法人选其一退出重新用work登录,将不用再输入密码
# 3. 安装必备软件
- Git
- docker
- 安装docker
- docker 镜像加速
- 安装docker-compose
docker version
docker-compose --version
1
2
2
# 4. 开放端口
- 开放需要的端口,否则外网无法访问该端口
- 线上环境,只会开放nginx端口,使用nginx反向代理
# 二、部署应用
# 1. 思路梳理
- 使用GitHub Actions监听master分支push
- 云服务器获取master分支最新代码
- 构建docker-compose
- 重启容器
# 2. 配置deplay-linux.yml
- 讲本地的id_rsa内容添加到github仓库的中的secrets
- windows 复制id_rsa到github仓库的中的secrets经过传递会出现报错
- 使用
easingthemes/ssh-deploy@main
actions
Load key "/home/runner/.ssh/id_rsa": invalid format
1