使用 docker-compose 搭建个人博客 Halo

news2024/12/25 8:57:00

目录

说明

我这里使用的是 Halo 作为博客的工具,毕竟是开源了,也是使用 Java 写的嘛,另外一点就是使用 docker 来安装(自动挡,不用自己考虑太多的环境因素),这样子搭建起来更快一点,我们这里核心就两步:

  • docker-compose 的安装
  • Halo 的安装

我这边的docker 版本如下:

docker 版本

docker-compose 安装

好了,废话就不多说了,我们现在开始看看怎么去搭建把。下面我也会把我遇到的几个坑给大伙说下,尽量避免我遇到的那些坑,忒别耗时。

安装步骤
这里我们可以看下Github上面官方的版本
官方的版本
正确的安装过程

具体执行的命令如下:

# 下载 docker-compose 文件
curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 给他一个执行权限
chmod +x /usr/local/bin/docker-compose

# 查看是否安装成功
docker-compose -version

错误的安装过程

上面为什么要使用最新的呢?那是因为我遇到了这个问题,在使用 docker-compose.yaml 创建容器的时候,报错:

ERROR: The Compose file './docker-compose.yml' is invalid because:
services.halo.healthcheck value Additional properties are not allowed ('start_period' was unexpected)
services.halodb.healthcheck value Additional properties are not allowed ('start_period' was unexpected)
services.halo.depends_on contains an invalid type, it should be an array

后面在 docker-compose部署报错 #4110 找到了答案,因为我本地的docker-compose 的版本太低了,之前我安装的是 1.26.2 这个版本,后面干脆一点,升到最新算了。

卸载docker-compose

这里顺便说明下,怎么卸载的,如果是知道的同学,就直接看下面的把,不用在这里浪费时间了。

# 因为我这边是通过 curl 下载的,所以可以直接 rm 就好
rm /usr/local/bin/docker-compose

另外我也发现,可以使用上面安装的方式,直接再次 curl -L 下载对应的版本就好了,会直接覆盖安装。

Halo 搭建

好了,这里我们搭建 Halo 就很方便了,直接按照官方的文档来吧,很快就搞定了

第一步: 在系统任意位置创建一个文件夹,此文档以 ~/halo 为例。

mkdir ~/halo && cd ~/halo

注意:后续操作中,Halo 产生的所有数据都会保存在这个目录,请妥善保存。

第二步: 创建 docker-compose.yaml,这里我没有修改下面的配置,直接搭建的

需要注意的是,此文档为了更加方便的管理配置,所有与 Halo 相关的配置都使用 Docker 容器启动参数代替,所以无需创建 application.yaml 文件。

创建 Halo + PostgreSQL 的实例: *~/halo/docker-compose.yaml**

version: "3"

services:
  halo:
    image: halohub/halo:2.15
    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          
    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: postgres:15.4
    restart: on-failure:3
    networks:
      halo_network:
    volumes:
      - ./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:

此示例的 PostgreSQL 数据库容器默认没有设置端口映射,如果需要在容器外部访问数据库,可以自行在 halodb 服务中添加端口映射,PostgreSQL 的端口为 5432

docker-compose.yaml

第四步: 启动 Halo 服务

docker-compose up -d

docker-compose up
其实到此我们就完成了,后面我就看下 log 以及 容器就好了

查看 log

docker-compose logs -f

查看日志

查看容器
我们可以看到容器的情况,最开始需要一点时间 starting ,启动完了之后,就是 healthy
容器

效果

好了好了,我们最后来看下效果把,最开始需要我们初始化,这个界面我就跳过去了,就是填写下用户名和密码,邮箱,博客名称。

前端界面
前端界面
后端管理界面
后台管理界面

OK,到此就搞定了。如果是 docker-compose 没有出bug,我感觉可以在几分钟之类搞完这个,就看下 docker 获取镜像的时间,搞完了之后,直接启动就好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1663951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloudAlibaba:5.1Sentinel的基本使用

概述 简介 Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。 官网 https://sentinelguard.io/zh-cn/ Sentinel的历史 2012 年,Sentinel 诞生,主要功能为入口流量控制。 2013-2017 年…

[ue5]编译报错:使用未定义的 struct“FPointDamageEvent“

编译报错,错误很多,但很明显核心问题是第一个:使用未定义的 struct“FPointDamageEvent“: 程序没有找到FPointDamageEvent的定义。 解决办法: 处理这类未定义都可以先F12,找到它的库位置,之后…

数据结构——快速排序

基本思想: 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,…

BMJ英国医学杂志文献去哪里下载

《柳叶刀》The Lancet、《新英格兰医学期刊》NEJM、《美国医学会杂志》JAMA、《英国医学期刊》BMJ是世界四大医学顶尖期刊,今天有位医学同学求助一篇BMJ英国医学杂志文献,下面就用这篇文献演示一下在家获取BMJ文献的方法及过程。 文献名:Sur…

Multitouch for Mac:手势自定义,提升工作效率

Multitouch for Mac作为一款触控板手势增强软件,其核心功能在于手势的自定义和与Mac系统的深度整合。通过Multitouch,用户可以轻松设置各种手势,如三指轻点、四指左右滑动等,来执行常见的任务,如打开应用、切换窗口、滚…

