VPS+nginx+hexo搭建个人博客

开始前的碎碎念

为了搭建这个小站,搜索了很多资料,踩了很多坑。这里努力写点有用的东西防止后人踩坑。希望阅读的读者遇到问题时思考自己是否是符合本样例的情况。

这是一篇旨在使用linux服务器+nginx+hexo+git实现搭建个人博客的教学性质文章。

requires

  • 一台服务器,本例子是linux centos,阿里的云服务器

    1
    2
    3
    4
    5
    6
    
    [root@host~]# lsb_release -a
    LSB Version:    :core-4.1-amd64:core-4.1-noarch
    Distributor ID: CentOS
    Description:    CentOS Linux release 7.6.1810 (Core)
    Release:        7.6.1810
    Codename:       Core
    
  • 本地电脑:window 10

  • nginx ; node.js ; hexo ; git ; npm


本地电脑

  1. 安装git

    • windows 下载

    • linux使用包管理器安装git (不了解包管理器的同学就不要看下去了吧)

      1
      
      yum install git -y
      
    • 更多Git基本配置工作

  2. 安装node.js (node.js自带npm)

    什么是npm,本垃圾觉得大概类似python的pip吧什么你不知道pip是啥???这是wiki打不开就算了

    • windows 下载

    • linux 下载对应版本的node.js以及安装操作 下载

  3. 安装hexo

    使用node.js的npm安装hexo,这里windows可以先设置一下npm的默认安装目录,本强迫症表示你默认装在c盘我很难受。打开命令行,运行:

    坑:原教程里写了路径末尾加了node_modules,事实证明并不需要,这个命令会在目标目录生成一个node_modules。我这里设置默认安装路径在node.js本体的安装路径,因为这个路径里本身就有一个用于安装npm本身的nnode_modules文件夹。当然即使这样做了,npm运行缓存还是会存在c盘,需要继续修改设置的请移步这里

    1
    
    npm config set prefix "E:\node.js\"
    
    • 安装hexo
      1
      
      npm install -g hexo-cli
      
      坑:-g意为global,全局安装就会安装到你设置的安装目录里,没有这个参数默认会安装在你npm当时命令行运行的目录里创建node_moudels并进行安装
  4. 搭建博客

    后续关于博客搭建的章节可以参照官方教程

    • 创建一个文件夹用于做博客的目录
    • 切换到这个文件夹所在目录,运行命令:
      1
      
      hexo init <folder name>
      
    • 进入该文件夹:
      1
      
      npm install
      

    坑:以上两步必不可缺,否则会产生缺少依赖问题,列入不生成静态文件(如x.html)的问题

  5. 配置你的站点:

  6. 书写你的第一篇文章:

    • 在你的博客文件夹内运行命令

      1
      
      hexo new "Hallow world"
      
    • 会在source文件夹内的默认_posts文件夹下生成一个md文件,接下来就可以参照markdown语法愉快的敲代码了

  7. 生成你的网站:

    • 在你的博客文件夹内运行命令

      1
      
      hexo generate
      

      或者使用快捷缩写

      1
      
      hexo g
      
    • 在本地预览你的博客网站

      1
      
      hexo server
      

      或者使用快捷缩写

      1
      
      hexo s
      

    坑:如果generate出错请检查博客文件夹下_config.yml内的配置是否正确,每一个冒号后面必须跟一个空格!!!

    坑:如果没能本地预览可能是因为缺少hexo-server,请运行npm install hexo-server --save

  8. 安装hexo-deployer-git

    安装该模块方便使用hexo最牛逼的推送功能

    1
    
    npm install hexo-deployer-git --save
    
  9. 本地配置git生成私钥以及公钥

    在git安装配置没有出错的情况下,环境变量完成配置,用户信息设置完全的情况下:

    1
    
    ssh-keygen -t rsa -C "your_email@email.com"
    

    该命令会在c:\user(你的电脑用户名).ssh文件加下生成密钥对。id_rsa文件为私钥,id_rsa.pub为公钥。 在后续的服务器配置过程中,我们会把公钥设置在服务器上,这样git推送的时候就可以免去密码认证


