将 hugo 博客搬迁到服务器

news2024/12/30 4:13:45

1. 说明

在 Ubuntu 22.04 上使用 root 账号,创建普通账号,并赋予 root 权限。
演示站点:https://woniu336.github.io/
魔改hugo主题: https://github.com/woniu336/hugo-magic

在这里插入图片描述

2. 服务器配置

建立 git 用户

adduser git

安装 git

sudo apt install git

给新用户添加管理权限

sudo usermod -aG sudo git

账号切换

sudo su git

在服务端新建 git 仓库

cd ~
git config --global init.defaultBranch main
git init --bare hugo.git
sudo chown -R git:git hugo.git
mkdir hugo

配置钩子

vim /home/git/hugo.git/hooks/post-receive

写入以下文本:

git --work-tree=/home/git/hugo --git-dir=/home/git/hugo.git checkout -f

配置权限:

sudo chmod +x /home/git/hugo.git/hooks/post-receive

3.本地生成 SSH 密钥

打开 Git bash 输入:

ssh-keygen -t ed25519 -C "太酷啦"

复制公钥内容:

cat ~/.ssh/id_ed25519.pub

4. 服务器配置

登录到远程服务器,并将公钥内容添加到 ~/.ssh/authorized_keys 文件中

## 登录git用户
cd ~
mkdir -p ~/.ssh
echo "YOUR_PUBLIC_KEY" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

YOUR_PUBLIC_KEY替换成公钥内容

5.测试 SSH 连接

在推送代码之前,先测试 SSH 连接是否正常

注意:假设SSH端口是5522,不是默认的22

ssh -p 5522 git@41.87.27.42

清理 known_hosts 文件

如果之前有错误的连接记录,可以尝试清理 known_hosts 文件

ssh-keygen -f "~/.ssh/known_hosts" -R "41.87.27.42"

6.本地推送

打开博客根目录,打开Git bash,输入:

hugo --gc --minify

创建本地仓库

cd public
git init
git branch -M main

添加远程仓库

git remote add origin ssh://git@8.8.8.8:33/home/git/hugo.git

确认远程仓库配置

git remote -v

第一次推送博客内容到服务器

git add .
git commit -m 'First Commit'
git push -u origin main 

如果推送有问题,直接强推:

git push -f origin main

更新本地仓库(可选)

git fetch --prune
git branch -a

7.自动推送脚本

将脚本保存在博客根目录去执行

#!/bin/bash

# 备份 public 目录下的 .git 目录
if [ -d "public/.git" ]; then
    mv public/.git .git_backup
fi

# 删除 public 目录
rm -rf public

# 生成静态文件
hugo --gc --minify

# 还原 .git 目录
if [ -d ".git_backup" ]; then
    mv .git_backup public/.git
fi

# 进入 public 目录并推送更新
cd public
git add .
git commit -m 'update'
git push origin main

# 提示用户确认退出(使用绿色高亮)
echo -e "\033[1;32m推送完成。按Enter键退出...\033[0m"
read

8.宝塔部署

安装nginx,设置为静态站点,在计划任务添加shell脚本,将DEST_DIR设置为你站点目录

脚本解释:使用rsync命令将hugo静态目录同步到站点目录

#!/bin/bash

LOCK_FILE="/home/git/myrsyncscript.lock"  # 修改为你有权限写入的目录

(
  flock -n 9 || { echo "Another instance is running"; exit 1; }

  SOURCE_DIR="/home/git/hugo"
  DEST_DIR="/www/wwwroot/book.xxx.org"

  sudo rsync -avz --delete --exclude='.user.ini' --timeout=600 "$SOURCE_DIR/" "$DEST_DIR/"

  if [ $? -eq 0 ]; then
    echo "文件拷贝成功"
  else
    exit 1
  fi

) 9>"$LOCK_FILE"

完美结局~


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

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

相关文章

蓝图中结构体改变后,要重新创建widget

发现了一个怪现象,在更改结构体后,界面上出不来相应的信息了,断掉传递到界面上的线后,再重新连接,发现错误“只有完全匹配的结构才是兼容的”,删除后,重新创建widget,正常。 如下图…

【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)

个人主页~ 实战项目的实现过程(一)~ 实战项目的实现过程 二、初步了解各个外设硬件1、OLED模块2、GPS模块3、MPU6050模块4、超声测距模块5、温度测控模块6、语音模块7、SIM模块8、按键模块 三、查阅资料1、查看手册2、查找例程 四、研究硬件功能1、OLED…

OpenCv图像处理: 时域滤波与频域滤波

时域滤波: 空间域滤波的步骤一般如下: 1. 选择滤波器 选择一种低通滤波器,常见的包括: 均值滤波(平均滤波器)高斯滤波(Gaussian filter) 2. 定义滤波器核 根据选择的滤波器类型&…

【卡码网Python基础课 19.洗盘子】

目录 题目描述与分析一、栈二、栈的操作三、代码编写 题目描述与分析 题目描述: 在餐厅里,洗盘子的工作需要使用到栈这种数据结构。 假设你手里有一个盘子堆放区。现在需要模拟洗盘子的过程,每个盘子都有一个编号。 盘子堆放区操作说明&…

同一台电脑上安装不同版本的nodejs(搭配VSCode)

今天拉取了一个前后端分离的项目,运行前端的时候,出现node版本不匹配的情况。 本文章将从安装node.js开始到VSCode使用进行讲解 1、去官网下载node版本 以16版本为例,需要哪个版本,就在网址上把版本号替换即可 https://nodejs.o…

