在阿里云Ubuntu上搭建Hexo博客
采坑总结
1.阿里云端口开放
Ubuntu默认端口都开着,阿里云安全组会做个限制,因此,这里要先在安全组打开80端口(或者你要开放的其他接口)
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-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 在浏览器能看到这个,就说明成功了
服务端配置
服务端安装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
访问路径
更改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部署到阿里云
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)
比较详细的主题描述,没亲测