Halo Blog 折腾记录

简介: 通过 Halo 开源建站工具部署一个属于自己的博客!本文记录了 Halo 2.0 版本的建站过程,方便大家在使用 Docker Compose 部署 Halo 时进行参考。如有版本更新会看心情进行内容修改。

部署 Docker

Docker 安装可以参考 Docker 官网安装指导,本次以 CentOS 为例
Docker 安装文档: https://docs.docker.com/engine/install/centos/

使用脚本安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

Docker 配置开机自启

# 开机自启
sudo systemctl enable docker.service

# 启动 Docker
sudo systemctl start docker.service

非 root 用户使用 Docker

当然,不这样做可以在执行 Docker 指令前加 sudo
# 通过将用户添加到 docker 用户组可以将 sudo 去掉

# 创建组
sudo groupadd docker

# 将用户添加到 docker 用户组
sudo usermod -aG docker $USER

# 更新用户组,或注销并重新登陆
newgrp docker

配置镜像加速器

以下两种任选其一即可,因本次使用为腾讯云服务器,所以使用第二种:
阿里云容器镜像服务
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
腾讯云软件源加速服务
https://cloud.tencent.com/document/product/213/8623
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": [
       "https://mirror.ccs.tencentyun.com"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

使用 Docker Compose 部署 Halo

创建容器组

下载容器镜像

因 Halo 2.0 不兼容 1. x 版本,Halo 2.0 未更新 Docker 的 latest 标签镜像,所以为防止误操作,在使用 Halo 镜像时需要指定固定版本的标签

例如:halohub/halo:2.2.0
MySQL :mysql:8.0.32

docker pull halohub/halo:2.2.0

docker pull mysql:8.0.32

创建 Halo 的根目录

mkdir ~/halo && cd ~/halo

创建 Halo+MySQL 的实例

为了更加方便的管理配置,所有与 Halo 相关的配置都使用 Docker 环境变量代替,所以无需创建 application. yaml 文件
~/halo/docker-compose.yaml
version: "3"

services:
  halo:
    image: halohub/halo:2.3.0
    container_name: halo
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./:/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
    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/
      # 初始化的超级管理员用户名
      - --halo.security.initializer.superadminusername=admin
      # 初始化的超级管理员密码
      - --halo.security.initializer.superadminpassword=P@88w0rd

  halodb:
    image: mysql:8.0.31
    container_name: halodb
    restart: on-failure:3
    networks:
      halo_network:
    command: 
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    ports:
      - "3306:3306"
    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:

启动 Halo 服务

docker-compose up -d     # -d 表示后台运行

docker compose up -d     # 如果你用的是 docker-compose-plugin 的话,用这条命令

实时查看日志

# 如有问题使用下面命令查看日志
docker compose logs -f

更新容器组

停止运行中的容器组

cd ~/halo && docker-compose down

备份数据(重要)

# `halo.archive` 仅为示例,不一定要根据此文档命名
cp -r ~/halo ~/halo.archive

更新 Halo 服务

修改  docker-compose.yaml 中配置的镜像版本
services:
  halo:
    image: halohub/halo:2.3.0
    container_name: halo
docker-compose pull
docker-compose up -d
# 或着 ↓
docker compose up -d 

配合 Nginx Proxy Manager 使用反向代理

简介

顾名思义,Nginx Proxy Manager 就是一个 Nginx 的代理管理器,它最大的特点是简单方便。
即使是没有 Nginx 基础的小伙伴,也能轻松地用它来完成反向代理的操作,而且因为自带面板,操作极其简单,非常适合配合 Docker 搭建的应用使用。
Nginx Proxy Manager 后台还可以一键申请 SSL 证书,并且会自动续期,方便省心。
下面我们就来介绍如何用 Nginx Proxy Manger 来配合 Halo,实现反向代理和 HTTPS 访问。

安装 Nginx Proxy Manager

创建一个目录来存放 NPM 的 docker-compose.yml 文件

mkdir ~/nginxproxymanager && cd ~/nginxproxymanager   # 创建一个 npm 的文件夹; 进入该文件夹

vim docker-compose.yml

粘贴填入下面的内容

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'   # 中文版 chishin/nginx-proxy-manager-zh:latest
    container_name: npm
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

