使用 Docker Compose 部署 Halo 2.x 与 MySQL

使用 Docker Compose 部署 Halo 2.x 与 MySQL

本文主要介绍使用 Docker Compose 部署 Halo 2.xMySQL, 主要针对小白。 有一定基础的, 可以直接去官网查看。

博主博客

  • https://blog.uso6.com
  • https://blog.csdn.net/dxk539687357

一、Docker 与 Docker Compose 安装

1.1 Docker 安装

先使用下面命令, 判断系统是都已经安装 Docker, 如果已经安装, 会正常数据 Docker 的版本。 如果已经安装, 跳过此步骤。

root@nukixPC:~$ docker --version
Docker version 24.0.7, build afdd53b

如果没有安装,使用下面命令进行一键安装。

root@nukixPC:~/Desktop$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun# Executing docker install script, commit: e5543d473431b782227f8908005543bb4389b8de
+ sudo -E sh -c 'apt-get update -qq >/dev/null'+ sudo -E sh -c 'DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null'
+ sudo -E sh -c 'install -m 0755 -d /etc/apt/keyrings'
+ sudo -E sh -c 'curl -fsSL "https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg'
+ sudo -E sh -c 'chmod a+r /etc/apt/keyrings/docker.gpg'
+ sudo -E sh -c 'echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list'
+ sudo -E sh -c 'apt-get update -qq >/dev/null'
+ sudo -E sh -c 'DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null'
+ sudo -E sh -c 'docker version'
Client: Docker Engine - CommunityVersion:           24.0.7API version:       1.43Go version:        go1.20.10Git commit:        afdd53bBuilt:             Thu Oct 26 09:08:26 2023OS/Arch:           linux/arm64Context:           defaultServer: Docker Engine - CommunityEngine:Version:          24.0.7API version:      1.43 (minimum version 1.12)Go version:       go1.20.10Git commit:       311b9ffBuilt:            Thu Oct 26 09:08:26 2023OS/Arch:          linux/arm64Experimental:     falsecontainerd:Version:          1.6.26GitCommit:        3dd1e886e55dd695541fdcd67420c2888645a495runc:Version:          1.1.10GitCommit:        v1.1.10-0-g18a0cb0docker-init:Version:          0.19.0GitCommit:        de40ad0================================================================================To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:dockerd-rootless-setuptool.sh installVisit https://docs.docker.com/go/rootless/ to learn about rootless mode.To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/WARNING: Access to the remote API on a privileged Docker daemon is equivalentto root access on the host. Refer to the 'Docker daemon attack surface'documentation for details: https://docs.docker.com/go/attack-surface/================================================================================

安装完后, 再使用 docker --version 确认安装成功即可。

1.2 Docker Compose 安装

先使用下面命令, 判断系统是都已经安装 Docker Compose, 如果已经安装, 会正常数据 Docker Compose 的版本。 如果已经安装, 跳过此步骤。由于版本的差异, docker composedocker-compose 其中一个可以使用即可。

root@nukixPC:~$ docker compose version
Docker Compose version v2.21.0[root@nukixPC ~]# docker-compose --version
Docker Compose version v2.17.3

如果没有安装,使用下面命令进行一键安装。

root@nukixPC:~/Desktop$ sudo curl -L https://get.daocloud.io/docker/compose/releases/download/v2.23.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100   162  100   162    0     0    708      0 --:--:-- --:--:-- --:--:--   710

安装完后, 再使用 docker compose versiondocker-compose --version 确认安装, 其中一个安装成功即可, 哪个成功, 下面就使用哪个作为语句。

1.3 常用命令

# 启动 docker 服务
systemctl start docker
# 停止 docker 服务
systemctl stop docker
# 重新启动 docker 服务
systemctl restart docker
# 把 docker 设置为开机启动
systemctl enable docker
# 取消 docker 开机启动
systemctl disable docker# 下面的命令根据 docker compose version 与 docker-compose --version 决定使用哪一个
# 根据 docker-compose.yaml 配置启动服务(必须 cd 到 docker-compose.yaml 目录)
docker compose up -d
docker-compose up -d
# 根据 docker-compose.yaml 配置停止服务(必须 cd 到 docker-compose.yaml 目录)
docker compose down
docker-compose down

