Centos7.9宝塔搭建Hexo博客,实现本地一键自动化部署到服务器

我的Hexo博客地址

有问题可以留言相互讨论我的hexo博客地址,请勿频繁访问或者攻击,仅供学习和参考。

主要在腾讯云服务器Centos7.9版本,利用宝塔搭建Hexo博客站点,Windows本地上搭建Hexo博客项目,实现本地一键自动化部署到服务器上,拥有属于自己的博客网站

Centos 安装git并进行配置,利用宝塔配置站点

查看git 版本

git --version

安装依赖

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
yum install gcc perl-ExtUtils-MakeMaker

卸载旧版本git

yum remove git

打开文件夹

用于存放下载的git包

cd /usr/local/src/

下载最新版git压缩包

wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.32.0.tar.xz

解压

tar -xvf git-2.32.0.tar.xz

切换到解压后的文件目录

cd git-2.32.0

编译

make prefix=/usr/local/git all

会显示一堆.o类型的文件,表示正在从源码编译。
未显示错误直接跳到“安装”步骤

如果出现错误collect2: error: ld returned 1 exit status.
请添加图片描述

原因是gcc版本较低所致,与所需编译条件不匹配。

升级gcc版本(可选)

  • 安装scl源
yum install centos-release-scl scl-utils-build -y
  • 列出scl可用的列表
yum list all --enablerepo='centos-sclo-rh' | grep "devtoolset-"
  • 安装8版本的gcc、gcc-c++、gdb工具链(toolchian)
yum install devtoolset-8-toolchain -y

  • 启动gcc8
scl enable devtoolset-8 bash    

报错:bash: __vsc_prompt_cmd_original: command not found

bash: __vsc_prompt_cmd_original: command not found

借用stackoverflow上的Solution

You can test the following method.

Using an editor such as nano or vim, Add the line unset PROMPT_COMMAND to your .bashrc file, and it will take effect on the next session.
To apply the change immediately for the life of the current shell session, type unset PROMPT_COMMAND in your terminal window.

vi ~/.bashrc  

用于在行尾添加unset PROMPT_COMMAND

source ~/.bashrc  

表示重新加载文件.bashrc

执行完毕后再次启动gcc8

scl enable devtoolset-8 bash    

通过scl命令启动gcc,这个只是暂时的,当你的shell关闭后或者重启就会恢复原来的版本,要想一直使用升级后的版本可以使用如下命令:

echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile

再次执行编译命令发现又报错:

reftable/libreftable.a(block.o): In function `block_reader_init':
/usr/local/src/git-2.37.3/reftable/block.c:218: undefined reference to `uncompress2'
collect2: error: ld returned 1 exit status
make: *** [Makefile:3077: t/helper/test-tool] Error 1

暂时解决不了这个问题先搁置。
可能是由于git版本比较新,用到了一些新的函数。建议安装旧版本git

安装

make prefix=/usr/local/git install

配置环境变量

echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile && source /etc/profile

也可以将该语句直接写入相应的文件中,再执行source命令使生效。

vim /etc/profile

将下面两行命令添加到profile文件末尾

PATH=$PATH:/usr/local/git/bin   # git 的目录
export PATH

按i进入编辑模式,按esc退出,再按:wq保存编辑。
使写入语句生效:

 source /etc/profile

查看安装的git版本

git --version

成功出现git version 2.32.0即表示安装成功。

配置Git

创建git用户

adduser git

设置用户密码(可选)

passwd git

分配权限

chmod 740 /etc/sudoers
vim /etc/sudoers

按 i 键进入文件的编辑模式,找到如下字段
root ALL=(ALL) ALL
在其后面增加一句:

git     ALL=(ALL)       ALL

按 Esc 键退出编辑模式,输入:wq 保存退出。
退回权限:

chmod 400 /etc/sudoers

生成Windows本地密钥

这部分很简单,百度搜索git的ssh配置即可。

配置密钥

  • 打开本地端,也就是自己Windows主机C盘目录下的用户文件夹下的用户名文件夹下的.ssh文件文件夹,打开id_isa.pub请添加图片描述

复制里面的内容。

  • 返回Linux服务器端,创建.ssh文件夹
    su git
    mkdir ~/.ssh
    
  • 创建.ssh/authorized_keys文件,打开authorized_keys文件并将刚才在本地机器复制的内容拷贝其中并保存
    vim ~/.ssh/authorized_keys
    

