hexo上云记录(华为云)

本文最后更新于 2024年8月31日 上午

JAVA学不进去,焦虑无比,于是做点其他的,搞了个华为云的免费服务器Flexus,好抠,只给一个月,想着把github page上的这个静态博客放到云上玩玩。开帖记录一下过程,也方便以后再次上云。需要:

  • 服务器镜像:Ubuntu 20.04
  • 已配置好的hexo博客

白嫖华为云

首先来到华为云学生服务器页面,每天9:30后能领个试用,注册华为账号,然后领取。

华为云真抠啊……

买完一路点默认设置,最后来到Flexus实例控制台。跟着“应用搭建指引”设置好密码,在“配置安全组”那里添加一个规则,添加一个TCP的80端口。

服务器配置

下载工具

通过cloudShell远程登录服务器,下载必要的工具:git、nginx、ssh

1
2
3
sudo apt-get install git-core
sudo apt-get install nginx
sudo apt-get install openssh-server

华为云好像初始有git和nginx,但也可以执行一下apt-get,不费事

安装ssh后,查看ssh服务是否启动:

1
ps -e|grep ssh
ssh服务

创建用户

创建一个系统用户,这里以"blog"为例。

创建一个名为blog的用户。接下来为blog添加文件的写权限:在/etc/sudoers中添加blog ALL=(ALL:ALL) ALL,具体命令为:

1
visudo /etc/sudoers

然后向下翻,找到

用户权限

如上图编辑,在root下面添加一行blog ALL=(ALL:ALL) ALLvisudo命令使用的是nano编辑器,使用Ctrl+X、y、Enter退出。

然后切换至blog用户,回退至根路径,在/var/repo下创建名为hexo_static的裸仓库(仓库名可自定义)

1
2
3
4
5
6
7
8
9
su blog
cd /

sudo mkdir /var/repo/
sudo chown -R $USER:$USER /var/repo/
sudo chmod -R 755 /var/repo/

cd /var/repo/
git init --bare hexo_static.git

创建完成后可进入/var/repo查看,应该有branches、config、HEAD、hooks等

创建/var/www/hexo目录,用于nginx托管,修改目录所有权和权限

1
2
3
4
sudo mkdir -p /var/www/hexo

sudo chown -R $USER:$USER /var/www/hexo
sudo chmod -R 755 /var/www/hexo

配置nginx服务默认路径

如果/etc/nginx下有sites-enabled文件夹,则编辑其下的default文件

如果没有,则编辑conf.d文件夹下的default.conf,添加root /var/www/hexo,位置如下,再删掉location里的proxy的第一行proxy_pass http://127.0.0.1:9001;,取消转发到9001端口。

因为华为云默认安装一个wordpress的应用镜像,用docker ps就能看见,如果放着不管,直接访问ip会看见wordpress而不是自己的博客。可以禁掉docker,也可以取消掉这里的转发。

如果有sites-enabled文件夹,在default中如下位置添加root /var/www/hexo

注意:nginx.conf里面得包含你写的default,写了就得include进去,如下:

然后重启nginx服务:

1
sudo systemctl reload nginx

创建Git钩子

在之前的仓库的hooks文件夹下创建一个post-receive钩子:

1
vim /var/repo/hexo_static.git/hooks/post-receive

写入如下内容:

1
2
3
#!/bin/bash

git --work-tree=/var/www/hexo --git-dir=/var/repo/hexo_static.git checkout -f

然后为该文件添加可执行权限:

1
chmod +x /var/repo/hexo_static.git/hooks/post-receive

拷贝密钥

回到根路径创建.ssh目录,进入,创建authorized_keys文件

1
2
3
4
5
cd /
sudo mkdir .ssh
cd /.ssh

vim authorized_keys

找到本地的id_rsa.pub文件,复制到这里,如果没权限可以进root再操作

部署hexo项目

编辑本地hexo的_config.yml文件,修改两处

  • url改为服务器的公网ip
  • deploy的repo改为{用户名}@公网ip:/var/repo/hexo_static.git,branch改成实际的名字,main或者master

然后hexo g -d上传,首次会要一个yes,然后输密码

上传后进入/var/www/hexo下查看,可以看到静态文件已经全部上传,就是本地的public文件夹里的内容。

r然后在浏览器输入ip就可以访问啦!

后续问题

第一次上传成功,第二次上传出现

1
remote: error: cannot update the ref 'HEAD': unable to append to './logs/HEAD': Permission denied

通常是由于远程仓库中的分支或引用被锁定、权限问题,或者由于在远程仓库中有一些与本地仓库冲突的提交。但是这是个人博客,所以不会出现分支冲突,那就是权限问题,无脑加一轮权限即可简单解决:

1
2
3
4
5
6
7
id -un  # 获取当前用户名
id -gn # 获取当前用户组

sudo chown -R YOUR_USER:YOUR_GROUP /var/repo/hexo_static.git #增加权限
rm -f /var/repo/hexo_static.git/.git/refs/heads/main.lock #删除仓库的锁
# 设置目录权限为755,允许所有者读写,组和其他用户只读
sudo chmod -R 755 /var/www/hexo

hexo上云记录(华为云)
https://novelyear.github.io/2024/08/30/hexo上云记录-华为云/
作者
Leoo Yann
更新于
2024年8月31日
许可协议