本次采用halo的免费社区版部署在阿里云的Alibaba Cloud Linux 服务器,个人建议采用Docker 进行部署,基本按照部署文档就可傻瓜式部署。
基本信息如下:
Halo:社区版2.22
服务器系统:Alibaba Cloud Linux 3.2104 LTS 64位
内存:2 核(vCPU)2 GiB
操作系统:CentOS 10.0
磁盘:40GB
内置数据库:H2
一、安装Docker

有一说一:相比于之前的云服务器的Workbench 操作方式,现在的亮点功能是:加入的自然语言AI理解功能,通过自然语言的输入,例如“安装Docker”,自动生产符合贴近要求的执行指令。对于我这样不经常使用生疏的人,这个功能应该是很友好。给阿里云的产品经理与开发点个赞。
由于网络系统的缘由:采用阿里云镜像的方式进行安装。
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
添加阿里云的 Docker CE 镜像源。接下来,我会安装 Docker 社区版本、容器运行时 containerd.io 以及 Docker 构建和 Compose 插件。
查看安装Docker版本。
docker --version
Docker version 26.1.3, build b72abbb
之后,启动Docker。
sudo sytemctl start docker
再之后,查看安装后的Docker的容器列表。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
二、获取halo镜像
通过docker run 指令获取Halo镜像以及部署启动。
docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 -e JVM_OPTS="-Xmx256m -Xms256m" registry.fit2cloud.com/halo/halo:2.22
启动 Halo 参数:
与此同时,或者通过docker-Compose统一配置docker-compose.yml文件。
三、Docker与Docker-compose的区别
在这里讲解一下,Docker与Docker-compose的区别。
1. 核心概念与定位
Docker (核心引擎)
docker 是核心命令行工具,直接与 Docker 守护进程交互,主要用于管理单个容器(创建、启动、停止、删除等)。
你之前执行的
docker run就是典型的 Docker 原生命令,用来启动单个 Halo 容器。适合场景:仅需运行 1 个容器,或手动管理少量容器。
Docker Compose (多容器编排工具)
docker-compose 是基于 Docker 引擎的多容器编排工具,通过一个 yaml 配置文件(docker-compose.yml)定义多个容器的依赖、网络、数据卷等,实现「一键启动 / 停止所有相关容器」。
适合场景:应用由多个容器组成(比如 Halo + 数据库 + 缓存),需要统一管理容器间的协作。
2. 核心区别对比
3. 实战示例:用两种方式启动 Halo (对比)
方式 1:纯 Docker 命令 (单容器)
你之前执行的命令(需手动处理所有参数):
docker run -it -d \
--name halo \
-p 8080:8080 \
-v ~/.halo2:/root/.halo2 \
-e JVM_OPTS="-Xmx256m -Xms256m" \
registry.fit2cloud.com/halo/halo:2.22
方式 2:Docker Compose (配置文件 + 一键启动)
第一步:创建 docker-compose.yml 文件(放在任意目录,比如 ~/halo):
version: '3' # Compose 文件版本(需与 Docker 版本匹配)
services:
# 定义 Halo 服务
halo:
container_name: halo # 容器名称
image: registry.fit2cloud.com/halo/halo:2.22 # 镜像地址
ports:
- "8080:8080" # 端口映射
volumes:
- ~/.halo2:/root/.halo2 # 数据卷挂载
environment:
- JVM_OPTS=-Xmx256m -Xms256m # 环境变量
restart: always # 容器崩溃自动重启
networks:
- halo-network # 归属自定义网络
# 自定义网络(隔离容器网络)
networks:
halo-network:
driver: bridge
第二步:一键启动 / 停止
# 启动(后台运行加 -d)
docker-compose up -d
# 停止
docker-compose down
# 查看日志
docker-compose logs halo
4. 进阶场景:多容器协作
如果 Halo 需要搭配 MySQL 数据库(而非内置数据库),用 Docker Compose 会极其方便,只需在 docker-compose.yml 中新增 MySQL 服务:
version: '3'
services:
halo:
container_name: halo
image: registry.fit2cloud.com/halo/halo:2.22
ports:
- "8080:8080"
volumes:
- ~/.halo2:/root/.halo2
environment:
- JVM_OPTS=-Xmx256m -Xms256m
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/halo?useSSL=false # 直接用容器名访问 MySQL
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=123456
restart: always
networks:
- halo-network
depends_on: # 先启动 MySQL 再启动 Halo
- mysql
# 新增 MySQL 服务
mysql:
container_name: halo-mysql
image: mysql:8.0
ports:
- "3306:3306"
volumes:
- ~/.halo-mysql:/var/lib/mysql # 持久化数据库数据
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=halo # 自动创建 halo 数据库
restart: always
networks:
- halo-network
networks:
halo-network:
driver: bridge
只需执行 docker-compose up -d,就能自动创建网络、启动 MySQL、再启动 Halo,无需手动逐个配置,这是纯 Docker 命令无法高效实现的。
总结
Docker 是基础,负责单个容器的核心操作,适合简单场景;
Docker Compose 是 Docker 的补充,专注多容器编排,通过 YAML 配置统一管理,适合复杂应用;
实际开发 / 部署中,单容器用 Docker 命令,多容器(如 Web + 数据库 + 缓存)优先用 Docker Compose。
四、开放网络端口8090
打开阿里云实例控制台,在防火墙(安全组)的规则,添加入口方向的规则。
安全组规则的配置如下表所示:
五、登录halo
通过公网IP:8090即可访问,后续也可购买域名便利访问。
购买域名,则需要安装Nginx服务器。
sudo dnf -y install nginx
随后,修改nginx.conf配置文件。
sudo vi /etc/nginx/nginx.conf
配件文件如下:添加Server相关Halo配置参数。
# Halo博客反向代理配置
server {
# 监听80端口(HTTP)
listen 80;
# 绑定你的域名(替换成qianye16.top)
server_name qianye16.top www.qianye16.top;
# 字符编码设置
charset utf-8;
# 反向代理核心配置
location / {
# 转发请求到Halo的本地端口(8090)
proxy_pass http://127.0.0.1:8090;
# 传递真实IP给Halo(统计访问者IP用)
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 传递主机名
proxy_set_header Host $host;
# 支持WebSocket(Halo后台实时通知用)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置,避免长连接断开
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
}
# 静态资源缓存(提升访问速度)
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
proxy_pass http://127.0.0.1:8090;
# 缓存1天,减轻服务器压力
expires 1d;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}启动Nginx服务并设置为开机自启。
sudo systemctl start nginx
sudo systemctl enable nginx
重启Nginx
sudo systemctl reload nginx