Halo个人blog从零开始

Halo个人blog从零开始

📝 从零搭建个人博客:从云服务器到上线运行的完整指南

本文档基于

CentOS 7 + 阿里云 ECS + Docker + Nginx + Halo

构建,全程可复现,适合 0 基础小白跟着操作。


一、云平台操作(阿里云 ECS)

1. 购买与配置云服务器

  1. 登录阿里云控制台 → 进入 云服务器 ECS → 点击「创建实例」

  2. 选择配置:

  • 计费方式:按量付费(测试用)/ 包年包月(长期用)

  • 地域:推荐选择香港服务器,网站无需备案

  • 实例规格:2 核 2G(入门足够)

  • 镜像:CentOS 7.x 64 位

  • 系统盘:高效云盘 40GB+

  1. 网络与安全组:
  • 公网 IP:勾选「分配公网 IPv4 地址」

  • 带宽计费:按使用流量

  • 安全组:新建安全组,放行 22、80、443 端口(后续按需添加)

  1. 登录凭证:
  • 选择「自定义密码」,设置 root 密码(务必记住)
  1. 确认订单并创建实例,等待实例状态变为「运行中」

二、本地 SSH 工具连接服务器

1. 选择 SSH 工具

个人使用:WindTerm

2. 建立连接

以 WindTerm 为例:

  1. 打开 WindTerm → 点击「+ 新建会话」
    image-20260309165935029
  2. 协议选择 SSH,主机填写你的公网 IP,端口 22
    image-20260309165202689
  3. 用户名 root,点击继续后输入密码即可登录
    image-20260309165551411
  4. 点击连接,成功后会看到欢迎链接阿里巴巴云服务器提示符
image-20260309165733686

三、 安装 Docker

1. 系统更新与基础工具安装

# 更新系统包
yum update -y

# 安装常用工具
yum install -y vim wget curl git

2.更换 Yum 源为阿里云源(提升 yum 下载速度和稳定性)

确保后续 yum install(包括 Docker 及其依赖)更快、更稳定,建议先将 CentOS 默认的官方 yum 源替换为 阿里云的 CentOS 7 源

备份原有 CentOS-Base.repo(可选但建议)

sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载阿里云的 CentOS 7 源配置文件

sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

该源由阿里云官方提供,国内访问速度快、稳定可靠。

清理并重建 Yum 缓存

sudo yum clean all
sudo yum makecache

让 yum 使用新的阿里云源,后续安装软件会快很多。

3.卸载docker

如果之前安装过旧版 Docker(如 dockerdocker-engine),建议先卸载,避免冲突。

sudo yum remove docker \
                 docker-client \
                 docker-client-latest \
                 docker-common \
                 docker-latest \
                 docker-latest-logrotate \
                 docker-logrotate \
                 docker-engine

4.安装 Docker CE(社区版)的依赖包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

这些是 Docker 安装所需的依赖工具,用于管理 yum 源及存储驱动。

5.添加阿里云的 Docker CE Yum 源(推荐)

docker 官方为 CentOS 提供了 Docker CE 的 yum 源,阿里云提供了该源的国内镜像,更加稳定快速

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6.查看可安装的 Docker CE 版本(推荐操作)

Docker 官方可能推送较新但不兼容 CentOS 7 的版本(如 26.x),我们推荐安装 20.10.x 或 24.x 等稳定且兼容的版本

# 运行以下命令,查看所有可用版本(按版本排序,最新的在上面)
yum list docker-ce --showduplicates | sort -r

7.安装指定版本的 Docker CE(推荐 20.10.9 或 24.0.7)

不要直接运行 yum install docker-ce,否则可能默认安装最新的 26.x,与 CentOS 7 不兼容,

明确指定版本号,推荐安装以下稳定版本之一:

选项 1:安装 Docker 24.0.7(推荐,较新且稳定)

sudo yum install -y docker-ce-24.0.7-1.el7 docker-ce-cli-24.0.7-1.el7 containerd.io

选项 2:安装 Docker 20.10.9(经典稳定版,兼容性好)

sudo yum install -y docker-ce-20.10.9-3.el7 docker-ce-cli-20.10.9-3.el7 containerd.io

以上命令中,同时安装了 docker-cedocker-ce-clicontainerd.io,这是 Docker 正常运行所必需的组件。

8.启动 Docker 并设置开机自启

# 启动 Docker 服务 : 这个只是当前启动,若linux系统关闭了,还需要重
sudo systemctl start docker

# 设置开机自动启动
sudo systemctl enable docker

# 查看 Docker 运行状态
sudo systemctl status docker

如果显示 active (running),说明 Docker 已成功启动。

9.验证 Docker 是否安装成功

# 查看 Docker 版本
docker --version

# 运行一个测试容器
sudo docker run hello-world

如果看到如下输出,说明 Docker 安装成功:

Hello from Docker!

10.配置镜像加速地址

