前言
最近入手了一台腾讯云的 Ubuntu 服务器(LightHouse/CVM),决定用它来搭建一个动态博客。经过对比,我选择了 Halo 2.0。
Halo 是一款基于 Java 的强大开源博客系统,生态丰富,界面美观。配合国内服务器,访问速度极快。
本文将详细记录从环境配置、Docker 部署、Nginx 反向代理到 HTTPS 证书申请的全过程。即使你是 Linux 小白,跟着操作也能搞定。
🛠️ 准备工作
服务器:腾讯云 Ubuntu 20.04 或 22.04 (建议 2核 2G 内存及以上)。
域名:已经购买并解析到服务器公网 IP(本文以
blog.bennielab.cloud为例)。工具:SSH 连接工具(如 Termius, Xshell 或 VS Code)。
第一步:基础环境与 Docker 配置
国内服务器部署 Docker 最常见的问题就是拉取镜像超时。我们必须利用腾讯云的内网优势进行加速。
1.1 更新系统与安装基础工具
首先确保系统软件是最新的:
sudo apt update && sudo apt upgrade -y
sudo apt install curl git vim -y1.2 安装 Docker
使用官方脚本一键安装:
curl -fsSL https://get.docker.com | bash1.3 配置腾讯云内网镜像加速 (关键一步) 🚀
为了解决 context deadline exceeded (连接超时) 错误,我们需要配置镜像源。
直接复制下面整段命令执行:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
EOF1.4 启动 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker # 设置开机自启第二步:使用 Docker Compose 部署 Halo
官方推荐使用 Docker Compose 来管理 Halo,这样方便日后升级和数据维护。
更多内容可以查阅 Halo 文档
2.1 创建工作目录
我们在用户目录下创建一个专门存放 Halo 配置的文件夹:
mkdir -p ~/halo && cd ~/halo2.2 编写 docker-compose.yaml
创建配置文件:
nano docker-compose.yaml将以下内容粘贴进去(Halo + PostgreSQL):
version: "3"
services:
halo:
image: registry.fit2cloud.com/halo/halo-pro:2.22
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
environment:
# JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- JVM_OPTS=-Xmx256m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
- --spring.r2dbc.username=halo
# PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
halodb:
image: postgres:15.4
restart: on-failure:3
networks:
halo_network:
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=openpostgresql
- POSTGRES_USER=halo
- POSTGRES_DB=halo
- PGUSER=halo
networks:
halo_network:按 Ctrl+O 回车保存,按 Ctrl+X 退出。
2.3 启动 Halo
docker compose up -d启动后,Halo 默认运行在 8090 端口。此时如果不做反向代理,你需要通过 http://IP:8090 访问。
第三步:配置 Nginx 反向代理
为了使用域名访问,我们需要配置 Nginx。
3.1 安装 Nginx
sudo apt install nginx -y3.2 创建站点配置文件
不要直接修改 nginx.conf 主文件,最好在 conf.d 目录下为每个网站单独建立配置文件。
sudo nano /etc/nginx/conf.d/halo.conf写入以下配置:
# 定义 Halo 的上游地址
upstream halo {
server 127.0.0.1:8090;
}
server {
listen 80;
listen [::]:80;
# 将此处改为你的实际域名
server_name blog.bennielab.cloud;
# 调大上传文件大小限制
# Halo 后台上传主题或备份文件可能很大,默认 1M 肯定不够,这里设置为 1GB
client_max_body_size 1024m;
location / {
proxy_pass http://halo;
# 标准的反向代理头信息,确保 Halo 能获取正确的客户端 IP
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;
}
}
3.3 检查并生效
sudo nginx -t # 检查语法是否正确
sudo systemctl reload nginx第四步:配置 HTTPS (SSL 证书)
现在网站只能通过 HTTP 访问,不仅不安全,浏览器还会提示警告。我们使用 Certbot 免费申请 Let's Encrypt 证书。
4.1 安装 Certbot
sudo apt install python3-certbot-nginx -y4.2 申请证书
# 请将域名换成你的
sudo certbot --nginx -d blog.bennielab.cloud交互提示:
输入邮箱(用于接收证书过期提醒)。
输入
Y同意服务条款。Certbot 会自动修改上面的
halo.conf,添加 SSL 配置并开启 HTTP -> HTTPS 强制跳转。
至此,打开浏览器访问 https://blog.bennielab.cloud,你应该能看到 Halo 的初始化界面了!🎉
📝 进阶知识:Nginx 虚拟主机的妙用
这台服务器搭建完 Halo 后,性能还绰绰有余。如果我们想再部署一个 Alist 网盘 或者 ChatGPT Web 怎么办?
这时候就体现出 Nginx 虚拟主机 (Virtual Host) 的强大了。我们不需要再买服务器,只需要复用 Nginx:
Docker 运行新服务:例如 Alist 运行在
5244端口。DNS 解析:添加二级域名,如
pan.bennielab.cloud解析到同一 IP。新建 Nginx 配置:
新建
/etc/nginx/conf.d/pan.conf,将域名改为pan...,端口改为5244。申请证书:再次运行 Certbot。
一台服务器,通过 Nginx 分发,可以挂载无数个二级域名网站,互不干扰。
希望这篇教程能帮助大家快速搭建属于自己的博客。如果有问题,欢迎留言交流!