注意: 确保每次改配置前, 先调用 docker compose down 关闭容器。

二、官网配置运行

2.1 官网默认配置

首先创建一个文件夹, 任意位置即可, 官方推荐使用 ~/halo 目录。

mkdir ~/halo && cd ~/halo

然后创建 docker-compose.yaml 配置文件。

vim ~/halo/docker-compose.yaml

把下面配置文件复制进去

version: "3"services:halo:image: halohub/halo:2.11container_name: halorestart: on-failure:3depends_on:halodb:condition: service_healthynetworks:halo_network:volumes:- ./halo2:/root/.halo2ports:- "8090:8090"healthcheck:test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]interval: 30stimeout: 5sretries: 5start_period: 30scommand:- --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/halodb:image: mysql:8.1.0container_name: halodbrestart: on-failure:3networks:halo_network:command: - --default-authentication-plugin=caching_sha2_password- --character-set-server=utf8mb4- --collation-server=utf8mb4_general_ci- --explicit_defaults_for_timestamp=truevolumes:- ./mysql:/var/lib/mysql- ./mysqlBackup:/data/mysqlBackupports:- "3306:3306"healthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]interval: 3sretries: 5start_period: 30senvironment:# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值- MYSQL_ROOT_PASSWORD=o#DwN&JSa56- MYSQL_DATABASE=halonetworks:halo_network:

