部署Hexo博客到阿里云centOS7

参考文档:

  1. https://blog.csdn.net/moyanxiaoq/article/details/85221262
  2. https://segmentfault.com/a/1190000005723321
  3. http://www.swiftyper.com/2016/04/17/deploy-hexo-with-git-hook/
  4. https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
  5. https://www.bilibili.com/video/av50025574?from=search&seid=11458733547652119175

1、博客的架构

先搞明白Hexo博客从搭建到自动发布的架构,才能更好的理解我们每一步进行的操作。
不然只跟着步骤过了一遍,却不知道为什么这么做。

首先看这张架构图:

2、整个搭建流程

第一部分: 服务器环境搭建,包括安装 Git 、Nginx配置 、创建 git 用户 。

第二部分: 本地Hexo初始化, 包括安装 NodeJS 、hexo-cli, 生成本地静态网站

第三部分: 使用Git自动化部署发布博客

3、服务器环境搭建

3-1.安装Git和NodeJS (CentOS 环境)
yum install git
#安装NodeJS
curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
3-2. 创建git普通用户
adduser git      
sudo passwd git  #设置git用户的密码

在本地电脑执行:

ssh-copy-id -i ~/.ssh/id_rsa.pub git@SERVER

如果你之前没有生成过公钥,则可能就没有 id_rsa.pub 文件,具体的生成方法,可以
参考这里

切换至git用户, 可以看到~/.ssh/authorized_keys 文件里已经有了本地电脑的公钥拷贝,这样就建立了ssh信任

su git
mkdir ~/.ssh
cat ~/.ssh/authorized_keys

然后在本地就可以执行ssh 命令测试是否可以免密登录

ssh -v git@SERVER

为了安全起见禁用git用户的 shell 登录权限,从而只能用git clone,git push等登录,执行如下命令

cat /etc/shells  #查看`git-shell`是否在登录方式里面,有则跳过
which git-shell  #查看是否安装
vi /etc/shells  #添加上显示出来的路劲,通常在/usr/bin/git-shell
vi /etc/passwd
    把 git:x:1000:1000::/home/git:/bin/bash
    修改为 git:x:1000:1000::/home/git:/usr/bin/git-shell

至此,gituser用户添加完成

3-3. nginx安装和配置

注意:新买到阿里云centOS7是没有开通80端口的,添加端口:参考这里

安装

yum install -y git nginx

配置 找到nginx的配置文件,修改配置如下:vim /etc/nginx/nginx.conf

server {

 	listen 80;
    	#listen [::]:80;
    	server_name localhost;
    	index index.html index.htm index.php default.html default.htm default.php;
    	#这里要改成网站的根目录
    	root  /home/git/projects/repos/blog/;

    	#include other.conf;
    	#error_page   404   /404.html;
    	location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf)$
    	{
        	access_log   off;
        	expires      1d;
    	}

    	location ~ .*\.(js|css|txt|xml)?$
    	{
        	access_log   off;
        	expires      12h;
    	}

    	location / {
        	try_files $uri $uri/ =404;
    	}

    }

nginx -s reload //刷新配置
如果报如下错:

nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)

执行可解决:
/usr/sbin/nginx -c /etc/nginx/nginx.conf   #使用指定nginx.conf文件的方式重启nginx

启动: 输入:nginx

如果发现如下报错:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
说明80端口被占用,杀掉这个进程:

killall -9 nginx
再次启动nginx

查看是否启动:
ps aux|grep nginx

root      2484  0.0  0.2 120832  2104 ?        Ss   18:04   0:00 nginx: master process nginx
root      2485  0.0  0.3 121228  3128 ?        S    18:04   0:00 nginx: worker process
root      2494  0.0  0.0 112676   980 pts/7    R+   18:08   0:00 grep --color=auto nginx

启动成功。


centOS7访问nginx失败解决-.0:80 failed (98: Address already in use)解决