按i进入编辑模式粘贴完按 Esc 键退出编辑模式,输入:wq 保存退出。

  • 修改权限
    chmod 755 ~
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    

测试连接

yourIp为远程服务器的ip地址,腾讯云轻量云服务器一般是公网IP:12X.XXX.XXX.XX

ssh -v git@yourIp     //yourIp为你的服务器ip

如果设置有密码,输入密码即可连接到远程终端。

创建远程博客目录

  • 切换到远程Linux服务器端
  • 切换到root用户,创建一个目录用于存储网站的根目录/home/hexo并赋给相应权限
    su root
    mkdir /home/hexo
    chown git:git -R /home/hexo
    

Linux自动化部署设置

Linux服务器配置

所要达到的实际效果是本地创建博客后能一键部署到服务器上,后续再修改博客的时候可以一键同步到服务器上,这就是自动化部署。
首先要在远程服务器上配置相应文件。

  • 获取root权限
    su root
    
  • 建立git仓库并初始化
    cd /home/git
    git init --bare blog.git
    
  • 修改blog.git的权限(-R 是递归,即文件夹下的所有文件夹或文件都会递归修改权限)
    chown git:git -R blog.git
    
  • 在 /home/git/blog.git 下,有一个自动生成的 hooks 文件夹,我们创建一个新的 git 钩子 post-receive,用于自动部署。
    vim blog.git/hooks/post-receive
    
  • 按 i 键进入文件的编辑模式,在该文件中添加两行代码(将下边的代码粘贴进去),指定 Git 的工作树(源代码)和 Git 目录。
     #!/bin/bash 
     git --work-tree=/home/hexo --git-dir=/home/git/blog.git checkout -f 
    

按 Esc 键退出编辑模式,输入:wq 保存退出。

  • 修改文件的执行权限
    chmod +x /home/git/blog.git/hooks/post-receive
    

宝塔配置

这里采用宝塔的一键LAMP配置,然后就可以很方便的使用一些功能。

添加站点

请添加图片描述

  • 在域名中添加自己购买的域名,并确保已经解析IP到自己腾讯云服务器上了,这个步骤网上有很多教程,自行完成域名相关问题,证书SSL申请等,如果域名有解析可以直接勾上。
  • 证书的添加自行百度搜索,强制https开关打开,保证安全性。
  • 可以看到这时站点的目录在/www/wwwroot/所填写的域名,与我们实际的Hexo博客的根目录位置/home/hexo不符
  • 一个可行的解决办法是将/home下的hexo文件夹移到/www/wwwroot/所填写的域名文件夹下,这样就可以通过域名加上/hexo的方式来访问到我们的博客即
    www.domain.com/hexo
    这里的www.domain.com要改成自己购买的域名,下同
  • 修改方式如下:
  • 在 /home/git 下,有一个自动生成的 hooks 文件夹,进入该文件目录下,我们创建一个新的 git 钩子 post-receive,用于自动部署。
    cd /home/git
    vim blog.git/hooks/post-receive
    
  • 按 i 键进入文件的编辑模式,在该文件中重写原有的两行代码,改变工作树目录为宝塔站点目录(将下边的代码粘贴进去),指定 Git 的工作树(源代码)和 Git 目录。
     #!/bin/bash 
     git --work-tree=/www/wwwroot/www.domain.com/hexo --git-dir=/home/git/blog.git checkout -f 
    
  • 按 Esc 键退出编辑模式,输入:wq 保存退出。
  • 注意重新修改git用户对该目录的访问权限
    chown git:git -R /www/wwwroot/www.domain.com/hexo
    


Windows搭建Hexo,配置自动化部署

Windows安装Git

windows:到git官网上下载,Download git,下载后会有一个Git Bash的命令行工具,以后就用这个工具来使用git。
可以更改Git的安装目录到其他磁盘,环境变量一般安装的时候会自动配置,命令行界面如果输入git --version产生相应的git版本则表示成功安装。

