从零开始搭建自己的Hexo博客
基于私有服务器搭建,Nginx
+ Git
准备工作
在自己的电脑上部署好Hexo环境
准备一台CentOS系统的服务器(教程中使用的是Centos7
)
配置Nginx 安装Nginx 1 2 3 sudo yum install -y epel-release sudo yum -y update sudo yum install -y nginx
安装成功后,默认的目录为/usr/share/nginx/html
,新建一个blog
文件夹用来专门存储Hexo生成的静态文件,同时新建/etc/nginx/ssl
文件夹用于存储证书:
1 2 mkdir /usr/share/nginx/blog mkdir /etc/nginx/ssl
启动Nginx 1 2 systemctl start nginx systemctl enable nginx
获取免费SSL证书 (acme 协议)
acme 协议一般有两种方式验证: http 和 DNS 验证,这里使用HTTP进行验证,更多方式可参照官方文档 。
本教程以80
(HTTP)和443
(HTTPS)端口为例配置Nginx。大部分服务器都会默认开放80
和443
端口,证书生成需要保证网站的HTTP正常访问,因此如果没有默认开启80
端口,需手动打开。
安装acme.sh 1 2 3 yum install -y socat curl https://get.acme.sh | sh -s email=<email> alias acme.sh=~/.acme.sh/acme.sh
修改Nginx配置文件 在命令行输入命令打开Nginx配置文件:
1 vi /etc/nginx/nginx.conf
滚动文件至末尾,将未被注释的server
字段(HTTP服务器)中的server_name
为你的域名,root
目录改为/usr/share/nginx/blog
:
1 2 3 4 5 6 7 8 9 10 { # ... server { listen 80; listen [::]:80; server_name <domain.com>; # <domain.com>替换为自己的域名 root /usr/share/nginx/blog; # ... } }
保存并退出后,重启Nginx:
生成证书 通过Nginx配置获取根目录,<domain.com>替换为自己的域名:
1 acme.sh --issue -d <domain.com> --nginx /etc/nginx/nginx.conf
命令行输出一下信息时,则已经成功生成证书:
1 2 3 4 5 6 7 8 [Wed Feb 7 19:36:00 UTC 2024] Cert success. -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- [Wed Feb 7 19:36:00 UTC 2024] Your cert is in : /root/.acme.sh/<domain.com>_ecc/<domain.com>.cer [Wed Feb 7 19:36:00 UTC 2024] Your cert key is in : /root/.acme.sh/<domain.com>_ecc/<domain.com>.key [Wed Feb 7 19:36:00 UTC 2024] The intermediate CA cert is in : /root/.acme.sh/<domain.com>_ecc/ca.cer [Wed Feb 7 19:36:00 UTC 2024] And the full chain certs is there: /root/.acme.sh/<domain.com>_ecc/fullchain.cer
当生成过程中出现任何错误导致失败时,在Debug后最快捷的从新开始的方式是直接删除/root/.acme.sh
文件夹并重新安装acme.sh:
1 2 rm -rf .acme.sh curl https://get.acme.sh | sh -s email=<email>
设置证书存储位置并自动更新 1 2 3 4 acme.sh --install-cert -d <domain.com> \ --key-file /etc/nginx/ssl/server.key \ --fullchain-file /etc/nginx/ssl/server.crt \ --reloadcmd "service nginx force-reload"
配置HTTPS服务 在命令行打开Nginx配置文件:
1 vi /etc/nginx/nginx.conf
把最后被注释的server
字段(HTTPS服务器)解除注释,并修改server_name
、root
、ssl_certificate
和ssl_certificate_key
的值,server_name
和root
与HTTP服务器保持一致,ssl_certificate
和ssl_certificate_key
改为对应证书文件的路径。最后修改后的配置文件(部分)如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 { # ... # Settings for a TLS enabled server. # server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name <domain.com>; # <domain.com>替换为自己的域名 root /usr/share/nginx/blog; ssl_certificate "/etc/nginx/ssl/server.crt"; ssl_certificate_key "/etc/nginx/ssl/server.key"; # ... } }
保存并退出后,重启Nginx:
常用命令 启动Nginx
设置开机自启动
停止Nginx
重启Nginx
查询Nginx状态
重新加载Nginx配置文件
取消开机自启动
配置Git仓库 安装Git 首先先在命令行输入git
检查是否已安装好Git,如果没有,使用以下代码安装:
1 2 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel yum install -y git
创建用户 在服务器上创建一个用户名为git
的用户,并设置密码。
创建Git仓库 切换到git用户并创建用于储存Hexo静态文件的Git仓库:
1 2 3 su git cd /home/git/git init --bare blog.git
成功创建:
1 Initialized empty Git repository in /home/git/blog.git/
创建钩子 (Githook) 1 2 cd blog.git/hooksvi post-receive
在文件中写入以下指令:
1 2 #!/bin/sh git --work-tree=/usr/share/nginx/blog --git-dir=/home/git/blog.git checkout -f
修改文件及仓库权限:
1 2 3 4 chmod +x post-receive exit chown -R git:git /home/git/blog.git chown -R git:git /usr/share/nginx/blog
RSA公私钥生成
用于免密登录git用户
在本机(以Windows为例)打开C:/Users/<username>/.ssh
文件夹,若没有id_rsa
及id_rsa.pub
文件(之前未曾生成过密钥),则输入以下指令生成密钥:
确定以持有密钥后,将公钥拷贝到服务器上,在本机的Git Bash输入:
1 ssh-copy-id -i C:/Users/<username>/.ssh/id_rsa.pub git@<ip>
限制git用户权限 查找git-shell位置并将路径添加到/etc/shells
文件的末尾(如不存在):
修改/etc/passwd
中git用户的权限,使其只能使用git-shell:
1 2 git:x:1001:1001::/home/git:/usr/bin/git-shell
配置Hexo 修改Hexo的_config.yml
配置文件中的deploy
设置为:
1 2 3 4 deploy: type: git repo: git@<ip>:/home/git/blog.git branch: master
清除并部署:
待完成后访问域名就可以看到自己的博客啦!