Halo建站过程
云服务器内存 > 1GB
安装docker
1.使用包管理器快速安装docker
如果是centos:
首先要安装一个yum工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
更新yum,建立缓存
sudo yum makecache fast
最后,执行命令,安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
如果是ubuntu:
1.安装 HTTPS 传输工具、CA 证书和仓库管理工具
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
2.添加 GPG 密钥(验证软件包合法性):
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
3.添加阿里云镜像仓库:
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
此命令会在 /etc/apt/sources.list.d
目录下生成 Docker 仓库文件
4.安装 Docker 及组件
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5.验证安装
sudo docker run hello-world
2.开启docker服务
systemctl start docker.service
3.查看安装结果
docker version
可以看到Client和Service对应的Version
4.设置docker开机自启动
systemctl enable docker.service
5.配置docker镜像下载加速
镜像地址可能会变更,如果失效可以百度找最新的docker镜像。
配置镜像步骤如下:
创建目录
mkdir -p /etc/docker
复制内容
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://docker.xuanyuan.me"
]
}
EOF
重新加载配置
systemctl daemon-reload
重启Docker
systemctl restart docker
安装Halo
确保在根路径下
1.创建工作目录
后面如果要整站迁移比较好操作,可以看到创建完文件夹后进入了对应的文件夹halo
mkdir ~/.halo && cd ~/.halo
查看文件夹位置可以退出到root目录下,命令如下:
cd ../
# 文件夹是隐藏的
ls -lah
# 别忘了重进halo文件夹,下一步要用
cd ~/.halo
2.创建配置文件 docker-compose.yaml
version: "3" # 定义Docker Compose文件的版本
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.20 # 使用Halo的Docker镜像
restart: on-failure:3 # 在失败时重启容器,最多重启3次
depends_on:
halodb:
condition: service_healthy # 依赖服务halodb,并等待其健康状态为健康
networks:
halo_network: # 将此服务连接到halo_network网络
volumes:
- ./halo2:/root/.halo2 # 挂载本地目录到容器内
ports:
- "8090:8090" # 映射主机的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=-Xmx2048m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo # 数据库连接URL
- --spring.r2dbc.username=root # 数据库用户名
- --spring.r2dbc.password=这里写你的数据库密码# 数据库密码,请保证与下方MYSQL_ROOT_PASSWORD变量值一致
- --spring.sql.init.platform=mysql # SQL初始化平台
- --halo.external-url=http://localhost:8090/ # 外部访问地址
halodb:
image: mysql:8.1.0 # 使用MySQL的Docker镜像
restart: on-failure:3 # 在失败时重启容器,最多重启3次
networks:
halo_network: # 将此服务连接到halo_network网络
ports:
- "3306:3306" # 将主机的3306端口映射到容器的3306端口
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=这里写你的数据库密码
- MYSQL_DATABASE=halo # 创建的数据库名称
networks:
halo_network: # 定义一个自定义网络,供服务之间通信使用
3.启动 Halo 服务
拉取镜像
docker-compose up -d
实时查看日志:
docker-compose logs -f
4.访问 Halo
在浏览器中访问 http://{IP地址}:8090
,完成初始化配置。
其他
停止和清理
停止服务:
docker-compose down
清理数据:
docker-compose down -v
如果忘记配置了 - --halo.external-url=http://localhost:8090/ # 外部访问地址
1. 停止并删除 halo
容器
docker-compose stop halo # 停止 halo 容器
docker-compose rm -f halo # 强制删除 halo 容器
2.修改 docker-compose.yml
文件
将 --halo.external-url=http://localhost:8090/
修改为 --halo.external-url=http://你想要跳转的地址/
。
3. 重新创建 halo
容器
docker-compose up -d halo
4. 验证修改
docker-compose logs halo
启动脚本
为了方便启动容器,我选择了脚本,可以参考start_containers.sh
放在root目录下就可以./start_container.sh启动了,这样更方便
#!/bin/bash
# 定义容器列表
containers=(
"nginxproxymanager_app_1"
"halo_halo_1"
"halo_halodb_1"
)
# 遍历并启动每个容器
for container in "${containers[@]}"; do
echo "Starting container: $container"
docker start "$container"
done
echo "所有实例启动完毕"
容器列表可以通过docker ps -a
获得