基于阿里云服务器-搭建hexo-博客2020-12-02

在阿里云Ubuntu上搭建Hexo博客

采坑总结

1.阿里云端口开放

Ubuntu默认端口都开着,阿里云安全组会做个限制,因此,这里要先在安全组打开80端口(或者你要开放的其他接口)

image-20201128145750657.png

2.在Docker下的NGINX我变更了一个默认目录

docker run --name my-nginx -p80:80 -v /root/server/tools/nginx/conf.d:/etc/nginx/conf.d -v /root/server/tools/nginx/data:/root/data -d nginx:1.18.0

这里docker容器下的/root/data下 nginx访问这个目录没有权限,因此nginx会返回403

我的处理方式是,直接给nginx这个目录的权限。(不过不建议在root下,可以给nginx单独建一个文件夹)

chmod -R 777 /root/data/hexo

还有一些其他的处理方式,参考下方链接

(64条消息) Nginx出现403 forbidden_枫小秋 的博客-CSDN博客

主要搭建流程

  • (客户端)将markdown文件渲染为HTML的静态文件

  • (客户端)通过hexo发布到public文件夹

  • (客户端)通过hexo deploy将生成的文件push到git仓库

  • (服务端)通过git-hooks自动将仓库checkout到nginx配置的网站根目录下

步骤分解

1.本地安装

  • 安装nodejs && git
  • 安装hexo-cli
  • 配置发布到服务器的脚本

2.服务端配置

  • 服务端安装 git && docker && nginx-for-docker
  • 配置服务端仓库,git账号,目录
  • 配置git hooks
  • 配置nginx反向代理

本地安装

git安装
$ sudo apt-get install git

配置

$ git config --global user.name "frend"
$ git config --global user.email "1020952183@qq.com"

配置完成后,需要创建验证用的公钥,因为git是通过ssh的方式访问资源库的,所以需要在本地创建验证用的文件。使用命令

生成sshkey

$ ssh-keygen -C "1020952183@qq.com" -t rsa

参考链接

Ubuntu下git的安装与使用 - L.X.M - 博客园 (cnblogs.com)

nodejs的安装
$ sudo wget https://nodejs.org/dist/v14.15.1/node-v14.15.1.tar.gz
#解压缩
$ sudo tar -xvf node-v14.15.1.tar.gz
$ cd node-v14.15.1/
$ sudo ./configure

执行./configure时出现一个异常

Traceback (most recent call last):
  File "./configure", line 20, in <module>
    from distutils.spawn import find_executable
ModuleNotFoundError: No module named 'distutils.spawn'

据查证,少了python3-distutils(python啥地方都有啊~~~)

$ sudo apt-get install python3-distutils
$ sudo ./configure
Node.js configure: Found Python 3.8.2...
WARNING: failed to autodetect C++ compiler version (CXX=g++)
WARNING: warnings were emitted in the configure phase
INFO: configure completed successfully

执行编译和安装

make[1]: g++: Command not found
make[1]: *** [tools/icu/icuucx.target.mk:301: /home/frend/dev/tools/nodejs/node-v14.15.1/out/Release/obj.target/icuucx/deps/icu-small/source/common/uvectr64.o] Error 127
make: *** [Makefile:104: node] Error 2

少了g++,安装它

$ sudo apt-get install g++

因为我这里用的是mintlinux(基于ubuntu20,版本太高了),提示版本冲突之类的,(这里是采坑过程,最后确定是ubuntu源的问题,如果没兴趣直接跳过这段)

下列软件包有未满足的依赖关系:
 g++ : 依赖: g++-7 (>= 7.4.0-1~) 但是它将不会被安装
N: 忽略‘official-package-repositories.list_bak’(于目录‘/etc/apt/sources.list.d/’),鉴于它的文件扩展名无效
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

这里有个依赖包的解决方案,需要安装aptitude

$ sudo apt-get install aptitude
#在用这种方式安装
$ sudo aptitude install g++
下列动作将解决这些依赖关系:

     保持 下列软件包于其当前版本:
