租云服务器
租一个有公网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.key 和 xxx.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