Hexo博客迁移到云服务器

本文涉及的产品
.cn 域名,1个 12个月
简介: Hexo博客迁移到云服务器

一开始博客在github pages上,速度比较慢。后来在网上发现许多人说托管到Netify很快,还自带CDN加速。但我迁移过去,发现国内的网根本就登不上,又检测了一下在大陆访问博客的速度,惨不忍睹。最终老老实实买台腾讯云服务器,把博客迁移过去。顺手写篇文章记录一下。


必备环境

服务器(作者用的是腾讯云的),域名www.xiaoniuhululu.com(需要备案)

云主机 安全组需开放22、80、443端口,腾讯云默认开放所有端口

22 :ssh访问

80 :http访问

443 :https访问

本地:装好 git, 一个能正常在本地运行的hexo 博客

我们先将服务器的环境 配置一下:

  1. 安装git
sudo yum install git
  1. 安装docker

为什么使用docker,通过 docker 拉取 nginx 镜像,将该镜像运行的容器作为代理服务器和反向代理.

我们通过 daocloud 加速安装,这样方便快捷

curl -sSL https://get.daocloud.io/docker | sh

查看docker版本

docker -v

Docker version 20.10.5, build 55c4c88

设置docker自启动

sudo systemctl enable docker

启动docker

sudo systemctl start docker
  1. 拉取nginx镜像

搜索nginx镜像

docker search nginx

拉取最新 nginx 镜像到云主机

docker pull nginx:latest

查看镜像

docker images

查看nginx镜像版本

docker image inspect nginx:latest | grep -i version
  1. 运行nginx容器

运行一个名为 nginx-web 的容器

docker run -d \
--name nginx-web \
-p 80:80 \
-p 443:443 \
--restart always \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /home/nginx/html:/usr/share/nginx/html \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/ssl:/etc/nginx/ssl \
nginx:latest
其中:
-d :在分离模式下(后台)运行
--name :给运行的容器取一个名字,这里是 nginx-web
-p :docker宿主机端口映射nginx-web容器端口,即80映射80,443映射443
--restart :将 nginx-web 容器设为自启动
-v :将docker宿主机的目录路径绑定装载到nginx-web容器的目录路径,即两者路径下的数据会自动同步且保持一致,目录不存在自动创建
/usr/share/zoneinfo/Asia/Shanghai :将宿主机时间同步到容器,因为容器与宿主机时间相差8小时
/home/nginx/conf.d :存放站点配置文件
/home/nginx/html :存放hexo部署目录
/home/nginx/log :存放nginx-web容器运行日志
/home/nginx/ssl :存放ssl证书,用于https访问
nginx:latest :使用标签为 latest 的 nginx 镜像,即上面拉取的nginx镜像

查看所以容器:

docker ps -a

出现下面代表容器创建并运行成功

  1. 拷贝default.conf文件 nginx-web 容器在 /etc/nginx/conf.d/ 目录下有一个 default.conf 文件,因为该目录与宿主机上的 /home/nginx/conf.d 目录挂载时被删除了。没有该文件,浏览器访问报错 502 Bad Gateway 。因此下面要运行一个新nginx容器,然后拷贝该容器上的 default.conf 文件到挂载目录就解决了

首先,运行一个名为ceshi的新容器

docker run -d --name=ceshi nginx:latest

将ceshi容器内的default.conf文件拷贝到宿主机

docker cp ceshi:/etc/nginx/conf.d/default.conf /home/nginx/conf.d/default.conf

还有ceshi容器的 50x.html 文件(其实新建一个也可以)

docker cp ceshi:/usr/share/nginx/html/50x.html /home/nginx/html/50x.html

这时可以删除ceshi容器

首先停止容器

docker stop ceshi

然后删除容器

docker rm ceshi
  1. 创建git用户
useradd git

会自动在宿主机上创建 /home/git 用户目录

更改文件权限

chmod 740 /etc/sudoers

配置git用户权限

vim /etc/sudoers

按 i 键进入输入模式,在 root ALL=(ALL) ALL 下一行添加

git ALL=(ALL) ALL

按 ESC 键退出输入模式,输入 :wq 保存

改回文件权限

chmod 400 /etc/sudoers

更改git密码

sudo passwd git

创建 /home/nginx/html/hexo 部署目录

与nginx-web容器的/usr/share/nginx/html/hexo目录挂载

mkdir /home/nginx/html/hexo

切换到git用户(下面都是用git用户)

su git
  1. 创建hexo.git仓库

hexo.git 仓库用来存放hexo博客部署文件

创建hexo.git仓库

$ cd ~
$ git init --bare hexo.git

配置 post-receive 钩子文件实现从 hexo.git 仓库克隆新的博客静态文件到 /home/nginx/html/hexo (需root用户手动创建hexo文件夹,上面已经创建过了)目录下。这样以后部署博客时只需要本地 git push 就好,无需在云主机操作

编辑hexo.git钩子文件

vim ~/hexo.git/hooks/post-receive

按 i 键进入输入模式,写入:

git --work-tree=/home/nginx/html/hexo --git-dir=/home/git/hexo.git checkout -f

按 ESC 键退出输入模式,按 :wq 保存

授予钩子文件可执行权限

$ chmod +x ~/hexo.git/hooks/post-receive
$ cd ~
$ sudo chmod -R 777 /home/nginx/html/hexo

可能提示要输入git密码

如果再添加一个网站,只需 root用户下创建一个 ceshi 文件夹

mkdir /home/nginx/html/ceshi
su git

