背景

之前我写了一篇,用gitbook搭建文档中心,gitbook是一款搭建博客的技术,是静态博客技术,不带后台管理系统、不带数据库,要发文章的话,是通过提供markdown文件,渲染成html,通过nginx对外访问。后来也给他们展示过其他静态博客技术如docsify搭建出来的样子,我自己还是蛮喜欢的,比较简洁,但是产品最终还是选择了带后台管理系统的方案-halo。

这个halo,属于动态博客技术,国产的,java开发的,数据库支持h2(内存数据库,重启丢数据,不要用于生产)、postgreSql、mysql。既然是动态博客技术,那就是带后台管理系统的,适合给不懂技术的人员使用,好些人还是不习惯markdown的,markdown的话,图床也是个问题(倒是可以用公司内部的oss服务)。

这个方案还是比较适合我们这边,为啥呢,因为我们现在在搞信创,数据库是国产的,国产数据库有几款是基于pg改的,我们的国产数据库就属于pg改的,所以这个方案也能满足信创要求。

本文只是简单记录下搭建过程以及部分踩坑过程以备忘。

halo简介

官网: https://www.halo.run/

演示站点:https://docs.halo.run/#在线体验

文档:https://docs.halo.run/category/安装指南

我们搭建出来的效果最终大概这样(用的earth主题):

搭建过程

docker安装

之前也写了个内网环境没网如何用rpm搭建docker的文章,后来有好心人提示我可以用更简单的办法。

可以参考官网这里,https://docs.docker.com/engine/install/binaries/

这个是直接利用静态链接的方式,把docker需要的所有的二进制都搞到这一个压缩包里了,比如说,大家安装nginx的时候,经常提示大家缺少了openssl、pcre等动态库,这种就属于动态链接了,其实你也可以不依赖系统的动态库,直接指定openssl、pcre的源码,然后直接编译进最终的nginx的二进制文件里,这种就是静态链接了,这种的问题是,如果运维统一升级了openssl这些,但你自己编译的这个nginx还是老版本,就会有风险,这里的这种docker安装方式,也是同样道理。

但是我这边反正是用这种方式,文档中心也不怎么重要,内网也很少遇到需要升级这些基础组件的场景,开整。

