在Ubuntu Server安装Docker Compose部署Halo
Ubuntu Server安装
镜像文件下载
访问网址Get Ubuntu | Download | Ubuntu下载Ubuntu Server的镜像
- 访问官网,点击下载服务器版本的镜像

- Ubuntu有稳定版和最新版,我选择最新版

- 下载完的镜像文件模样如是

VMware安装Ubuntu Server
这里我选择使用VMware来安装Ubuntu Server,也可以安装在 物理/云 服务器上,安装过程与VMware安装大致相同,可以为鉴。
新建虚拟机
- 打开VMware,在空白处右键->新建虚拟机

- 选择典型安装

- 选择稍后安装操作系统

- 再选择Ubuntu 64位

- 选择安装名字以及安装路径,可根据提示更改虚拟机新建的默认位置,以便日后新建虚拟机

- 容量20G即可,磁盘容量设置不会占用相应大小的物理磁盘空间,视虚拟机中的文件多少而定

- 可以自定义设置硬件参数,设置完点击完成即可完成创建

- 双击CD/DVD打开设置界面,选择镜像的目录,设置完后即可开启虚拟机了


- 开启虚拟机

安装Ubuntu Server
- 选择第一项

- 语言选择英语,按回车

- 键盘配置默认即可,选择Done回车

- 安装类型选择“最小安装”,使用Tab键或上下两个箭头键选择,使用Enter(回车)键确认选择

- 网络配置,系统会自动获取(DHCP)IP地址,获取地址后选择Done,回车

- 代理不配置,直接Done,回车

- Ubuntu存档镜像配置,镜像源默认为Ubuntu官方镜像源,由于地理位置关系,访问可能会很慢
因此,可以使用清华镜像源
https://mirrors.tuna.tsinghua.edu.cn/ubuntu/
即 清华大学开源软件镜像站 的ubuntu地址

- 引导式存储配置,磁盘分区默认选择
Use an entire disk(使用整个磁盘),即全盘分区。
如果是在重装系统时,不想让一些磁盘分区不被格式化,便不要使用此项。

- 存储配置,即分区预览,若赞同这般分区,便选择Done,回车

- 这时会弹出提示框
毁灭性动作确认
一旦选择下面的“继续”将开始安装过程,将导致选定要格式化的磁盘上的数据将会丢失。
您将无法返回到此屏幕或以前的屏幕
是否继续?
询问我们是否确认,我们选择Continue,回车
- 配置文件设置,输入服务器系统的详细信息。
名称:
服务器名称:
(Pick a username)用户名:
密码:
将会使用它们来登录服务器。选择Done,然后按Enter键即可继续。

- SSH设置,勾选
Install OpenSSH Server,再Done,回车

- 安装软件,这里我们不安装软件。直接使用Table键选择Done,回车

- 安装完成后选择Reboot Now

- 之后会出现几行FAILED提示,直接回车,重启系统

- 登录,完成后进入登录界面,输入 在Pick a username处创建的用户名和密码登录。因为我把用户名改成luanshang了,所以我这里用luanshang登录。

至此,Ubuntu Server安装完成!
软件环境安装
使用终端工具SSH连接服务器,启动MobaXterm
MobaXterm下载页面:MobaXterm free Xserver and tabbed SSH client for Windows
- 新建一个会话(两个Session都是新建会话),选择SSH连接。

- 在Ubuntu Server使用命令
ip address查看IP地址。