除了只需要更改仓库名和目录路径,其它同上,nginx-web容器可以代理多个网站

本地

  1. 域名绑定服务器+ 申请ssl证书

笔者用的是 阿里云的域名,去阿里云控制台把域名与服务器绑在一起,这部分很简单,就省略了 申请ssl证书,用的腾讯的,下载下来后注意:

如果使用 www.xiaoniuhululu.com 访问博客,则证书绑定域名必须是 www.xiaoniuhululu.com ,两者保持一致

下载的ssl证书是一个压缩包,解压后其中有一个 Nginx 文件夹,重命名该文件夹为www.xiaoniuhululu.com

  1. 推送ssl证书和nginx 配置文件至 服务器中

笔者 使用的是winscp工具上传的,上传好后

ssl证书 上传至服务器 /home/nginx/ssl

如果觉得文章对你有帮助,欢迎关注微信公众号:小牛呼噜噜

nginx 配置文件,先在本地写好,然后上传至服务器 /home/nginx/conf.d

配置文件:xiaoniuhululu.com.conf

###https访问
server {
    listen       80 default_server;
    listen  [::]:80;
    server_name  xiaoniuhululu.com;
    location / {
        root   /usr/share/nginx/html/hexo;
        index  index.html index.htm;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    location ~ \.php$ {
        proxy_pass   http://172.17.0.2:80; 
    }
    rewrite ^(.*) https://xiaoniuhululu.com$1 permanent;
}
server {
    listen       443 ssl;
    server_name  xiaoniuhululu.com;
    ssl_certificate      /etc/nginx/ssl/www.xiaoniuhululu.com/1_xiaoniuhululu.com_bundle.crt;
    ssl_certificate_key  /etc/nginx/ssl/www.xiaoniuhululu.com/2_xiaoniuhululu.com.key;
    # ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers  HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;
    ssl_prefer_server_ciphers  on;
    location / {
        root /usr/share/nginx/html/hexo;
        index  index.html index.htm;
        }
}

注意:路径一定要一一对应,可以自定义

  1. 推送本地hexo博客

修改hexo博客的配置文件hexo/_config.yml:

deploy:
  type: git
  repository: git@111.11.1.11:/home/git/hexo.git
  branch: master

注意前面和冒号 : 后的空格

推送到云主机 hexo.git 仓库 hexo目录下右键 Git bash Here

执行部署命令,文件会自动部署到服务器的hexo.git仓库中,静态文件会上传到nginx/html/hexo中

hexo clean
hexo g
hexo d

启动nginx容器

docker restart 容器的id

如果没启动成功,或者页面不正常,可以查看nginx的日志 在/home/nginx/log中,

把问题一一解决后,浏览器访问 www.xiaoniuhululu.com

参考:https://www.gaoyuanqi.cn/hexo-tenxunyun-xin/


本篇文章到这里就结束啦,如果喜欢的话,多多支持,欢迎关注!

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
20天前
|
域名解析 网络协议 数据安全/隐私保护
阿里云轻量应用服务器搭建WordPress个人博客教程
阿里云轻量应用服务器搭建WordPress个人博客教程
|
6月前
|
域名解析 弹性计算 数据安全/隐私保护
阿里云ECS免费搭建WordPress个人博客网站
阿里云ECS免费搭建WordPress个人博客网站
700 2
阿里云ECS免费搭建WordPress个人博客网站
|
域名解析 弹性计算 安全
如何在阿里云服务器安装个人WordPress博客网站?
如何在阿里云服务器安装个人WordPress博客网站?使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程:
457 0
|
域名解析 网络协议 关系型数据库
阿里云轻量服务器搭建WordPress博客流程
阿里云轻量服务器搭建WordPress博客流程,阿里云轻量应用服务器镜像可选WordPress应用,应用镜像可以自动安装WordPress程序及WP所依赖的Web安装环境,轻量服务器网来详细说下轻量服务器选择WordPress应用镜像创建成功后的操作流程使用方法:
230 0
|
弹性计算 关系型数据库 MySQL
使用ECS搭建自己的wordpress博客
首先在云实验室做了一次实验,熟悉了相关的流程,之后就自己尝试搭建wordpress,中间配置环境期间出现了各种问题,还重启示例好多次,不过最终还是圆满完成搭建,我拥有了自己的个人博客。
使用ECS搭建自己的wordpress博客
|
应用服务中间件 Shell 网络安全
Hexo博客迁移到云服务器
Hexo博客迁移到云服务器
311 0
|
弹性计算 Linux PHP
使用ECS部署wordpress教程
在校大学生在阿里云部署wordpress中出现的几个问题说明一下。
使用ECS部署wordpress教程
|
弹性计算 关系型数据库 MySQL
初学者如何使用阿里云ECS搭建基于Wordpress的网站
基于阿里云官方教程的补充与进阶教学,简述在教程引导以及后续使用的过程中遇到的问题,并于此提供对应的详细解决方案。
3692 11
初学者如何使用阿里云ECS搭建基于Wordpress的网站
|
弹性计算 Linux Shell
阿里云ECS从0到1部署wordpress博客
本文从0到1给大家介绍如何在阿里云云服务器上部署wordpress博客,本文参加活动ECS测评大赛:https://developer.aliyun.com/topic/ecs2022
阿里云ECS从0到1部署wordpress博客
|
存储 弹性计算 关系型数据库
基于ECS搭建Wordpress博客
ECS+WordPress个人建站练习
347 2
基于ECS搭建Wordpress博客