然后在 ~/halo 文件夹中, 使用配置启动容器。(如果上面 docker-compose --version 可用, 那么此处应该使用 sudo docker-compose up -d

root@nukixPC:~/halo$ sudo docker compose up -d[+] Running 22/22✔ halodb 10 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                   87.4s ✔ e39ec8f010eb Pull complete                                           49.0s ✔ e2b7fadc33ec Pull complete                                           33.7s ✔ 9d193449aafd Pull complete                                           38.2s ✔ 6ea497c74b15 Pull complete                                           38.9s ✔ 7778acbf55f3 Pull complete                                           40.8s ✔ b65a5d7a2435 Pull complete                                           40.3s ✔ cef9fb0078a5 Pull complete                                           58.7s ✔ 5b6dc73ec724 Pull complete                                           42.2s ✔ d992bb39e209 Pull complete                                           77.5s ✔ 4431432b89a3 Pull complete                                           50.4s ✔ halo 10 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                     42.6s ✔ 7734efb8b826 Pull complete                                           19.3s ✔ 99aeb38bcf66 Pull complete                                           12.2s ✔ f11698de8208 Pull complete                                           16.2s ✔ fba9be95bc5e Pull complete                                           20.0s ✔ 2aeadb252420 Pull complete                                           17.6s ✔ b7b59b0b46ed Pull complete                                           36.6s ✔ be3c46ee9bf6 Pull complete                                           22.3s ✔ e9881bf6fa6f Pull complete                                           23.4s ✔ 52f80228d2cb Pull complete                                           32.0s ✔ 3dceb7e8fe22 Pull complete                                           27.0s 
[+] Running 3/3✔ Network halo_halo_network  Created                                      0.1s ✔ Container halodb           Healthy                                      0.1s ✔ Container halo             Started                                      0.0s 

执行完命令后可以使用下面命令查看状态。
netstat -nlt 用来查看端口占用情况, 上面的 docker-compose.yaml 文件配置了 Halo 的端口为 8090MySQL 的端口为 3306

root@nukixPC:~/halo$ netstat -nltActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN 
tcp        0      0 0.0.0.0:8090            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN  
tcp6       0      0 :::3306                 :::*                    LISTEN     
tcp6       0      0 :::8090                 :::*                    LISTEN 

docker ps 可以查看运行中的容器。

root@nukixPC:~/Desktop/halo$ sudo docker psCONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS                    PORTS                                                  NAMES
19ac11fb439c   halohub/halo:2.11   "sh -c 'java ${JVM_O…"   42 seconds ago   Up 32 seconds (healthy)   0.0.0.0:8090->8090/tcp, :::8090->8090/tcp              halo
08d024cbe9c1   mysql:8.1.0         "docker-entrypoint.s…"   42 seconds ago   Up 41 seconds (healthy)   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   halodb

数据文件生成, 这时候可以看到 ~/halo 文件夹中多了 3 个文件夹。
其中 halo2 是 halo2 的数据文件夹, mysqlmysqlBackup 是 mysql 的数据文件夹。

root@nukixPC:~/halo$ ls
docker-compose.yaml  halo2  mysql  mysqlBackuproot@nukixPC:~/halo$ ls halo2
indices  keys  logs  themesroot@nukixPC:~/halo$ ls mysql
'#ib_16384_0.dblwr'   auto.cnf        ca-key.pem        halo             mysql                private_key.pem   sys
'#ib_16384_1.dblwr'   binlog.000001   ca.pem            ib_buffer_pool   mysql.ibd            public_key.pem    undo_001
'#innodb_redo'        binlog.000002   client-cert.pem   ibdata1          mysql.sock           server-cert.pem   undo_002
'#innodb_temp'        binlog.index    client-key.pem    ibtmp1           performance_schema   server-key.pemroot@nukixPC:~/halo$ ls mysqlBackup

这时候可以打开浏览器, 输入 http://[输入这台服务器的IP]:8090 即可进入 Halo 2 的配置页面, 配置完成即可进入博客。

2.2 MySQL 修改密码

需要修改两个地方, 一个是 mysql 容器配置的密码 MYSQL_ROOT_PASSWORD, 另外一个是 Halo2 容器连接 mysql 时用到的密码 --spring.r2dbc.password。 比如我要把密码修改为 88888888, 那么修改 docker-compose.yaml, 修改前记得使用 docker compose down 关闭容器。

...
- --spring.r2dbc.password=88888888
...
- MYSQL_ROOT_PASSWORD=88888888
...

使用命令 docker compose up -d 启动服务。 这时候大概率启动失败,halo 容器启动不了。

root@nukixPC:~/halo$ sudo docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED              STATUS                            PORTS                                                  NAMES
92805e3dcc42   halohub/halo:2.11   "sh -c 'java ${JVM_O…"   About a minute ago   Up 2 seconds (health: starting)   0.0.0.0:8090->8090/tcp, :::8090->8090/tcp              halo
ef5c6a3d9462   mysql:8.1.0         "docker-entrypoint.s…"   About a minute ago   Up About a minute (healthy)       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   halodb

这时候可以使用 docker logs [CONTAINER ID] 查看 log。

root@nukixPC:~/halo$ sudo docker logs 92805e3dcc42...
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'r2dbcScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/R2dbcInitializationConfiguration.class]: Failed to execute database scriptat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1775) ~[spring-beans-6.1.1.jar:6.1.1]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-6.1.1.jar:6.1.1]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523) ~[spring-beans-6.1.1.jar:6.1.1]at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.1.jar:6.1.1]at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.1.jar:6.1.1]at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.1.jar:6.1.1]at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.1.jar:6.1.1]at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) ~[spring-beans-6.1.1.jar:6.1.1]at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:946) ~[spring-context-6.1.1.jar:6.1.1]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:616) ~[spring-context-6.1.1.jar:6.1.1]at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) ~[spring-boot-3.2.0.jar:3.2.0]

会发现报错, 提示数据库连接失败。 这是因为首次进入的时候已经使用密码对数据库进行初始化, 所以直接改 docker-compose.yaml 配置不会生效。所以这里提供两种解决方法。

  1. 如果是刚创建没有重要数据, 直接使用 sudo rm -rd mysql* 删除上面提到的 mysqlmysqlBackup文件夹。然后重新 docker compose up -d 即可启动。
  2. 把配置改回改之前的密码, 比如一开始用的是 o#DwN&JSa56, 改回去后 docker compose up -d 启动。再通过远程 mysql, 使用命令更换 mysql 密码。 修改完后, 在修改 docker-compose.yaml 为修改后的密码, 再次启动即可。

2.3 修改端口

比如我要把 halo 2 修改为 9090 端口, mysql 修改为 9089 端口, 那么先修改 docker-compose.yaml

...
ports:- "9090:8090"
healthcheck:test: ["CMD", "curl", "-f", "http://localhost:9090/actuator/health/readiness"]
# 外部访问地址,请根据实际需要修改- --halo.external-url=http://localhost:9090/
...
ports:- "9089:3306"
...

然后使用 docker compose up -d 启动容器即可。可以查看端口占用情况

parallels@ubuntu-linux-22-04-desktop:~/Desktop/halo$ netstat -nlt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:9089            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:9090            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 :::9089                 :::*                    LISTEN     
tcp6       0      0 :::9090                 :::*                    LISTEN 

可以看到端口成功被修改, 可以通过浏览器访问 http://[输入这台服务器的IP]:9090 即可打开博客。

参考文献

  • 使用 Docker Compose 部署

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

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

相关文章

Java动态代理机制 代码示例demo

文章目录 JDK动态代理代码实现示例1.定义发送短信的接口2.实现发送短信的接口3.定义一个 JDK 动态代理类4.获取代理对象的工厂类5.实际使用 JDK 动态代理只能代理实现了接口的类CGLIB动态代理代码实现示例1.实现一个使用阿里云发送短信的类2.自定义 MethodInterceptor&#xff…

Java——猫猫图鉴微信小程序(前后端分离版)

目录 一、开源项目 二、项目来源 三、使用框架 四、小程序功能 1、用户功能 2、管理员功能 五、使用docker快速部署 六、更新信息 审核说明 一、开源项目 猫咪信息点-ruoyi-cat: 1、一直想做点项目进行学习与练手,所以做了一个对自己来说可以完成的…

HCIP:rip综合实验

实验要求: 【R1-R2-R3-R4-R5运行RIPV2】 【R6-R7运行RIPV1】 1.使用合理IP地址规划网络,各自创建环回接口 2.R1创建环回 172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.加快网络收敛,减少路由条目数量,增…

go mod 命令详解

文章目录 1.关于模块2.关于 go mod3.格式4.示例参考文献 1.关于模块 模块(Modules)是 Go 1.11 版本引入的一依赖管理机制。 一个模块是 Go packages 的集合,定义在项目根目录下的 go.mod 文件。go.mod 文件定义了模块的路径,这也…

Linux let命令教程:如何有效地进行算术运算(附实例教程和注意事项)

Linux let命令介绍 let命令是Linux系统中的内置命令,用于评估算术表达式。与其他算术评估和扩展命令不同,let是一个简单的命令,具有自己的环境。let命令还允许进行算术扩展。 Linux let命令适用的Linux版本 let命令在所有主流的Linux发行版…

Unity中URP下的添加雾效支持

文章目录 前言一、URP下Shader支持雾效的步骤1、添加雾效变体2、在Varying结构体中添加雾效因子3、在顶点着色器中,我们使用内置函数得到雾效因子4、在片元着色器中,把输出颜色 和 雾效因子混合输出 二、在Unity中打开雾效三、测试代码 前言 我们使用之…

ubuntu20部署Bringing-Old-Photos-Back-to-Life

环境准备: ubuntu20.04 Python 3.8.10 首先将微软的「Bringing-Old-Photos-Back-to-Life」库 clone 到本地: git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git cd Face_Enhancement/models/networks/ git clone https:/…

Python 爬虫 教程

python爬虫框架:Scrapyd,Feapder,Gerapy 参考文章: python爬虫工程师,如何从零开始部署ScrapydFeapderGerapy? - 知乎 神器!五分钟完成大型爬虫项目 - 知乎 爬虫框架-feapder - 知乎 scrap…

NFC物联网智慧校园解决方案

近场通信(Near Field Communication,NFC)又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输交换数据。这个技术由免接触式射频识别(RFID)发展而来,并兼容 RFID,主要用于…

解决VNC连接Ubuntu服务器打开终端出现闪退情况

服务器环境 阿里云ECS服务器 操作系统:Ubuntu 20.0.4 如何使用VNC连接阿里云ECS服务器 1.阿里云官方指导:通过VNC搭建Ubuntu 18.04和20.04图形界面 2.新手入门ECS——ubuntu 20.04安装图形化界面和本地VNC连接 问题描述 使用VNC连接上新申请阿里云服…

leetcode每日一题41

99. 恢复二叉搜索树 中序遍历树,找到逆序的两个数,交换 有两种情况 如果是像示例1一样的,中序遍历后是3,2,1 是连续的两个逆序,那么交换第一,第三个数 如果是像示例2一样,中序遍历后…

Debezium发布历史35

原文地址: https://debezium.io/blog/2018/07/19/advantages-of-log-based-change-data-capture/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. 基于日志的变更数据捕获的五个优点 七月 19, 2018 作…

github鉴权失败

问题: 如上图所示 git push 时发生了报错,鉴权失败; 解决方案 Settings->Developer settings->Personal access tokens->Generate new token。创建新的访问密钥,勾选repo栏,选择有效期,为密钥命…

【C#与Redis】--高级主题--Redis 管道

一、引言 1.1 概念介绍 Redis管道是一种用于优化多个命令执行的机制,允许客户端将多个命令一次性发送给服务器,然后一次性接收所有命令的返回结果。这种机制可以减少客户端与服务器之间的网络往返次数,从而提高性能。 1.2 作用 提高性能&…

java 对数转换log_a {c}

1、换底公式 l o g a c l o g x c l o g x a log_a c \frac{log_x c}{log_x a} loga​clogx​alogx​c​ 2、推理过程 有: a b c ,证明 l o g a c l o g x c l o g x a 取对数 ( l o g x ) : l o g x a b l o g x c l o g x a b b ∗ …

鸿蒙HarmonyOS-图表应用

简介 随着移动应用的不断发展,数据可视化成为提高用户体验和数据交流的重要手段之一。在HarmonyOS应用开发中,一个强大而灵活的图表库是实现这一目标的关键。而MPChart就是这样一款图表库,它为开发者提供了丰富的功能和灵活性,使得…

【持续更新ing】uniapp+springboot实现个人备忘录系统【前后端分离】

目录 (1)项目可行性分析 (2)需求描述 (3)界面原型 (4)数据库设计 (5)后端工程 接下来我们使用uniappspringboot实现一个简单的前后端分离的小项目----个…

Spark作业的调度与执行流程

Apache Spark是一个分布式计算框架,用于处理大规模数据。了解Spark作业的调度与执行流程是构建高效分布式应用程序的关键。本文将深入探讨Spark作业的组成部分、调度过程以及执行流程,并提供丰富的示例代码来帮助大家更好地理解这些概念。 Spark作业的组…

第09章:随堂复习与企业真题(异常处理)

来源:尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备) 基本都是宋老师发的资料里面的内容,只不过补充几个资料里没直接给出答案的问题的答案。 不想安装markdown笔记的app所以干脆在这里发一遍。 第09章:随堂复习…

[Angular] 笔记 16:模板驱动表单 - 选择框与选项

油管视频: Select & Option (Template Driven Forms) Select & Option 在 pokemon.ts 中新增 interface: export interface Pokemon {id: number;name: string;type: string;isCool: boolean;isStylish: boolean;acceptTerms: boolean; }// new interface…