前言

github action 一直都是自动化部署的引领者,今天就介绍一下如何它部署咱们的网站和服务

服务器生成ssh密钥

通过终端(finalshell、xshell)登录到您的 linux 服务器上,执行以下命令

ssh-keygen -m PEM -t rsa -b 4096

执行完成后,默认情况下,会在 root/.ssh内生成公钥(id_rsa.pub)和私钥(id_rsa)两个文件。

copy公钥到authorized_keys

复制 公钥文件 id_rsa.pub内的全部内容 到 同级目录下的 authorized_keys

copy私钥到github variable

进入 github 的项目仓库里,进入settings>Secrets and variables>Actions,创建这 3 个变量

前两个分别是 你要部署到的目标服务器的 ip 和 (ssh)端口,你根据自己的服务器信息填写进去即可,

最后一个 SSH_PRIVATE_KEY则是你上一步在目标服务器中生成的 私钥文件 id_rsa的内容,将其内容拷贝进去(重点)。

设置目标服务器的ssh允许使用密钥登录

登录服务器,编辑 /etc/ssh/sshd_config

PermitRootLogin yes # 开启root账号
PubkeyAuthentication yes # 允许使用密钥登录(重点)

最后执行重启 sshd 服务命令 systemctl restart sshd

仓库项目配置

需要为项目增加工作流配置文件

不同的项目,可能不仅相同

vue&react等框架型前端项目

vue-demo/.github/workflows/webpack.yml

name: NodeJS with Webpack

on:
push:
branches: ["main"]
jobs:
build:
runs-on: ubuntu-latest steps:
- name: 迁出代码
uses: actions/checkout@main - name: 切换为pnpm
uses: pnpm/action-setup@v4
with:
version: 9 - name: 安装Node
uses: actions/setup-node@main
with:
node-version: "20.x" - name: 安装依赖
run: pnpm i - name: 打包
run: npm run build - name: 发布到服务器
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-avzr --delete --mkpath"
SOURCE: "dist/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT }}
REMOTE_USER: root
TARGET: /home/apps-root/my-website

其实核心在 发布到服务器 这一步,这一步主要是使用到了 ssh-deploy这个插件!

常见问题

Permission denied

这一般就是没有按照如上步骤导致,比如没有复制公钥文件到 authorized_keys中,或者没有给 sshd 放开允许密钥方式登录

> Run easingthemes/ssh-deploy@main
[DIR] Creating /home/runner/.ssh dir in workspace root
[DIR] dir created.
[FILE] writing /home/runner/.ssh/known_hosts file ... 0
[SSH] known_hosts file ensured /home/runner/.ssh
[DIR] /home/runner/.ssh dir exist
[FILE] writing /home/runner/.ssh/deploy_key_root_1743137849750 file ... 3244
[SSH] key added to `.ssh` dir /home/runner/.ssh deploy_key_root_1743137849750
rsync version 3.2.7 protocol version 31
Copyright (C) 1996-20*** by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, symlinks, symtimes, hardlinks, hardlink-specials,
hardlink-symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs,
xattrs, optional secluded-args, iconv, prealloc, stop-at, no crtimes
Optimizations:
SIMD-roll, no asm-roll, openssl-crypto, no asm-MD5
Checksum list:
xxh128 xxh3 xxh64 (xxhash) md5 md4 sha1 none
Compress list:
zstd lz4 zlibx zlib none
Daemon auth list:
sha512 sha256 sha1 md5 md4 rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
️ [CLI] Rsync exists
[Rsync] Starting Rsync Action: /home/runner/work/my-website/my-website/dist/ to root@***:/home/apps-root/my-website
[Rsync] excluding folders
Warning: Permanently added '***' (ED25519) to the list of known hosts. Permission denied, please try again. Permission denied, please try again. root@***: Permission denied (gssapi-keyex,gssapi-with-mic,password). rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(232) [sender=3.2.7] [Rsync] error:
Error: rsync exited with code 255
at ChildProcess.<anonymous> (/home/runner/work/_actions/easingthemes/ssh-deploy/main/dist/index.js:2:2603)
at ChildProcess.emit (node:events:524:28)
at ChildProcess._handle.onexit (node:internal/child_process:293:12) {
code: 255
}
[Rsync] stderr:
Warning: Permanently added '***' (ED25519) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
root@***: Permission denied (gssapi-keyex,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(232) [sender=3.2.7] ️ [Rsync] stdout: [Rsync] command:
================================================================
================================================================
rsync /home/runner/work/my-website/my-website/dist/ root@***:/home/apps-root/my-website --rsh "ssh -p *** -i /home/runner/.ssh/deploy_key_root_1743137849750 -o StrictHostKeyChecking=no" --recursive --exclude= -avzr --delete --mkpath
Error: R] rsync exited with code 255 Warning: Permanently added '***' (ED25519) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
root@***: Permission denied (gssapi-keyex,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(232) [sender=3.2.7]

github action 与自动化部署的更多相关文章

  1. 使用GitHub Actions实现自动化部署

    前言 大家在工作中想必都是通过自动化部署来进行前端项目的部署的,也就是我们在开发完某个需求时,我们只需要将代码推送到某个分支,然后就能自动完成部署,我们一般不用关心项目是如何build以及如何depl ...

  2. 云原生之旅 - 13)基于 Github Action 的自动化流水线

    前言 GItHub Actions是一个持续集成和持续交付的平台,能够让你自动化你的编译.测试和部署流程.GitHub 提供 Linux.Windows 和 macOS 虚拟机来运行您的工作流程,或者 ...

  3. 利用 Github 网络钩子实现自动化部署

    GitHub 的网络钩子(webhook)功能,可以很方便的实现自动化部署.本文记录了使用 Node.js 的开发部署过程,当项目的 master 分支被推时,将在服务器进行自动部署 添加网路钩子 在 ...

  4. 编写自己的 GitHub Action,体验自动化部署

    本文将介绍如何使用 GitHub Actions 部署前端静态页面,以及如何自己创建一个 Docker 容器 Action. 简介 Actions GitHub Actions 是 GitHub 官方 ...

  5. 使用 GitHub / GitLab 的 Webhooks 进行网站自动化部署

    老早就想写这个话题了,今天正好有机会研究了一下 git 的自动化部署.最终做到的效果就是,每当有新的 commit push 到 master 分支的时候,就自动在测试/生产服务器上进行 git pu ...

  6. GitHub Action一键部署配置,值得拥有

    最近由于自己的个人应用增加,每次都需要在服务器手动发布,觉得特别麻烦,所以想通过代码控制自动发布,直接选择了GitHub Action. GitHub Action持续集成服务,目前已经免费开放使用, ...

  7. 使用 Github Action 进行前端自动化发布

    前言 说起自动化,无论是在公司还是我们个人的项目中,都会用到或者编写一些工具来帮助我们去处理琐碎重复的工作,以节约时间提升效率,尤其是我们做前端开发会涉及诸如构建.部署.单元测试等这些开发工作流中重复 ...

  8. Azure Terraform(九)GitHub Actions 实现 Infra 资源的自动化部署

    思路浅析 使用 Terraform Code 部署 Azure 基础设施资源是特别受欢迎的,我曾经有写文章分享过利用 Azure DevOps 自动部署 Terraform Code 所描述的 Azu ...

  9. node项目自动化部署--基于Jenkins,Docker,Github(1)安装Jenkins

    前言 每次项目代码更新后都要重新部署,如果只有一台服务器还好. 但是如果是分布式系统,动不动就很多台服务器,所以代码的自动部署就显得十分重要了. 这里用几篇文章来记录一下如何使用Jenkins,Doc ...

  10. 博客 | 基于Travis CI实现Hexo在Github和Coding的同步自动化部署

    文章目录 完成Hexo主题安装和配置 基于Travis CI实现同步部署 参考内容 相关链接 待补充 完成Hexo主题安装和配置 如果您还没有安装Hexo环境,请参考Hexo文档安装,也给出这样两篇博 ...

