将 hugo 博客搬迁到服务器

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"

完美结局~


  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值