HALO搭建与设置返向代理(隐性URL设置)(无80,443端口隐藏端口)
前言(碎碎念)
这并不是我第一个搭建的博客,理论上来讲是第2个,经过多次挑选我还是选择了halo来搭建。
halo在所有的博客程序里面不算最轻也不算太大,各种设置上来讲也更加友好。
当然缺点也肯定是有的,就目前来说生态不算是太好,插件与主题不算太多。
前一个小窝放弃原因也是非常现实的,服务器有点贵(当时还在存钱组自己的服务器),阿里云的免费一过期我就选择了停止博客(同时忘记备份数据)。
好在现在有了自己的服务器,域名与备案还在就又把博客搭建上了(毕竟一个月网费都100)。
这篇文章记录并总结的我从头搭建现在博客的过程,如果需要关于halo更详细的教程可以在文章下留言~
准备
一台服务器
如果80/443不可用可能需要第二台或者前往其他问题的隐性URL处
一个域名
如果服务器是国内的则域名需要备案!
SSH连接软件
我这里使用的Xshell
halo搭建
都准备好之后就准备搭建吧~
宝塔安装
其实也可以不需要宝塔,但是我懒而且设备性能足够(13700k)所以就用的宝塔啦~
这里使用宝塔官网的一键脚本就行了(这里的是Ubuntu/Deepin安装脚本)
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec
需要其他系统的点击这里前往官网复制
安装好后进入宝塔面板选择安装nginx和MySQL(如果想使用其他数据库也行)就行了
JAR搭建
halo的搭建方式很多但本篇文章主要记录我搭建过程所以使用jar也只介绍jar
点击下载 在图中位置找到最新版本
创建程序运行用户
创建一个名为 halo 的用户(名字可以随意)
useradd -m halo
为 halo 用户创建密码
passwd halo
登录到 halo 账户
su - halo
创建初始运行环境
创建存放运行包的目录,这里以
~/app
为例(推荐就在用户文件夹里面懒得改设置)mkdir ~/app && cd ~/app
然后将下载的jar放入app文件夹中(懒得打了直接用宝塔的文件管理移)
然后创建工作目录
vim application.yaml
然后将以下内容设置完后粘贴进去
server:
# 运行端口
port: 8090 #halo端口
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 #mysql,mariadb,postgresql
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
HOST:数据库服务地址,如
localhost
PORT:数据库服务端口,如
3306
DATABASE:数据库名称,如
halo
,需要提前创建
记得创建自己的数据库噢
测试运行 Halo
运行Halo
cd ~/app && java -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
退出Halo
如果没有报错且访问正常IP+端口
Ctrl+c退出
设置为系统服务
退出 halo 账户,登录到 root 账户
还是推荐不使用root运行
exit
创建 halo.service 文件
vim /etc/systemd/system/halo.service
将以下内容复制到
halo.service
中,根据下面的配置说明进行配置。/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 StandError=inherit [Install] WantedBy=multi-user.target
JAR_PATH:Halo 运行包的绝对路径,例如
/home/halo/app/halo.jar
,注意:此路径不支持~
符号。USER:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除
User=USER
。
提示
请确保
/usr/bin/java
是正确无误的。建议将ExecStart
中的命令复制出来运行一下,保证命令有效。配置完成之后,保存即可。
重新加载 systemd
systemctl daemon-reload
运行服务
systemctl start halo
在系统启动时启动服务
systemctl enable halo
返代理设置
使用宝塔8.x及以上版本设置及其简单
NGINX
创建网站红框处可不填的哟
反代理设置1:Halo 运行包的绝对路径,例如
/home/halo/app/halo.jar
,注意:此路径不支持~
符号。 2:$host
SSL设置 使用宝塔自带的免费申请就行啦 如果需要使用自己申请的证书 将KEY与PEM填入就行。
其他问题
隐性URL设置
相信没有80/443端口并且囊中羞涩的朋友一般都选择使用隐性URL来隐藏端口
但是halo默认是不允许使用iframe
的所以使用隐性URL的朋友肯定遇见了拒绝连接的情况
这个问题也困扰了我很久我调试过很久的NGINX也发现现在能找到的教程都过时了如下
X-Frame-Options的值有三个:
(1)DENY — 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
(2)SAMEORIGIN — 表示该页面可以在相同域名页面的 frame 中展示。
(3)ALLOW-FROM https://example.com/ — 表示该页面可以在指定来源的 frame 中展示。
ALLOW-FROM
已经被删除了
不过好在我在halo的猫猫(github)上找到了
设置如下
command: --halo.security.frame-options.disabled=true
security:
frame-options:
disabled: true
mode: sameorigin
添加在
server:
# 运行端口
port: 8090 #halo端口
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 #mysql,mariadb,postgresql
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
- 感谢你赐予我前进的力量