如何部署一个属于自己的博客(halo)
如何部署一个halo博客
写在前面:从2021年开始玩vps,也有了属于自己的小站点,记录一下自己的学习,这次是在虚拟机上部署一次halo博客,这次写一个部署教程,希望能帮到大家。
使用的系统是Ubuntu22 x64
官方文档:安装指南
配置环境
这里是使用官方推荐的docker-compose方式部署,所以需要安装docker和docker-compose,下面是安装docker和docker-compose的教程,如果已经安装了可以跳过这一步。
安装docker和docker-compose
从存储库安装
- 设置存储库
# Add Docker's official GPG key:
sudo apt-get update # 更新apt源
sudo apt-get install ca-certificates curl gnupg
#gnupg与ca-certificates一个负责加密、一个负责证书登记,和信息安全方面的处理相关。curl则是一个网络请求发起的工具。
sudo install -m 0755 -d /etc/apt/keyrings # 创建目录
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 下载docker官方的gpg密钥
sudo chmod a+r /etc/apt/keyrings/docker.gpg # 修改权限
# Add the repository to Apt sources:
# 添加docker的apt源
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update # 更新apt源
- 安装Docker和Docker Compose
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
部署halo博客
在系统的任意目录下创建一个文件夹
sudo mkdir /home/halo && cd /home/halo
创建docker-compose.yml文件
sudo vi docker-compose.yml
复制以下内容到docker-compose.yml文件中(Halo + MySQL),在英文安装下输入i
进入编辑模式,然后按下Ctrl+Shift+V
粘贴,然后按下Esc
,再输入:wq
保存退出。
version: "3" #版本号
services: #服务
halo: #服务名
image: halohub/halo:2.10 #镜像名
container_name: halo #容器名
restart: on-failure:3 #重启策略,这里是失败重启3次
depends_on: #依赖
halodb: #依赖的服务名
condition: service_healthy #依赖的服务健康时才启动
networks: #网络
halo_network: #网络名
volumes: #挂载卷
- ./halo2:/root/.halo2 #将容器中的/root/.halo2目录挂载到当前目录下的halo2目录
ports:
- "8090:8090" #将容器中的8090端口映射到主机的8090端口,前面的8090是主机端口,后面的8090是容器端口
healthcheck: #健康检查
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"] #检查的命令
interval: 30s #检查间隔
timeout: 5s #检查超时时间
retries: 5 #检查失败重试次数
start_period: 30s #检查开始时间
command: #命令
#数据库连接地址,这里的halodb是上方的依赖服务名,3306是MySQL的默认端口,halo是数据库名
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
#数据库连接地址,这里的halodb是上方的依赖服务名,3306是MySQL的默认端口,halo是数据库名
- --spring.r2dbc.username=root
# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- --spring.r2dbc.password=o#DwN&JSa56
# 这里的mysql是数据库类型,如果你使用的是其他数据库,请修改为对应的数据库类型,比如 PostgreSQL 为 postgresql
- --spring.sql.init.platform=mysql
# 外部访问地址,如果你的 Halo 是通过反向代理访问的,请修改为反向代理的地址。
- --halo.external-url=http://localhost:8090/
halodb: #服务名
image: mysql:8.1.0 #镜像名
container_name: halodb #容器名
restart: on-failure:3 #重启策略,这里是失败重启3次
networks:
halo_network: #网络名
command:
- --default-authentication-plugin=caching_sha2_password #密码验证方式
- --character-set-server=utf8mb4 #字符集
- --collation-server=utf8mb4_general_ci #字符集
- --explicit_defaults_for_timestamp=true #时间戳
volumes:
- ./mysql:/var/lib/mysql #将容器中的/var/lib/mysql目录挂载到当前目录下的mysql目录
- ./mysqlBackup:/data/mysqlBackup
#将容器中的/data/mysqlBackup目录挂载到当前目录下的mysqlBackup目录
ports:
- "3306:3306" #将容器中的3306端口映射到主机的3306端口,前面的3306是主机端口,后面的3306是容器端口
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
#检查的命令,这里是使用mysqladmin命令检查MySQL是否正常
interval: 3s #检查间隔
retries: 5 #检查失败重试次数
start_period: 30s #检查开始时间
environment:
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
- MYSQL_ROOT_PASSWORD=o#DwN&JSa56
- MYSQL_DATABASE=halo
networks:
halo_network:
然后键盘输入Esc
,再输入:wq
保存退出。
编辑好之后,使用docker-compose启动
sudo docker compose up -d
# 创建并后台运行所有容器
启动完成后,访问http://localhost:8090
,如果出现下面的页面,说明halo已经部署成功了。
localhost
请改为你实际的ip地址或者域名。
部署Nginx Proxy Manager(halo官方手册)
创建文件夹,添加配置文件
mkdir -p /home/nginxproxymanager # 创建一个 npm 的文件夹
cd /home/nginxproxymanager # 进入该文件夹
vi docker-compose.yml
在英文安装下输入i
进入编辑模式,然后按下Ctrl+Shift+V
粘贴,然后按下Esc
,再输入:wq
保存退出。
粘贴docker-compose.yml
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest' # 镜像
restart: unless-stopped
# 可以确保容器在运行docker-compose down命令之前一直运行。这对于需要持续运行的服务非常重要
ports:
- '80:80' # 不建议修改端口
- '81:81' # 可以把冒号左边的 81 端口修改成你服务器上没有被占用的端口
- '443:443' # 不建议修改端口
volumes:
- ./data:/data # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 data 目录,用于存放数据,如果不存在的话,会自动创建
- ./letsencrypt:/etc/letsencrypt # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 letsencrypt 目录,用于存放证书,如果不存在的话,会自动创建
保存后运行
sudo docker compose up -d
# 创建并后台运行所有容器
这个时候访问http://localhost:81
,如果出现下面的页面,说明NPM已经部署成功了。
localhost
请改为你实际的ip地址或者域名。
默认的登录账户和密码是[email protected]
changeme
然后点击Dashboard
中的Proxy Hosts
再点击Add Proxy Host
按照图上填写,这里我域名填写的是虚拟机的ip地址,可以更改为你自己的域名
由于都是使用容器安装的所以反代的时候地址要填写容器的ip
运行
ip addr show docker0
回显
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:68:97:9e:8d brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
最后访问域名就可以访问到halo了
可以看到这里访问的是虚拟机的ip,没有加端口号默认是80,可以在NPM
里面配置SSL。
halo博客的官方文档里面也有教学
- 2
- 2
-
分享