本文作者: IDEAShin
本文链接: www.ideashin.com/post/6c0c97…
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
前言
看到别人都在写blog,拥有自己的小站,实在羡慕不已。虽然自己也在做笔记,但是总感觉自己偷偷放着不那么舒服,不如放在网上和大家一起交流共勉。因此我决心要有自己的blog。最后终于完成了自己第一个的网站,也是自己第一个blog,也是有了自己的第一个域名ideashin.com。
建站的过程并不怎么顺利,本来Hexo+GitHub是绝配,但是我本身就有一个限制(开小飞机)的vps,一直放着也是浪费,因此决心用vps部署一个Hexo的博客。因为以前并没有接触过,所以查看了很多资料才完成的。以下就是我建站的过程,遇到的问题我都放在最后面了,如果有幸能被看到的话希望能有所帮助。
在此写下第一篇博客,也是自己的一个开端,希望对自己有能所提升。也方便自己以后查阅,也希望能有幸帮到他人。
本地安装
环境配置
安装hexo需要在本机安装Git以及Node.js
Git
-
从官网下载安装好后git-scm.com/
- 使用 git -version'可以查看安装的版本
-
配置用户信息,设置用户名以及邮箱
$ git config --global user.name "用户名" $ git config --global user.email "邮箱地址" #查看是否成功 $ git config --list
-
重要 获取key,后面配置SSH要用到
在Git Bash中执行
#创建公钥 $ ssh-keygen -t rsa -C "邮箱地址" #然后获取复制公钥备用 $ cat ~/.ssh/id_rsa.pub
Node.js
-
官网下载安装nodejs.org
输入node -version查看安装版本
Hexo配置
具体可以参照官方文档,有中文版就介绍也很详细,这里只简单配置
安装
参照官方文档,使用下列代码安装
$ npm install -g hexo-cli
建站
在你想存放hexo的地方新建一个文件夹,如Hexo,然后在文件夹内右键启动git的git bash,执行如下代码
$ hexo init
$ npm install
注意: 不要用git init,这样会把整个hexo文件都同步到服务器,应该是hexo init
测试
$ hexo clean && hexo g && hexo server
执行后可以输入网址本地查看http://localhost:4000
Server操作
确保您的系统和apt包
首先,通过运行以下命令确保您的系统和apt包列表完全更新:
$ apt-get update -y
$ apt-get upgrade -y
安装git、sudo、nginx
$ apt install git
#debian默认无sodu
$ apt-get install sudo
$ apt-get install nginx
检查版本确保安装
$ git --version
$ nginx -V
配置nginx
#切换目录
$ cd /etc/nginx/sites-available
#备份默认配置
$ cp default default.bak
#修改配置
$ vim default
#检查是否有错误
$ nginx -t
#保存退出后,启动
$ nginx:systemctl start nginx
#设置开机自动启动
$ systemctl enable nginx
#查看运行状态
$ systemctl status nginx
#显示running表示成功运行
创建git用户
创建
$ adduser git
赋予sudo权限
$ chmod 740 /etc/sudoers
$ vim /etc/sudoers
然后修改在root下面添加
git ALL=(ALL) ALL
改回权限
$ chmod 400 /etc/sudoers
配置SSH
切换git用户,并到git用户目录
#切换到git用户
$ su git
#转到git用户目录
$ cd /home/git
配置ssh
# 创建.ssh文件夹
$ mkdir ~/.ssh
#输入可查看是否创建
$ ls -a
# 创建authorized_keys文件并编辑
$ vim ~/.ssh/authorized_keys
# 如果你还没有生成公钥,那么首先在本地电脑中执行 cat ~/.ssh/id_rsa.pub | pbcopy生成公钥
# 再将公钥复制粘贴到authorized_keys
# 保存关闭authorized_keys后,修改相应权限
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh
-
然后输入测试是否可以登录(免密?)
$ ssh -v git@68.168.141.184
-
默认22端口,不是则需要在后面加上
-p 端口号
-
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!是以前配置过主机,需要进行删除
$ vi ~/.ssh/known_hosts
-
创建git裸库
- 创建裸库
# 回到git目录
$ cd /home/git
# 使用git用户创建git裸仓库,以blog.git为例
$ git init --bare blog.git
-
根据前面配置的nginx中的根目录
#切换目录
$ cd /var/www/
#创建网站目录,以blog为例
$ mkdir blog
检查用户权限
检查一下之前的blog.git、.ssh、blog目录的用户组权限是否都为git:git
$ ls -l /var/www/
$ ls -l /homw/git/
如果不是则
$ sudo chown git:git -R /var/www/blog
$ sudo chown git:git -R /home/git/blog.git
使用git-hooks同步网站根目录
使用一个钩子文件:post-receive
,每当git仓库接收到内容的时候,就会自动调用这个钩子,把内容同步到网站根目录。
git用户下执行
#切换到hooks目录下
$ cd /home/git/blog.git/hooks
#创建文件
$ vim post-receive
添加如下
#!/bin/bash
GIT_REPO=/home/git/blog.git
TMP_GIT_CLONE=/home/git/tmp/hexo_tmp #在这个文件夹下随便创建文件,不然出错
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
关闭git用户的shell权限
#执行
$ vim /etc/paswd
将最后一行
git:x:1000:1000::/home/git:/bin/bash
#改为
git:x:1000:1000::/home/git:/usr/bin/git-shell
本地操作
配置本地Hexo的_config.yml
deploy:
type: git
repo: git@你的服务器IP:/home/git/blog.git
branch: master
同步到服务器
#清理、生成、部署
$ hexo clean && hexo g && hexo d
到现在已经全部完成了,可以自己进行一些配置进一步完善
问题总结
服务器使用sodu命令时无法使用
-
原因
- debian默认sodu
-
解决
执行如下
$ apt-get install sudo
systemctl: command not found
-
原因
- 系统版本旧就会没有systemctl命令
-
解决
使用service命令
$ sudo service {servicename} {stop|start|restart}
fatal: Not a git repository (or any of the parent directories): .git
- 原因
- 提示说没有.git这样一个目录
- 解决
- git init就好了
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
-
原因
- 本机git连接过服务器地址,但是服务器重装了,需要进行删除
-
解决
输入以下命令,删除文件中要连接的服务器
$ vi /Users/wangdong/.ssh/known_hosts
repository ‘xxxxxxxxx’does not exist
- 原因
- 如果要删除这个目录下的文件,这个目录下必须有文件,不然删除就是无意义的
- 解决
- 提前在该目录下新建一些文件
在clone一些git项目的时候,有些可能时间太久远,下载失败
-
解决
将git clone http:改为git clone git: