hexo博客部署到华为云服务器


前言

历经一天踩坑实践,终于将个人Hexo博客从本地成功部署至华为云服务器,并完成阿里云域名到华为云DNS的平滑迁移。本文详细记录完整操作流程,涵盖以下核心内容:

  • 🛠️ 华为云ECS服务器初始化配置
  • 🚀 Hexo项目自动化部署方案
  • 🔒 Nginx反向代理安全配置
  • 🌐 域名解析迁移与多平台适配
  • ⚡ 高频问题排查指南

一、华为云服务器环境准备

1.1 服务器基础配置

登录华为云控制台,完成以下初始化操作:

  1. 创建弹性云服务器(ECS)

    • 规格:推荐2核4G(个人博客足够)
    • 镜像:Ubuntu 22.04 LTS
    • 安全组:放行22(SSH)、80(HTTP)、443(HTTPS)端口
  2. 绑定弹性公网IP

        # 查看IP绑定状态
       ifconfig eth0 | grep inet
        # 输出示例:inet 192.168.0.190(私有IP) 公网IP:1.94.173.180
    
    ### 1.2 基础服务安装
    
    ```bash
    # 更新系统并安装必备组件
    sudo apt update && sudo apt upgrade -y
    sudo apt install -y git nginx nodejs npm
    
    # 验证版本
    node -v  # 需≥v18.x
    nginx -v # 需≥1.24.x

二、Hexo项目自动化部署

2.1 服务器端仓库配置

# 创建裸仓库
mkdir ~/hexo.git && cd ~/hexo.git
git init --bare

# 创建网站根目录并赋权
sudo mkdir -p /var/www/hexo
sudo chown -R $USER:$USER /var/www/hexo

2.2 配置Git钩子

编辑 ~/hexo.git/hooks/post-receive

#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/home/ubuntu/hexo.git checkout -f

赋予执行权限:

chmod +x hooks/post-receive

2.3 本地Hexo项目配置

修改本地Hexo的 _config.yml

deploy:
  type: git
  repo: ubuntu@1.94.173.180:/home/ubuntu/hexo.git
  branch: master

执行部署:

hexo clean && hexo generate && hexo deploy

三、Nginx服务配置与优化

3.1 基础站点配置

创建 /etc/nginx/sites-available/hexo.conf

server {
    listen 80;
    server_name nusqx.top www.nusqx.top;
    root /var/www/hexo;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # 禁用日志以提升性能
    access_log off;
    error_log /dev/null;
}

启用配置:

sudo ln -s /etc/nginx/sites-available/hexo.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx

3.2 安全加固措施

# 在server块内添加:
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin";

四、阿里云域名迁移至华为云DNS

4.1 域名解析配置

  1. 华为云控制台操作

    • 进入云解析服务
    • 添加记录集:
      类型主机记录TTL
      A@1.94.173.180300
      CNAMEwwwnusqx.top.300
  2. NS记录验证

    nslookup -type=ns nusqx.top 8.8.8.8
    # 应返回华为云DNS服务器:ns1.huaweicloud-dns.com 等

4.2 域名状态检查

  • 确保域名状态为“已实名”
  • 原阿里云解析记录全部清除
  • 等待DNS全球生效(最长48小时)

五、高频问题排查指南

5.1 访问出现403 Forbidden

原因:Nginx无权限访问网站目录
解决

sudo chown -R www-data:www-data /var/www/hexo
sudo chmod -R 755 /var/www/hexo

5.2 域名解析不生效

验证步骤

# 指定公共DNS查询
dig nusqx.top @1.1.1.1 +short
# 预期输出:1.94.173.180

# 若返回空值,检查华为云解析记录配置

5.3 Nginx配置报错

日志分析

tail -f /var/log/nginx/error.log
# 常见错误:符号链接权限问题、监听端口冲突

Nginx进程用户(默认是 www-data)没有权限访问 /home/blog/hexo-deploy 目录

从你提供的目录权限信息来看,关键问题在于 Nginx进程用户(默认是 www-data)没有权限访问 /home/blog/hexo-deploy 目录。以下是具体分析和解决方案:

问题分析

  1. 目录权限:

    drwxrwxr-x 22 blog blog 4096 Apr  2 16:34 /home/blog/hexo-deploy
    • 目录所有者是用户 blog,组是 blog
    • 权限为 775(所有者 blog 和组内用户有读写执行权限,其他用户仅有读和执行权限)。
    • Nginx默认以 www-data 用户运行,而 www-data 不属于 blog 组,因此无权访问此目录。

解决方案

www-data 用户加入 blog

让Nginx进程用户(www-data)获得组权限:

# 将 www-data 用户加入 blog 组
sudo usermod -aG blog www-data

# 验证组是否添加成功
groups www-data
# 输出应包含 "blog"

# 重启Nginx使组权限生效
sudo systemctl restart nginx

文章作者: nusqx
文章链接: https://nusqx.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nusqx !
评论
  目录