孤九沫
发布于 2026-03-27 / 20 阅读
0
0

创建属于自己的独立小站

前期准备工作

1.域名购买
2.完成域名备案(整个流程一般需要7天,因为在中国DNS解析需要备案)-相关文档
3.申请域名证书(5分钟完成)
4.一个ECS服务器(用于后端部署)
5.购买CLB(负载均衡)作用:域名解析到CLB公网地址

后端环境部署

1.Java环境,JRE 21
下载并且解压出来移动到/usr/local下,这样所有用户都能读取java全路径/usr/local/jdk-21/bin/java

wget https://download.java.net/openjdk/jdk21/ri/openjdk-21+35_linux-x64_bin.tar.gz
tar zxvf https://download.java.net/openjdk/jdk21/ri/openjdk-21+35_linux-x64_bin.tar.gz
mv jdk-21 /usr/local
/usr/local/jdk-21/bin/java -version   #显示21字样即为成功

2.安装并且配置PG数据库
cat /etc/os-release #确定linux版本 一般centos 7的包管理工具是yum,RHEL/Alibaba是dnf,Ubuntu是apt

dnf install -y postgresql-server postgresql-contrib  #核心包和拓展包,简而言之就是全套服务器数据库
postgresql-setup --initdb   #初始化数据库
systemctl enable --now postgresql   #开机并自启(每一个需要保障稳定并且有systemctl守护的应用都需要enable自启)
systemctl status postgresql   #检查服务状态(出现running字样)常用搭配看日志journalctl -u postgresql -n 50 -f 
echo "host    halo     halo     127.0.0.1/32    md5" >> /var/lib/pgsql/data/pg_hba.conf  #安全限制
###创建账号·库并且赋权⬇️
su - postgres -c "psql" << EOF
CREATE DATABASE halo;
CREATE USER halo WITH ENCRYPTED PASSWORD 'Halo@123456';
GRANT ALL PRIVILEGES ON DATABASE halo TO halo;
ALTER DATABASE halo OWNER TO halo;
\q
EOF
###⬆️
# 测试连接
psql -U halo -d halo -h 127.0.0.1 -p 5432

后端部署

halo官方文档

useradd -m halo  #创建用户
passwd halo
su - halo
mkdir ~/app && cd ~/app
wget https://dl.halo.run/release/halo-2.23.1.jar
mkdir ~/.halo2 && cd ~/.halo2
vim application.yaml
###⬇️
server:
  port: 8090
spring:
  r2dbc:
    url: r2dbc:postgresql://127.0.0.1:5432/halo
    username: halo
    password: Halo@123456
  sql:
    init:
      mode: always
      platform: postgresql
halo:
  work-dir: ${user.home}/.halo2
  external-url: https://www.yangxinyu.top  
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x
###⬆️

###测试命令(如果是云上请在安全组中开放对8090端口的访问)

cd ~/app && java -Dfile.encoding=UTF-8 -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/

无报错且访问正常可以创建服务

vim /etc/systemd/system/halo.service
###
[Unit]
Description=Halo Service
After=network.target postgresql.service

[Service]
User=halo
WorkingDirectory=/home/halo/app
ExecStart=/usr/local/jdk-21/bin/java -Dfile.encoding=UTF-8 -jar halo-2.23.1.jar --spring.config.additional-location=optional:file:/home/halo/.halo2/ --server.port=8090
Restart=always
RestartSec=5
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
###
systemctl deamon-reload
systemctl start halo
systemctl enable halo

设置反向代理

我们添加反向代理实现对流量的路由及其控制

dnf install -y nginx
systemctl enable nginx
systemctl start nginx
vim  /etc/nginx/conf.d/halo.conf 
###⬇️
server {
listen 8080;
server_name yangxinyu.top;  # 替换为你的域名
location / {
    proxy_pass http://127.0.0.1:8090;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # 支持 WebSocket(Halo 后台需要)
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

# 上传文件大小限制(可选)
client_max_body_size 50m;

}
###⬆️
nginx -t   #检查语法"ok"字样即为成功
nginx -s reload   #nginx支持配置热加载

上述完成之后我们既可以使用80端口访问

测试命令 curl 127.0.0.1:80 或者开放80端口进行公网访问测试或者用内网穿透然后访问本地电脑80

配置CLB(使用域名访问)

1登录阿里云打开SLB控制面板➡️CLB,选中clb实例-监听配置向导

第一步监听端口-443,点击下一步选择申请的证书,最后添加虚拟服务器组端口是80,然后提交。

记录CLB实例的公网ip,下一步要用

2.配置80转443(将http重定向到https,用户侧无感切换)

创建80监听,开启监听转发

添加公网地址DNS解析

选中购买的域名,按照如下图所示添加一个A记录,记录值填写CLB的公网地址,等待几分钟即可生效

测试方法-ping一下自己的域名ip跟CLB实例ip就代表生效了。

OK做完这些你就有自己的站点了!

优化

# configuration file /etc/nginx/conf.d/halo.conf:
# =============================
# 1. HTTP 80端口:强制跳转 HTTPS
# =============================
server {
    listen 80;
    server_name www.yangxinyu.top yangxinyu.top;

    # 301 永久重定向到 HTTPS
    return 301 https://$host$request_uri;
}

# =============================
# 2. HTTPS 443端口:主服务配置
# =============================
server {
    listen 443 ssl;
    http2 on;  # 单独开启 HTTP/2 (修复过时警告)
    server_name www.yangxinyu.top yangxinyu.top;

    # --- SSL 证书配置 (已根据你的实际文件修正) ---
    # 你的公钥文件是 .pem 格式
    ssl_certificate /etc/nginx/cert/www.yangxinyu.top.pem;
    # 你的私钥文件是 .key 格式
    ssl_certificate_key /etc/nginx/cert/www.yangxinyu.top.key;

    # --- SSL 安全优化 ---
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;
    
    # --- 代理配置 (转发给 Halo) ---
    location / {
        proxy_pass http://127.0.0.1:8090;
        
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 支持 WebSocket
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # 上传文件大小限制
    client_max_body_size 500m;
}


评论