注:安装了 NPM 之后,就不需要再安装 Nginx 了,否则会端口冲突(不建议修改 NPM 的 80、443 端口)

启动 NPM

docker-compose up -d     # -d 表示后台运行

docker compose up -d     # 如果你用的是 docker-compose-plugin 的话,用这条命令

配置 Halo 的反向代理

不出意外,此时已经可以通过 http://<url>:81 访问 NPM 的网页端了
不清楚自己当前服务器的 IP 地址,可以通过 curl ip.sb 命令查询,需要注意防火墙端口是否对应打开

默认的管理员用户:

Email:    admin@example.com
Password: changeme

第一次登陆会提示更改用户名和密码,建议修改一个复杂一点的密码。
至此,我们已经完成了 Nginx Proxy Manager 的搭建,之后就可以用它给我们的 Halo 或者其他 Web 应用做反向代理了。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
Kubernetes 调度 Docker
深入探讨容器编排技术:从Docker到Kubernetes
容器编排在现代IT中日益关键,从Docker到Kubernetes,助力应用的自动化部署和扩展。Docker提供容器技术,打包应用及环境为镜像,通过引擎、镜像、容器、网络和存储组件实现隔离运行。Kubernetes作为高级容器编排平台,管理Pod(多容器集合),其核心包括API服务器、控制器管理器、调度器和Kubelet。Kubernetes集群由Master和Worker节点构成,实现Pod的高效调度和运行。
|
存储 Java 定位技术
gis利器之Gdal(二)shp数据读取
本文首先简单介绍了空间数据shp数据的基本知识,其常见的文件组成形式。使用qgis软件对数据进行常规预览,最后重点介绍了使用gdal对矢量信息进行读取,​包括空间信息和属性信息
1660 0
gis利器之Gdal(二)shp数据读取
|
Linux 网络安全
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
|
数据采集 算法 网络架构
英伟达开源大模型FoundationPose称霸BOP排行榜
【4月更文挑战第10天】英伟达新推出的FoundationPose模型在6D对象姿态估计和跟踪上取得重大突破,荣登BOP排行榜首。该模型以统一框架兼容有模型和无模型设置,利用大规模合成数据和对比学习提高泛化能力,且在复杂场景中表现出高适应性。尽管在处理某些困难情况时仍有局限,如无纹理物体的定位,但它展示了巨大的潜力和对未来技术的启示。
498 1
英伟达开源大模型FoundationPose称霸BOP排行榜
|
人工智能 自然语言处理 算法
AI 应用之成本节约实践
本文探讨了如何避免高成本的模型微调,通过任务拆解和提示词调优实现业务目标。文中提到,当大语言模型不能直接满足需求时,微调涉及大量工作,包括数据准备、模型训练及GPU资源。为降低成本,作者提出了两步方法:1) 任务拆解,将复杂任务分解为简单子任务,利用模型优势处理部分;2) 提示词调优,优化输入以引导模型更高效地响应。虽然这可能不适用于所有情况,但能有效减少对模型微调的依赖。
671 1
|
存储 弹性计算 关系型数据库
阿里云服务器ECS试用攻略及常见问题参考
阿里云服务器可以免费试用,完成实名认证的云服务器ECS新用户,个人用户有8个规格可选,企业用户有12个规格可选,最长可免费试用3个月。为了让您3个月内充分体验云服务器ECS的弹性及灵活性,特地给您准备了试用攻略,可以帮助用户更好地了解试用,提升用户试用体验。
阿里云服务器ECS试用攻略及常见问题参考
|
运维 监控 安全
安全运维:入侵检测与防御实战指南
安全运维:入侵检测与防御实战指南 【10月更文挑战第9天】
736 3
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
3315 36
微服务架构解析:跨越传统架构的技术革命
|
自然语言处理 关系型数据库 数据管理
阿里云百炼|析言GBI产品入门指导
析言基础入门的操作体验,带领大家一起探索阿里云百炼|析言GBI的奥秘。
4435 19
|
人工智能 自然语言处理 搜索推荐
【云栖实录】大模型驱动,开源融合的AI搜索产品发布
本文介绍了2024云栖大会上,阿里云发布的年度AI搜索产品详情。
811 8