在ADS中使用传输端口参数构建理想元器件模型---以3dB电桥为例

在ADS中使用传输端口参数(S、Z、Y、ABCD)构建理想元器件模型—以3dB电桥为例 本文工程文件下载:在ADS中使用传输端口参数构建理想元器件模型-以3dB电桥为例-工程文件 目录 在ADS中使用传输端口参数(S、Z、Y、ABCD)构建…

8月18日笔记

目标不出网场景 在目标环境完全不出网的情况下,即所有的网络通信如SMB(Server Message Block)、DNS(Domain Name System)甚至包括TCP(Transmission Control Protocol)都不允许与外部网络进行交…

使用极限网关实现 ES 跨集群搜索

使用 ES 的小伙伴,有没有在用跨集群搜索的? 熟悉 ES 的小伙伴都知道,ES 本身就能实现跨集群搜索,那为啥还要聊这个?试想一下,如果集群都上线投产了,才出现跨集群搜索需求,那么可能出…

重磅!RISC-V+OpenHarmony平板电脑发布

仟江水商业电讯(8月18日 北京 委托发布)RISC-V作为历史上全球发展速度最快、创新最为活跃的开放指令架构,正在不断拓展高性能计算领域的边界。OpenHarmony是由开放原子开源基金会孵化并运营的开源项目,已成为发展速度最快的智能终…

Chapter 40 Socket网络编程

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、Socket网络编程二、Socket服务端编程三、Socket客户端编程四、服务端与客户端相互通讯 前言 在现代计算机网络中,Socket(套接字&#xff09…

【题解】—— LeetCode一周小结33

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结32 12.实现一个魔法字典 题目链接:676. 实现一个魔…

Kettle根据时间戳同步数据实现

1 Kettle总体步骤 更多数据实时同步方案,请参考笔者的另一篇博文:大数据时代,数据实时同步解决方案的思考—最全的数据同步总结 由于Kettle自身的特殊性以及在多个步骤中kettle自身处理数据库事务的特殊性,尝试了很多种方案&…

win11内存占用高的解决办法

win11莫名奇妙的总是内存爆满,真的抽象,16g根本不够用。尝试各种方法看看能不能解决… 方法一 关闭快速启动 win11系统,自带快速开机功能,可能用较大内存,关闭看看。控制面板找到电源设置关闭快速启动。 如果没找到要…

C++ | Leetcode C++题解之第345题反转字符串中的元音字母

题目&#xff1a; 题解&#xff1a; class Solution { public:string reverseVowels(string s) {auto isVowel [vowels "aeiouAEIOU"s](char ch) {return vowels.find(ch) ! string::npos;};int n s.size();int i 0, j n - 1;while (i < j) {while (i < …

Leetcode JAVA刷刷站(48)旋转图像

一、题目概述 二、思路方向 要在原地顺时针旋转一个 n x n 的二维矩阵 90 度&#xff0c;你可以通过一系列交换操作来实现。这里的关键在于理解旋转后的矩阵与原矩阵之间的元素对应关系。 假设原矩阵为 matrix&#xff0c;其中 matrix[i][j] 表示第 i 行第 j 列的元素。旋转 90…

【每日一题 | 数据结构】压缩矩阵存储算法

题型方法讲解 首先明确&#xff0c;压缩矩阵存储算法是408考试中的重点、难点、高频考点&#xff0c;甚至曾经达成了连续五年考到程度&#xff0c;让同学们感到恐惧。很多同学都会把这类题型当成一个记公式的题&#xff0c;其实不然&#xff0c;这个视频将会告诉你如何用推导的…

485总线常开+常闭,8路C型继电器输出模块DAM-3018CA

阿尔泰科技 型号&#xff1a;DAM-3018CA 概述&#xff1a; DAM-3018CA为8路C型继电器输出模块&#xff0c;每通道具有LED指示灯指示&#xff0c;RS485通讯接口&#xff0c;带有标准ModbusRTU协议。配备良好的人机交互界面&#xff0c;使用方便&#xff0c;性能稳定。 产品图…

Leetcode JAVA刷刷站(50)Pow(x, n)

一、题目概述 二、思路方向 方法1&#xff1a;递归&#xff08;考虑正负n&#xff09; 这种方法利用递归的思想&#xff0c;将问题分解为更小的子问题。同时&#xff0c;考虑到n可能是负数&#xff0c;我们可以先处理n的符号&#xff0c;然后将问题转化为正数幂的问题。 publi…

24/8/15算法笔记 复习_决策树

#手动计算决策树到底是如何实现分类的 p1 (y N).mean() p2 (y Y).mean()p1 * np.log2(1/p1) p2*np.log2(1/p2)X[真实用户] y x X[日志密度].unique()#.unique() 是一个方法&#xff0c;它返回一个数组&#xff0c;包含 X[日志密度] 列中所有不同的值。 x.sort()#排序 print…

读零信任网络:在不可信网络中构建安全系统21读后总结与感想兼导读

1. 基本信息 零信任网络&#xff1a;在不可信网络中构建安全系统 道格巴斯&#xff08;Doug Barth&#xff09; 著 人民邮电出版社,2019年8月出版 1.1. 读薄率 书籍总字数252千字&#xff0c;笔记总字数73194字。 读薄率73194252000≈29.5% 这个读薄率是最高的吧&#x…