https://download.docker.com/linux/static/stable/x86_64/
下载了 docker-24.0.7.tgz tar xzvf docker-24.0.7.tgz
cp docker/* /usr/bin/ [root@AppDevPlatform3 upload]# docker -v
Docker version 24.0.7, build afdd53b 启动:
dockerd &
检查:
[root@AppDevPlatform3 upload]# ps -ef|grep docker
root 1101154 1005806 1 15:34 pts/0 00:00:00 dockerd
root 1101163 1101154 0 15:34 ? 00:00:00 containerd --config /var/run/docker/containerd/containerd.toml

如果生产安装的话,可以再多搞点事,比如开机自启动、非root用户启动:

https://docs.docker.com/engine/install/linux-postinstall/

加载halo的image

有网络的话,这个就行:

https://hub.docker.com/r/halohub/halo

docker pull halohub/halo

内网机器没网的话,我是先在有网的机器上把镜像拉下来后,用docker save后传输到内网机器后,docker load来解决这个问题。(公司内docker私服ok也行,但是生产上我们这边是完全没网,估计还是得这样)

[root@xxx local-image]# docker load <halo.tar
01d4e4b4f381: Loading layer [==================================================>] 80.35MB/80.35MB
...
3.072kB/3.072kB

创建数据库

这个就大家自己弄吧,假设建了个库叫test,url为:1.1.1.1:5432/test

启动docker

我这边是没打算用docker compose方式,因为安装docker compose还要多费点事情,然后docker compose的话,是会自己给我们整一个halo进程 + mysql/postgre进程,我这边都有外置的db了,单跑个docker足矣。

docker run -it -d --privileged  --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2  halohub/halo:2.10
--server.port=8090
--spring.r2dbc.url=r2dbc:pool:postgresql://1.1.1.1/test?currentSchema=test
--spring.r2dbc.username=abc
--spring.r2dbc.password=def
--spring.sql.init.platform=postgresql

这块主要是数据库相关的参数,我这个是连接pg库的,参数的详细信息,大家参考官网文档:

https://docs.halo.run/getting-started/install/docker

我这边加了个--privileged参数,是因为我遇到个什么报错来着,启动不了,加了后就ok了。

参数详解:https://www.python100.com/html/100478.html

使用docker-compose启动(可选)

如果还是选择用docker-compose,这里也简单记录下,安装docker-compose插件:

https://docs.docker.com/compose/install/linux/#install-the-plugin-manually

然后就照着这里弄吧:

https://docs.halo.run/getting-started/install/docker-compose

我贴下我的配置:

docker-compose.yaml

version: "3"

services:
halo:
image: halohub/halo:2.10
container_name: halo
restart: on-failure:3
network_mode: "host"
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
command:
- --spring.r2dbc.url=r2dbc:pool:postgresql://1.1.1.15432/test?currentSchema=abc
- --spring.r2dbc.username=abc
- --spring.r2dbc.password=def
- --spring.sql.init.platform=postgresql
- --server.port=8090
docker-compose -f docker-compose.yaml up -d

docker-compose -f docker-compose.yaml logs -f

访问网站及后台

访问对应的ip:8090端口即可。

安装markdown插件

在内网服务器上安装会失败,因为这个需要请求外网服务器

离线安装markdown插件:

插件首页:

https://www.halo.run/store/apps/app-HTyhC

安装主题

如果安装报错,请检查“本地未安装”中是否存在未安装成功的主题。

备份恢复

这个功能对我很重要,我在开发环境搭好后,就是产品自己去搞成自己想要的效果了,为了避免转测试、上线后,他需要再重复弄,这个整站的迁移功能就很重要,省了我很多事。

https://docs.halo.run/user-guide/backup

使用该机制,可以快速备份环境再导入新环境,不用手动重新配置一遍。

搭建过程中涉及国产db的一个小坑

创建数据库时,我是新建了一个专门的用户,然后把新建的库分给这个用户。结果这个halo连上后,启动时,一直说用户名密码错误,但是同样的用户名密码,用dbeaver都是可以连接的,报错的就是程序会报错,当时还以为halo程序有问题。

后来也是抓包解决了:

是国产库那边,说,密码第一次设置后,首次使用的话,必须要再改一次还是怎么的,我改来改去都有问题。后来把问题反馈给那边,那边说这个首次使用的密码必须强制修改的机制可以关闭,也是坑爹。

遗留问题

我们现在要上生产的话,数据库密码必须是配置成加密的,所以,我这个上线部署方案估计都有点问题,后面可能还是要看下halo的代码,我大概知道是用spring boot 3.x + jdk 17搞的,密码加密不知道支持不,不支持的话,到时候还得二开一下。

结语

大概就是这些了,成都马上又迎来几个月的冬天了,瑟瑟发抖。

使用halo快速搭建应用文档中心的更多相关文章

  1. IDEA快速搭建 SpringCloud 注册中心与

    第一步:创建 注册中心(eureka)项目 按照以下步骤一步一步来(只是对于IDEA的初学者来说) (我这里选择maven项目.比较方便) 给注册中心项目 取上可爱的名称 第二步配置 eureka的p ...

  2. 推荐一个vuepress模板,一键快速搭建文档站

    介绍 vuepress-template是一个简单的VuePress案例模板,目的是让用户可以直接clone这个仓库,作为初始化一个VuePress网站启动项目,然后在这个项目的基础上新增自定义配置和 ...

  3. EpiiAdmin 开源的php交互性管理后台框架, 让复杂的交互变得更简单!Phper快速搭建交互性平台的开发框架,基于Thinkphp5.1+Adminlte3.0+Require.js。

    EpiiAdmin EpiiAdmin php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js, 让复杂的交互变得更简单!Phper快速搭建交互性平台的 ...

  4. spring boot / cloud (十七) 快速搭建注册中心和配置中心

    spring boot / cloud (十七) 快速搭建注册中心和配置中心 本文将使用spring cloud的eureka和config server来搭建. 然后搭建的模式,有很多种,本文主要聊 ...

  5. .NetCore快速搭建ELK分布式日志中心

    懒人必备:.NetCore快速搭建ELK分布式日志中心   该篇内容由个人博客点击跳转同步更新!转载请注明出处! 前言 ELK是什么 它是一个分布式日志解决方案,是Logstash.Elastaics ...

  6. 使用Docker快速搭建Halo个人博客到阿里云服务器上[附加主题和使用域名访问]

    一.前言 小编买了一个服务器也是一直想整个网站,一直在摸索,看了能够快速搭建博客系统的教程.总结了有以下几种方式,大家按照自己喜欢的去搭建: halo wordpress hexo vuepress ...

  7. 搭建SpringCloud-Eureka 注册中心以及服务提供与调用 快速了解 SpringCloud-Eureka

    原文地址:  搭建SpringCloud-Eureka 注册中心以及服务提供与调用   纸上得来终觉浅,绝知此事要躬行啊~果然看着很easy,自己搞起来就是各种坑~各位看官,容我慢慢道来~ 关于spr ...

  8. 【Elastic-1】ELK基本概念、环境搭建、快速开始文档

    TODO 快速开始文档 SpringBoot整合ELK(Logstash收集日志.应用主动向ES写入) ELK接入Kafka 基本概念 ElasticSearch 什么是ElasticSearch? ...

  9. Dubbo应用文档

    Dubbo应用文档 Dubbo简介 概述 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 Dubbo是阿里巴巴SOA服务化治理方案的核心框架, ...

  10. Docker Data Center系列(一)- 快速搭建云原生架构的实践环境

    本系列文章演示如何快速搭建一个简单的云原生架构的实践环境. 基于这个基础架构,可以持续部署微服务架构的应用栈,演练敏捷开发过程,提升DevOps实践能力. 1 整体规划 1.1 拓扑架构 1.2 基础 ...

随机推荐

  1. [git]基于GitLab搭建本地Git服务

    0.准备 (如果选择docker安装)Docker 系统:CentOS 7 1.安装部署GitLab 1.1.使用docker安装中文社区版GitLab 在docker上发现一个中文版的gitlab, ...

  2. [selenium]相对定位器

    前言 Relative Locators,相对定位器,是Selenium 4引入的一个新的定位器,相对定位器根据源点元素去定位相对位置的其它元素. 相对定位方法其实是基于JavaScript的 get ...

  3. Three.js中实现碰撞检测

    1. 引言 碰撞检测是三维场景中常见的需求,Three.js是常用的前端三维JavaScript库,本文就如何在Three.js中进行碰撞检测进行记述 主要使用到的方法有: 射线法Raycaster ...

  4. AI绘画StableDiffusion实操教程:月光下的美人(含高清图片)

    本教程收集于:AIGC从入门到精通教程汇总 今天继续分享AI绘画实操教程,如何用lora包生成超真实好看质感超强的人物图片. 放大高清图已放到教程包内,需要的可以自取. 出图效果: 更多图片资源访问查 ...

  5. IDEA 配置桌面快捷方式

    IDEA 配置桌面快捷方式 目录 IDEA 配置桌面快捷方式 1.下载idea.tar解压 2.配置快捷方式 3.为什么要存放在这个目录? 1.下载idea.tar解压 tar xf ideaIC-2 ...

  6. Linux虚拟机安装及下载

    centos 7操作系统下载及安装步骤 (仅供参考) 下载: 1.打开如下网站:先下载镜像文件 ping:https://www.centos.org/download/ 2.进入到如下界面 3.然后 ...

  7. 多数据源管理:掌握@DS注解的威力

    大家在日常后端开发过程,不可避免的会接触到需要用到配置多个数据源的场景,在这里,小编介绍一种简单方便的,只需要简单的配置和一个@DS注解就能实现动态数据源的方式,这种动态数据源底层原理是基于Mybat ...

  8. 什么???CSS也能原子化!

    1.什么是原子化 CSS? Atomic CSS is the approach to CSS architecture that favors small, single-purpose class ...

  9. YXの每日挂分记录

    7.11 T1 不开两倍数组 100->60. 7.18 T2 dp+矩乘 转移不判边界 100->10. 7.20 T2 人类智慧 1e6 n log n 100->10,求前 5 ...

  10. Python 轻松生成PDF文档

    PDF(Portable Document Format)是一种常用的文档格式,具有跨平台兼容性.保真性.安全性和交互性等特点.我们日常生活工作中的合同.报告.论文等通常都采用PDF格式,以确保文档在 ...