在服务器上部署一个自动更新的hexo博客(一)基础环境配置
Last Update:
Word Count:
Read Time:
部署环境
OS: Debian GNU/Linux 10 (buster) x86_64
Kernel: 4.19.0-14-amd64
CPU: Intel Xeon Gold 6161 (1) @ 2.200GHz
Memory: 1994MiB
工具列表
- nodejs
- npm
- nginx
- code-server
- ssl证书(可选)
使用软件包管理器安装需要的软件包
在debian系统下,大部分需要的工具都已经集成在apt中了,我们只需执行以下命令即可全部安装。
1 |
|
安装code-server
Code-Server,网页版的vscode,是一个很好的用来管理hexo静态博客的前端工具。我们可以通过code-server直连服务器,同时可以执行所有权限范围内的shell指令,对于用惯了vscode的开发者来说,更是零学习成本直接上手。
不过Code-Server并没有包含在apt软件包仓库里,需要我们自行下载。
Code-Server的GitHub仓库中提供了一键安装的脚本,但是我们不用。对于中国环境来说,那个脚本的下载速度太慢了。我们可以直接进入Releases页面,下载最新的版本(截至文章写作是4.0.1)。我们可以使用wget
,cutl
,aria2
等下载工具直接下载到服务器,也可以在本地使用代理进行高速下载完成后通过scp
命令或者winscp
等图形化工具传输到服务器上。
这里演示三个命令以供参考:
第一个是通过wget在服务端单线程下载code-server安装包
BASH 共 1 行 展开1
wget https://github.com/coder/code-server/releases/download/v4.0.1/code-server_4.0.1_amd64.deb
第二个是通过aria2(如果没有安装需要先使用apt安装)多线程下载
BASH 共 1 行 展开1
aria2c -s 5 https://github.com/coder/code-server/releases/download/v4.0.1/code-server_4.0.1_amd64.deb
第三个是通过scp指令将下载到本地的code-server安装包传到服务器上
BASH 共 1 行 展开1
scp -P 22 /path/to/code-server.deb user@ip:~
将code-server安装包下载到服务器后,运行命令即可自动安装。
BASH 共 1 行 展开1
dpkg -i /path/to/code-server.deb
此时在服务器安全组上放行的8080端口,还没有办法在 http://serverip:8080/ 访问到code-server的登录页面。
因为这时候,code-server的部署还没结束。我们需要修改下它的配置文件。
Code-Server的配置文件位于~/.config/code-server/config.yaml
,进入之后,可以看到很短的几条。YAML 共 4 行 展开1
2
3
4bind-addr: 127.0.0.1:8080
auth: password
password: ……
cert: false我们首先需要修改bind-addr,将其修改为
0.0.0.0:8080
或服务器ip:你想要访问它的任何没被占用的端口
。
其次是修改password,默认的密码并不好记,请自行设置一个好记的密码。
修改完成后,通过systemd启动code-server就可以尝试进入了。登录之后,就是熟悉的vscode页面了。一般vscode的插件都可以使用。BASH 共 1 行 展开1
systemctl enable --now code-server@$USER
部署hexo博客
hexo的中文详细教程在官网都有说明,这里就不细说了。
首先通过如下命令安装hexo:BASH 共 1 行 展开1
npm install hexo-cli -g
安装完成后,找个你喜欢的目录,初始化hexo的框架,这里以
/home/aura/hexo/
作为演示。BASH 共 2 行 展开1
2cd /home/aura/hexo/
hexo init初始化完成后,便是找主题,配置文章的过程了。这些过程都可以在code-server页面下解决。
配置完成后,就要把这个博客发布了。发布的命令是:BASH 共 2 行 展开1
2hexo clean
hexo g这样会在hexo的目录中生成一个public文件夹,这里面就是用户正式访问的内容。
生成之后,我们有两种方法将这个文件夹里的内容公开到互联网上。
- 配置nginx将网页根目录指向public
- 将public复制到nginx默认的
/var/www/html/
文件夹下
这两种方法的差别在下一节配置nginx的时候会提及。
配置nginx
安装好nginx后,nginx就已经是启用状态了。通过 http://serverip/
就可以访问到nginx的默认html页。这个页面位于 /var/www/html/
里面。
nginx的配置文件位于 /etc/nginx/
文件夹中。通过修改它我们能达到很多目的。
配置仅特定域名访问
定位到/etc/nginx/sites-avaliable/,新建一个空的配置文件,完整文件名为blog,里面的内容可以参考defalut配置文件。1
2
3
4
5
6
7
8
9
10
11server {
listen 80; #访问服务的端口,ipv4
listen [::]:80; #访问服务的端口,ipv6
server_name example.com; # 访问服务的特定域名
root /home/aura/hexo/public; #这里是将访问的网页目录直接指向hexo生成的文件夹
index index.html index.htm index.nginx-debian.html; #要寻找的首页文件
location / { # 这一部分可以进行url路由配置
index index.html index.htm;
}
}
保存之后,创建一个文件链接到sites-enabled,就可以重启nginx服务了。1
2ln -s /etc/nginx/sites-avaliable/blog /etc/nginx/sites-enabled/
systemctl restart nginx
之后,只要服务器配置好了域名解析,且国内域名通过ICP备案,就可以通过域名正常访问博客了。
如果有多个域名解析到服务器ip,我们需要给它ban掉,保证只有一个入口能访问到网页。
在这里,我们新建一个名为ban的配置文件单独管理。1
2
3
4
5
6
7
8
9
10server {
listen 80;
listen [::]:80;
server_name _; # 这里指所有域名,包括ip,也可以指定为不想让其访问的域名
location / {
return 404; # 如果用这种方式访问就返回404
index index.html index.htm;
}
}
配置Code-Server反向代理
配置code-server反向代理的过程和上面发布网页并没有太大区别,直接上配置文件示例即可理解。(一般来说照着改改就能成)1
2
3
4
5
6
7
8
9
10
11
12
13server {
listen 80; #访问服务的端口,ipv4
listen [::]:80; #访问服务的端口,ipv6
server_name codeserver.example.com; # 访问服务的特定域名
location / { # 这一部分可以进行url路由配置
proxy_pass http://localhost:8080/; # 访问code-server的本地地址
proxy_set_header Host $host:80/path;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip; # 使用gzip压缩请求
}
}
配置url路由
如果要让code-server和博客使用同一个主机名和域名,就需要配置url路由。同样的,也是修改location这一段配置:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19server {
listen 80; #访问服务的端口,ipv4
listen [::]:80; #访问服务的端口,ipv6
server_name example.com; # 访问服务的特定域名
root /home/aura/hexo/public; #这里是将访问的网页目录直接指向hexo生成的文件夹
index index.html index.htm index.nginx-debian.html; #要寻找的首页文件
location / { # 这一部分可以进行url路由配置
index index.html index.htm;
}
location /code-server/ { # code-server的url路由
proxy_pass http://localhost:8080/; # 访问code-server的本地地址
proxy_set_header Host $host:80/path;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip; # 使用gzip压缩请求
}
}
这样配置之后,重启nginx,就可以在 http://example.com/code-server/
访问到code-server编辑器的界面了。
(可选)配置HTTPS和HTTP自动跳转
当然,有条件的话我们可以给我们的博客使用https,提高博客的安全性。使用https的话,nginx的配置文件需要进行以下改动(以上面配置好code-server url路由的配置文件举例)
不过在此之前,需要将证书文件上传到服务器,这里示例的文件地址为:
- /home/aura/cert/cert.pem
- /home/aura/cert/key.pemNGINX 共 38 行 展开
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
33
34
35
36
37
38server {
# https将80端口修改为443端口
listen 443; #访问服务的端口,ipv4
listen [::]:443; #访问服务的端口,ipv6
server_name example.com; # 访问服务的特定域名
root /home/aura/hexo/public; #这里是将访问的网页目录直接指向hexo生成的文件夹
index index.html index.htm index.nginx-debian.html; #要寻找的首页文件
# ssl配置
ssl on; # 启用ssl
ssl_certificate /home/aura/cert/cert.pem; # 证书公钥地址
ssl_certificate_key /home/aura/cert/key.pem; # 证书私钥地址
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / { # 这一部分可以进行url路由配置
index index.html index.htm;
}
location /code-server/ { # code-server的url路由
proxy_pass http://localhost:8080/; # 访问code-server的本地地址
proxy_redirect http:// https://; # 将外部的https请求重定向为内部的http请求
proxy_set_header Host $host:443/path; # 这里也是修改为443
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip; # 使用gzip压缩请求
}
}
# 以http模式访问的时候自动跳转为https
server {
listen 80;
listen [::]:80;
server_name example.com;
rewrite ^(.*)$ https://example.com;
}