在aws服务器上部署hexo

这是第一篇,加油~~~

网上有很多用hexo搭博客的文章都只讲过程,有时照着执行一遍完全不知道自己在干什么,而且报错了根本不知道是什么问题。前几天用hexo搭了一个博客主页,反反复复遇到很多问题,所以打算把整个流程和踩过的坑记录下来。
其实参考博客已经写得很好了,本文具体写一下实践中我的操作,还是有些改动的。
服务器:ubuntu
本地:mac os

1.整个搭建流程:

image.png

2.服务器环境搭建:

2-1.安装git 和 NodeJS(ubuntu环境)

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs​ 

参考NODEJS官方文档:https://nodejs.org/en/download/package-manager/

2-2 创建git用户

adduser git
chmod 740 /etc/sudoers
vim /etc/sudoers 

找到以下内容

## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL 

在下面添加一行(可以复制过来直接改,小心打错,打错就坑了)

git ALL=(ALL) ALL

保存退出后改回权限

chmod 400 /etc/sudoers

随后设置Git用户的密码,

#需要root权限
sudo passwd git​ 

切换至git用户,创建 ~/.ssh 文件夹和 ~/.ssh/authorized_keys 文件,并赋予相应的权限

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

#然后将电脑中执行 cat ~/.ssh/id_rsa.pub | pbcopy ,将公钥复制粘贴到authorized_keys
chmod 600 ~/.ssh/authorzied_keys
chmod 700 ~/.ssh 

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

ssh -v git@SERVER​ 

3 nginx的安装与配置

3-1安装nginx

参考官方文档(http://nginx.org/en/linux_packages.html

apt-get update
apt-get install nginx 

3-2 启动nginx

$sudo nginx​ 

如果开了防火墙,记得把HTTP 和 HTTPS 端口添加到防火墙允许列表

配置完成后,访问使用浏览器服务器 ip ,如果能看到nginx界面,表示运行成功。

配置虚拟主机

虚拟主机(Virtual Host)可以在一台服务器上绑定多个域名,架设多个不同的网站,一般在开发机或者要部署多个小网站的服务器上需要配置虚拟主机。

创建新的网站目录

Nginx 默认把网页文件存在 /var/www/html 目录。为了方便期间,我们在 /var/www/ 目录下为每个站点创建一个文件夹。

$ sudo mkdir -p /var/www/blog/html
$ sudo chown -R $USER:$USER /var/www/blog/html
$ sudo chmod -R 755 /var/www

在 /var/www/blog/html/ 目录下创建 index.html 文件。写上以下内容,用于测试虚拟主机运行情况。

<html>
    <head>
        <title>Welcome to Blog!</title>
    </head>
    <body>
        <h1>Success! The Blog server block is working!</h1>
    </body>
</html> 

3-3创建虚拟主机配置文件

在 /etc/nginx/conf.d/ 创建虚拟主机配置文件 blog.conf

server {
        listen 80;
        listen [::]:80;
        root /var/www/blog/html;
        index index.html index.htm index.nginx-debian.html;
        server_name eliyar.biz www.eliyar.biz;
        location / {
                try_files $uri $uri/ =404;
        }
}  

重启 Nginx 服务器,使服务器设定生效

sudo nginx -s reload 

3-4修改本地host,验证结果

在绑定域名到服务器之前,需要修改本地 host 文件来测试。本地电脑上修改 /etc/hosts 文件。

45.xx.xxx.150 exxxx.xxxz 

能看到以下结果就表示虚拟主机配置成功。

image.png

4 本地Hexo程序

4-1 初始化hexo博客

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

sudo npm install -g hexo-cli 

然后初始化Hexo程序

cd ~/Documents/code
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-server:

hexo g
hexo server 

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

5. 自动化部署

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

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

su git
cd ~ 
mkdir blog.git && cd blog.git​
git init --bare 

5-2. 使用 git-hooks 同步网站根目录

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

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

#!/bin/sh
git --work-tree=/var/www/blog/html checkout -f​ 

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

chmod +x post-receive​ 

5-3. 配置本地_config.yml,完成自动化部署

在本地~/Documents/code​/blog中打开 _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​ 

参考:
https://segmentfault.com/a/1190000005723321
https://eliyar.biz/how_to_build_hexo_blog/

问题1

vim ~/.ssh/authorized_keys文件手抖写错了导致sudo不能用了,也没法改该文件,因为必须sudo了才能改

报错信息:

sudo: parse error in /etc/sudoers near line 23
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin​ 

解决方式:

https://stackoverflow.com/questions/11931840/getting-fatal-this-operation-must-be-run-in-a-work-tree-on-bare-repository
https://stackoverflow.com/questions/4043609/getting-fatal-not-a-git-repository-when-using-post-update-hook-to-execut

问题2

nginx各种配置文件冲突一直调不好而且配置文件缺少很多内容,这里完全卸载然后重装了(注意:卸载三思而后行)
比较靠谱的卸载解决办法是:root权限下载命令行敲入如下命令:

   rm -rf /etc/nginx/
   rm -rf /usr/sbin/nginx
   rm /usr/share/man/man1/nginx.1.gz
   apt-get remove nginx*

问题3

执行hexo generate --deploy 报错如下图:

image.png

原因在于
https://stackoverflow.com/questions/4043609/getting-fatal-not-a-git-repository-when-using-post-update-hook-to-execut
https://stackoverflow.com/questions/10507942/git-checkout-in-post-receive-hook-not-a-git-repository
(没看懂一知半解的)
反正我就是把服务器上的/home/git/hexo.git/hooks/post-receive文件改为:(这里去掉了--git-dir参数配置就好了)

image.png

问题4.

mac osx 下 hexo DTraceProviderBindings 错误
错误提示:

Error: Cannot find module './build/Release/DTraceProviderBindings'​​

尝试了Stack Overflow的很多答案都没有效果
最终找到链接解决了该问题
https://kikoroc.com/2016/05/04/resolve-hexo-DTraceProviderBindings-MODULE-NOT-FOUND.html

npm uninstall hexo-cli -gnpm install hexo-cli -g​
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容