Hugo博客公告弹窗

将hugo博客搬迁到服务器

   
文章摘要
本文介绍了将Hugo博客迁移到Ubuntu 22.04服务器的详细步骤。首先,创建并配置具有root权限的git用户,初始化Git仓库并设置钩子。接着,生成SSH密钥,配置服务器以接受公钥并测试SSH连接。然后,本地初始化仓库,添加远程仓库并推送代码。提供了一键推送脚本以简化更新过程。最后,通过宝塔面板使用nginx部署静态站点,并使用计划任务同步更新。

1. 说明

在 Ubuntu 22.04 上使用 root 账号,创建普通账号,并赋予 root 权限。

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"

完美结局~


CC BY-NC-SA 4.0 转载请注明
最后更新于 2024-11-20 16:13
clarity统计