将 github 仓库同步到个人服务器

news2024/11/16 22:41:06

场景

把本地项目推送到Github仓库后,如果想部署到服务器上,可以尝试此方案

  • 我的博客是hugo搭建的,每次更新文章会手动推送到Github仓库,

  • 然后利用Actions 脚本自动推送到cf或者vercel

  • 之前我写过一篇 将 hugo 博客搬迁到服务器 步骤有些繁琐,

  • 本次方案快速高效(推荐)

方案

使用rsync,配置Actions 脚本
小站demo: https://blog.taoshuge.eu.org/

安装 rsync

登录远程服务器,键入以下命令来完成 rsync 的安装:

sudo apt install rsync

安装成功会显示git的版本号

rsync --version

显示

rsync version 3.2.3 protocol version 31

新建 rsync 用户

出于安全的原因考虑,我们一般不会使用root来运行同步功能,因此,需要创建一个 rsync 用户来执行同步。

登录远程服务器,键入以下命令:

sudo adduser rsyncer

创建用户的途中会要求输入用户密码,这个密码请务必记住,切换到这个用户时需要,其它配置使用默认值直接回车就行。

本地生成 SSH key

在你的电脑上生成一个 Key 对,其中一个扩展名是.pub,是公钥。假设分别命名为:id_rsaid_rsa.pub

ssh-keygen -q -t rsa -b 4096 -C "阿弥托福" -N "" -f ~/.ssh/id_rsa

查看并复制公钥内容

cat ~/.ssh/id_rsa.pub

把 SSH 公钥添加到远程服务器

登录你的服务器,逐个输入以下代码

su rsyncer  # 要输入密码
cd ~
mkdir -p www .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
vim .ssh/authorized_keys  # 用文本编辑器打开 `id_rsa.pub`,复制所有内容到这个文件里

注意:.ssh的权限必须是700,authorized_keys的权限必须是600

修改 SSH 默认配置

以下内容一般不用修改,如果同步有问题再来修改。

vim /etc/ssh/sshd_config

移除前面的注释,若没有则在最后添加

RSAAuthentication yes
PubkeyAuthentication yes     
AuthorizedKeysFile  .ssh/authorized_keys

修改保存后重启sshd服务

systemctl restart sshd.service

设置Git仓库(重点)

打开仓库设置,按下图把相关设置加入 secrets,

地址:https://github.com/用户名/仓库名/settings/secrets/actions

解读:

HONGKONG_PRIVATE_KEY  :你电脑上的id_rsa私钥内容

HONGKONG_SERVER_IP : 你的服务器IP地址

HONGKONG_USERNAME  :rsyncer  #用户名就是前面新建的rsyncer用户

HONGKONG_WWW_PATH  :www   #就是服务器同步的目录为www

修改自动化 Actions 脚本

  • rsync命令实现增量同步, --delete参数表示会删除远程文件夹中本地不存在的文件

  • -a是复合参数, 可复制本地文件的全部属性至远程, -v会显示具体同步的文件信息

  • exclude中的文件夹路径是相对于本地同步文件夹而言, 即"public/.git"

  • 注意:-p 5522 是服务器的ssh端口,如果不是22,记得修改

把以下内容加入脚本,脚本目录:.github\workflows\main.yml

      - name: webfactory/ssh-agent
        uses: webfactory/ssh-agent@v0.7.0
        with:
          ssh-private-key: ${{ secrets.HONGKONG_PRIVATE_KEY }}

      - name: Publish blog to remote vps
        run: |
          rsync -av -e "ssh -o StrictHostKeyChecking=no -p 5522" --delete --exclude={'.git/','.github/','.user.ini'} public/ ${{ secrets.HONGKONG_USERNAME }}@${{ secrets.HONGKONG_SERVER_IP }}:${{ secrets.HONGKONG_WWW_PATH }}

完整hugo脚本:

name: Auto Deploy hugo
on:
  push:
    branches:
      - main # 更新触发的分支
