搭建博客(Hexo)到云服务器

本文最后更新于:2023年7月31日 中午

搭建Hexo博客

debug……

部署博客到云服务器

部署环境

本地环境:Windows 10 LTSC 1809

服务器环境:CentOS Linux release 7.9.2009 (Core)


Git环境安装

本地生成 Git 密钥

Git使用Https协议,每次pull,push都要输入密码,使用相当不便利,使用git协议,然后使用ssh密钥,就可以省去每次都输入密码

ssh-keygen -C "your@mail.com"

一路回车之后,在本地的 C:\Users\hhu\.ssh下会有 两个文件 公钥:id_rsa.pub私钥:id_rsa,一会要把公钥里的内容复制到服务器上配置

服务器上的的配置git环境

1、安装Git

  1. 切换到 root 用户

  2. 安装包的依赖

    yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
    yum install  gcc perl-ExtUtils-MakeMaker
  3. 进入/usr/local/src 目录,下载Git(这里用2.34.1),并解压

    cd /usr/local/src
    wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.34.1.tar.gz
    tar -zxvf git-2.34.1.tar.gz
  4. 进入解压目录,编译,安装(prefix是前缀,安装在指定目录)

    cd git-2.34.1
    make prefix=/usr/local/git all
    make prefix=/usr/local/git install
  5. 配置环境变量

    vim /etc/profile	# 编辑环境配置文件
    # 配置GIT
    export GIT_HOME=/usr/local/git/bin
    export PATH=$GIT_HOME/bin:$PATH
    source /etc/profile		# 双薪环境配置文件,使配置的信息生效
  6. git –version 测试

    git --version

    显示下列信息就标识成功了:

    git version 2.34.1

2、配置git用户

  1. 创建git用户并设置密码

    useradd git		# 添加git用户
    passwd git		# 给git用户设置密码
  2. 将 git 用户添加到 sudoers 文件中

    centos系统中的用户可以分为两类:

    • 超级用户– root
    • 普通用户–其他

    su和sudo的区别如下:

    • su命令主要作用:让你可以切换用户身份,来执行某种操作的命令,在已经登录的会话中(不登出当前用户的情况下)切换到另外一个用户
    • sudo命令作用:容许当前用户特定用户去执行特定命令
    chmod 740 /etc/sudoers  # 临时更改文件的权限,进行编辑
    vim /etc/sudoers		# 编辑sudoers
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    
    # 添加下面这行
    git      ALL=(ALL)       ALL
    chmod 400 /etc/sudoers	# 把权限改回去
  3. 配置公钥

    vim /home/git/.ssh/authorrized_keys		# 在git用户下的.ssh目录下创建 authorrized_keys 文件
    # 复制本机环境(C:\Users\hhu\.ssh) 的 id_rsa.pub 中的内容到 authorrized_keys 中
  4. 测试

    在本机环境下的git_bash中(不要用CMD),输入下列命令进行验证:

    ssh -v git@服务器ip

    如果最后一行显示的是:Host key verification faild,把Windows中.ssh/known_hosts这个文件的第二行删掉即可。

    注意:如果服务器ssh端口不是默认的 22 的,需要在本机环境下,用 git_bashC:\Users\hhu.ssh 下创建 config 文件(没有后缀),内容如下:

    # 如果是域名 访问
    Host xxx
    HostName xxx.com
    Port 3333
    
    # 如果是 IP 访问
    Host "211.111.xx.xxx"
    Port 3333

3、创建博客网站的目录

  1. 使用root用户在 /home/www/ 目录下创建 TheBlogOfHH(名称随意)

  2. 权限给 git 用户,不然后续自动推送可能会出现权限问题

    chown -R git:git /home/www/TheBlogOfHH

4、自动推送

  1. 在git用户家目录创建一个git仓库,把前面本地搭建好的博客文件传到这儿来进行管理

    cd /home/git						# 进入家目录
    git init --bare TheBlogOfHH.git		# 初始化仓库
  2. 创建钩子文件,用以自动推送

    vim TheBlogOfHH.git/hooks/post-receive	# 创建钩子文件

    添加以下内容:

    #!/bin/sh
    git --work-tree=/home/www/TheBlogOfHH --git-dir=/home/git/TheBlofOfHH.git checkout -f

    注意:上述第一个 work-tree是存放博客文件的目录,后面 git-dir 是 刚刚初始化好的仓库的目录

  3. 最后,赋予这个文件可执行权限

    chmod +x /home/git/TheBlofOfHH.git/hooks/post-receive