1)     g++ [未安装的]
2)     g++-7 [未安装的]
3)     libc-dev-bin [未安装的]
4)     libc6-dev [未安装的]
5)     libstdc++-7-dev [未安装的]

     保留下列未解决的依赖关系:
6)     gcc-7 推荐 libc6-dev (>= 2.13-0ubuntu6)
7)     libgcc-7-dev 推荐 libc6-dev (>= 2.13-0ubuntu6)

这里要观察下,如果有些包配置不合理的,就不能继续了,否则会导致系统奔溃

问题解决方案参考链接

(64条消息) ubuntu问题g++ : 依赖: g++-4.8 (>= 4.8.2-5~) 但是它将不会被安装_sunshaozong111的博客-CSDN博客

配置ubuntu源

实际上,是我ubuntu源配错了,附上清华大学的源

ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

编译nodejs

$ sudo make(这个过程很漫长..)
$ sudo make install
$ sudo cp ./node /usr/sbin/
#测试下
frend@frend:~$ node -v
v14.15.1
设定nodejs源
$ npm config set registry https://registry.npm.taobao.org

参考

(转)nodejs npm国内镜像 - 秋叶leaf - 博客园 (cnblogs.com)

参考文档

(64条消息) ubuntu18.04安装最新nodejs_疯子风的博客-CSDN博客_nodejs ubuntu安装

安装hexo-cli

hexo-cli的安装,官方文档

文档 | Hexo

安装hexo-cli

$ sudo npm install -g hexo-cli

初始化一个站点

$ hexo init blog
INFO  Cloning hexo-starter https://github.com/hexojs/hexo-starter.git
INFO  Install dependencies
added 185 packages from 440 contributors in 14.624s

14 packages are looking for funding
  run `npm fund` for details

INFO  Start blogging with Hexo!

这样就可以了,启动看看效果、

$ hexo s
INFO  Validating config
INFO  Start processing
INFO  Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

访问localhost:4000 在浏览器能看到这个,就说明成功了

image-20201130165020519.png

服务端配置

服务端安装git

服务端安装git和本地安装git的方式一致,这里说说设置用户

添加一个用户

$ sudo adduser git
#修改一下授权
$ sudo chmod 740 /etc/sudoers
$ sudo vim /etc/sudoers
#找到这一行
# User privilege specification
root    ALL=(ALL:ALL) ALL
#将git添加进去
git     ALL=(ALL:ALL) ALL
#修改好之后,将权限还原
$ sudo chmod 400 /etc/sudoers
#git服务器打开RSA认证
$ sudo vim /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2

修改git密码

$ sudo passwd git
git(这里我密码也给了git,生产环境必须设定一个复杂的密码)

切换 到git用户 创建~/.ssh 和 ~/.ssh/authorized_keys文件

$ mkdir ~/.ssh
$ vim ~/.ssh/authorized_keys

然后从本地安装的git中复制出 .ssh/id_rsa.pub的内容

到服务器上的authorized_keys文件内

#查看客户端电脑上的rsa.pub
$ cat ~/.ssh/id_rsa.pub
#复制到服务器的以下路径
~/.ssh/authorized_keys

测试一下ssh 能否免密登录

$ ssh -v git@www.edayask.com
#可以看到能直接登进来,就说明git配置成功了
Last login: Mon Nov 30 16:35:53 2020 from 192.168.0.105
git@lo:~$

初始化一个git仓库

$ sudo git init --bare hexo.git
设置hexo.git的目录拥有者为git用户
$ sudo chown -R git:git hexo.git

配置钩子(提交之后触发)

在仓库hexo.git下创建一个钩子文件

touch hooks/post-receive

内容

#!/bin/bash
git --work-tree=/home/frend/server/nginx/data/hexo --git-dir=/home/git/hexo.git checkout -f

给钩子文件配置可执行权限

$ chmod +x post-receive

注意,这里的--work-tree后面的路径是要配置到的路径 --git-dir是git仓库的路径,这个要根据自己的实际情况来定,这个钩子的意图是每次push之后,会把要部署的博客的内容刷新到服务器的工作目录,这样就能达到自动部署的目的了。

