前言

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. nodejs中使用websockets

    websockets介绍 websockets这个新协议为客户端提供了一个更快.更有效的通信线路.像HTTP一样,websockets运行在TCP连接之上,但是它们更快,因为我们不必每次都打开一个新的 ...

  2. GIS空间索引技术

    地理信息系统(Geography Information System,简称GIS)的主要任务之一是有效地检索空间数据及快速响应不同用户的在线查询.地理空间索引技术和方法是GIS的关键技术.是快速高效 ...

  3. STM32真的是很落后吗?

    STM32真的是很落后吗? 作为一名嵌入式开发老兵,我不止一次听到有人说"STM32已经过时了",尤其是那些刚入门或者看了几篇文章的新手.每当听到这样的言论,我都忍不住想笑,但又有 ...

  4. DPDI(Dispatch PDI)kettle调度管理平台之介入前后的对比剖析

    DPDI(Dispatch PDI)kettle调度管理平台 --介入前后的对比剖析 引言 在数据处理领域,Kettle(Pentaho Data Integration)作为一款广受欢迎的开源ETL ...

  5. 36条技巧优化PHP代码(总结)

    原文:38条技巧优化PHP代码 1.如果一个方法能被静态,那就声明他为静态的,速度可提高1/4; 2.echo的效率高于print,因为echo没有返回值,print返回一个整型; 3.在循环之前设置 ...

  6. 一个Controller网关根据请求参数和版本号调用分发多个Service和方法

    一个Controller网关根据请求参数和版本号分发Service 公司原有项目就是根据请求参数进行分发逻辑的,这次想着通过反射加入了版本号的分发,减轻各种版本的业务代码逻辑耦合度. 在一个项目中需要 ...

  7. CTFHub技能树RCE命令注入

    1.命令注入 // 关键代码 <?php $res = FALSE; if (isset($_GET['ip']) && $_GET['ip']) {// 传入ip, $cmd ...

  8. Mybatis 框架课程第一天

    目录 1 框架概述 1.1 MyBatis 框架概述 1.2 JDBC 编程的分析 1.2.1 jdbc 程序的回顾 1.2.2 jdbc问题分析 2 Mybatis框架快速入门 2.1 Mybati ...

  9. 操作系统综合题之“采用短进程优先调度算法(Shortest-Process-First,SPF)和先来先服务调度算法(First-Come,First-Served,FCFS)计算开始运行时间、结束时间、等待时间、周转时间、带权周转时间、平均周转时间”

    一.问题:某系统中有四个进程,他们进入系统的时间和需要服务的时间如题下表所示(表中数值均为十进制) 进程 进入系统的时间 需要服务的时间 P1 0 100 P2 10 60 P3 25 25 P4 3 ...

  10. vue3 基础-常用模板语法

    一个 vue 的单文件 SAP ( single page web application ) 即在一个 .vue 为后缀的文件中, 会包含3个部分. 模板: html 逻辑: javascript ...