使用hexo搭建个人博客遇到的问题

一、如何在linux上部署hexo

准备环境

  1. 服务器安装NodeJS作为hexo运行环境,命令:yum install nodejs
  2. 国内直接使用npm可能会慢,使用淘宝npm镜像替代。使用方式是安装cnpm,以后用cnpm代替npm命令,安装命令:npm install -g cnpm --registry=https://registry.npmmirror.com
  3. hexo需要NodeJs是12以上,需要手动升级一下,命令:
    1. cnpm install -g n
    2. n stable

部署hexo

  1. 安装hexo,命令:cnpm install -g hexo-cli
  2. 新建文件夹例如blog,进入blog目录,初始化hexo,命令:hexo init
  3. 安装hexo-server,命令:cnpm install hexo-server --save

运行

  1. 启动项目
    1. 前台启动:hexo server
    2. 后台启动:nohup hexo server &
  2. 这样使用服务器地址加4000端口就可以访问个人博客了

二、网站备案

想要通过域名访问服务器需要进行备案,下面是我备案过程中遇到的问题。

  1. 一定要备案么?

    答:是的,不进行网站备案,按照法律规定网站无法通过域名对外提供访问。

  2. 在阿里云网站备案,是不是一定要使用阿里云的服务器?

    答:如果备案的服务器是阿里云服务器,需要登录拥有该服务器的账号进行备案,因为备案的时候是会选择账号下的服务器。

  3. 如果阿里云账号主体和网站主体不是一个人可以备案成功么?

    答:应该可以的,阿里云初审通过了。

  4. 网站备案解析的服务器,可以更换么?

    答:这个应该可以的,备案通过后看看。

三、部署nginx(docker)

想要通过免费方式http升级为https的话,先不要采用这种方式部署nginx,请越过这一小节

我现在已经将域名解析到我服务器的IP了,但是通过域名访问的话,默认访问的是80端口,为了自由一点,我决定先部署一个nginx,nginx将80端口流量转发到hexo。

使用docker部署服务有一个非常棒的地方,不用担心该服务依赖的环境,这个环境docker容器已经提供。

有一次我需要去客户现场内网部署nginx,最开始的时候我尝试看怎么直接部署nginx。但是我发现想要部署nginx,就要先在服务器上安装好nginx需要的包,这些包层层依赖,而且多,很绝望。如果是在外网的话,使用yum install也很方便,但是内网,就非常非常艰难了。后来我同事给我说为什么不用docker,我发现,docker真香!

实现步骤如下:

  1. 在服务器上安装docker,命令:yum install docker -y

  2. 下载一个最新的nginx镜像,命令:docker pull nginx,随便选一个就行

  3. 启动nginx容器,命令:docker run -p 80:80 -d nginx,映射容器内80端口到服务器80端口

  4. 修改配置文件nginx.conf

    1. 查看nginx容器id,命令:docker ps | grep nginx,第一列,形如cc3f504ae31f

    2. 进入容器,命令:docker exec -it cc3f504ae31f bash

    3. 进入nginx.conf所在目录,命令:cd /etc/nginx

    4. 备份nginx.conf,命令: cp nginx.conf nginx.conf.bak

    5. nginx.conf配置参考如下:

      user  nginx;
      worker_processes  auto;
      
      error_log  /var/log/nginx/error.log notice;
      pid        /var/run/nginx.pid;
      
      
      events {
          worker_connections  1024;
      }
      
      
      http {
          include       /etc/nginx/mime.types;
          default_type  application/octet-stream;
      
          log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" "$http_x_forwarded_for"';
      
          access_log  /var/log/nginx/access.log  main;
      
          sendfile        on;
          #tcp_nopush     on;
      
          keepalive_timeout  65;
      
          #gzip  on;
      
          include /etc/nginx/conf.d/*.conf;
      
          server {
      	listen 80;
              server_name 你的IP地址;
              location / {
      		proxy_pass http://你的IP地址:4000;
                      proxy_set_header Host $proxy_host;
                      proxy_set_header X-Real-IP $remote_addr;
                      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                      add_header Access-Control-Allow-Origin *;
              }
          }
      }
      

四、部署nginx(直接部署)

        因为我想要免费将http升级到https访问,所以改换成直接部署nginx,这样在使用certbot工具获取并自动更新证书的时候简单一点,关于nginx的部署和证书升级我这里不再写一遍了,请参考以下两个链接:

  1. Centos 8 nginx安装步骤
  2. HTTPS 升级指南

五、github

        我这里没有选择用官方提供的方式,将新文件推到github。而是自己在github上建一个仓库,然后全部文件push到这个仓库,以后提交新文件之后,再手动push。这样倒是还有个好处,我可以在windows上编辑文件,push到github,再从服务器上pull下来,windows编辑markdown还是更方便的。

        这里我遇到一个问题,一开始我是用https方式clone下来的仓库,再提交时遇到了问题提交补上。然后我就改用ssh了。但是使用ssh的话,需要先在服务器上生成公钥,再通过github的Settings中SSH and GPG keys添加上,才能正常clone、pull和push。

        服务器上生成公钥命令:ssh-keygen -t ed25519 -C “[email protected]

你可能感兴趣的:(编码人生,hexo,个人博客,问题)