将查看到的IP地址输入到“基础SSH设置”的Remote host(远程主机)处。此项为必填项
右边的Specify username(指定用户名)为非必选项,可不填。
填完后选择OK。建立连接如果弹出确认框就选Accept。若是首次使用该软件,它可能会弹出主密码设置选项,可以设置主密码,也可以取消设置。这样在输入密码后会记住密码,以便下次连接之时快速建立连接。
之后输入用户名和密码即可建立SSH连接。
软件环境
Halo 理论上可以运行在任何支持 Docker 及 Java 的平台。
Docker
必须在运行环境安装好 Docker 环境,目前 Halo 的默认安装运行方式均使用容器。
JRE(可选)
目前 Halo 的默认及推荐安装方式为 Docker 容器运行,使用 jar 包运行的方式需要用户自行构建 jar 包。
当前版本(2.0)需要 JRE 17 的版本,推荐使用 OpenJDK 17。
- 查看是否安装Java
luanshang@shang:~$ java -version
-bash: java: command not found
#这说明java并未安装,接下来进行Java安装
- Ubuntu安装jre环境可以直接使用apt软件源里面的安装包安装
#查看apt软件源中的Java包
apt list | grep -i java
#查看apt软件源中的openjdk包
apt list | grep -i openjdk
#安装Java21版本的包
sudo apt install openjdk-21-jdk -y
#安装Java需要root权限,故使用sudo。 -y为yes,在选择时自动选择yes
- 再查看Java是否安装
luanshang@shang:~$ java -version
openjdk version "21" 2023-09-19
OpenJDK Runtime Environment (build 21+35-Ubuntu-1)
OpenJDK 64-Bit Server VM (build 21+35-Ubuntu-1, mixed mode, sharing)
#显示Java版本为21版本,安装成功
PostgreSQL(可选)
也可以使用系统自带的 H2 Database 数据库,无需安装。但不推荐在生产环境中使用 H2 Database。
Web 服务器(可选)
如果你部署在生产环境,那么你很可能需要进行域名绑定,这时候我们推荐使用诸如 Nginx、Caddy 之类的 Web 服务器进行反向代理。但需要注意的是,目前 Halo 不支持代理到子目录(如:halo.run/blog)。
Wget(可选)
后续的文档中,我们会使用 wget 为例,用于下载所需要的文件,所以请确保服务器已经安装好了这个软件包。当然,下载文件不限制工具,如果你对其他工具熟悉,可以忽略。
- 安装Wget
#安装Wget
sudo apt install wget
#查看Wget版本
wget --version
#查出来的信息有点多
GNU Wget 1.21.3 built on linux-gnu.
-cares +digest -gpgme +https +ipv6 +iri +large-file -metalink +nls
+ntlm +opie +psl +ssl/openssl
Wgetrc:
/etc/wgetrc (system)
Locale:
/usr/share/locale
Compile:
gcc -DHAVE_CONFIG_H -DSYSTEM_WGETRC="/etc/wgetrc"
-DLOCALEDIR="/usr/share/locale" -I. -I../../src -I../lib
-I../../lib -Wdate-time -D_FORTIFY_SOURCE=2 -DHAVE_LIBSSL -DNDEBUG
-g -O2 -ffile-prefix-map=/build/wget-Wg7LHK/wget-1.21.3=.
-flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects
-fstack-protector-strong -Wformat -Werror=format-security
-DNO_SSLv2 -D_FILE_OFFSET_BITS=64 -g -Wall
Link:
gcc -DHAVE_LIBSSL -DNDEBUG -g -O2
-ffile-prefix-map=/build/wget-Wg7LHK/wget-1.21.3=. -flto=auto
-ffat-lto-objects -flto=auto -ffat-lto-objects
-fstack-protector-strong -Wformat -Werror=format-security
-DNO_SSLv2 -D_FILE_OFFSET_BITS=64 -g -Wall -Wl,-Bsymbolic-functions
-flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now
-lpcre2-8 -luuid -lidn2 -lssl -lcrypto -lz -lpsl ../lib/libgnu.a
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://www.gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Originally written by Hrvoje Niksic <hniksic@xemacs.org>.
Please send bug reports and questions to <bug-wget@gnu.org>.
VIM(可选)
后续的文档中,我们会使用 vim 为例,用于修改一些必要的配置文件,所以同样请确保服务器已经安装了这个软件包。当前,修改文档也不限制工具,如果你对其他编辑软件熟悉,也可以忽略。
- 安装Vim
#安装Vim,自动选择yes
sudo apt install vim -y
#查看Vim安装版本
vim -version
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Oct 16 2023 18:21:01)
Garbage after option argument: "-version"
More info with: "vim -h"
Docker安装
- 更新apt库
# 更新本地存储库的软件包信息
sudo apt update
# 升级所有已安装的软件包到它们的最新版本
sudo apt upgrade
# 升级系统中的所有软件包,解决依赖关系,并在必要时删除或添加新的软件包
sudo apt full-upgrade
- 安装Docker依赖
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
- 软件源配置
设置docker国内镜像(方便快速拉取镜像启动项目)使用sudo vim /etc/docker/daemon.json命令新建或编辑文件
注意: 我这里使用的是中国科技大学的镜像源,还可以使用阿里云的源,但是需要登录阿里云,阿里云镜像服务里点击 “创建我的镜像容器” 来生成自己专属的加速地址,如果有需要可以自己登录阿里云生成,这里不多赘述。
输入以下内容:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
编辑完之后保存退出,分别输入以下两条命令:
- 重载文件
sudo systemctl daemon-reload
- 重启docker服务
sudo systemctl restart docker
使用sudo systemctl status docker命令查看docekr服务运行状态。
在输出结果中看到active (running) 字样表示docker服务正常运行,如果看到failed,请检查上述步骤是否操作错误。
配置Docker的软件源(若设置了第三方镜像源,则不用输入此命令)
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 添加Docker官方GPG密钥
执行以下命令来添加Docker官方的GPG密钥,添加完成显示OK
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
- 安装Docker(Docker-CE)
sudo apt-get install docker-ce docker-ce-cli containerd.io
验证
sudo docker --version
创建Docker目录
sudo mkdir -p /etc/docker
设置Docker开机自启
systemctl enable docker.service
参考:docker compose halo快速搭建博客系统_docker 博客系统-CSDN博客
配置用户组(可选)默认情况下,只有root用户和docker组的用户才能运行Docker命令。我们可以将当前用户添加到docker组,以避免每次使用Docker时都需要使用sudo。
注:重新登录才能使更改生效。
sudo usermod -aG docker $USER
- 运行Docker
验证安装
我们可以通过启动docker来验证我们是否成功安装。命令如下:
sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker
- 重启Docker
sudo systemctl restart docker
验证是否成功
因为我们之前没有拉取过hello-world,所以运行命令后会出现本地没有该镜像,并且会自动拉取的操作。
sudo docker run hello-world