视频号创作分成计划实战指南:保姆级教程,带你玩转新副业

视频号的月活跃用户数量已在去年突破了8亿大关,并且不断增长。 在这篇文章中,我将与大家分享视频号的运营玩法和作品创作方向。 一、玩法流程 开通条件 要开通创作者分成计划功能,需要满足以下条件: 粉丝数量达到100及以上。 …

Python专题:十一、集合

集合的初始化 . 字符串中的重复元素只能保留一个 数学中的集合操作 - 求两个集合的差集 & 求两个集合的交集 | 合并两个集合元素

word-快速入门

1、熟悉word界面 2、word排版习惯 3、排版文本基本格式 1、word界面 选项卡 功能组 点击功能组右下角小三角可以开启完整功能组,获得启动器 软件右上角有功能显示折叠按钮 2、排版好习惯 (1)随时保存 (2)规范文件命…

矩阵相关运算1

矩阵运算是线性代数中的一个核心部分,它包含了许多不同类型的操作,可以应用于各种科学和工程问题中。 矩阵加法和减法 矩阵加法和减法需要两个矩阵具有相同的维度。操作是逐元素进行的: CAB or CA−B其中 A,B 和 C 是矩阵,且 C…

Apache Knox 2.0.0使用

目录 介绍 使用 gateway-site.xml users.ldif my_hdfs.xml my_yarn.xml 其它 介绍 The Apache Knox Gateway is a system that provides a single point of authentication and access for Apache Hadoop services in a cluster. The goal is to simplify Hadoop securit…

双轴测径仪功能多 适用于各行各业外径检测

JG02Z-DG 系列双轴测径仪是双光路外径检测设备,两组测头可以进行不同形式的组合,从而完成不同产线需求的检测,今天我们主要讲解45角双轴测径仪,该种测径仪是较为常用的检测设备,两组测头与水平方向垂直方向呈45度角&am…

免费SSL证书有效期现状

自2024年4月25日起,腾讯云上申请的免费SSL证书有效期将从原先的12个月调整为3个月。而在其他平台,比如Gworg,已经有策略表明将停止签发1年期的免费SSL证书,转而仅提供有效期为3个月的证书。 目前,免费SSL证书的有效期…

笨方法自学python(一)

我觉得python和c语言有很多相似之处,如果有c语言基础的话学习python也不是很难。这一系列主要是学习例题来学习python;我用的python版本是3.12 代码编辑器我用的是notepad,运行py程序用cmd 现在开始写第一个程序: print ("…

拉线开关C++

题目&#xff1a; 思路&#xff1a; m%2的结果为0&#xff0c;就证明开关次数为偶数也就是处于关灯的状态就按题目所要求的输出0&#xff1b; 否则&#xff0c;就证明开关次数为奇数也就是处于开灯的状态就按题目所要求的输出1. 代码 &#xff1a; #include<iostream> u…

IDEA-SpringBoot项目yml配置文件不自动提示解决办法

文章目录 一、五花八门的解决方案二、通用解决方案 前言&#xff1a;本文为SpringBoot项目配置文件.yaml/.yml文件编写时没有自动提示的解决方案 一、五花八门的解决方案 同样的&#xff0c;当resources中只存在.properties文件和.yaml文件时&#xff0c;.yaml文件会主动提示信…

Vue3组件库开发项目实战——02项目搭建(配置Eslint/Prettier/Sass/Tailwind CSS/VitePress/Vitest)

摘要&#xff1a;在现代前端开发中&#xff0c;构建一个高效、可维护且易于协作的开发环境至关重要。特别是在开发Vue3组件库时&#xff0c;我们需要确保代码的质量、一致性和文档的完整性。本文将带你从0搭建vue3组件库开发环境&#xff0c;以下是配置代码规范、格式化、CSS样…

JVS物联网平台点位管理:让数据更高效

采集点位数据管理 采集点位数据管理采用列表页的方式进行展示&#xff0c;系统支持新增、批量导入、批量导出、批量删除、点位发现等功能&#xff0c;点位的详情、删除、历史记录等&#xff1a; 点位新增 点击新增点位按钮&#xff0c;在弹出表单中&#xff0c;可以填写相关的…

深入理解JavaScript事件循环Event Loop:宏任务与微任务的奇幻之旅

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f389; 引言&#x1f31f; 什么是事件循环&#xff1f;&#x1f4da; 「宏任务」 vs 「微任务」「宏任务」(Macrotask)「微任务」(Microtask)实际应用中的注意事项 &#x1f500; 执行流程概览&#x1f4dd; 代码示例…

【挑战30天首通《谷粒商城》】-【第一天】03、简介-分布式基础概念

文章目录 课程介绍 ( 本章了解即可&#xff0c;可以略过)1、微服务简而言之: 2、集群&分布式&节点2.1、定义2.2、示例 3、远程调用4、负载均衡常见的负裁均衡算法: 5、服务注册/发现&注册中心6、配置中心7、服务熔断&服务降级7.1、服务熔断7.2、服务降级 8、AP…

QT作业5

1、聊天室 服务器端 //头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QListWidget> #include <QMessageBox> #include <QDebug> #includ…