Hexo搭建个人博客:部署

Hexo搭建个人博客:部署


通过创建远端git仓库,将本地的hexo博客部署到远端服务器并通过Nginx服务运行

参考文章:芒果浩明

已将nginx替换为Caddy,相关文章见使用Caddy替换Nginx运行网站

操作环境及先决条件

  • 本地macOS Catalina
  • centOS 7的VPS
  • 本地需要的相关环境:git、nodejs、hexo、ssh-key,相关文章见hexo博客搭建入门

服务器配置

使用root身份登录服务器ssh root@IP

创建网站目录

1
2
# 创建网站文件夹
sudo mkdir /var/www/blog

安装配置git

  1. 安装gitsudo yum install git

  2. 创建git用户 adduser git

    假如没有提示输入密码,则passwd git 设置密码

  3. 初始化git仓库

    1
    2
    3
    4
    # 设置文件可写
    chmod 740 /etc/sudoers
    # 编辑用户配置文件
    vim /etc/sudoers

    找到root ALL=(ALL) ALL,换行添加git ALL=(ALL) ALL

    1
    2
    3
    4
    5
    6
    7
    # 修改回文件权限
    chmod 440 /etc/sudoers
    su git # 切换到git用户
    cd /home/git # 切换到git用户目录
    mkdir blog.git # 创建git仓库文件夹,以blog.git为例
    cd blog.git # 进入仓库目录
    git init --bare # 使用--bare参数初始化为裸仓库
  4. 确认文件夹权限

    1
    2
    3
    4
    5
    6
    # 确认文件夹权限
    sudo chown git:git -R /var/www/blog
    sudo chown git:git -R /home/git/blog.git
    # 查看这两个文件夹是不是都属于git:git
    ll /home/git/
    ll /var/www/
    1
    2
    3
    4
    5
    6

    6. 配置Git hooks

    ```bash
    cd /home/git/blog.git/hooks # 切换到hooks目录下
    vim post-receive # 创建文件

    复制下面的内容到post-receive中:

    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    GIT_REPO=/home/git/blog.git
    TMP_GIT_CLONE=/tmp/blog
    PUBLIC_WWW=/var/www/blog
    rm -rf ${TMP_GIT_CLONE}
    git clone $GIT_REPO $TMP_GIT_CLONE
    rm -rf ${PUBLIC_WWW}/*
    cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

    保存退出,执行chmod +x post-receive赋予可执行权限

配置ssh免密登录

这一步可以省略,如果省略之后git部署的时候输入git的用户密码即可

  1. 本地电脑创建SSH key(已有则跳过此步骤)

    ssh key是让我们每次登陆的时候无需输入密码,通过本机机器码验证的方式

    1
    2
    3
    4
    5
    6
    7
    # 查看本地的SSH key
    cd ~/.ssh
    ls *.pub
    # 创建新的SSH key
    ssh-keygen -t rsa -C "email@example.com"
    # 将key加入用户列表,否则每次都会需要验证电脑登录密码
    ssh-add -k /Users/apple/.ssh/id_rsa
  2. 复制cat ~/.ssh/id_rsa.pub的内容

  3. ssh连接到服务器,配置ssh秘钥登录

    1
    2
    3
    cd /home/git                # 切换到git用户目录
    mkdir .ssh # 创建.ssh目录
    sudo vim .ssh/authorized_keys

    将复制的本地公钥粘贴到到authorized_keys文件中,

    编辑登录配置sudo vim /etc/ssh/sshd_config

    1
    2
    3
    4
    5
    #禁用密码验证
    PasswordAuthentication no
    #启用密钥验证
    RSAAuthentication yes
    PubkeyAuthentication yes

    重启ssh服务

    1
    2
    su root        # 或者exit也可以退出到root用户
    service sshd restart

    验证git用户能否使用ssh免密登录服务器:在本地终端,输入ssh git@IP

    如果出现permission denied的的话,可能是权限问题

    1
    2
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    注意 .ssh 目录与 authorized_keys 的拥有者都必须是你创建的那个用户。比如我创建了一个叫 wanghao 的用户,寻它应该是 .ssh 与 authorized_keys 的拥有者,并且必须要设置合适的权限:

安装和配置nginx

nginx是比较主流的网页服务器,大部分的文章都会建议使用。但是nginx的https连接配置较为复杂,如果没有特别的学习需求可以换用更为简单的Caddy。相关文章见Caddy官方文档

  1. root用户身份登录到服务器

    1
    2
    3
    4
    5
    6
    7
    8
    # 添加nginx到yum源
    sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    # 安装nginx
    sudo yum install -y nginx
    # 启动nginx
    sudo systemctl start nginx.service
    # 设置开机启动
    sudo systemctl enable -n nginx.service

    在浏览器输入服务器IP地址,如果出现403 FORBIDDEN页面则说明nginx启动成功;

    如果浏览器提示无法链接,请检查防火墙是否开启,如果开启

    • 使用systemctl stop firewalld暂时关闭防火墙;
    • 或者使用firewall-cmd --add-port=80/tcp --permanent开启防火墙的80端口,再使用systemctl restart firewalld.service重启防火墙。
    • 关于防火墙的详细配置,可见本博客文章VPS和Shadowsocks配置最后一部分

    nginx常用命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #启动
    service nginx start
    #停止
    nginx -s stop
    #查看nginx进程
    ps -ef | grep nginx
    #平滑启动nginx
    nginx -s reload
    #强制停止nginx
    pkill -9 nginx
    #检查对nginx.conf文件的修改是否正确
    nginx -t -c /etc/nginx/nginx.conf
    nginx -t
    #查看版本
    nginx -v
    # 关闭开机启动
    sudo systemctl disable -n nginx.service
  2. 配置nginx

    1
    2
    3
    cd /etc/nginx/conf.d
    sudo cp default.conf default.bak#备份
    sudo vim default.conf

    配置文件参考

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    server {
    listen 80;
    server_name localhost;
    root /var/www/blog; // 网站根目录
    server_name annewqx.top www.annewqx.top; // 域名,没有可跳过
    access_log /var/log/nginx/blog_access.log;
    error_log /var/log/nginx/blog_error.log;
    error_page 404 = /404.html;

    location / {
    root /var/www/blog;
    index index.html index.htm;
    }
    location / {
    root /var/www/blog;
    if (-f $request_filename) {
    rewrite ^/(.*)$ /$1 break;
    }
    }
    location /nginx_status {
    stub_status on;
    access_log off;
    }
    }
  3. nginx -s reload 重启nginx

本地操作

  • 打开本地博客根目录下的_config.yml文件,找到最后的deploy配置,添加:
1
2
3
4
5
6
7
8
9
# Deployment
deploy:
# github.io
- type: 'git'
repo: https://github.com/anne416wu/anne416wu.github.io.git
# VPS
- type: git
repo: git@VPS的IP:blog.git
branch: master

至此,hexo三联就可以把博客部署到vps了。可以在浏览器输入服务器的IP地址查看。

如果想要通过域名访问,则需要自己在域名管理那里修改解析的线路使得域名解析指向vps服务器的ip

git 配置完SSH 以后,push 或者pull 的时候每次都提示Enter passphrase for key ‘/Users/Username/.ssh/id_rsa’可以这样解决

  • 一次性:终端输入eval ssh-agentssh-add

  • 本次开机内永久生效:终端输入ssh-add -k /Users/Username/.ssh/id_rsa

域名配置(非必须)

参考文章:

博客已经搭好了,但是叫朋友看

购买域名

  1. 注册并激活NameSilo账号

  2. 搜索并购买想要注册的域名,使用优惠码go2thinkokoff可减$1

  3. 付款,如果使用支付宝,则支付宝需要是绑定了邮箱的账号。我购买的时候支付宝扣了钱后半分钟又退回了,返回了失败,最后还是用的PayPal。

    这里说一下题外话,最便宜的一般是.xyz域名,不到1刀,但是如果订单不满1刀的话是无法使用优惠券的。.top的域名原价$1.49/year,优惠后约等于不要钱啊。

    另外长远考虑,不建议购买.me等国内无法备案的域名。

域名解析

  1. 打开域名管理页面,选择option栏下的蓝地球(DNS管理)按钮

  2. 删除原本的四个park解析记录

  3. 添加A记录,一条为example.com,一条为www.example.com

    img

  4. DNS解析完成后生效大改需要十五分钟

  5. 可以使用域名连接你的博客了,在浏览器输入域名查看结果

title:Hexo搭建个人博客:部署

author:Anne416wu

link:https://www.annewqx.top/posts/65182/

publish time:2020-02-24

update time:2022-07-25


 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×