服务器配置(linux)

  1. 安装nginx

    1
    
    yum install nginx -y
    

    你也可以使用lnmp一类的一键脚本安装web环境,这里不举例。

  2. 配置nginx

    • 基本配置

      找到nginx的配置文件,默认在/etc/nginx/nginx.conf编辑内容

      基本只需要简单的修改默认配置中的网站根目录以及域名的设置,找到如下字段

      1
      2
      3
      4
      
      listen       80 default_server;     # 默认端口
      listen       [::]:80 default_server;
      server_name  _;                     # 你的域名,没有的话根目录即可
      root         /home/www/blog;        # 网站根目录,教程后续创建
      
    • 启动nginx:

      1
      2
      
      service nginx start
      service nginx reload
      
    • 设置开机自启:

      1
      
      chkconfig nginx on
      

      或者

      1
      
      systemctl enable nginx.servcice
      
  3. 开放防火墙放行80端口

    • 运行

      1
      
      iptables -A INPUT -p tcp --dport 80 -j ACCEPT
      
    • 保存防火墙设置

      1
      
      service iptables save
      

      坑:本人这条命令并没有执行成功,这个版本的linux似乎不支持这条命令,最后还是执行的service iptables reload

    • 查看防火墙规则: 出现这条内容意味着防火墙设置完成:

      1
      2
      3
      4
      
      [root@host ~]# iptables --list -n
      Chain INPUT (policy ACCEPT)
      target     prot opt source               destination
      ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
      

    坑:云服务器供应商还会提供安全组一类的东西,请在那里面也放行对应端口

  4. 测试nginx是否配置成功

    • 服务器本地访问又返回结果:
      1
      
      curl 127.0.0.1
      
    • 远程访问服务器网页端口,即在你的浏览器里输入服务器ip或者域名出现nginx默认页面即表示配置完成。
  5. 配置git

    • 如果服务器没有git请参照上面安装git

    • 新建git用户,并设置用户密码

      1
      2
      
      useradd git
      passwd git
      
    • 新建网站目录,并修改网站根目录的用户拥有者为git用户

      1
      2
      3
      4
      5
      
      cd /home
      mkdir www
      cd www
      mkdir blog
      chown git:git blog
      
    • 切换为git用户,进入其家目录创建.ssh文件夹,并进入

      1
      2
      3
      4
      
      su git
      cd ~
      mkdir .ssh
      cd .ssh
      
    • 创建authorized_keys文件,讲你本地电脑上的公钥内的文件内容复制到该文件内。

      这里怎么操作自我发挥吧,把公钥文件传上来该跟名字,或者你开心就好

      设置密钥文件只读,文件夹权限:

      1
      2
      
      chmod 600 authorized_keys
      chmod 700 /home/git/.ssh
      

    • 配置ssh的配置文件/etc/ssh/sshd_config,修改如下词条
    1
    2
    3
    
    RSAAuthentication yes       # 开启rsa密钥认证
    PubkeyAuthentication yes    # 开启公钥认证
    AuthorizedKeysFile  .ssh/authorized_keys    # 设置存贮文件
    

    • 在你的git用户家目录下新建你的博客仓库,并初始化为git裸仓库

      1
      2
      
      mkdir blog.git
      git init --bare blog.git
      
    • 配置裸仓库:进入仓库文件夹,在hooks文件夹内新建post_receive。文件写下一下内容

      1
      2
      
      #!/bin/bash
      git --work-tree=/home/www/blog --git-dir=/home/git/blog.git checkout -f
      

      这是一个linux shell规定了当接受到post请求之后的动作,把文件内容放到网站根目录里

    在你的本地!!! 测试ssh 免密码连接 ssh -T git@your_host 如果没有提示输入密码证明配置成功


回到本地电脑

  1. 编辑blog下的配置文件_config.yml

    1
    2
    3
    4
    5
    6
    
    # Deployment
    ## Docs: https://hexo.io/docs/deployment.html
    deploy: 
     type: git
     repo: git@your_host:blog.git
     branch: master
    
  2. 愉快的测试推送把!~ 或者死于bug error hhh

    1
    
    hexo deploy
    

    或者

    1
    
    hexo d
    

坑:不安装hexo-deployer-git是不可能推送的

坑:如果访问页面出现cantnot GET/ 请检查主题设置,网上很多教程的设置基于hexo next主题,涉及到主题文件的请看你的主题的作者自己的文档,而不是看某dn

updatedupdated2025-04-162025-04-16