文章目录
一、在 Linux 服务器部署 Halo
1.环境配置
centos 7.0 x64
512MB内存及以上
2.服务器配置
2.1 更新软件包
请确保服务器的软件包已经是最新的。
yum update -y
2.2 安装 Java 运行环境
- 若已经存在 Java 11 运行环境的可略过这一步,但路径要相同。
yum安装 openjdk11
yum install -y java-11-openjdk
安装位置默认为/usr/lib/jvm/,修改目录名
mv -v java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64 jdk11
修改配置文件
vim /etc/profile
将光标移动到最后,在后面添加
export JAVA_HOME=/usr/lib/jvm/jdk11
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
立即生效
source /etc/profile
检测是否安装成功
java -version
openjdk version “11.0.12” 2021-07-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.12+7-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.12+7-LTS, mixed mode, sharing)
3.安装 Halo
3.1 下载运行包
创建存放运行包的目录
mkdir ~/app && cd ~/app
下载运行包
wget https://dl.halo.run/release/halo-1.4.11.jar -O halo.jar
创建工作目录
mkdir ~/.halo && cd ~/.halo
下载示例配置文件到工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
3.2 运行 Halo
Halo 的整个应用程序只有一个 Jar 包,且不包含用户的任何配置,它放在任何目录都是可行的。需要注意的是,Halo 的整个额外文件全部存放在 ~/.halo 目录下,包括 application.yaml(用户配置文件),template/themes(主题目录),upload(附件上传目录),halo.db.mv(数据库文件)。一定要保证 ~/.halo 的存在,你博客的所有资料可都存在里面。所以你完全不需要担心安装包的安危,它仅仅是个服务而已。
启动测试
cd ~/app && java -jar halo.jar
如看到以下日志输出,则代表启动成功.
run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090
run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener : Halo has started successfully!
- 打开
http://ip:端口号即可看到安装引导界面。
提示
以上的启动仅仅为测试 Halo 是否可以正常运行,如果我们关闭 ssh 连接,Halo 也将被关闭。要想一直处于运行状态,请继续看下面的教程。
3.3 进阶配置
上面我们已经完成了 Halo 的整个配置和安装过程,接下来我们对其进行更完善的配置,比如:需要开机自启?,更简单的启动方式?
实现以上功能我们只需要新增一个配置文件即可,也就是使用 Systemd 来完成这些工作。
下载 Halo 官方的 halo.service 模板
curl -o /etc/systemd/system/halo.service --create-dirs https://dl.halo.run/config/halo.service
下载完成之后,我们还需要对其进行修改。
修改 halo.service
vim /etc/systemd/system/halo.service
打开之后我们需要进行修改以下三处
[Unit]
Description=Halo Service
Documentation=https://halo.run
After=network-online.target
Wants=network-online.target
[Service]
User=USER #删去此行
Type=simple
ExecStart=/usr/lib/jvm/jdk11/bin/java -server -Xms128m -Xmx128m -jar /root/app/halo.jar # 修改此行
ExecStop=/usr/lib/jvm/jdk11/bin/kill -s QUIT $MAINPID # 修改此行,上行也别忘了
Restart=always
StandOutput=syslog
StandError=inherit
[Install]
WantedBy=multi-user.target
参数:
- -Xms256m:为 JVM 启动时分配的内存,请按照服务器的内存做适当调整,512 M 内存的服务器推荐设置为 128,1G 内存的服务器推荐设置为 256,默认为 256。
- -Xmx256m:为 JVM 运行过程中分配的最大内存,配置同上。
- YOUR_JAR_PATH:Halo 安装包的绝对路径,例如
/root/app/halo.jar。 - USER:运行 Halo 的系统用户,如果有创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除
User=USER。
提示:
- 如果你不是按照上面的方法安装的 JDK,请确保
/usr/bin/java的路径是正确无误的,类似/usr/lib/jvm/jdk11/bin/java。 - systemd 中的所有路径均要写为绝对路径,另外,
~在 systemd 中也是无法被识别的,所以你不能写成类似~/halo.jar这种路径。
修改 service 文件之后需要刷新 Systemd
systemctl daemon-reload
运行服务
systemctl start halo
在系统启动时启动服务
systemctl enable halo
查看 Halo 的运行状态
service halo status
完成以上操作即可通过 IP:端口 访问了。不过在此之前,最好先完成后续操作,我们还需要让域名也可以访问到 Halo,请继续看配置域名访问。
3.4 更新 Halo
备份数据
cp -r ~/.halo ~/.halo.bak
备份旧的安装包
mv halo.jar halo.jar.bak
下载最新的 Halo 安装包
wget https://dl.halo.run/release/halo-版本号.jar -O halo.jar
测试是否能够正常启动
java -jar halo.jar
重启应用
service halo restart
二、配置域名访问
1.使用 Nginx 进行反向代理
1.1 安装 Nginx
添加 Nginx 源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安装 Nginx
sudo yum install -y nginx
启动 Nginx
sudo systemctl start nginx.service
设置开机自启 Nginx
sudo systemctl enable nginx.service
- 注:如果出现Nginx启动失败,并显示80端口占用,运行以下代码释放80端口
CMD=`lsof -i:"80" | awk '{print $1}' | grep -v "COMMAND" | sort -u` && systemctl disable ${CMD} && systemctl stop ${CMD} && killall -9 ${CMD}
1.2 配置 Nginx
下载 Halo 官方的 Nginx 配置模板
curl -o /etc/nginx/conf.d/halo.conf --create-dirs https://dl.halo.run/config/nginx.conf
下载完成之后,我们还需要对其进行修改
使用 vim 编辑 halo.conf
vim /etc/nginx/conf.d/halo.conf
打开之后我们可以进行修改
server {
listen 80;
#强制转发https
rewrite ^(.*)$ https://${server_name}$1 permanent;
server_name example.com;
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://127.0.0.1:8090/;
}
}
#开启ssl
server {
listen 443 ssl;
server_name example.com;
client_max_body_size 1024m;
#添加证书
ssl_certificate "/home/cert/www/cert.pem";
ssl_certificate_key "/home/cert/www/cert.key";
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
# charset utf-8;
location / {
proxy_pass http://127.0.0.1:8090/;
proxy_redirect off;
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;
}
}
注意:请把
example.com改为自己的域名。
pem、key证书上传至/home/cert/www/目录下
修改完成之后
检查配置是否有误
sudo nginx -t
重载 Nginx 配置
sudo nginx -s reload
到这里,关于 Nginx 的配置也就完成了,现在你可以访问一下自己的域名,并进行 Halo 的初始化了。
在设置了反向代理之后,请一定记得去 Halo 的管理端设置一下正确的博客地址,否则可能会造成资源获取不成功。
三、其他事项
申请SSL证书
在宝塔面板添加域名,申请ssl证书,选择DNS验证(支持通配符)选择DNS接口,申请证书
在DNS解析添加记录
类型: TXT
域名: _acme-challenge.example.com
记录值: ZLuAPKLq5_****************XonwSHwivY