jobs:
  build-deploy:
    runs-on: ubuntu-20.04
    env:
      FORCE_JAVASCRIPT_ACTIONS_TO_NODE20: true # ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
    steps:
      - name: Check out repository code
        uses: actions/checkout@v4
        with:
           submodules: recursive # Fetch Hugo themes (true OR recursive)
           fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod

      - name: Setup hugo
        uses: peaceiris/actions-hugo@v3.0.0
        with:
          hugo-version: "0.127.0"
          extended: true # 设置是否需要 extended 版本

      - name: Cache resources # 缓存 resource 文件加快生成速度
        uses: actions/cache@v3
        with:
         path: resources
         key: ${{ runner.os }}-hugocache-${{ hashFiles('content/**/*') }}
         restore-keys: ${{ runner.os }}-hugocache-

      - name: Build Hugo static files # 部署静态资源
        run: hugo --gc --minify

      - name: Deploy to Github Pages  # 部署到Github Pages页面
        uses: peaceiris/actions-gh-pages@v3
        with:
          personal_token: ${{ secrets.PERSONAL_TOKEN }} # 两个仓库请使用 deploy_key
          external_repository: woniu336/woniu336.github.io  # 如果在同一个仓库请注释
          publish_dir: ./public # hugo 生成到 public 作为跟目录
          publish_branch: main # Github Pages 所在分支
          commit_message: ${{ github.event.head_commit.message }}

      - name: webfactory/ssh-agent
        uses: webfactory/ssh-agent@v0.7.0
        with:
          ssh-private-key: ${{ secrets.HONGKONG_PRIVATE_KEY }}

      - name: Publish blog to remote vps
        run: |
          rsync -av -e "ssh -o StrictHostKeyChecking=no -p 5522" --delete --exclude={'.git/','.github/','.user.ini'} public/ ${{ secrets.HONGKONG_USERNAME }}@${{ secrets.HONGKONG_SERVER_IP }}:${{ secrets.HONGKONG_WWW_PATH }}

完结~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076229.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM案例一:灯闪烁

一、使用元件 STlink,STM32F103C8T6 二、接线方法 STM32与STLINK的接线方法为: GND-->GND DCLK-->SWCLK DIO-->SWDIO 3.3-->3.3V 三、配置调试器 选择魔术棒按钮,单击Debug,选择ST-link Debug,选…

免费JSON在线解析工具网址

1,https://tool.juhe.cn/ JSON在线解析 (juhe.cn) 2,https://www.sojson.com/ JSON在线 | JSON解析格式化—SO JSON在线工具

阿卡迈2.0逆向

阿卡迈(akamai)我也是第一次第一次搞 阿卡迈检测挺多例如 ua 屏幕 document 自动化检测等等 ,还有tls指纹 仅供学习参考吧 当cookie的_abck为 0表示通过,1表示不通过!!! 测试了两个2.0站全都通…

一款特别牛逼还免费的屏幕演示批注注释工具,教学演示工具

功能强大,还免费!PEVO Annotator 是一款功能强大的屏幕标注软件,广泛应用于教学演示、屏幕录像等场景。该软件支持多种操作系统,包括 macOS 和 Windows 。它提供了丰富的工具和功能,如画笔、直线、圆形、方形等形状绘制…

【海思3516DV500 | 开发环境】编译整个SDK全过程以及问题汇总

一、开发环境 上表是海思提供的Hi3519DV500 开发环境的各部分软件描述,实际用起来你就知道,可能有出入,尝试换Ubuntu 20.04折腾了好几天都不行,使用推荐的Ubuntu 18.04.2 64bit一个上午就行。 基本的硬件要求如下: ●…

Qt 解析多级XML

补充笔记:Qt 史上最详细 - “操作XML文件” - 笔记 一、如下图为XML文件 annotation为根节点, first第一节点,second第二节点,third第三节点。 二、实现解析xml文件,并将解析数据用QTreeView显示,实现代码…

AD9161调试问题

