Hexo-Github迁移到阿里云ECS
Github pages访问还是有点慢,迁移到阿里云ECS,1G1核,Debian 11.4系统
引言——怎么又迁移了
已经经过了gitee pages、github pages,现在又要移到服务器了…根本原因是速度,后面这个博客和域名打算用来干点其他事,买了服务器,不过主要还是自己看,后面不打算做SEO优化。
前置操作
- Github-pages搭建hexo博客:这里有套娃哈哈哈
- 买个人域名(我是带个人域名的)
- 买服务器,我的是阿里云ECS,1G1核,Debian 11.4系统
- (可选)Vscode远程连接阿里云ECS服务器
服务器的博客环境
安装git
1 | sudo apt-get update |
之后运行git --version
出现git的版本号即安装成功,配置git基本信息:
1 | git config --global user.name "your name" |
(可选)服务器开启防火墙
安装防火墙
1 | sudo apt-get install ufw |
此时输入sudo ufw status
输出activate即开启成功,常用命令:
1 | sudo ufw status numbered # 查看规则 |
对于服务器,我们需要输入以下命令:
1 | sudo ufw allow 80/tcp # 开启http |
安装 nginx
1 | sudo apt-get install nginx |
之后运行nginx -v
出现版本号即安装成功,nginx的日志文件放在/var/log/nginx
,程序在/usr/sbin/nginx
,默认目录为/var/www/html
,配置文件在/etc/nginx/nginx.conf
此时在浏览器输入服务器的公网ip,看到的应该是nginx的欢迎页面:
测试博客环境
将博客内容放进对应文件夹:
1 | cd /var/www/html |
修改配置文件,将root后面的/var/www/html
改成你刚刚clone的文件夹名,我的是.github.io的名字(如下):
1 | server { |
特别注意root后面那个分号,我第一次不小心删了调了半天。。。这时再次访问公网ip可以看到博客页面,说明环境配置成功了!
nginx重启配置的命令:nginx -s reload
服务器配置git仓库与自动部署
不愿每次更新完博客都登录服务器去git pull,所以我们在服务器建一个git仓库,并利用hooks自动将内容推到nginx的默认目录。
创建新用户
1 | adduser git |
直接用root操作服务器不安全
密钥与SSH配置
1 | su git # 一定要切换用户不然后面文件权限会不对劲 |
如果是部署hexo到github应该有在本机创建过公钥了,在本机的C:\Users\你的名字\.ssh
文件夹中有id_isa.pub
,将内容复制下来:
1 | vim /home/git/.ssh/authorized_keys |
将刚刚复制的内容贴进文件里,下面修改SSH的配置,如果担心改坏了可以先备份一份出来:
1 | su root # 切回root用户 |
修改的内容列举如下:
1 | # 开启端口,我的原配置文件里下面这部分被注释掉的,打开注释就行 |
保存后,输入service sshd restart
重启sshd服务,没报错就成功了,报错应该是配置文件有问题,再检查一下
创建git远程仓库
1 | su git |
在hooks文件夹里添加一个脚本:
1 | touch /home/git/hexo/hooks/post-receive |
文件中写入,注意第一个路径是nginx的默认路径:
1 |
|
网上的教程到这里就结束了,但是我在部署的时候出现了remote:error: unable to unlink old ' filename_here' (permission denied)'
,查了半天发现可能是nginx默认路径的文件夹的权限问题,所以切到root用户进行修改,将文件夹的修改权限赋予用户git:
1 | su root |
配置hexo部署
打开hexo站点配置文件,在deploy部分添加:
1 | deploy: |
之后进行hexo deploy
就可以同时推送到服务器上的仓库,仓库收到推送后自动运行hooks里的脚本将内容更新到nginx的工作目录,网站内容就更新啦
配置域名解析
域名解析到公网ip
我的域名在阿里云,从控制台打开域名解析,添加记录:
(可选)强制https
SSL模块安装
先测试一下,输入/usr/sbin/nginx -V
,注意是大写V,小写只给版本号,给出的configure arguments:
如果有--with-http_ssl_module
就说明已经有SSL模块了,如果没有就找教程先安装
获取免费SSL证书
在阿里云的控制台找到数字证书管理服务,点开找到SSL证书,点立即购买,可以免费领取一年的:
然后按照步骤进行配置就好,审核下来将证书下载到本地,上传到服务器里去(可以用SFTP,参考Vscode远程连接阿里云ECS服务器)
配置nginx
打开配置文件:
1 | vim /etc/nginx/nginx.conf |
将以下内容填入,其中ssl的两项是你之前下载的证书,放在服务器里的位置:
1 | http { |
保存退出后,重启nginx:
1 | nginx -t # 检查语法 |
再打开域名就能看到了!