温馨提示:请务必前往云服务器的控制台(安全组/防火墙设置),放行 80 端口(HTTP)和 443 端口(HTTPS)。如果打算在配置 Nginx 前通过 IP 直接预览,还需要放行 8090 端口。
一、操作系统需求
Ubuntu 22.04 (LTS)
二、卸载旧版本
在安装Docker Engine之前,你需要卸载所有冲突包。
你的 Linux 发行版可能会提供非官方的 Docker 包,这些包可能会和Docker提供的官方包冲突。你必须卸载这些包。
非官方的卸载包有:docker.io docker-compose docker-compose-v2 docker-doc podman-docker
执行以下命令卸载所有冲突包:
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)三、把服务器的软件源换成国内
通过OrcaTerm连接服务器(为了能复制粘贴代码)
打开本地终端: 在你的 Windows 电脑上,按下 Win + R 键,输入 cmd 或 powershell 然后回车。
连接虚拟机: 在弹出的 Windows 黑框中输入以下命令并回车(注意替换成你自己的信息):
ssh 你的Ubuntu用户名@你的服务器IP以后的教程将在OrcaTerm服务器管理器进行
复制以下代码到服务器管理器里面
# 备份原文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak 2>/dev/null
# 使用正则表达式准确替换,忽略可能存在的地区前缀
sudo sed -i -E 's/([a-z0-9-]+\.)?archive\.ubuntu\.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i -E 's/security\.ubuntu\.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i -E 's/([a-z0-9-]+\.)?archive\.ubuntu\.com/mirrors.aliyun.com/g' /etc/apt/sources.list.d/ubuntu.sources 2>/dev/null
sudo sed -i -E 's/security\.ubuntu\.com/mirrors.aliyun.com/g' /etc/apt/sources.list.d/ubuntu.sources 2>/dev/null四、安装Docker
将 Docker 源替换为阿里云镜像
在终端中复制并执行下面这行命令,这会把配置文件里的官方域名替换成阿里云的域名:
# 1. 安装必要的依赖并创建密钥存放目录
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
# 2. 添加阿里云的 Docker GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 3. 写入阿里云的 Docker 软件源(注意这里写到 docker.list,且网址使用的是 mirrors.aliyun.com)
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null刷新软件列表
替换完成后,让系统重新读取新的国内镜像源地址:
sudo apt update执行安装命令
更新成功后,运行 Docker 安装命令:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y验证是否安装成功
你可以直接在终端中运行以下命令来检查它是否正常工作:
docker compose version五、安装Halo
创建容器
在系统任意位置创建一个文件夹,此文档以 ~/halo 为例。
注意:后续操作中,Halo 产生的所有数据都会保存在这个目录,请妥善保存
创建 docker-compose.yaml
准备干净的工作目录
执行:
mkdir -p ~/halo && cd ~/halorm -f docker-compose.yaml执行下面的命令打开编辑器:
nano docker-compose.yaml把下面这段复制到编辑器里面:
services:
halo:
# 这里使用的是官方提供的国内加速镜像库,并且改为了开源免费的社区版
image: registry.fit2cloud.com/halo/halo:2.25
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_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: docker.m.daocloud.io/library/postgres:15.4
restart: on-failure:3
networks:
halo_network:
volumes:
# 将数据库的数据挂载到宿主机的 ./db 目录,保证数据不丢失
- ./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,再按 Enter 确认,最后按 Ctrl + X 退出。
现在,你可以执行以下官方启动命令:
sudo docker compose up -d启动成功后,浏览器输入:http://<你的服务器IP>:8090 就可以进入Halo管理面板了
六、配置Nginx反代
准备工作
在开始配置之前,需要在文档中提醒读者完成以下前置工作:
准备域名: 准备一个属于自己的域名。如果服务器在国内,需要完成域名备案。
域名解析: 在域名服务商(如阿里云、腾讯云)的控制台,添加一条 A 记录,将您的域名(例如 blog.yourdomain.com)解析到这台服务器的公网 IP。
第一步:安装 Nginx 和 Certbot
Certbot 是 Let's Encrypt 官方推荐的免费 HTTPS 证书签发工具,配合 Nginx 插件使用,可以实现全自动配置。
# 更新软件源并安装 nginx 和 certbot
sudo apt update
sudo apt install nginx certbot python3-certbot-nginx -y第二步:配置 Nginx 反向代理
由于 Halo 是运行在 Docker 的 8090 端口上的,我们需要让 Nginx 监听默认的 80 (HTTP) 端口,并把访问您域名的流量转发到 8090 端口。
新建一个 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/halo填入基础配置,注意将其中的 yourdomain.com 替换为实际域名:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1: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;
# 针对上传大文件的配置优化
client_max_body_size 1024m;
}
}启用配置并重启 Nginx:
# 创建软链接以启用配置
sudo ln -s /etc/nginx/sites-available/halo /etc/nginx/sites-enabled/
# 删除 Nginx 默认的欢迎页配置,防止与咱们的博客冲突(重要!)
sudo rm /etc/nginx/sites-enabled/default
# 检查 Nginx 配置语法是否正确
sudo nginx -t
# 重新加载 Nginx 让配置生效
sudo systemctl reload nginx一键申请并配置 HTTPS 证书
sudo certbot --nginx -d yourdomain.com执行命令后,Certbot 会进行几个简单的交互:
提示输入管理员邮箱(用于证书过期前的提醒)。
同意服务条款。
最重要的一步: 询问是否自动将 HTTP 流量重定向到 HTTPS(Redirect)。建议选择自动重定向,这样用户无论如何访问,都会跳转到安全的 HTTPS 页面。
配置完成后,Certbot 会自动修改您刚才写的 Nginx 配置文件,加上证书路径和 443 端口的监听。至此,网站就可以通过 [https://yourdomain.com](https://yourdomain.com) 安全访问了!
Halo建站-----Docker Compose
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法