前言
最近入手了一台腾讯云的 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 更新系统与安装基础工具
首先确保系统软件是最新的:
Bash
sudo apt update && sudo apt upgrade -y
sudo apt install curl git vim -y
1.2 安装 Docker
使用官方脚本一键安装:
Bash
curl -fsSL https://get.docker.com | bash
1.3 配置腾讯云内网镜像加速 (关键一步) 🚀
为了解决 context deadline exceeded (连接超时) 错误,我们需要配置镜像源。
直接复制下面整段命令执行:
Bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
EOF
1.4 启动 Docker
Bash
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker # 设置开机自启
第二步:使用 Docker Compose 部署 Halo
官方推荐使用 Docker Compose 来管理 Halo,这样方便日后升级和数据维护。
2.1 创建工作目录
我们在用户目录下创建一个专门存放 Halo 配置的文件夹:
Bash
mkdir -p ~/halo && cd ~/halo
2.2 编写 docker-compose.yaml
创建配置文件:
Bash
nano docker-compose.yaml
将以下内容粘贴进去(注意看注释,全是细节):
YAML
version: "3"
services:
halo:
# 使用 Halo 2.20 版本镜像
image: registry.fit2cloud.com/halo/halo:2.20
container_name: halo
restart: unless-stopped
# 🌟【关键配置】使用 host 模式
# 这样容器直接共享宿主机网络,网络性能最好,且无需做端口映射
network_mode: "host"
volumes:
# 将容器内的数据挂载到当前目录下的 .halo2 文件夹,防止删容器丢失数据
- ./.halo2:/root/.halo2
environment:
# 🌟【性能优化】限制 Java 内存使用
# 对于 2GB 内存的服务器,建议限制在 512M,防止 Java 吃光内存导致死机
- JVM_OPTS=-Xmx512m -Xms512m
按 Ctrl+O 回车保存,按 Ctrl+X 退出。
2.3 启动 Halo
Bash
docker compose up -d
启动后,Halo 默认运行在 8090 端口。此时如果不做反向代理,你需要通过 http://IP:8090 访问(注意:需要在腾讯云控制台防火墙放行 8090 端口)。
第三步:配置 Nginx 反向代理
为了使用域名访问(去除丑陋的端口号),我们需要配置 Nginx。
3.1 安装 Nginx
Bash
sudo apt install nginx -y
3.2 创建站点配置文件
切记: 不要直接修改 nginx.conf 主文件,最好在 conf.d 目录下为每个网站单独建立配置文件。
Bash
sudo nano /etc/nginx/conf.d/halo.conf
写入以下配置:
Nginx
# 定义 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 检查并生效
Bash
sudo nginx -t # 检查语法是否正确
sudo systemctl reload nginx
第四步:配置 HTTPS (SSL 证书)
现在网站只能通过 HTTP 访问,不仅不安全,浏览器还会提示警告。我们使用 Certbot 免费申请 Let's Encrypt 证书。
4.1 安装 Certbot
Bash
sudo apt install python3-certbot-nginx -y
4.2 申请证书
Bash
# 请将域名换成你的
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 分发,可以挂载无数个二级域名网站,互不干扰。
💡 常见问题排查
无法访问 80/443 端口?
请检查腾讯云控制台的防火墙 (Security Group),确保入站规则里放行了
TCP:80和TCP:443。
Halo 启动报错?
使用
docker logs halo查看日志。如果是内存溢出,检查
docker-compose.yaml里的JVM_OPTS参数。
上传文件提示 413 Request Entity Too Large?
检查 Nginx 配置里的
client_max_body_size是否设置得足够大。
希望这篇教程能帮助大家快速搭建属于自己的博客。如果有问题,欢迎留言交流!