默认情况下,Docker 会从 Docker Hub(https://registry-1.docker.io 拉取镜像,但国内访问速度慢,还容易超时。强烈建议配置国内镜像加速器!

什么是 Docker 镜像加速器?

Docker 镜像加速器是由 国内云服务商(如阿里云、网易、中科大等) 提供的 国内缓存服务,可以大幅提升 拉取 Docker Hub 镜像的速度与稳定性

可以使用以下 公共镜像加速地址(免费,无需登录)

镜像源 加速地址
网易云 https://hub-mirror.c.163.com
中科大 https://docker.mirrors.ustc.edu.cn
DaoCloud https://f1361db2.m.daocloud.io
腾讯云(需要登录) https://mirror.ccs.tencentyun.com
阿里云(需要登录获取个人地址) https://<你的ID>.mirror.aliyuncs.com
华为云(需要登录获取个人地址) https:/.mirror.swr.myhuaweicloud.com

获取阿里云个人加速地址

  1. 登录 阿里云容器镜像服务控制台
  2. 找到 “镜像加速器”
  3. 阿里云会提供类似如下的地址:
    image-20260309172319286

温馨提示:这里我用的是阿里云的镜像加速地址(根据自己使用的云平台去选择)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xkw8xit4.mirror.aliyuncs.com"]
}
EOF
# 重启 Docker 服务,使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker

如果你没有阿里云账号,推荐直接使用 网易云中科大 的公共地址。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

四、部署 Halo 博客应用

1. 创建项目目录结构

# 创建博客根目录

mkdir -p /root/my_blog

cd /root/my_blog

2. 编写 Docker Compose 配置

vim docker-compose.yml

镜像说明:

image-20260310155515570

version: "3"

services:
  halo:
    image: registry.fit2cloud.com/halo/halo-pro:2.22
	#这里的image需要根据上方镜像说明选择免费社区版or付费版
    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:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=o#DwN&JSa56
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/

  halodb:
    image: mysql:8.1.0
    restart: on-failure:3
    networks:
      halo_network:
    command: 
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
      - MYSQL_DATABASE=halo

networks:
  halo_network:

image-20260310154935751

3. 启动 Halo 容器

docker-compose up -d

4. 验证 Halo 启动

# 查看容器状态
docker ps | grep halo

# 查看日志(可选)查看最新50条日志
docker logs --tail 50 logs my_blog-halo-1

访问 http://你的公网IP:8090,如果能看到 Halo 初始化页面,说明部署成功。
到这一步你的个人blog就可以公网访问了!


五、配置 Nginx 反向代理与 HTTPS(web网站安全和可靠性)

1. 创建 Nginx 配置目录

mkdir -p /root/my_blog/nginx/conf.d

cd /root/my_blog/nginx/conf.d

2. 编写 Nginx 站点配置

vim huizicoding.conf
server {
    listen 80;
    server_name 你的域名 www.你的域名;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name huizicoding.top www.huizicoding.top;


    # 添加这两行来增大上传限制
    client_max_body_size 20M;
    client_body_buffer_size 128k;

    ssl_certificate /etc/nginx/conf.d/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/conf.d/ssl/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass http://公网ip地址: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;
    } 
}

3. 启动 Nginx 容器

docker run -d \
  --name nginx \
  --network halo_network \
  -p 80:80 \
  -p 443:443 \
  --restart=always \
  -v /root/my_blog/nginx/conf.d:/etc/nginx/conf.d \
  -v /root/my_blog/nginx/html:/usr/share/nginx/html \
  -v /root/my_blog/nginx/logs:/var/log/nginx \
  nginx:latest

image-20260310192419271

4. 申请 SSL 证书(Let’s Encrypt)

# 安装 Certbot
yum install -y certbot

# 停止 Nginx 以释放 80 端口
docker stop nginx

#创建证书存放目录
mkdir -p /home/nginx/conf.d/ssl

# 申请证书(替换为你的域名和邮箱)
certbot certonly --standalone -d 你的域名 -d www.你的域名 --email 你的邮箱地址 --agree-tos --non-interactive

#复制证书到刚才创建的文件
cp /etc/letsencrypt/live/huizicoding.top/fullchain.pem /home/nginx/conf.d/ssl/
cp /etc/letsencrypt/live/huizicoding.top/privkey.pem /home/nginx/conf.d/ssl/

# 启动 Nginx
docker start nginx

六、配置证书自动续期

1. 初始化定时任务

crontab -e

首次执行会提示 no crontab for root - using an empty one,直接保存退出即可。

2. 添加自动续期任务

echo "0 2 \* \* \* certbot renew --quiet && cp -f /etc/letsencrypt/live/huizicoding.top/fullchain.pem /root/my\_blog/nginx/conf.d/ssl/ && cp -f /etc/letsencrypt/live/huizicoding.top/privkey.pem /root/my\_blog/nginx/conf.d/ssl/ && docker restart nginx" >> /var/spool/cron/crontabs/root

3. 验证定时任务

crontab -l

如果能看到续期命令,说明配置成功。


七、收尾与验证

  1. 访问博客:打开浏览器,访问 https://www.huizicoding.top,确认地址栏显示绿色小锁。

  2. 域名绑定:登录 Halo 后台 → 系统 → 博客设置 → 外部访问地址,修改为 https://www.你的域名

  3. 测试图片上传:在后台尝试上传图片,确认不会出现 413 错误。


八、常见问题排查

问题 排查命令 解决思路
无法访问网站 ping 外网IPtelnet 外网IP 80 检查安全组、防火墙端口是否放行
应用启动失败 docker logs my_blog-halo-1 查看日志定位错误原因
413 Request Entity Too Large 增大 client_max_body_size
证书过期 certbot certificates 手动执行续期命令或检查定时任务
Linux基础 2025-07-02

评论区

© 2026 辉仔的小破站