服务端部署参考资料

Hexo部署在阿里云服务器上 - 简书 (jianshu.com)

测试一下,本地能不能拉取到空仓库

frend@frend-dev:~/dev/tmp$ git clone git@www.edayask.com:/home/git/hexo.git
Cloning into 'hexo'...
warning: You appear to have cloned an empty repository.

服务端安装Docker和Docker-nginx

参考文件:应用篇-Ubuntu18-安装Docker-2020-12-02 - 简书 (jianshu.com)
TODO

配置发布路径

修改hexo的配置文件_config.yml

deploy:
  type: git
  repo: git@www.edayask.com:/home/git/hexo.git
  branch: master

安装hexo-deployer-git这是一个集成git发布hexo的工具

$ sudo npm install --save hexo-deployer-git

配置package.json文件,集成发布脚本,修改 deploy

"scripts": {
    "build": "hexo generate",
    "clean": "hexo clean",
    "deploy": "hexo clean && hexo g -d",
    "server": "hexo server"
}
#执行发布
$ npm run deploy
//--省略部分日志
Branch 'master' set up to track remote branch 'master' from 'git@www.edayask.com:/home/git/hexo.git'.
INFO  Deploy done: git

看到 Deploy done表示发布成功,此时,去服务器看看,有没有被部署过去

~/server/nginx/data/hexo$ ls

发现这里并没有被提交上来,经过检查,这个目录是管理员的目录,git用户是没有权限的,因此,这里要给git用户授权,可访问。

$ sudo chown -R git hexo

在查看一次

$ ls
2020  archives  css  fancybox  index.html  js

可以看到,文件已经被发布到这个路径了,接下来配置nginx

将root目录指向到创建容器时映射的目录,如果你忘了映射的目录可以用以下命令查看

$ sudo docker inspect 容器名 | grep Mounts -A 20

配置nginx

location / {
    root /www/html/hexo;
    index index.html index.htm;
}

这里nginx默认是没有权限访问www/html目录的,要给授权。

#进入nginx的容器中
$ sudo docker exec -it my-nginx bash
## 将www目录给nginx用户
$ chown nginx:nginx -R ./www/

重启NGINX

$ sudo docker restart my-nginx

访问路径

image-20201201172912826.png

更改git用户默认的shell

为了安全起见,上述创建的git账号,不允许ssh登录,只允许git访问

cat /etc/shells # 查看 git-shell 是否在登录方式里面
which git-shell # 找到git-shell的路径,记下来
vim /etc/shells

然后把刚才记下来的路径添加进去,保存,然后vim /etc/passwd,把git:x:1000:1000::/home/git:/bin/bash修改为git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell

这样本地再用ssh应该就没法登录了,只能进行git操作。

至此,将hexo博客部署到阿里云就已经完成了

参考链接

授权目录|https://www.cnblogs.com/pangchunyu/p/12886372.html

查看容器的挂载目录|docker:如何查看容器的挂载映射目录-流觞 (lnmpweb.cn)

授权目录2|https://blog.csdn.net/kl28978113/article/details/80493360

(64条消息) 记录Hexo部署到阿里云服务器全过程_星速云-CSDN博客_hexo部署到阿里云

nginx Tags - Docker Hub

Hexo的官网|Hexo (edayask.com)

(64条消息) nginx配置静态html_keybersan的博客-CSDN博客_nginx配置html

Hexo部署在阿里云服务器上 - 简书 (jianshu.com)

几个主题推荐的帖子

我还没来得及弄主题,需要美化添加主题的,可以参考以下几个链接

(64条消息) Hexo 好看的主题推荐_浮沉半生的博客-CSDN博客_hexo主题

这个主题好评度很高

Molunerfinn/hexo-theme-melody: A simple & beautiful & fast theme for Hexo. (github.com)

比较详细的主题描述,没亲测

(64条消息) Hexo+icarus主题配置_飞鱼の博客-CSDN博客

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

推荐阅读更多精彩内容