Bennie
发布于 2026-01-22 / 8 阅读
0
0

腾讯云 Ubuntu 服务器从零搭建 Halo 2.0 博客指南 (Docker + Nginx + SSL)

前言

最近入手了一台腾讯云的 Ubuntu 服务器(LightHouse/CVM),决定用它来搭建一个属于自己的动态博客。经过对比,我选择了 Halo 2.0

Halo 是一款基于 Java 的强大开源博客系统,生态丰富,界面美观。配合国内服务器,访问速度极快。

本文将详细记录从环境配置、Docker 部署、Nginx 反向代理到 HTTPS 证书申请的全过程。即使你是 Linux 小白,跟着操作也能搞定。

🛠️ 准备工作

  1. 服务器:腾讯云 Ubuntu 20.04 或 22.04 (建议 2核 2G 内存及以上)。

  2. 域名:已经购买并解析到服务器公网 IP(本文以 blog.bennielab.cloud 为例)。

  3. 工具: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

交互提示:

  1. 输入邮箱(用于接收证书过期提醒)。

  2. 输入 Y 同意服务条款。

  3. Certbot 会自动修改上面的 halo.conf,添加 SSL 配置并开启 HTTP -> HTTPS 强制跳转。

至此,打开浏览器访问 https://blog.bennielab.cloud,你应该能看到 Halo 的初始化界面了!🎉


📝 进阶知识:Nginx 虚拟主机的妙用

这台服务器搭建完 Halo 后,性能还绰绰有余。如果我们想再部署一个 Alist 网盘 或者 ChatGPT Web 怎么办?

这时候就体现出 Nginx 虚拟主机 (Virtual Host) 的强大了。我们不需要再买服务器,只需要复用 Nginx:

  1. Docker 运行新服务:例如 Alist 运行在 5244 端口。

  2. DNS 解析:添加二级域名,如 pan.bennielab.cloud 解析到同一 IP。

  3. 新建 Nginx 配置

    新建 /etc/nginx/conf.d/pan.conf,将域名改为 pan...,端口改为 5244

  4. 申请证书:再次运行 Certbot。

一台服务器,通过 Nginx 分发,可以挂载无数个二级域名网站,互不干扰。


💡 常见问题排查

  1. 无法访问 80/443 端口?

    • 请检查腾讯云控制台的防火墙 (Security Group),确保入站规则里放行了 TCP:80TCP:443

  2. Halo 启动报错?

    • 使用 docker logs halo 查看日志。

    • 如果是内存溢出,检查 docker-compose.yaml 里的 JVM_OPTS 参数。

  3. 上传文件提示 413 Request Entity Too Large?

    • 检查 Nginx 配置里的 client_max_body_size 是否设置得足够大。


希望这篇教程能帮助大家快速搭建属于自己的博客。如果有问题,欢迎留言交流!


评论