以防万一,先安装好iptables服务(不管你装没装,先执行,免得后面添乱)
[root@localhost ~]# yum install iptables-services
[root@localhost ~]# systemctl mask firewalld.service
[root@localhost ~]# systemctl enable iptables.service
[root@localhost ~]# systemctl enable ip6tables.service
进入iptables配置80端口,因为nginx默认是由80端口访问
[root@localhost ~]# vim /etc/sysconfig/iptables
这是配置信息:
# Generated by iptables-save v1.4.21 on Fri May 12 21:28:29 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6:696]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT(我给vsftpd配置的端口)
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT(给nginx配置的端口,原样输入就行了)
-A INPUT -p tcp -m state --state NEW -m tcp --dport 30000:30999 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Fri May 12 21:28:29 2017
然后:wq,保存退出就行了
重启iptables,配置才生效
[root@localhost ~]# systemctl restart iptables.service
开启防火墙,不管你开没有,再开一遍:
[root@localhost ~]# systemctl start firewalld
开启http访问
[root@localhost ~]# firewall-cmd --permanent --add-service=http
加入80端口
[root@localhost ~]# firewall-cmd --permanent --zone=trusted --add-port=80/tcp
启动nginx!!!!(重点来了!!!)
centOS7的nginx启动与其他的有区别!!!注意:我是装的nginx1.80,在centOS6.X系列中,是通过
cd /usr/local/nginx/sbin/

4. 本地Hexo程序

4-1:初始化Hexo博客

首先要安装 hexo-cli,安装hexo-cli 需要 root 权限,使用 sudo 运行

sudo npm install -g hexo-cli

然后初始化Hexo程序

hexo init blog

等执行成功以后安装两个插件, hexo-deployer-git 和 hexo-server ,这俩插件的作用分别是使用Git自动部署,和本地简单的服务器。
hexo-deployer-git帮助文档
hexo-server帮助文档

cd blog
npm install hexo-deployer-git --save
npm install hero -server
4-2. 生成自己的第一篇文章 hello world !

使用 hexo new <文章名称> 来新建文章,该命令会成成一个 .md文件放置在 sources/_posts文件夹。

hexo new "hello Hexo"
vim sources/_posts/hello-hexo.md

编辑完毕以后, 使用hexo g将 .md文件渲染成静态文件,然后启动hexo s:

hexo g
hexo server

打开浏览器访问 http://localhost:4000 来查看我们的博客了!

5. 自动化部署

5-1:服务器上建立git裸库

创建一个裸仓库,裸仓库就是只保存git信息的Repository, 首先切换到gituser用户确保gituser用户拥有仓库所有权
一定要加 --bare,这样才是一个裸库。

su git
cd ~
mkdir -p projects/blog
mkdir repos && cd repos
git init --bare blog.git
5-2. 使用 git-hooks 同步网站根目录

在这里我们使用的是 post-receive这个钩子,当git有收发的时候就会调用这个钩子。 在 ~/blog.git 裸库的 hooks文件夹中,
新建post-receive文件。

vim ./blog.git/hooks/post-receive

#!/bin/sh
git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f

保存后,要赋予这个文件可执行权限

chmod +x ./blog.git/hooks/post-receive
cd ~
chown -R git:git /home/git/repos/blog.git/   #添加权限
5-3. 配置_config.yml,完成自动化部署

然后打开 _config.yml, 找到 deploy

deploy:
    type: git
    repo: git@SERVER:/home/git/blog.git    //<repository url>
    branch: master            //这里填写分支   [branch]
    message: 提交的信息         //自定义提交信息 (默认为 Site updated: {{ now('YYYY-MM-DD HH:mm:ss') }})

保存后,尝试将我们刚才写的"hello hexo"部署到服务器

hexo clean
hexo generate --deploy

访问服务器地址,就可以看到我们写的文章"Hello hexo",以后写文章只需要:

hexo new "Blog article name"
···写文章
hexo clean && hexo generate --deploy
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值