AD961同步信号SYNC无法保持高逻辑电 现象 配置ADF4351时钟芯片使其产生频率为1.6GHz的时钟为AD9161提供工作时钟,JESD的线速率配置为8Gbps,并配置AD9161的寄存器使其工作在2x内插模式以实现IQ信号的模数转换模式。同时根据AD9161芯片手册对ADF4351提供的…

NoSql数据库 Redis集群详解

目录 一、NoSql数据库简介 1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢? 1.3 RDBMS和NOSQL的特点及优缺点: 二 Remote Dictionary Server 简介(redis) 2.1 什么是redis …

如何使用ssm实现物资进销存jsp

TOC ssm263物资进销存jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的…

JavaScript学习文档(4):循环结构、初识数组、数组案例、操作数组

目录 一、循环结构 1、for语句 2、for循环案例 3、for循环嵌套及案例 4、while语句 5、continue关键字 6、break关键字 二、初识数组 1、什么是数组 2、为什么要数组 3、数组的基本使用 三、数组案例 1、数组求和及平均值 2、数组求最大值和最小值 四、操作数组…

做集运初期到底要不要上系统?

在集运业务的起步阶段,很多老板都会有这样的疑问:“我的包裹量还不多,真的需要投入资金和时间来上系统吗?”这个问题听起来合理,但实际上却忽视了业务发展中更为重要的几个方面。 1.用户体验:服务的核心 首…

C语言经典案例分享

题目:输入三个整数 x、y、z,请把这三个数由小到大输出。 程序分析:我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,然后再用 x 与 z 进行比较,如果…

NVIDIA Jetson AGX Orin源码编译安装CV-CUDA

目录 1 下载源码并配置 2 编译安装CV-CUDA 2.1 安装相应依赖包 2.2 升级gcc到gcc-11 2.3 build 2.4 升级cmake 2.5 再次build 2.5.1 报错 /usr/include/c/11/bits/std_function.h:435:145: error: parameter packs not expanded with ‘...’: 3 直接使用安装包 参考…

力扣: 两两交换链表中的节点

文章目录 需求代码代码解释结尾 需求 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:…

jmeter性能测试之CSV 数据文件设置

文章目录 业务场景使用步骤步骤1:准备数据步骤二: 编写csv文件步骤三:添加CSV 数据文件设置步骤四:定义接口,选择文件上传,文件名称通过“浏览”添加即可 业务场景 有一个文件上传的接口,希望每个线程上传不同的文件(比…

FOFA搜索引擎的语法

FOFA 是一款网络空间搜索引擎,允许用户通过自定义查询语法来检索全球范围内的互联网资产。FOFA 提供了丰富的语法,可以帮助用户筛选目标。以下是 FOFA 语法的基本介绍: 1. 基本语法格式 FOFA 的查询语句遵循以下格式: 字段&quo…

MVVM分层思想

M:Model数据模型 V:View视图 VM:ViewModel视图模型 Vue也是借鉴了MVVM的思想 在Vue中,M就是data,V指挂载点,而Vue实例本身就是一个VM <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X…

前端手写源码系列(二)——手写call、apply、bind

手写源码系列目录 一、作用二、手写call方法三、手写apply方法四、手写bind方法五、三者区别applycallbind小结 一、作用 call、apply、bind作用是改变函数执行时的上下文&#xff0c;简而言之就是改变函数运行时的this指向 那么什么情况下需要改变this的指向呢&#xff1f;下…

Spring Boot启用GZIP压缩

1.为什么是需要gzip压缩&#xff1f; 经常我们都会与服务端进行大数据量的文本传输&#xff0c;例如 JSON 就是常见的一种格式。通过 REST API 接口进行 GET 和 POST 请求&#xff0c;可能会有大量的文本格式数据提交、返回。然后对于文本&#xff0c;它有很高的压缩率&#x…

systemserver进程监控者--watchdog

戳蓝字“牛晓伟”关注我哦&#xff01; 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章&#xff0c;技术文章也可以有温度。 本文摘要 本文同样采用自述的方式来介绍systemserver进程的监控者watchdog&#xff0c;通过本文您将了解watchdog的作用&#xff0c;它…