Windows安装Node.js并初始化Hexo

  1. 下载node.js安装程序(windows.msi)(也可以安装在其他盘中) 同样,环境变量也会在安装程序的时候自动配置了。

  2. 命令行界面输入以下命令,安装Hexo

    $ npm install -g hexo-cli
    
  3. 一般Windows的cmd界面都是在C盘,如果想在其他盘建立博客的目录,可以先跳转的其他路径。键入下面命令可以在当前目录创建文件夹名为Blog的目录

    hexo init Blog
    
  4. 进入该文件夹并执行安装命令

    cd Blog 
    npm install
    

    新建完成后,指定文件夹目录下有:

    node_modules: 依赖包
    public:存放生成的页面
    scaffolds:生成文章的一些模板
    source:用来存放你的文章
    themes:主题
    _config.yml: 博客的配置文件

    安装部署包

    npm install hexo-deployer-git --save
    
  5. 本地启动Hexo服务

    hexo g
    hexo server
    

    在浏览器输入localhost:4000就可以看到生成的博客了。ctrl+c关掉服务

Windows本地端配置自动化部署

配置hexo

  • 配置 _config.yml 文件
    在Blog的文件夹下找到 _config.yml 文件并打开,找到文件末尾的deploy 做以下配置

    deploy:
    	type: git
    	repo: git@这里改为服务器公网IP:/home/git/blog.git
    	branch: master 
    

    保存并退出。
    到这里就要开始进行真正的部署环节了

    cd Blog
    hexo clean
    hexo generate
    hexo deploy
    
  • cmd进入命令行界面,先进入你的Blog文件夹下。

  • 执行hexo clean命令

  • hexo generate 命令可以简写成hexo g 正如前面的 hexo server可以简写成hexo s

  • hexo deploy 命令可以简写成hexo d

  • 正常情况下此时可以将本地的博客部署到远程服务器上,通过配置好的远程服务器的git用户登录来达到这一目的,但是可能会出现一些奇奇怪怪的错误,最主要的还是git用户对所要替换的远程目录权限上的问题,和一些配置文件的路径填写有问题。下面统一解决一些常见的错误。



常见问题

问题1

hexo自动化部署显示Permission denied或有权限问题

Solution 1:

通过在服务器端执行chmod命令,修改工作目录和git目录的文件权限
即类似

chown git:git -R /www/wwwroot/www.domain.com/hexo

最后一个参数为修改的文件夹目录,-R表示递归,即文件夹下所有的东西均修改权限。

Solution 2:

可以直接以root用户访问部署远程服务器,即在本地Blog文件夹下的_config.yaml中修改deploy的repo参数。

deploy:
	type: git
	repo: root@这里改为服务器公网IP:/home/git/blog.git
	branch: master 

问题2

服务器搭建好的页面没有图片,css等样式

Solution :

可以查看博客页面的源码,发现url引用的链接是什么example.com下的东西,很明显,这里需要改动一下,可以不直接改源码,改动本地博客的_config.yaml文件里的内容,再次部署上传即可。
请添加图片描述

找到配置文件下的url参数,将内容修改为http://公网ip/hexo或者https://www.domain.com即可,这其实是访问的刚才宝塔添加的站点(/www/wwwroot/域名)下的/hexo文件夹下的资源。

url: https://www.domain.com/hexo

重新执行部署的三条命令
hexo clean
hexo g
hexo d
这时格式和图片就能正常显示在服务器上了。

问题3

Apache虚拟目录配置

由于本人修改配置过于频繁,很难记清现在将Apache配置文件改动成什么样了,所以大家可能在宝塔的Apache配置上会出现一些问题。
但我记得在宝塔上安装Apache是已经写好了虚拟目录有关的配置文件

Solution :

在宝塔面板->软件商店,Apache设置里点击配置修改,Ctrl+F查找,输入follow,可以看到下图位置
请添加图片描述

将其修改成如图所示内容即可。

<Directory />
    Options FollowSymLinks
    AllowOverride none
    Require all granted
</Directory>

其中Options FollowSymLinks换成Options Indexes FollowSymLinks也能达到同样的效果,不过此时访问者同样能访问到该虚拟目录下的文件资源,相当于直接暴露了部分源码,不太推荐修改成带Indexes的配置。
之后就可以通过https://域名/hexo的方式在本机访问到服务器上搭建的博客了。

问题4

防火墙问题

Solution :

一般本机防火墙不需要任何的设置,只可能是服务器防火墙出现问题。
一般要在宝塔面板或命令行界面打开这些端口
请添加图片描述

实在解决不了端口放行的问题就先暂时关闭防火墙进行网站的访问测试。

猜你喜欢

转载自blog.csdn.net/Hudiscount/article/details/127210590