基于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 | 说明 |
|---|---|
| peer | Linux 系统用户匹配,无需密码(仅限本地 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