NAT服务器搭配CDN创建halo博客系统

NAT服务器搭配CDN创建halo博客系统

最近在市面上看到好多NAT服务器,在同等配置下NAT服务器价格相比起普通云服务器会便宜很多。
因为通常云服务器都是拥有独立IPV4的,而NAT服务器却是共享IP只有数个或者数十个转发端口。
今天就来玩一下NAT服务器搭配CDN创建halo个人博客网站。

说明:

halo博客系统支持docker、docker-compose、jar等等方式部署。本文使用ar方式部署。

  • 一台NAT服务器

  • ssh工具

  • java环境

  • mysql数据库

1、配置环境

由于使用jar方式部署halo需要使用到java环境,所以需要安装java环境。

第一步,先使用ssh工具连接NAT服务器。
注意:由于NAT服务器是共享IP,所以会有端口转发,需要看清楚自己的NT服务器地址和端口分别是什么。比如我的就是63982

连上服务器之后,先安装java环境。
由于halo博客系统需要的最低的JDK版本是17,所以我们最低也要安装openjdk-17才行。
输入命令:

sudo apt install openjdk-17-jre-headless -y

E: Unable to locate package openjdk-17-jre-headless
#若是出现如上错误则代表需要更换一下Ubuntu的镜像源

#先备份当前镜像源
cp /etc/apt/sources.list
#使用vim修改镜像源
vim /etc/apt/sources.list

#添加镜像源   此为Ubuntu20.04
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse

apt-get update
#更新,然后重新输入安装JDK命令即可。

安装完成后,输入:

java -version

出现版本号就是安装成功。

下一步,安装MySQL数据库。
如果你不打算使用MySQL或者就想使用默认的H2数据库,那么可以跳过这一步。

安装MySQL,输入命令:

apt install mysql-server -y #在输入 apt install mysql-server在此处连按两下‘TAB’键,就会出现可选的版本。
#halo博客对mysql数据库的版本要求是5.7以上。

查看一下MySQL数据库是否正常运行。

systemctl status mysql

接下来,创建halo数据库。

输入命令:

mysql -uroot -p #隐藏式输入密码,密码为root账户的密码。

输入命令创建数据库。

create database halo2 character set utf8mb4 collate utf8mb4_bin;
#创建一个名为halo2的数据库 

exit #退出mysql

到此,环境配置结束。

2、安装halo博客系统

先创建一个./halo2文件夹

mkdir ~/.halo2  #在指定目录创建文件夹 如mkdir /home/.halo2 就是在home目录中创建一个名为.halo2的文件夹
cd ~/.halo2  #进入目录

vim application.yaml #创建halo的配置文件。

将配置文件修改并保存好。

server:
  # 运行端口
  port: 8090
spring:
  # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
  r2dbc:
    url: r2dbc::pool:mysql://127.0.0.1:3306/halo2
    username: root
    password: 123456 #密码
  sql:
    init:
      mode: always
      # 需要配合 r2dbc 的配置进行改动
      platform: mysql
halo:
  caches:
    page:
      # 是否禁用页面缓存
      disabled: true
  # 工作目录位置
  work-dir: ${user.home}/.halo2  #例如/home/.halo2
  # 外部访问地址
  external-url: http://localhost:8090
  # 附件映射配置,通常用于迁移场景
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x

如果没有安装和配置数据库,那么使用默认即可。

server:
  # 运行端口
  port: 8090
spring:
  # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
  r2dbc:
    url: r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE
    username: admin
    password: 123456
  sql:
    init:
      mode: always
      # 需要配合 r2dbc 的配置进行改动
      platform: h2
halo:
  caches:
    page:
      # 是否禁用页面缓存
      disabled: true
  # 工作目录位置
  work-dir: ${user.home}/.halo2  #例如/home/.halo2
  # 外部访问地址
  external-url: http://localhost:8090
  # 附件映射配置,通常用于迁移场景
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x

接下来创建一个存放halo运行包的文件夹。

mkdir ~/halo  cd ~/halo     #可指定目录不必非要当前用户目录。

wget https://dl.halo.run/release/halo-2.16.0-rc.2.jar -O halo.jar

3、测试运行halo博客

先在NAT服务器管理面板中添加端口转发。
我们要转发的内部端口为8090。

进入halo目录运行halo.jar。

cd ~/halo

java -jar halo.jar --spring.config.additional-location=optional:file:XXX
#注意 XXX为你的.halo2文件目录 如 /home/.halo2
#如果提示权限不足,那使用chmod 赋予halo.jar运行权限即可。

然后在浏览器输入ip+转发端口号。

由于这是测试运行的命令,所以断开ssh连接时,halo也会被关闭,所以我们需要使用Systemd让其作为服务运行。

vim /etc/systemd/system/halo.service
[Unit]
Description=Halo Service
Documentation=https://docs.halo.run
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=USER
ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar JAR_PATH --spring.config.additional-location=optional:file:/home/halo/.halo2/
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog
#JAR_PATH为halo运行包的绝对路径。
StandError=inherit

[Install]
WantedBy=multi-user.target

配置完后保存退出即可。

重新加载Systemd

systemctl daemon-reload

运行服务

systemctl start halo

现在halo就作为服务在后台运行了,即便断开ssh也能正常运行。

4、配置CDN使用域名访问博客

由于我们没有使用Nginx一类的反代理工具,所以我们这里使用CDN来进行解析。

进入CDN控制台
新增网站

填好源IP和端口,如果你的NAT服务器是域名地址,也可以直接填写域名地址和端口。

由于我们是使用了非标准端口,所以回源协议只能选择http,不可以选择https或者跟随协议。

将CDN服务商提供给我们的CNAME解析到我们的域名中。

现在就可以直接通过域名访问我们的halo博客了。

至此,博客就顺利搭建完毕了。

5、给网站开启HTTPS

由于我们是NAT服务器,所以无法走443端口。但是我们可以利用CDN来开启HTTPS。

原站不开启HTTPS,CDN节点开启HTTPS。

在CDN控制台中,上传我们域名的SSL证书。然后开启https监听,选择我们上传的证书。


回源协议依旧使用http。

我们就成功给网站开启了https。