- 查看版本
我们可以通过下面的命令来查看docker的版本
sudo docker version

查看镜像
上面我们拉取了hello-world的镜像,现在我们可以通过命令来查看镜像,命令如下:
sudo docker images
出现以下情况,即表示我们成功在Ubuntu系统上安装了docker。
luanshang@shang:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 6 months ago 13.3kB
Docker Compose安装
Docker-Compose 安装
官方文档:Overview of installing Docker Compose
Docker Compose官网版本参考:Compose file version 3 reference
以下安装方式,选择一种即可
快速安装
安装
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.3.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改权限
sudo chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose -v
完成安装
离线安装
所有版本安装包下载Releases · docker/compose
选择一个版本

进入后往下拉,选择对应版本:

将文件上传到linux后,移动到与环境变量相关的指定位置
sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
添加可执行权限
为 docker-compose 文件添加可执行权限。
sudo chmod +x /usr/local/bin/docker-compose
测试
通过 docker-compose version 测试安装是否成功。
sudo docker-compose version
Halo部署
Halo、MySQL、Nginx部署
编辑compose.yaml文件
sudo vim /halo/compose.yaml
必须修改的自定义配置,修改以下参数:
- 服务器或虚拟机ip:halo.external-url 中的 ip 设置,我写的配置中是 8.130.97.145,需要修改为你自己的服务器ip地址。
可选修改的自定义配置,找到下面的参数所在位置修改:
超级管理员账号密码
- 账号 halo.security.initializer.superadminusername,我写的配置中是 admin
- 密码 halo.security.initializer.superadminpassword ,我写的配置中是 123456
mysql的root用户密码,以下两个参数的值都需要修改且必须保持一致
- spring.r2dbc.password,我写的配置中是 123456
- MYSQL_ROOT_PASSWORD,我写的配置中是 123456
根据以上介绍,自定义修改配置项
services:
halo:
image: halohub/halo:2.4.0
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo:/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=123456
- --spring.sql.init.platform=mysql
# 外部访问地址,我的服务器 ip 为8.130.97.145,此处需要修改为你自己的服务器或虚拟机 ip
- --halo.external-url=http://8.130.97.145:80/
# 初始化的超级管理员用户名
- --halo.security.initializer.superadminusername=admin
# 初始化的超级管理员密码
- --halo.security.initializer.superadminpassword=123456
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=123456
- MYSQL_DATABASE=halo
halonginx: # 服务名称,用户自定义
image: nginx:1.23.4 # 镜像版本
container_name: halonginx
# 链接到其它容器,能在 nginx.conf 反向代理配置时使用
links:
- halo
networks:
halo_network:
ports:
- 80:80 # 暴露端口
volumes: # 挂载
- /halo/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
privileged: true # 这个必须要,解决nginx的文件调用的权限问题
networks:
halo_network:
容器编排
# 1.进入 halo 目录
cd /halo
# 2.容器编排
sudo docker-compose up -d
查看状态
sudo docker ps
访问测试
访问网站(浏览器访问):输入compose.yaml文件中配置的IP地址。

点击右上角的地球图标,进入超级管理员登录页面,控制台页面也可以通过IP地址/console的方式登录

输入在compose.yaml中输入的用户名和密码


然后就是初始化,站点名称随意。
点击Halo即可返回网站主页

原文链接:halo搭建炫酷个人博客快速部署:docker+docker-compose+nginx_halo博客主题_是谢添啊的博客-CSDN博客