200字
基于LNPJ的博客平台搭建
2026-02-08
2026-02-09

基于LNPJ的博客平台搭建

LNPJ环境概述

Linux : 底层操作系统平台

Nginx : 高性能 Web 服务器及负载均衡器

PostgreSQL:对象-关系型数据库管理系统

Java : 后端业务逻辑开发语言 (JDK 21)

前置任务

1初始化服务器

首先,我们最少需要一台服务器(多台更好),系统可选(debian系、redhat系、arch系)

这里我用的是Debian系的ubuntu

我就用三台服务器来进行演示

1 反向代理服务器  IP地址 192.168.122.10
2 数据库服务器   IP地址 192.168.122.20
3 后端服务器		IP地址 192.168.122.30

首先互ping一下能不能通 再进行下面的操作

更改主机名 增加可读性

hostnamectl set-hostname nginx1
hostnamectl set-hostname pgsql1
hostnamectl set-hostname halo1

2安装所需要的服务

[root@nginx1 ~]#apt install nginx #安装ngnix
[root@pgsql1 ~]#apt install postgresql postgresql-contrib#安装pgsql postgresql-contrib是由社区维护的扩展包集合 包含了许多额外的功能和工具 这些功能没有被包含在PostgreSQL的核心安装包中
[root@halo1 ~]#apt install postgresql-client openjdk-21-jdk#安装pgsql的客户端 和jdk21

3配置服务

[root@nginx1 ~]#systemctl enable --now nginx #开启并且自启动nginx
接下来可以通过ip地址访问 会出现相对的nginx页面
#初始化数据库服务器
[root@pgsql1 ~]#systemctl enable --now postgresql #开启并且自启动pgsql
#修改配置文件 开启监听
[root@pgsql1 ~]#vim /etc/postgresql/16/main/postgresql.conf
#在pg_hba.conf中添加内网白名单(也可以添加所有连接到白名单)
#添加所有连接到白名单: 
host  all  all  0.0.0.0/0  scram-sha-256
#测试有没有监听端口
ss -ntl
LISTEN          0               200                             0.0.0.0:5432                           0.0.0.0:* 
#进入pgsql完成数据库初始化
[root@pgsql1 ~]#sudo -u postgres psql
psql (16.11 (Ubuntu 16.11-0ubuntu0.24.04.1))
Type "help" for help.

postgres=# CREATE DATABASE halo;
CREATE DATABASE
postgres=# CREATE USER halo WITH ENCRYPTED PASSWORD '123456';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE halo TO halo;
GRANT
postgres=# \c halo
postgres=# GRANT ALL ON SCHEMA public TO halo; #连接到 halo 数据库,赋予模式权限
\q #退出

解释一下pg_hba.conf的字段含义:

字段含义
TYPE连接类型:local(本地socket)/host(TCP/IP)
DATABASE允许访问的数据库名,all = 所有库
USER允许的数据库用户名,all = 所有用户
ADDRESS客户端IP地址或网段
METHOD认证方式

再解释一下认证方式:

METHOD说明
peerLinux 系统用户匹配,无需密码(仅限本地 socket)
scram-sha-256密码认证(推荐,比 md5 更安全)
md5旧版密码认证
trust无需密码,直接信任(危险,仅测试用)
reject拒绝连接

然后在halo服务器测试一下能不能登录数据库

[root@halo1 ~]#psql -h 192.168.122.20 -U halo -d halo

测试完成后 在halo服务器完成以下操作

#创建一个halo用户
[root@halo1 ~]#useradd -m halo
#为halo用户创建密码
[root@halo1 ~]#passwd halo
#登录到halo账户
[root@halo1 ~]#su - halo
#创建存放运行包的目录,这里以 ~/app 为例
$ mkdir ~/app && cd ~/app
#下载halo的源码jar包
wget https://dl.halo.run/release/halo-pro-2.22.3.jar -O halo.jar #安装开源博客jar包
#创建工作目录
mkdir ~/.halo2 && cd ~/.halo2
#在工作目录写入配置
vim application.yaml

application.yaml如下

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

最后一部 运行jar包(测试)

java -jar halo.jar

接下来你可以去百度输入192.168.122.30:8090了

然后把Halo 作为服务运行 以实现在关闭 ssh 连接后 Halo 仍然可以正常运行

#切换到root账号
$su root
#创建 halo.service 文件
[root@halo1 ~]#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=halo
ExecStart=/usr/bin/java -Dfile.encoding=UTF-8 -server -Xms256m -Xmx256m -jar /home/halo/app/halo.jar --spring.config.additional-location=optional:file:/home/halo/.halo2/
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandardOutput=syslog
StandardError=inherit

[Install]
WantedBy=multi-user.target

——————————————————
User=halo halo是我们创建的系统用户
home路径一定要用‘/home/’不可以用‘~’
-Xms256m -Xmx256m是jvm的内存参数 -xms是JVM 启动时分配的初始堆内存 -xmx是JVM 允许使用的最大堆内存 可以根据自己的配置进行调整
推荐-Xms = -Xmx 固定内存减少扩容时的分配停顿

#重新加载 systemd
[root@halo1 ~]systemctl daemon-reload
#运行服务 并设置自启动
[root@halo1 ~]systemctl enable --now halo
#检查服务有无异常
[root@halo1 ~]systemctl status halo
#也可以用journalctl -n 20 -u halo查看日志

到此 halo服务器的设置已经全部完成

现在要去做反向代理

#首先写配置文件
[root@nginx1 ~]#vim /etc/nginx/conf.d/halo.conf
upstream halo {
  server 192.168.122.30:8090;
}
server {
  listen 80;
  listen [::]:80;
  server_name 192.168.122.10;
  client_max_body_size 1024m;
  location / {
    proxy_pass http://halo;
    proxy_set_header HOST $http_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;
  }
}

接下来将可以用192.168.122.10反向代理服务器地址访问了

附言

进行备份和恢复 或者进行halo版本升级

# 停止halo服务
service halo stop
或者
systemctl stop halo
#然后将新版本覆盖原有的运行包再启动
service halo start
或者
systemctl start halo

评论