美文网首页Hugo 创建博客
基于阿里云服务器-搭建hexo-博客2020-12-02

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

作者: 青山有扶苏 | 来源:发表于2020-12-02 09:35 被阅读0次

在阿里云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博客

相关文章

网友评论

    本文标题:基于阿里云服务器-搭建hexo-博客2020-12-02

    本文链接:https://www.haomeiwen.com/subject/vtzewktx.html