本地博客 _config.yml 配置

**编辑本地博客的 _config.yml **文件,最后的位置更改如下:

# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
  type: git
  repo: git@IP地址:/home/git/TheBlogOfHH.git
  branch: master 

Nginx环境安装

接下来的操作都是在服务器端

1、安装组件

  1. 安装gcc

    gcc是linux下的编译器在此不多做解释,感兴趣的小伙伴可以去查一下相关资料,它可以编译 C,C++,Ada,Object C和Java等语言

    yum -y install gcc		# 安装gcc
    
    gcc -v					# 查看版本
  2. pcre、pcre-devel安装

    pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。

    yum install -y pcre pcre-devel
  3. zlib安装

    zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装

    yum install -y zlib zlib-devel
  4. 安装openssl

    openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。

    yum install -y openssl openssl-devel

2、安装Nginx

  1. 切换 root 用户,进入 /usr/local/src 目录

  2. 下载nginx安装包,解压

    wget http://nginx.org/download/nginx-1.9.9.tar.gz

    tar -xvf nginx-1.9.9.tar.gz
  3. 编译、安装

    cd nginx-1.9.9
    
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module		# 设置安装目录为 /usr/local/nginx
    
    make && make install		# 编译并且安装
  4. 启动

    cd /usr/local/nginx/sbin		# 进入安装目录的 sbin 目录
    
    ./nginx							# 启动Nginx
  5. 验证

    浏览器输入服务器IP进行访问

  6. 设置Nginx开机自启动

    vim /lib/systemd/system/nginx.service		# 创建 nginx.service 文件

    nginx.service文件内容如下:

    [Unit]
    #描述服务
    Description=nginx
    #描述服务类别
    After=network.target
     
    #服务运行参数的设置,注意【Service】的启动、重启、停止命令都要用绝对路径
    [Service]
    #后台运行的形式
    Type=forking
    #服务具体运行的命令
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    #重启命令
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    #停止命令
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    #表示给服务分配独立的临时空间
    PrivateTmp=true
     
    #运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
    [Install]
    WantedBy=multi-user.target

    加入开机启动:systemctl enable nginx.service

    取消加入开机启动:systemctl disable nginx.service

配置nginx

  1. 进入 /usr/local/nginx/conf
  2. 编辑 nginx.conf
# 注意配置这个 user,默认的是 nobody,可能会造成权限问题
user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  codeofhh.cn;	
        # 重定向到 https链接
	rewrite ^(.*)$ https://$server_name$1 permanent;
    }

    server {
        listen       443 ssl;
        server_name  codeofhh.cn;

        # 安全证书位置,没有的需要取下载nginx配置的证书
        ssl_certificate      /usr/local/nginx/cert/server.crt;
        ssl_certificate_key  /usr/local/nginx/cert/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers  on;

        location / {
            # 博客网站目录
            root   /home/www/TheBlogOfHH;
            index  index.html index.htm;
        }

	error_page 404 /404.html;
	location /404.html {
		root /home/www/TheBlogOfHH/404.html;
	}
	
	error_page 500 502 503 504 /50x.html;
	location /50x.html {
		root /usr/local/nginx/html;
	}
  }
}
  1. 重启nginx

    systemctl restart nginx.service

注意:上述文件中配置了ssl证书,如果没有证书记得删除那段配置,如果有,需要下载下来放到/usr/local/nginx/cert目录,并改名字

Nginx常见报错:

  1. INFO Validating config ERROR Deployer not found: git

    解决方法:

    原因:少了hexo针对git的deploy组件

    解决方法:npm install –save hexo-deployer-git

  2. 上传证书没权限

    使用root权限将上传文件夹权限修改为可读可写

    chmod -R 777 xxx
  3. nginx: [emerg] unknown directive "ssl_certificate1" in /usr/local/nginx/conf/nginx.conf:107

    原因:这是因为没有安装SSL模块

    方法:

    在Nginx安装文件解压目录执行

    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
    
    make    # 注意,不是 make install,否则会覆盖安装的Nginx
  4. 网页报错:NGINX - ERR_SSL_PROTOCOL_ERROR

    在Nginx配置中设置 https server中 的监听,除了有 443之外,还要加一个 ssl

在本机推送博客文件到服务器

  1. hexo g 生成静态html文件
  2. 执行hexo d推送到服务器

搭建博客(Hexo)到云服务器
https://codeofhh.cn/2023/06/30/部署Hexo到云服务器/
作者
hhu
发布于
2023年6月30日
许可协议