通过创建远端git仓库,将本地的hexo博客部署到远端服务器并通过Nginx服务运行
参考文章:芒果浩明
已将nginx替换为Caddy,相关文章见使用Caddy替换Nginx运行网站
操作环境及先决条件
- 本地macOS Catalina
- centOS 7的VPS
- 本地需要的相关环境:git、nodejs、hexo、ssh-key,相关文章见hexo博客搭建入门
服务器配置
使用root身份登录服务器ssh root@IP
创建网站目录
1 |
|
安装配置git
安装git
sudo yum install git
创建git用户
adduser git
假如没有提示输入密码,则
passwd git
设置密码初始化git仓库
1
2
3
4# 设置文件可写
chmod 740 /etc/sudoers
# 编辑用户配置文件
vim /etc/sudoers找到
root ALL=(ALL) ALL
,换行添加git ALL=(ALL) ALL
1
2
3
4
5
6
7# 修改回文件权限
chmod 440 /etc/sudoers
su git # 切换到git用户
cd /home/git # 切换到git用户目录
mkdir blog.git # 创建git仓库文件夹,以blog.git为例
cd blog.git # 进入仓库目录
git init --bare # 使用--bare参数初始化为裸仓库确认文件夹权限
1
2
3
4
5
6# 确认文件夹权限
sudo chown git:git -R /var/www/blog
sudo chown git:git -R /home/git/blog.git
# 查看这两个文件夹是不是都属于git:git
ll /home/git/
ll /var/www/1
2
3
4
5
6
6. 配置Git hooks
```bash
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部署的时候输入git的用户密码即可
本地电脑创建SSH key(已有则跳过此步骤)
ssh key是让我们每次登陆的时候无需输入密码,通过本机机器码验证的方式
1
2
3
4
5
6
7# 查看本地的SSH key
cd ~/.ssh
ls *.pub
# 创建新的SSH key
ssh-keygen -t rsa -C "email@example.com"
# 将key加入用户列表,否则每次都会需要验证电脑登录密码
ssh-add -k /Users/apple/.ssh/id_rsa复制
cat ~/.ssh/id_rsa.pub
的内容ssh连接到服务器,配置ssh秘钥登录
1
2
3cd /home/git # 切换到git用户目录
mkdir .ssh # 创建.ssh目录
sudo vim .ssh/authorized_keys将复制的本地公钥粘贴到到
authorized_keys
文件中,编辑登录配置
sudo vim /etc/ssh/sshd_config
1
2
3
4
5#禁用密码验证
PasswordAuthentication no
#启用密钥验证
RSAAuthentication yes
PubkeyAuthentication yes重启ssh服务
1
2su root # 或者exit也可以退出到root用户
service sshd restart验证git用户能否使用ssh免密登录服务器:在本地终端,输入
ssh git@IP
如果出现
permission denied
的的话,可能是权限问题1
2chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys注意 .ssh 目录与 authorized_keys 的拥有者都必须是你创建的那个用户。比如我创建了一个叫 wanghao 的用户,寻它应该是 .ssh 与 authorized_keys 的拥有者,并且必须要设置合适的权限:
安装和配置nginx
nginx是比较主流的网页服务器,大部分的文章都会建议使用。但是nginx的https连接配置较为复杂,如果没有特别的学习需求可以换用更为简单的Caddy。相关文章见Caddy官方文档
root用户身份登录到服务器
1
2
3
4
5
6
7
8# 添加nginx到yum源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装nginx
sudo yum install -y nginx
# 启动nginx
sudo systemctl start nginx.service
# 设置开机启动
sudo systemctl enable -n nginx.service在浏览器输入服务器IP地址,如果出现403 FORBIDDEN页面则说明nginx启动成功;
如果浏览器提示无法链接,请检查防火墙是否开启,如果开启
- 使用
systemctl stop firewalld
暂时关闭防火墙; - 或者使用
firewall-cmd --add-port=80/tcp --permanent
开启防火墙的80端口,再使用systemctl restart firewalld.service
重启防火墙。 - 关于防火墙的详细配置,可见本博客文章VPS和Shadowsocks配置最后一部分
nginx常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#启动
service nginx start
#停止
nginx -s stop
#查看nginx进程
ps -ef | grep nginx
#平滑启动nginx
nginx -s reload
#强制停止nginx
pkill -9 nginx
#检查对nginx.conf文件的修改是否正确
nginx -t -c /etc/nginx/nginx.conf
nginx -t
#查看版本
nginx -v
# 关闭开机启动
sudo systemctl disable -n nginx.service- 使用
配置nginx
1
2
3cd /etc/nginx/conf.d
sudo cp default.conf default.bak#备份
sudo vim default.conf配置文件参考
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24server {
listen 80;
server_name localhost;
root /var/www/blog; // 网站根目录
server_name annewqx.top www.annewqx.top; // 域名,没有可跳过
access_log /var/log/nginx/blog_access.log;
error_log /var/log/nginx/blog_error.log;
error_page 404 = /404.html;
location / {
root /var/www/blog;
index index.html index.htm;
}
location / {
root /var/www/blog;
if (-f $request_filename) {
rewrite ^/(.*)$ /$1 break;
}
}
location /nginx_status {
stub_status on;
access_log off;
}
}nginx -s reload
重启nginx
本地操作
- 打开本地博客根目录下的_config.yml文件,找到最后的deploy配置,添加:
1 |
|
至此,hexo三联就可以把博客部署到vps了。可以在浏览器输入服务器的IP地址查看。
如果想要通过域名访问,则需要自己在域名管理那里修改解析的线路使得域名解析指向vps服务器的ip
git 配置完SSH 以后,push 或者pull 的时候每次都提示Enter passphrase for key ‘/Users/Username/.ssh/id_rsa’可以这样解决
一次性:终端输入
eval ssh-agent
,ssh-add
本次开机内永久生效:终端输入ssh-add -k /Users/Username/.ssh/id_rsa
域名配置(非必须)
参考文章:
博客已经搭好了,但是叫朋友看
购买域名
注册并激活NameSilo账号
搜索并购买想要注册的域名,使用优惠码
go2think
或okoff
可减$1付款,如果使用支付宝,则支付宝需要是绑定了邮箱的账号。我购买的时候支付宝扣了钱后半分钟又退回了,返回了失败,最后还是用的PayPal。
这里说一下题外话,最便宜的一般是.xyz域名,不到1刀,但是如果订单不满1刀的话是无法使用优惠券的。.top的域名原价$1.49/year,优惠后约等于不要钱啊。
另外长远考虑,不建议购买.me等国内无法备案的域名。
域名解析
打开域名管理页面,选择option栏下的蓝地球(DNS管理)按钮
删除原本的四个park解析记录
添加A记录,一条为example.com,一条为www.example.com
DNS解析完成后生效大改需要十五分钟
可以使用域名连接你的博客了,在浏览器输入域名查看结果