0%

迁移博客的过程

博客从GitHub上迁到国内的服务器上了, 现在从国内访问博客的速度有了大幅提高.

但是由于没有备案, 现在的解决方法是在GitHub上放一个自动跳转的页面, 原url继续解析到GitHub, 再从GitHub上自动重定向到国内服务器上.
下面是我这次迁移折腾了些什么.

结构

 我的博客一直采用hexo生成的静态页面, 之前一直托管在GitHub上. 每次更新时只需要hexo g -d就可以了, 十分方便. 但是由于国内众所周知的原因, 访问GitHub属实缓慢, 于是就有计划迁移到国内服务器上.
 但是使用vps的话不可避免的会产生vps的更换和迁移等问题. 为了节省以后部署服务器的时间, 我选择把服务器端部署在docker里. 同时昨天也搓了一个dockerfile出来, 以后想要部署博客服务器, 只需要把dockerfile, nginx配置文件和依赖的守护脚本scp到安装了docker服务的vps上就能一键部署了.
 然后为了规避没有备案不能使用80端口的问题, 我把之前挂在GitHub上的index.html改成了自动跳转页面, 直接跳到当前提供服务的vps上.
 现在访问博客的路径大概是这样的user->Github 跳转 user->VPS->Docker, 部署博客的时候就直接是从user到vps部署.

实现

我昨天写了一宿的dockerfile, 源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
FROM nginx

RUN apt update
RUN apt install openssh-server -y
RUN apt install git -y

RUN useradd -m git
RUN mkdir /home/git/.ssh \
&& nginx -c /etc/nginx/nginx.conf
RUN service nginx stop
RUN echo "YOUR PUB KEY" > /home/git/.ssh/authorized_keys \
&& mkdir -p /home/git/blog/hexo.git \
&& mkdir /home/git/blog/hexo \
&& git init --bare /home/git/blog/hexo.git \
&& cd /home/git/blog/hexo.git/hooks\
&& head update.sample > /home/git/blog/hexo.git/hooks/post-update.sample \
&& echo "git --work-tree=/home/git/blog/hexo --git-dir=/home/git/blog/hexo.git checkout -f" >> /home/git/blog/hexo.git/hooks/post-update.sample \
&& mv post-update.sample post-update \
&& chmod +x post-update \
&& cd /home \
&& chown -R git:git git
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./start.sh ./start.sh
RUN chmod 777 ./start.sh
EXPOSE 22
EXPOSE 80
RUN service nginx start
CMD ["./start.sh"]

 用于部署环境的时候记得把pubkey改一下. nginx配置文件没什么特别的, 注意修改一下网站根目录就行. 至于最后的start.sh, 内容如下:
1
2
3
4
5
6
7
#!/bin/bash
while [ 1 ]
do
sleep 5
service ssh start
service nginx start
done

 因为我不知道为啥使用官方的nginx的镜像会让ssh服务崩溃, 只能写一个守护脚本, 每5s拉一把ssh和nginx服务.好在占用的cpu不高, 这个解决方案勉强可以接受.

部署

1
scp -r ./* user@host:~/blog
1
2
3
cd blog
sudo docker build -t blog .
sudo docker run -p 2222:22 -p 8000:80 -dt blog:latest

部署结束.
  然后电脑端修改下_config.yml中的Deployment配置, 让链接指向你docker映射出来的端口, 就可以愉快的hexo g -d了.
 最后记得去GitHub上修改一下跳转的地址, 或者要是有国内备案的话直接映射到80端口然后解析个域名上去.

意义?

 大大提高了访问博客文章的速度, 当然最大的意义还是我现在可以随意的在各种vps之间转移博客而不用担心重新花费一遍配置服务器环境的垃圾时间. docker天下第一!