避坑指南!Hexo自动化部署阿里云服务器详解
前言
之前Hexo部署在coding,后面coding要钱了,就改静态托管在了github和gitee,当然访问速度极其慢,但胜在人家免费啊,没办法只好妥协。到后面突然发现github和gitee都访问不了我的blog了,太惨了,没办法,趁着阿里云搞活动,买了个2core2g的云服务器来搭建搭建,这里记录一下我的踩坑历程。
这篇教程适合:
- 有一定linux基础;
- 有本地搭建hexo并部署过github等平台经验的人;
- 对nginx有点点了解的人;
- 按照网上一些Blog搭建最后访问页面呈现403Forbidden的人;
- 以小白视角,只管搭建好能用就行的人;
先按照这篇Blog进行搭建
Next
按照上面那篇博客搭建完成后,访问云服务器IP,不出意外,你会发现页面呈现的是403Forbidden。(如果是其他错误,请检查配置过程有误错漏,并利用百度解决)
我在这里先贴出我的配置文件:
1.blog.conf
server{
listen 80;
root /home/www/hexo;
server_name xxx.xxx.xxx.xxx;
location /{
}
}
2./etc/nginx/nginx.conf(主要查看blog路径server里面的内容就好)
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
# nginx
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/vhost/*.conf;# 网站子节点
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /home/www/website; # Blog根目录
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
/home/www/website; # Blog根目录
index index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
Important Tips
在上面那篇Blog文章的第六步,创建git仓库那里,如果你们是在post-receive输入:
git --work-tree=/home/www/website --git-dir=/home/git/blog.git checkout -f
你们会发现,本地deploy后,你们网站的根目录是没有任何文件的!因为nginx启动后会去根目录访问index.html,而你们的根目录是空的,访问不到,所以会报错403Forbidden。
具体应该把脚本内容改成如下:
#!/bin/bash -l
GIT_REPO=/home/git/blog.git
TMP_GIT_CLONE=/home/www/tmp/blog
PUBLIC_WWW=/home/www/website
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
其中 /home/git/blog.git
为仓库路径,/home/www/website
为博客网站路径,/home/www/tmp/blog
是临时目录。
git 会先将文件拉到临时目录,然后再将所有文件拷贝到博客网站目录 /home/www/website
。
保存后退出。
之后,在服务器重新启动下nginx
service nginx restart
然后再到本地hexo目录下进行deploy,成功后你会发现,网站根目录下有内容了,访问服务器IP,成功访问到Blog页面!
其他可供参考的链接
https://blog.csdn.net/weixin_44861399/article/details/104925231
https://pwner.cn/posts/542fc3b8.html
https://zhuanlan.zhihu.com/p/120743882?utm_source=qq