博客从GitHub Pages上迁移到个人VPS过程

记下博客从GitHub Pages上利用Git迁到VPS上的过程,以及中间遇到的各种问题。

本地安装Hexo搭建网站就不多讲了,可参考俺写的Linux下搭建Hexo个人博客 ,然后配置好本地SSH密钥,可参考俺写的使用SSH密钥进行Git协议传输 ,本地准备妥当,就开始折腾VPS上面了。

安装配置git和hexo

打开终端ssh root@vpsip,输入密码,进入vps终端。

安装必要的依赖

$ apt install git //安装git

$ apt install npm //安装apm

$ apt install node.js //安装Node.js

$ npm install -g hexo //安装hexo

创建git用户

命令$ adduser git ,根据提示设置密码

赋予git用户sudo权限

1
2
$ chmod 740 /etc/sudoers
$ vim /etc/sudoers

找到下面内容

root ALL=(ALL:ALL) ALL 在下面添加 git ALL=(ALL:ALL) ALL,如下

1
2
root    ALL=(ALL:ALL) ALL
git ALL=(ALL:ALL) ALL

保存退出后,修改回文件权限

$ chmod 440 /etc/sudoers

关闭git用户shell权限

命令:$ vim /etc/passwd

最后一行的git:x:1001:1001:,,,:/home/git:/bin/bash

修改为git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

注意:这一步非windows用户不需要修改

初始化git仓库

切换到git用户$ su git ,这一步很关键,下面操作都是git用户

1
2
3
4
$ cd /home/git      //切换到git用户目录
$ mkdir blog.git //创建git仓库文件夹,以blog.git为例
$ cd blog.git //进入仓库目录
$ git init --bare //使用--bare参数初始化为裸仓库,这样创建的仓库不包含工作区

创建网站目录

1
2
$ cd /var/www/      //切换目录
$ mkdir blog //创建网站目录,以blog为例

配置SSH

1
2
3
4
$ cd /home/git      //切换到git用户目录
$ mkdir .ssh //创建.ssh目录
$ cd .ssh
$ vim authorized_keys

本地执行cat ~/.ssh/id_rsa.pub,把里面的内容复制到刚打开的authorized_keys文件里面。

用户组管理

确保blog.git、.ssh、blog目录的用户组权限为git:git

1
2
3
$ sudo chown git:git -R /var/www/blog
$ sudo chown git:git -R /home/git/blog.git
$ sudo chown git:git -R /home/git/.ssh

安装配置Nginx

安装Nginx

1
2
$ apt-get install nginx
$ nginx -v

配置Nginx

安装完成后修改Nginx的server文件

1
2
3
$ cd /etc/nginx/sites-available //切换目录
$ cp default default.bak //备份默认配置
$ vim default //修改配置

简单修改配置文件,其实这一步有挺多讲的,篇幅有限,下一篇再说,

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
29
30
31
32
server {
listen 80 default; //默认监听80端口
root /var/www/blog; //网站根目录
server_name yeahwu.com www.yeahwu.com; //网址
access_log /var/log/nginx/blog_access.log;
error_log /var/log/nginx/blog_error.log;
error_page 404 = /404.html;

location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
root /var/www/blog;
access_log off;
expires 1d;
}

location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
root /var/www/blog;
access_log off;
expires 10m;
}

location / {
root /var/www/blog;
if (-f $request_filename) {
rewrite ^/(.*)$ /$1 break;
}
}

location /nginx_status {
stub_status on;
access_log off;
}
}

systemctl start nginx //保存,启动Nginx

systemctl enable nginx //设置开机自动启动

systemctl status nginx //查看运行状态,显示running表示成功运行

nginx -s stop //立刻停止运行Nginx

配置Git Hooks

创建post-receive文件

git用户下命令:

1
2
3
$ su git                       //切换到git用户
$ cd /home/git/blog.git/hooks //切换到hooks目录下
$ vim post-receive //创建文件

复制下面的内容到post-receive文件中:

1
2
3
4
5
6
7
8
#!/bin/bash
GIT_REPO=/home/git/blog.git
TMP_GIT_CLONE=/tmp/blog
PUBLIC_WWW=/var/www/blog
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

保存退出后,命令:$ chmod +x post-receive 赋予可执行权限。

尝试连接

本地打开终端:

ssh git@vpsip

提示 “welcome to ……” 说明连接成功了。

若默认端口不是22,则需要在后面加上端口号:

ssh git@vpsip -p 22

Git连接时需要你输入密码,可尝试下面方法解决

首先检查本地 .ssh文件夹里的文件权限

1
2
3
4
.ssh 700
id_rsa 600
id_rsa.pub 644
authorized_keys 600 //已经有你的public key

接下来,本地输入以下命令

1
2
3
$ ssh-agent
$ eval $(ssh-agent)
$ ssh-add id_rsa

配置Hexo

打开本地博客根目录下的_config.yml文件,找到最后的deploy配置,修改为:

1
2
3
4
deploy:
type: git
repo: git@VPSIP:blog.git
branch: master

到此,Hexo建站就全部配置部署完毕,后面就是例行的文章发布。

Bitcoin:1MQ3DJHnEdkP9scCiA1pGXTe9wyBmDtrvv