随机推荐

  1. 帮客户解决基于surging的物流速运网关内存泄漏问题

    一.概述 有surging企业客户找到我,系统已经在线上环境运行,在使用过程中碰到内存不能释放的问题,每次都要和客户打招呼进行重启造成很坏的影响,问能不能彻底解决掉,然后我打包票可以解决,解决不了不收 ...

  2. CentOS安装msf

    cd /opt curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/met ...

  3. [数据库/SQL] 浅谈DDL、DSL、DCL、DML、DQL

    概念辨析:SQL.DQL.DML.DDL.DCL SQL(Structure Query Language, 结构化查询语言)语言是数据库的核心语言. SQL的发展是从1974年开始的,其发展过程如下 ...

  4. 浏览器如何确定最终的CSS属性值?解析计算优先级与规则

    前言 上篇文章中有提到CSS值的处理过程,但如果想要确定一个元素的最终样式值可以不需要这么多步.实际上我们写的任何一个标签元素无论写没写样式,它都会有一套完整的样式.理解这一点非常重要️ 比如:一个简 ...

  5. Spring基于XML AOP事务控制

    Spring基于XML AOP事务控制 源码 代码测试 pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  6. 阿里云Ansible自动化运维平台部署

    以下是在阿里云平台上基于Ansible实现自动化运维的完整实践指南,整合所有核心操作流程和命令,适配指定的服务器规划: 一.环境规划 主机名 IP地址 角色 操作系统 manage01 192.168 ...

  7. c# 批量注入示例代码

    using Microsoft.Extensions.DependencyInjection; using System; using System.Linq; using System.Reflec ...

  8. MySQL高可用之ProxySQL + MGR 实现读写分离实战

    部署MGR 1.MGR 前置介绍 阿里云RDS集群方案用的就是MGR模式! 1.1.什么是 MGR MGR(MySQL Group Replication)是MySQL 5.7.17版本诞生的,是My ...

  9. Python基础 - 文件处理(上)

    读写文件, 文件备份, 上传资料这些操作应该是大家日常工作中每天都要做的事情. 而文件呢, 又有不同的类型(后缀名), 比如 .txt, .xls, .xlsx, .csv, .json, .sql ...

  10. 操作系统:Linux如何实现系统API

    上节课,我们通过实现一个获取时间的系统服务,学习了 Cosmos 里如何建立一个系统服务接口.Cosmos 为应用程序提供服务的过程大致是这样的:应用程序先设置服务参数,然后通过 int 指令进入内核 ...