租云服务器

租一个有公网ip的云服务器,我这里买了阿里云99块钱一年的服务器(2G2内核够用了)


申请域名

在阿里云中(或者别的地方)申请一个域名,将其映射到上面购买的云服务器公网IP上;

如果不介意直接通过ip访问,那么不需要申请域名(有点麻烦说实话)


部署Halo

依赖环境

检查 JDK为17,如果没有则安装

 wget https://download.oracle.com/java/17/archive/jdk-17.0.10_linux-x64_bin.deb -O jdk.deb
 sudo apt install jdk.deb

检查 Mysql安装

 sudo apt install mysql-server
  • 检查运行:systemctl status mysql

  • 创建用户管理:

     create user 'username'@'host' identified by 'password'; 
     grant all privileges on *.* to 'username'@'%' with grant option; 
     flush privileges; 

jar部署

按照官网教程走使用 JAR 文件部署 | Halo 文档

添加 halo 用户部署

 useradd -m halo
 ​
 # 设置密码
 passwd halo
 ​
 # 切换到 halo 用户
 su - halo

存放运行包:

 mkdir ~/app && cd ~/app
 ​
 # 修改为指定版本的
 wget https://dl.halo.run/release/halo-2.16.2.jar -O halo.jar

创建工作目录:

 mkdir ~/.halo && cd ~/.halo
 ​
 # 创建运行配置文件
 vim application.yaml

编写配置文件 application.yaml

  • r2dbc 具体看官方文档的介绍

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

运行测试:

 cd ~/app && java -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/

记得配置服务器的安全组


nginx反代

如果只需要直接通过ip访问,就不需要配置反代

这里是需要用域名进行访问,因此需要配置反代

安装 nginx

 sudo apt install -y curl gnupg2 ca-certificates lsb-release
 sudo apt install -y nginx

开机自启动:

 sudo systemctl start nginx
 sudo systemctl enable nginx

编写反代规则:

  • 因为域名默认访问的是80端口,所以监听 80 端口并转发

 sudo vim /etc/nginx/conf.d/blog.conf
 http {
         server {
                 listen 80;
                 server_name 你的域名;
 ​
                 location / {
                         proxy_pass http://localhost:8099;
                         proxy_set_header Host $host;
                         proxy_set_header X-Real-IP $remote_addr;
                         proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
                         proxy_set_header X-Forwared-Proto $scheme;
 ​
                 }
         }
 }

配置Halo为系统服务

将 Halo 配置为

 [Unit]
 Description=Halo Service
 Documentation=https://docs.halo.run
 After=network-online.target
 Wants=network-online.target
 ​
 [Service]
 Type=simple
 User=halo
 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
 ​
 StandError=inherit
 ​
 [Install]
 WantedBy=multi-user.target
  • 如果是 root 用户运行,那么将 User=halo 删除

网站备案

配置好域名访问后,直接访问会提示该网站未备案,因此需要先进行备案;

备案完成以后,就能通过自己设置的域名来访问自己的博客啦

如果自己不需要通过ip访问的话,可以在云服务器的安全组关闭掉博客的端口;


SSL配置

上面的步骤完成后,是能够通过 http 访问的;

但是无法通过 https 访问:

  • 一是云服务器的安全组一般是不会开启 443 端口(HTTPS走的是443端口,而HTTP走的是 80 端口)

  • 二是 nginx 没有配置 443 的转发规则;

可以申请个人的免费SSL证书,

阿里云支持每年申请20张免费证书,每张证书有限期是3个月;

个人觉得签发也挺快,等待了不到10分钟就好了;

申请成功后,将证书上传到云服务器中,一般包含两个文件: xxx.keyxxx.pem

可以在 /etc/nginx/ 中新建一个 cert 文件夹存放这些证书;

然后在配置 nginx:

server {
	listen 443 ssl;
	# 填写证书绑定的域名
	server_name xxxx;
	# 填写证书文件绝对路径
	ssl_certificate /etc/nginx/cert/xxxx.pem;
	# 填写证书私钥文件绝对路径
	ssl_certificate_key /etc/nginx/cert/xxxx.key;
	ssl_session_timeout 5m;
	# 自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
    # TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
	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 / {
		proxy_set_header HOST $host;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

		proxy_pass http://localhost:8099/;
	}
}

如果想要强制使用 https 访问网站,可以通过将 http 请求重写为 https

server {
	listen 80; # 端口
	server_name xxx;  # 域名
	client_max_body_size 50m;

	gzip  on;
	sendfile  on;
	
	#将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
}

Halo2配置

首先要先安装 ”插件市场“ 这个插件

评论

需要安装评论组件才能开启

邮件通知

在设置 -> 邮件通知 部分设置自己的有向,用于发送邮件

如果使用的是 outlook 邮箱,同时这个是个人账号(无法登陆微软的Admin Center)那么建议换个邮箱

导航栏的icon

在编辑菜单项中的元数据中,key 填入 icon,value 填入 https://remixicon.cn/icon/ 中图标对应的 class