Halo建站过程

144

云服务器内存 > 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 获得